summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/freetype/CMakeLists.txt11
-rw-r--r--src/3rdparty/libjpeg/COPYRIGHT.txt12
-rw-r--r--src/3rdparty/libjpeg/LICENSE2
-rw-r--r--src/3rdparty/libjpeg/ijg-license.txt34
-rwxr-xr-xsrc/3rdparty/libjpeg/import_from_libjpeg_tarball.sh3
-rw-r--r--src/3rdparty/libjpeg/qt_attribution.json20
-rw-r--r--src/3rdparty/libjpeg/src/ChangeLog.md277
-rw-r--r--src/3rdparty/libjpeg/src/README.ijg37
-rw-r--r--src/3rdparty/libjpeg/src/README.md23
-rw-r--r--src/3rdparty/libjpeg/src/change.log31
-rw-r--r--src/3rdparty/libjpeg/src/jccolext.c18
-rw-r--r--src/3rdparty/libjpeg/src/jccolor.c12
-rw-r--r--src/3rdparty/libjpeg/src/jcdctmgr.c37
-rw-r--r--src/3rdparty/libjpeg/src/jchuff.c389
-rw-r--r--src/3rdparty/libjpeg/src/jcinit.c5
-rw-r--r--src/3rdparty/libjpeg/src/jconfig.h (renamed from src/3rdparty/libjpeg/jconfig.h)4
-rw-r--r--src/3rdparty/libjpeg/src/jconfig.h.in5
-rw-r--r--src/3rdparty/libjpeg/src/jconfigint.h (renamed from src/3rdparty/libjpeg/jconfigint.h)2
-rw-r--r--src/3rdparty/libjpeg/src/jcphuff.c28
-rw-r--r--src/3rdparty/libjpeg/src/jcsample.c63
-rw-r--r--src/3rdparty/libjpeg/src/jctrans.c5
-rw-r--r--src/3rdparty/libjpeg/src/jdapistd.c53
-rw-r--r--src/3rdparty/libjpeg/src/jdarith.c15
-rw-r--r--src/3rdparty/libjpeg/src/jdcoefct.c290
-rw-r--r--src/3rdparty/libjpeg/src/jdcoefct.h3
-rw-r--r--src/3rdparty/libjpeg/src/jdcol565.c96
-rw-r--r--src/3rdparty/libjpeg/src/jdcolext.c8
-rw-r--r--src/3rdparty/libjpeg/src/jdcolor.c23
-rw-r--r--src/3rdparty/libjpeg/src/jdhuff.c60
-rw-r--r--src/3rdparty/libjpeg/src/jdhuff.h13
-rw-r--r--src/3rdparty/libjpeg/src/jdmarker.c67
-rw-r--r--src/3rdparty/libjpeg/src/jdmaster.c15
-rw-r--r--src/3rdparty/libjpeg/src/jdmerge.c55
-rw-r--r--src/3rdparty/libjpeg/src/jdmerge.h47
-rw-r--r--src/3rdparty/libjpeg/src/jdmrg565.c78
-rw-r--r--src/3rdparty/libjpeg/src/jdmrgext.c40
-rw-r--r--src/3rdparty/libjpeg/src/jdphuff.c48
-rw-r--r--src/3rdparty/libjpeg/src/jdsample.c38
-rw-r--r--src/3rdparty/libjpeg/src/jdtrans.c5
-rw-r--r--src/3rdparty/libjpeg/src/jerror.h13
-rw-r--r--src/3rdparty/libjpeg/src/jfdctint.c4
-rw-r--r--src/3rdparty/libjpeg/src/jidctint.c12
-rw-r--r--src/3rdparty/libjpeg/src/jmorecfg.h43
-rw-r--r--src/3rdparty/libjpeg/src/jpegcomp.h3
-rw-r--r--src/3rdparty/libjpeg/src/jpegint.h5
-rw-r--r--src/3rdparty/libjpeg/src/jpeglib.h8
-rw-r--r--src/3rdparty/libjpeg/src/jquant1.c27
-rw-r--r--src/3rdparty/libjpeg/src/jquant2.c52
-rw-r--r--src/3rdparty/libjpeg/src/jsimd.h6
-rw-r--r--src/3rdparty/libjpeg/src/jsimd_none.c13
-rw-r--r--src/3rdparty/libjpeg/src/jversion.h22
-rw-r--r--src/3rdparty/libjpeg/zlib-license.txt15
-rw-r--r--src/3rdparty/sqlite/qt_attribution.json4
-rw-r--r--src/3rdparty/sqlite/sqlite3.c11554
-rw-r--r--src/3rdparty/sqlite/sqlite3.h61
-rw-r--r--src/android/jar/.gitignore6
-rw-r--r--src/android/jar/AndroidManifest.xml1
-rw-r--r--src/android/jar/build.gradle54
-rw-r--r--src/android/jar/settings.gradle1
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java28
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java8
-rw-r--r--src/android/java/src/org/qtproject/qt/android/bindings/QtService.java13
-rw-r--r--src/concurrent/qtconcurrentiteratekernel.cpp2
-rw-r--r--src/concurrent/qtconcurrentthreadengine.h4
-rw-r--r--src/corelib/CMakeLists.txt22
-rw-r--r--src/corelib/Qt6AndroidMacros.cmake9
-rw-r--r--src/corelib/Qt6CoreMacros.cmake3
-rw-r--r--src/corelib/doc/snippets/cmake-macros/examples.cmake2
-rw-r--r--src/corelib/doc/src/json.qdoc4
-rw-r--r--src/corelib/doc/src/qt6-changes.qdoc18
-rw-r--r--src/corelib/global/qglobal.cpp8
-rw-r--r--src/corelib/global/qnamespace.qdoc22
-rw-r--r--src/corelib/global/qrandom.cpp1
-rw-r--r--src/corelib/global/qsimd.cpp22
-rw-r--r--src/corelib/global/qtypeinfo.h17
-rw-r--r--src/corelib/io/qdir.cpp33
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp2
-rw-r--r--src/corelib/io/qfilesystementry.cpp6
-rw-r--r--src/corelib/io/qiodevice.cpp24
-rw-r--r--src/corelib/io/qiodevice.h6
-rw-r--r--src/corelib/io/qtemporaryfile.cpp2
-rw-r--r--src/corelib/io/qurl.cpp22
-rw-r--r--src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp7
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.cpp86
-rw-r--r--src/corelib/kernel/qcfsocketnotifier.cpp14
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp10
-rw-r--r--src/corelib/kernel/qeventdispatcher_win.cpp6
-rw-r--r--src/corelib/kernel/qproperty.cpp25
-rw-r--r--src/corelib/kernel/qsharedmemory_p.h10
-rw-r--r--src/corelib/kernel/qsharedmemory_systemv.cpp2
-rw-r--r--src/corelib/mimetypes/mime/generate.pl4
-rw-r--r--src/corelib/serialization/qjsonobject.cpp1
-rw-r--r--src/corelib/serialization/qjsonobject.h2
-rw-r--r--src/corelib/serialization/qxmlstream.cpp5
-rw-r--r--src/corelib/serialization/qxmlstream.g2
-rw-r--r--src/corelib/serialization/qxmlstreamparser_p.h2
-rw-r--r--src/corelib/text/qbytearray.cpp33
-rw-r--r--src/corelib/text/qlocale.qdoc2
-rw-r--r--src/corelib/text/qlocale_data_p.h888
-rw-r--r--src/corelib/text/qstring.cpp59
-rw-r--r--src/corelib/text/qunicodetables.cpp12570
-rw-r--r--src/corelib/text/qunicodetables_p.h5
-rw-r--r--src/corelib/text/qunicodetools.cpp181
-rw-r--r--src/corelib/thread/qfuture.qdoc7
-rw-r--r--src/corelib/thread/qfuture_impl.h14
-rw-r--r--src/corelib/thread/qthreadpool.cpp17
-rw-r--r--src/corelib/thread/qthreadpool_p.h5
-rw-r--r--src/corelib/time/qcalendar.cpp152
-rw-r--r--src/corelib/time/qdatetime.cpp2
-rw-r--r--src/corelib/time/qdatetimeparser.cpp18
-rw-r--r--src/corelib/time/qhijricalendar_data_p.h6
-rw-r--r--src/corelib/time/qjalalicalendar_data_p.h6
-rw-r--r--src/corelib/time/qtimezoneprivate_android.cpp2
-rw-r--r--src/corelib/time/qtimezoneprivate_data_p.h1378
-rw-r--r--src/corelib/time/qtimezoneprivate_tz.cpp85
-rw-r--r--src/corelib/tools/qarraydata.cpp23
-rw-r--r--src/corelib/tools/qarraydataops.h289
-rw-r--r--src/corelib/tools/qarraydatapointer.h134
-rw-r--r--src/corelib/tools/qcontainertools_impl.h124
-rw-r--r--src/corelib/tools/qhash.cpp5
-rw-r--r--src/corelib/tools/qhash.h4
-rw-r--r--src/corelib/tools/qlist.h26
-rw-r--r--src/corelib/tools/qmargins.cpp3
-rw-r--r--src/corelib/tools/qscopedvaluerollback.cpp2
-rw-r--r--src/corelib/tools/qvarlengtharray.h2
-rw-r--r--src/dbus/doc/src/qt6-changes.qdoc12
-rw-r--r--src/gui/doc/src/coordsys.qdoc2
-rw-r--r--src/gui/doc/src/qt6-changes.qdoc12
-rw-r--r--src/gui/image/qicon.cpp2
-rw-r--r--src/gui/image/qimage.cpp36
-rw-r--r--src/gui/image/qimagereader.cpp4
-rw-r--r--src/gui/image/qpnghandler.cpp4
-rw-r--r--src/gui/image/qxpmhandler.cpp2
-rw-r--r--src/gui/itemmodels/qfilesystemmodel.cpp7
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.cpp47
-rw-r--r--src/gui/kernel/qevent.cpp6
-rw-r--r--src/gui/kernel/qguiapplication.cpp2
-rw-r--r--src/gui/kernel/qoffscreensurface_platform.h2
-rw-r--r--src/gui/kernel/qplatformwindow.cpp37
-rw-r--r--src/gui/math3d/qmatrix4x4.h10
-rw-r--r--src/gui/math3d/qquaternion.cpp6
-rw-r--r--src/gui/painting/qcolorspace.cpp1
-rw-r--r--src/gui/painting/qcolortransfertable_p.h8
-rw-r--r--src/gui/painting/qcolortrc_p.h2
-rw-r--r--src/gui/painting/qcosmeticstroker.cpp8
-rw-r--r--src/gui/painting/qdrawhelper.cpp9
-rw-r--r--src/gui/painting/qicc.cpp35
-rw-r--r--src/gui/painting/qmemrotate.cpp42
-rw-r--r--src/gui/painting/qpagesize.h2
-rw-r--r--src/gui/painting/qpaintengineex.cpp44
-rw-r--r--src/gui/painting/qpainterpath.cpp2
-rw-r--r--src/gui/painting/qpainterpath_p.h1
-rw-r--r--src/gui/painting/qpixellayout.cpp22
-rw-r--r--src/gui/painting/qrasterizer.cpp2
-rw-r--r--src/gui/platform/unix/dbusmenu/qdbusmenuconnection.cpp17
-rw-r--r--src/gui/platform/unix/dbusmenu/qdbusmenuconnection_p.h2
-rw-r--r--src/gui/platform/unix/dbustray/qdbustrayicon.cpp8
-rw-r--r--src/gui/platform/unix/qxkbcommon.cpp13
-rw-r--r--src/gui/platform/windows/qwindowsnativeinterface.cpp1
-rw-r--r--src/gui/rhi/qrhigles2.cpp30
-rw-r--r--src/gui/rhi/qrhigles2_p_p.h4
-rw-r--r--src/gui/rhi/qrhimetal.mm64
-rw-r--r--src/gui/text/freetype/qfontengine_ft.cpp6
-rw-r--r--src/gui/text/qcssparser.cpp4
-rw-r--r--src/gui/text/qfontdatabase.cpp4
-rw-r--r--src/gui/text/qfontmetrics.cpp18
-rw-r--r--src/gui/text/qtextdocumentwriter.cpp5
-rw-r--r--src/gui/text/qtextengine.cpp27
-rw-r--r--src/gui/text/qtexthtmlparser.cpp2
-rw-r--r--src/gui/text/qtextlayout.cpp10
-rw-r--r--src/network/.prev_configure.cmake431
-rw-r--r--src/network/access/qdecompresshelper.cpp8
-rw-r--r--src/network/access/qdecompresshelper_p.h2
-rw-r--r--src/network/access/qhttp2protocolhandler.cpp101
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp4
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp20
-rw-r--r--src/network/access/qhttpnetworkrequest.cpp4
-rw-r--r--src/network/access/qhttpnetworkrequest_p.h1
-rw-r--r--src/network/access/qnetworkdiskcache.cpp13
-rw-r--r--src/network/configure.cmake12
-rw-r--r--src/network/configure.json23
-rw-r--r--src/network/doc/src/qt6-changes.qdoc4
-rw-r--r--src/network/kernel/qnetworkinterface.cpp8
-rw-r--r--src/network/kernel/qt_attribution.json2
-rw-r--r--src/network/kernel/qurltlds_p.h28657
-rw-r--r--src/network/socket/qlocalsocket.cpp2
-rw-r--r--src/network/socket/qlocalsocket.h5
-rw-r--r--src/network/socket/qlocalsocket_win.cpp7
-rw-r--r--src/network/ssl/qasn1element.cpp5
-rw-r--r--src/network/ssl/qsslsocket.cpp2
-rw-r--r--src/network/ssl/qsslsocket_p.h2
-rw-r--r--src/network/ssl/qsslsocket_schannel_p.h2
-rw-r--r--src/opengl/doc/src/qt6-changes.qdoc2
-rw-r--r--src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp16
-rw-r--r--src/plugins/imageformats/jpeg/CMakeLists.txt1
-rw-r--r--src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp14
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp5
-rw-r--r--src/plugins/platforms/android/qandroidinputcontext.cpp25
-rw-r--r--src/plugins/platforms/android/qandroidplatformwindow.cpp21
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibility.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoafiledialoghelper.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm88
-rw-r--r--src/plugins/platforms/cocoa/qcocoakeymapper.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoakeymapper.mm35
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.mm11
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.mm3
-rw-r--r--src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm2
-rw-r--r--src/plugins/platforms/cocoa/qnsview_dragging.mm4
-rw-r--r--src/plugins/platforms/cocoa/qnsview_menus.mm14
-rw-r--r--src/plugins/platforms/ios/qiosinputcontext.mm3
-rw-r--r--src/plugins/platforms/ios/qiostextinputoverlay.mm22
-rw-r--r--src/plugins/platforms/ios/qiostextresponder.mm19
-rw-r--r--src/plugins/platforms/ios/qioswindow.mm1
-rw-r--r--src/plugins/platforms/ios/quiview.mm16
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp13
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.cpp45
-rw-r--r--src/plugins/platforms/xcb/qxcbcursor.cpp8
-rw-r--r--src/plugins/platforms/xcb/qxcbkeyboard.cpp6
-rw-r--r--src/plugins/platforms/xcb/qxcbscreen.cpp23
-rw-r--r--src/plugins/platforms/xcb/qxcbscreen.h2
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp49
-rw-r--r--src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp2
-rw-r--r--src/plugins/sqldrivers/CMakeLists.txt3
-rw-r--r--src/plugins/sqldrivers/ibase/main.cpp2
-rw-r--r--src/plugins/sqldrivers/odbc/qsql_odbc.cpp3
-rw-r--r--src/plugins/sqldrivers/psql/CMakeLists.txt14
-rw-r--r--src/plugins/sqldrivers/psql/qsql_psql.cpp4
-rw-r--r--src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp33
-rw-r--r--src/plugins/styles/android/qandroidstyle.cpp2
-rw-r--r--src/plugins/styles/mac/qmacstyle_mac.mm2
-rw-r--r--src/printsupport/dialogs/qprintdialog_unix.cpp3
-rw-r--r--src/sql/doc/src/qt6-changes.qdoc2
-rw-r--r--src/testlib/doc/src/qt6-changes.qdoc2
-rw-r--r--src/testlib/qabstractitemmodeltester.cpp8
-rw-r--r--src/testlib/qtestblacklist.cpp4
-rw-r--r--src/tools/androiddeployqt/main.cpp15
-rw-r--r--src/widgets/dialogs/qprogressdialog.cpp2
-rw-r--r--src/widgets/doc/src/qt6-changes.qdoc14
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.cpp18
-rw-r--r--src/widgets/itemviews/qabstractitemdelegate.cpp6
-rw-r--r--src/widgets/itemviews/qlistview.cpp2
-rw-r--r--src/widgets/itemviews/qtreeview.cpp4
-rw-r--r--src/widgets/itemviews/qtreewidget.cpp18
-rw-r--r--src/widgets/kernel/qgridlayout.cpp6
-rw-r--r--src/widgets/kernel/qlayout.cpp5
-rw-r--r--src/widgets/styles/qfusionstyle.cpp3
-rw-r--r--src/widgets/styles/qstylesheetstyle.cpp28
-rw-r--r--src/widgets/widgets/qcombobox.cpp6
-rw-r--r--src/widgets/widgets/qlineedit.cpp6
-rw-r--r--src/widgets/widgets/qlineedit_p.cpp2
-rw-r--r--src/widgets/widgets/qmdisubwindow.cpp4
-rw-r--r--src/widgets/widgets/qmenu.cpp2
-rw-r--r--src/widgets/widgets/qplaintextedit.cpp3
-rw-r--r--src/widgets/widgets/qpushbutton.cpp14
-rw-r--r--src/widgets/widgets/qsizegrip.cpp18
-rw-r--r--src/widgets/widgets/qtextedit.cpp2
-rw-r--r--src/widgets/widgets/qwidgetlinecontrol.cpp9
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp16
-rw-r--r--src/widgets/widgets/qwidgettextcontrol_p.h2
260 files changed, 32852 insertions, 28164 deletions
diff --git a/src/3rdparty/freetype/CMakeLists.txt b/src/3rdparty/freetype/CMakeLists.txt
index 2f5e7b77a9..13f2c434c0 100644
--- a/src/3rdparty/freetype/CMakeLists.txt
+++ b/src/3rdparty/freetype/CMakeLists.txt
@@ -9,18 +9,13 @@ qt_internal_add_3rdparty_library(BundledFreetype
STATIC
INSTALL
SOURCES
- src/autofit/afdummy.c
- src/autofit/afhints.c
- src/autofit/aflatin.c
src/autofit/autofit.c
src/base/ftbase.c
src/base/ftbbox.c
src/base/ftbitmap.c
src/base/ftdebug.c
- src/base/ftfntfmt.c
src/base/ftglyph.c
src/base/ftinit.c
- src/base/ftlcdfil.c
src/base/ftmm.c
src/base/ftsynth.c
src/base/fttype1.c
@@ -32,12 +27,6 @@ qt_internal_add_3rdparty_library(BundledFreetype
src/lzw/ftlzw.c
src/otvalid/otvalid.c
src/otvalid/otvbase.c
- src/otvalid/otvcommn.c
- src/otvalid/otvgdef.c
- src/otvalid/otvgpos.c
- src/otvalid/otvgsub.c
- src/otvalid/otvjstf.c
- src/otvalid/otvmod.c
src/pcf/pcf.c
src/pfr/pfr.c
src/psaux/psaux.c
diff --git a/src/3rdparty/libjpeg/COPYRIGHT.txt b/src/3rdparty/libjpeg/COPYRIGHT.txt
new file mode 100644
index 0000000000..6d80d7dc77
--- /dev/null
+++ b/src/3rdparty/libjpeg/COPYRIGHT.txt
@@ -0,0 +1,12 @@
+Copyright (C) 2009-2021 D. R. Commander
+Copyright (C) 2015, 2020 Google, Inc.
+Copyright (C) 2019 Arm Limited
+Copyright (C) 2015-2016, 2018 Matthieu Darbois
+Copyright (C) 2011-2016 Siarhei Siamashka
+Copyright (C) 2015 Intel Corporation
+Copyright (C) 2013-2014 Linaro Limited
+Copyright (C) 2013-2014 MIPS Technologies, Inc.
+Copyright (C) 2009, 2012 Pierre Ossman for Cendio AB
+Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)
+Copyright (C) 1999-2006 MIYASAKA Masaru
+Copyright (C) 1991-2017 Thomas G. Lane, Guido Vollbeding
diff --git a/src/3rdparty/libjpeg/LICENSE b/src/3rdparty/libjpeg/LICENSE
index 99c9aadcc4..a1cdad52fa 100644
--- a/src/3rdparty/libjpeg/LICENSE
+++ b/src/3rdparty/libjpeg/LICENSE
@@ -91,7 +91,7 @@ best of our understanding.
The Modified (3-clause) BSD License
===================================
-Copyright (C)2009-2020 D. R. Commander. All Rights Reserved.
+Copyright (C)2009-2021 D. R. Commander. All Rights Reserved.<br>
Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/src/3rdparty/libjpeg/ijg-license.txt b/src/3rdparty/libjpeg/ijg-license.txt
new file mode 100644
index 0000000000..eec5341d1c
--- /dev/null
+++ b/src/3rdparty/libjpeg/ijg-license.txt
@@ -0,0 +1,34 @@
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose. This software is provided "AS IS", and you,
+its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to these
+conditions:
+(1) If any part of the source code for this software is distributed, then this
+README file must be included, with this copyright and no-warranty notice
+unaltered; and any additions, deletions, or changes to the original files
+must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work of
+the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG code,
+not just to the unmodified library. If you use our work, you ought to
+acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company name
+in advertising or publicity relating to this software or products derived from
+it. This software may be referred to only as "the Independent JPEG Group's
+software".
+
+We specifically permit and encourage the use of this software as the basis of
+commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
diff --git a/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh b/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh
index 8dafbda64d..2153eca35a 100755
--- a/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh
+++ b/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh
@@ -126,6 +126,7 @@ FILES="
jdmaster.c
jdmaster.h
jdmerge.c
+ jdmerge.h
jdmrgext.c
jdmrg565.c
jdpostct.c
@@ -164,4 +165,4 @@ for i in $FILES; do
copy_file "$i" "src/$i"
done
-echo Done. $TARGET_DIR/jconfig.h and jconfigint.h may need manual updating.
+echo Done. $TARGET_DIR/src/jconfig.h and jconfigint.h may need manual updating.
diff --git a/src/3rdparty/libjpeg/qt_attribution.json b/src/3rdparty/libjpeg/qt_attribution.json
index 796829e215..04b89a05bc 100644
--- a/src/3rdparty/libjpeg/qt_attribution.json
+++ b/src/3rdparty/libjpeg/qt_attribution.json
@@ -6,19 +6,9 @@
"Description": "The Independent JPEG Group's JPEG software",
"Homepage": "http://libjpeg-turbo.virtualgl.org/",
- "Version": "2.0.5",
- "License": "Independent JPEG Group License",
- "LicenseId": "IJG",
- "LicenseFile": "LICENSE",
- "Copyright": "Copyright (C) 2009-2020 D. R. Commander
-Copyright (C) 2011-2016 Siarhei Siamashka
-Copyright (C) 2015-2016, 2018 Matthieu Darbois
-Copyright (C) 2015 Intel Corporation
-Copyright (C) 2015 Google, Inc.
-Copyright (C) 2013-2014 MIPS Technologies, Inc.
-Copyright (C) 2013 Linaro Limited
-Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)
-Copyright (C) 2009 Pierre Ossman for Cendio AB
-Copyright (C) 1999-2006 MIYASAKA Masaru
-Copyright (C) 1991-2016 Thomas G. Lane, Guido Vollbeding"
+ "Version": "2.1.0",
+ "License": "Independent JPEG Group License and BSD 3-Clause \"New\" or \"Revised\" License and zlib License",
+ "LicenseId": "IJG AND BSD-3-Clause AND Zlib",
+ "LicenseFiles": [ "LICENSE", "ijg-license.txt", "zlib-license.txt"],
+ "CopyrightFile": "COPYRIGHT.txt"
}
diff --git a/src/3rdparty/libjpeg/src/ChangeLog.md b/src/3rdparty/libjpeg/src/ChangeLog.md
index 59fb2de96a..5ecbf3b510 100644
--- a/src/3rdparty/libjpeg/src/ChangeLog.md
+++ b/src/3rdparty/libjpeg/src/ChangeLog.md
@@ -1,3 +1,242 @@
+2.1.1
+=====
+
+### Significant changes relative to 2.1.0
+
+1. Fixed a regression introduced in 2.1.0 that caused build failures with
+non-GCC-compatible compilers for Un*x/Arm platforms.
+
+
+2.1.0
+=====
+
+### Significant changes relative to 2.1 beta1
+
+1. Fixed a regression introduced by 2.1 beta1[6(b)] whereby attempting to
+decompress certain progressive JPEG images with one or more component planes of
+width 8 or less caused a buffer overrun.
+
+2. Fixed a regression introduced by 2.1 beta1[6(b)] whereby attempting to
+decompress a specially-crafted malformed progressive JPEG image caused the
+block smoothing algorithm to read from uninitialized memory.
+
+3. Fixed an issue in the Arm Neon SIMD Huffman encoders that caused the
+encoders to generate incorrect results when using the Clang compiler with
+Visual Studio.
+
+4. Fixed a floating point exception (CVE-2021-20205) that occurred when
+attempting to compress a specially-crafted malformed GIF image with a specified
+image width of 0 using cjpeg.
+
+5. Fixed a regression introduced by 2.0 beta1[15] whereby attempting to
+generate a progressive JPEG image on an SSE2-capable CPU using a scan script
+containing one or more scans with lengths divisible by 32 and non-zero
+successive approximation low bit positions would, under certain circumstances,
+result in an error ("Missing Huffman code table entry") and an invalid JPEG
+image.
+
+6. Introduced a new flag (`TJFLAG_LIMITSCANS` in the TurboJPEG C API and
+`TJ.FLAG_LIMIT_SCANS` in the TurboJPEG Java API) and a corresponding TJBench
+command-line argument (`-limitscans`) that causes the TurboJPEG decompression
+and transform functions/operations to return/throw an error if a progressive
+JPEG image contains an unreasonably large number of scans. This allows
+applications that use the TurboJPEG API to guard against an exploit of the
+progressive JPEG format described in the report
+["Two Issues with the JPEG Standard"](https://libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
+
+7. The PPM reader now throws an error, rather than segfaulting (due to a buffer
+overrun) or generating incorrect pixels, if an application attempts to use the
+`tjLoadImage()` function to load a 16-bit binary PPM file (a binary PPM file
+with a maximum value greater than 255) into a grayscale image buffer or to load
+a 16-bit binary PGM file into an RGB image buffer.
+
+8. Fixed an issue in the PPM reader that caused incorrect pixels to be
+generated when using the `tjLoadImage()` function to load a 16-bit binary PPM
+file into an extended RGB image buffer.
+
+9. Fixed an issue whereby, if a JPEG buffer was automatically re-allocated by
+one of the TurboJPEG compression or transform functions and an error
+subsequently occurred during compression or transformation, the JPEG buffer
+pointer passed by the application was not updated when the function returned.
+
+
+2.0.90 (2.1 beta1)
+==================
+
+### Significant changes relative to 2.0.6:
+
+1. The build system, x86-64 SIMD extensions, and accelerated Huffman codec now
+support the x32 ABI on Linux, which allows for using x86-64 instructions with
+32-bit pointers. The x32 ABI is generally enabled by adding `-mx32` to the
+compiler flags.
+
+ Caveats:
+ - CMake 3.9.0 or later is required in order for the build system to
+automatically detect an x32 build.
+ - Java does not support the x32 ABI, and thus the TurboJPEG Java API will
+automatically be disabled with x32 builds.
+
+2. Added Loongson MMI SIMD implementations of the RGB-to-grayscale, 4:2:2 fancy
+chroma upsampling, 4:2:2 and 4:2:0 merged chroma upsampling/color conversion,
+and fast integer DCT/IDCT algorithms. Relative to libjpeg-turbo 2.0.x, this
+speeds up:
+
+ - the compression of RGB source images into grayscale JPEG images by
+approximately 20%
+ - the decompression of 4:2:2 JPEG images by approximately 40-60% when
+using fancy upsampling
+ - the decompression of 4:2:2 and 4:2:0 JPEG images by approximately
+15-20% when using merged upsampling
+ - the compression of RGB source images by approximately 30-45% when using
+the fast integer DCT
+ - the decompression of JPEG images into RGB destination images by
+approximately 2x when using the fast integer IDCT
+
+ The overall decompression speedup for RGB images is now approximately
+2.3-3.7x (compared to 2-3.5x with libjpeg-turbo 2.0.x.)
+
+3. 32-bit (Armv7 or Armv7s) iOS builds of libjpeg-turbo are no longer
+supported, and the libjpeg-turbo build system can no longer be used to package
+such builds. 32-bit iOS apps cannot run in iOS 11 and later, and the App Store
+no longer allows them.
+
+4. 32-bit (i386) OS X/macOS builds of libjpeg-turbo are no longer supported,
+and the libjpeg-turbo build system can no longer be used to package such
+builds. 32-bit Mac applications cannot run in macOS 10.15 "Catalina" and
+later, and the App Store no longer allows them.
+
+5. The SSE2 (x86 SIMD) and C Huffman encoding algorithms have been
+significantly optimized, resulting in a measured average overall compression
+speedup of 12-28% for 64-bit code and 22-52% for 32-bit code on various Intel
+and AMD CPUs, as well as a measured average overall compression speedup of
+0-23% on platforms that do not have a SIMD-accelerated Huffman encoding
+implementation.
+
+6. The block smoothing algorithm that is applied by default when decompressing
+progressive Huffman-encoded JPEG images has been improved in the following
+ways:
+
+ - The algorithm is now more fault-tolerant. Previously, if a particular
+scan was incomplete, then the smoothing parameters for the incomplete scan
+would be applied to the entire output image, including the parts of the image
+that were generated by the prior (complete) scan. Visually, this had the
+effect of removing block smoothing from lower-frequency scans if they were
+followed by an incomplete higher-frequency scan. libjpeg-turbo now applies
+block smoothing parameters to each iMCU row based on which scan generated the
+pixels in that row, rather than always using the block smoothing parameters for
+the most recent scan.
+ - When applying block smoothing to DC scans, a Gaussian-like kernel with a
+5x5 window is used to reduce the "blocky" appearance.
+
+7. Added SIMD acceleration for progressive Huffman encoding on Arm platforms.
+This speeds up the compression of full-color progressive JPEGs by about 30-40%
+on average (relative to libjpeg-turbo 2.0.x) when using modern Arm CPUs.
+
+8. Added configure-time and run-time auto-detection of Loongson MMI SIMD
+instructions, so that the Loongson MMI SIMD extensions can be included in any
+MIPS64 libjpeg-turbo build.
+
+9. Added fault tolerance features to djpeg and jpegtran, mainly to demonstrate
+methods by which applications can guard against the exploits of the JPEG format
+described in the report
+["Two Issues with the JPEG Standard"](https://libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
+
+ - Both programs now accept a `-maxscans` argument, which can be used to
+limit the number of allowable scans in the input file.
+ - Both programs now accept a `-strict` argument, which can be used to
+treat all warnings as fatal.
+
+10. CMake package config files are now included for both the libjpeg and
+TurboJPEG API libraries. This facilitates using libjpeg-turbo with CMake's
+`find_package()` function. For example:
+
+ find_package(libjpeg-turbo CONFIG REQUIRED)
+
+ add_executable(libjpeg_program libjpeg_program.c)
+ target_link_libraries(libjpeg_program PUBLIC libjpeg-turbo::jpeg)
+
+ add_executable(libjpeg_program_static libjpeg_program.c)
+ target_link_libraries(libjpeg_program_static PUBLIC
+ libjpeg-turbo::jpeg-static)
+
+ add_executable(turbojpeg_program turbojpeg_program.c)
+ target_link_libraries(turbojpeg_program PUBLIC
+ libjpeg-turbo::turbojpeg)
+
+ add_executable(turbojpeg_program_static turbojpeg_program.c)
+ target_link_libraries(turbojpeg_program_static PUBLIC
+ libjpeg-turbo::turbojpeg-static)
+
+11. Since the Unisys LZW patent has long expired, cjpeg and djpeg can now
+read/write both LZW-compressed and uncompressed GIF files (feature ported from
+jpeg-6a and jpeg-9d.)
+
+12. jpegtran now includes the `-wipe` and `-drop` options from jpeg-9a and
+jpeg-9d, as well as the ability to expand the image size using the `-crop`
+option. Refer to jpegtran.1 or usage.txt for more details.
+
+13. Added a complete intrinsics implementation of the Arm Neon SIMD extensions,
+thus providing SIMD acceleration on Arm platforms for all of the algorithms
+that are SIMD-accelerated on x86 platforms. This new implementation is
+significantly faster in some cases than the old GAS implementation--
+depending on the algorithms used, the type of CPU core, and the compiler. GCC,
+as of this writing, does not provide a full or optimal set of Neon intrinsics,
+so for performance reasons, the default when building libjpeg-turbo with GCC is
+to continue using the GAS implementation of the following algorithms:
+
+ - 32-bit RGB-to-YCbCr color conversion
+ - 32-bit fast and accurate inverse DCT
+ - 64-bit RGB-to-YCbCr and YCbCr-to-RGB color conversion
+ - 64-bit accurate forward and inverse DCT
+ - 64-bit Huffman encoding
+
+ A new CMake variable (`NEON_INTRINSICS`) can be used to override this
+default.
+
+ Since the new intrinsics implementation includes SIMD acceleration
+for merged upsampling/color conversion, 1.5.1[5] is no longer necessary and has
+been reverted.
+
+14. The Arm Neon SIMD extensions can now be built using Visual Studio.
+
+15. The build system can now be used to generate a universal x86-64 + Armv8
+libjpeg-turbo SDK package for both iOS and macOS.
+
+
+2.0.6
+=====
+
+### Significant changes relative to 2.0.5:
+
+1. Fixed "using JNI after critical get" errors that occurred on Android
+platforms when using any of the YUV encoding/compression/decompression/decoding
+methods in the TurboJPEG Java API.
+
+2. Fixed or worked around multiple issues with `jpeg_skip_scanlines()`:
+
+ - Fixed segfaults or "Corrupt JPEG data: premature end of data segment"
+errors in `jpeg_skip_scanlines()` that occurred when decompressing 4:2:2 or
+4:2:0 JPEG images using merged (non-fancy) upsampling/color conversion (that
+is, when setting `cinfo.do_fancy_upsampling` to `FALSE`.) 2.0.0[6] was a
+similar fix, but it did not cover all cases.
+ - `jpeg_skip_scanlines()` now throws an error if two-pass color
+quantization is enabled. Two-pass color quantization never worked properly
+with `jpeg_skip_scanlines()`, and the issues could not readily be fixed.
+ - Fixed an issue whereby `jpeg_skip_scanlines()` always returned 0 when
+skipping past the end of an image.
+
+3. The Arm 64-bit (Armv8) Neon SIMD extensions can now be built using MinGW
+toolchains targetting Arm64 (AArch64) Windows binaries.
+
+4. Fixed unexpected visual artifacts that occurred when using
+`jpeg_crop_scanline()` and interblock smoothing while decompressing only the DC
+scan of a progressive JPEG image.
+
+5. Fixed an issue whereby libjpeg-turbo would not build if 12-bit-per-component
+JPEG support (`WITH_12BIT`) was enabled along with libjpeg v7 or libjpeg v8
+API/ABI emulation (`WITH_JPEG7` or `WITH_JPEG8`.)
+
+
2.0.5
=====
@@ -64,7 +303,7 @@ other user-visible errant behavior, and given that the lossless transformer
(unlike the decompressor) is not generally exposed to arbitrary data exploits,
this issue did not likely pose a security risk.
-6. The ARM 64-bit (ARMv8) NEON SIMD assembly code now stores constants in a
+6. The Arm 64-bit (Armv8) Neon SIMD assembly code now stores constants in a
separate read-only data section rather than in the text section, to support
execute-only memory layouts.
@@ -246,7 +485,7 @@ detect actual security issues, should they arise in the future.
1. Added AVX2 SIMD implementations of the colorspace conversion, chroma
downsampling and upsampling, integer quantization and sample conversion, and
-slow integer DCT/IDCT algorithms. When using the slow integer DCT/IDCT
+accurate integer DCT/IDCT algorithms. When using the accurate integer DCT/IDCT
algorithms on AVX2-equipped CPUs, the compression of RGB images is
approximately 13-36% (avg. 22%) faster (relative to libjpeg-turbo 1.5.x) with
64-bit code and 11-21% (avg. 17%) faster with 32-bit code, and the
@@ -350,16 +589,16 @@ algorithm that caused incorrect dithering in the output image. This algorithm
now produces bitwise-identical results to the unmerged algorithms.
12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64] (if
-libjpeg-turbo is built with YASM), and iOS/ARM[64] builds are now private.
+libjpeg-turbo is built with YASM), and iOS/Arm[64] builds are now private.
This prevents those symbols from being exposed in applications or shared
libraries that link statically with libjpeg-turbo.
13. Added Loongson MMI SIMD implementations of the RGB-to-YCbCr and
YCbCr-to-RGB colorspace conversion, 4:2:0 chroma downsampling, 4:2:0 fancy
-chroma upsampling, integer quantization, and slow integer DCT/IDCT algorithms.
-When using the slow integer DCT/IDCT, this speeds up the compression of RGB
-images by approximately 70-100% and the decompression of RGB images by
-approximately 2-3.5x.
+chroma upsampling, integer quantization, and accurate integer DCT/IDCT
+algorithms. When using the accurate integer DCT/IDCT, this speeds up the
+compression of RGB images by approximately 70-100% and the decompression of RGB
+images by approximately 2-3.5x.
14. Fixed a build error when building with older MinGW releases (regression
caused by 1.5.1[7].)
@@ -409,9 +648,9 @@ end of a single-scan (non-progressive) image, subsequent calls to
`jpeg_consume_input()` would return `JPEG_SUSPENDED` rather than
`JPEG_REACHED_EOI`.
-9. `jpeg_crop_scanlines()` now works correctly when decompressing grayscale
-JPEG images that were compressed with a sampling factor other than 1 (for
-instance, with `cjpeg -grayscale -sample 2x2`).
+9. `jpeg_crop_scanline()` now works correctly when decompressing grayscale JPEG
+images that were compressed with a sampling factor other than 1 (for instance,
+with `cjpeg -grayscale -sample 2x2`).
1.5.2
@@ -435,7 +674,7 @@ on PowerPC-based AmigaOS 4 and OpenBSD systems.
5. Fixed build and runtime errors on Windows that occurred when building
libjpeg-turbo with libjpeg v7 API/ABI emulation and the in-memory
source/destination managers. Due to an oversight, the `jpeg_skip_scanlines()`
-and `jpeg_crop_scanlines()` functions were not being included in jpeg7.dll when
+and `jpeg_crop_scanline()` functions were not being included in jpeg7.dll when
libjpeg-turbo was built with `-DWITH_JPEG7=1` and `-DWITH_MEMSRCDST=1`.
6. Fixed "Bogus virtual array access" error that occurred when using the
@@ -691,8 +930,8 @@ benchmarking or regression testing, SIMD-accelerated Huffman encoding can be
disabled by setting the `JSIMD_NOHUFFENC` environment variable to `1`.
13. Added ARM 64-bit (ARMv8) NEON SIMD implementations of the commonly-used
-compression algorithms (including the slow integer forward DCT and h2v2 & h2v1
-downsampling algorithms, which are not accelerated in the 32-bit NEON
+compression algorithms (including the accurate integer forward DCT and h2v2 &
+h2v1 downsampling algorithms, which are not accelerated in the 32-bit NEON
implementation.) This speeds up the compression of full-color JPEGs by about
75% on average on a Cavium ThunderX processor and by about 2-2.5x on average on
Cortex-A53 and Cortex-A57 cores.
@@ -823,8 +1062,8 @@ platforms other than Windows or Linux. Oops.
7. Fixed an extremely rare bug in the Huffman encoder that caused 64-bit
builds of libjpeg-turbo to incorrectly encode a few specific test images when
-quality=98, an optimized Huffman table, and the slow integer forward DCT were
-used.
+quality=98, an optimized Huffman table, and the accurate integer forward DCT
+were used.
8. The Windows (CMake) build system now supports building only static or only
shared libraries. This is accomplished by adding either `-DENABLE_STATIC=0` or
@@ -983,8 +1222,8 @@ floating point inverse DCT (using code borrowed from libjpeg v8a and later.)
The accuracy of this implementation now matches the accuracy of the SSE/SSE2
implementation. Note, however, that the floating point DCT/IDCT algorithms are
mainly a legacy feature. They generally do not produce significantly better
-accuracy than the slow integer DCT/IDCT algorithms, and they are quite a bit
-slower.
+accuracy than the accurate integer DCT/IDCT algorithms, and they are quite a
+bit slower.
8. Added a new output colorspace (`JCS_RGB565`) to the libjpeg API that allows
for decompressing JPEG images into RGB565 (16-bit) pixels. If dithering is not
@@ -1394,8 +1633,8 @@ cases.
2. Despite the above, the fast integer forward DCT still degrades somewhat for
JPEG qualities greater than 95, so the TurboJPEG wrapper will now automatically
-use the slow integer forward DCT when generating JPEG images of quality 96 or
-greater. This reduces compression performance by as much as 15% for these
+use the accurate integer forward DCT when generating JPEG images of quality 96
+or greater. This reduces compression performance by as much as 15% for these
high-quality images but is necessary to ensure that the images are perceptually
lossless. It also ensures that the library can avoid the performance pitfall
created by [1].
diff --git a/src/3rdparty/libjpeg/src/README.ijg b/src/3rdparty/libjpeg/src/README.ijg
index 2e39f965c2..9453c19501 100644
--- a/src/3rdparty/libjpeg/src/README.ijg
+++ b/src/3rdparty/libjpeg/src/README.ijg
@@ -128,7 +128,7 @@ with respect to this software, its quality, accuracy, merchantability, or
fitness for a particular purpose. This software is provided "AS IS", and you,
its user, assume the entire risk as to its quality and accuracy.
-This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding.
+This software is copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding.
All Rights Reserved except as specified below.
Permission is hereby granted to use, copy, modify, and distribute this
@@ -159,19 +159,6 @@ commercial products, provided that all warranty or liability claims are
assumed by the product vendor.
-The IJG distribution formerly included code to read and write GIF files.
-To avoid entanglement with the Unisys LZW patent (now expired), GIF reading
-support has been removed altogether, and the GIF writer has been simplified
-to produce "uncompressed GIFs". This technique does not use the LZW
-algorithm; the resulting GIF files are larger than usual, but are readable
-by all standard GIF decoders.
-
-We are required to state that
- "The Graphics Interchange Format(c) is the Copyright property of
- CompuServe Incorporated. GIF(sm) is a Service Mark property of
- CompuServe Incorporated."
-
-
REFERENCES
==========
@@ -223,12 +210,12 @@ https://www.iso.org/standard/54989.html and http://www.itu.int/rec/T-REC-T.871.
A PDF file of the older JFIF 1.02 specification is available at
http://www.w3.org/Graphics/JPEG/jfif3.pdf.
-The TIFF 6.0 file format specification can be obtained by FTP from
-ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme
-found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
-IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
-Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
-(Compression tag 7). Copies of this Note can be obtained from
+The TIFF 6.0 file format specification can be obtained from
+http://mirrors.ctan.org/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation
+scheme found in the TIFF 6.0 spec of 3-June-92 has a number of serious
+problems. IJG does not recommend use of the TIFF 6.0 design (TIFF Compression
+tag 6). Instead, we recommend the JPEG design proposed by TIFF Technical Note
+#2 (Compression tag 7). Copies of this Note can be obtained from
http://www.ijg.org/files/. It is expected that the next revision
of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
Although IJG's own code does not support TIFF/JPEG, the free libtiff library
@@ -243,14 +230,8 @@ The most recent released version can always be found there in
directory "files".
The JPEG FAQ (Frequently Asked Questions) article is a source of some
-general information about JPEG.
-It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
-and other news.answers archive sites, including the official news.answers
-archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
-If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu
-with body
- send usenet/news.answers/jpeg-faq/part1
- send usenet/news.answers/jpeg-faq/part2
+general information about JPEG. It is available at
+http://www.faqs.org/faqs/jpeg-faq.
FILE FORMAT COMPATIBILITY
diff --git a/src/3rdparty/libjpeg/src/README.md b/src/3rdparty/libjpeg/src/README.md
index e7ff743a47..01e391ea7c 100644
--- a/src/3rdparty/libjpeg/src/README.md
+++ b/src/3rdparty/libjpeg/src/README.md
@@ -2,8 +2,8 @@ Background
==========
libjpeg-turbo is a JPEG image codec that uses SIMD instructions to accelerate
-baseline JPEG compression and decompression on x86, x86-64, ARM, PowerPC, and
-MIPS systems, as well as progressive JPEG compression on x86 and x86-64
+baseline JPEG compression and decompression on x86, x86-64, Arm, PowerPC, and
+MIPS systems, as well as progressive JPEG compression on x86, x86-64, and Arm
systems. On such systems, libjpeg-turbo is generally 2-6x as fast as libjpeg,
all else being equal. On other types of systems, libjpeg-turbo can still
outperform libjpeg by a significant amount, by virtue of its highly-optimized
@@ -179,8 +179,8 @@ supported and which aren't.
NOTE: As of this writing, extensive research has been conducted into the
usefulness of DCT scaling as a means of data reduction and SmartScale as a
-means of quality improvement. The reader is invited to peruse the research at
-<http://www.libjpeg-turbo.org/About/SmartScale> and draw his/her own conclusions,
+means of quality improvement. Readers are invited to peruse the research at
+<http://www.libjpeg-turbo.org/About/SmartScale> and draw their own conclusions,
but it is the general belief of our project that these features have not
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
@@ -287,12 +287,13 @@ following reasons:
(and slightly faster) floating point IDCT algorithm introduced in libjpeg
v8a as opposed to the algorithm used in libjpeg v6b. It should be noted,
however, that this algorithm basically brings the accuracy of the floating
- point IDCT in line with the accuracy of the slow integer IDCT. The floating
- point DCT/IDCT algorithms are mainly a legacy feature, and they do not
- produce significantly more accuracy than the slow integer algorithms (to put
- numbers on this, the typical difference in PNSR between the two algorithms
- is less than 0.10 dB, whereas changing the quality level by 1 in the upper
- range of the quality scale is typically more like a 1.0 dB difference.)
+ point IDCT in line with the accuracy of the accurate integer IDCT. The
+ floating point DCT/IDCT algorithms are mainly a legacy feature, and they do
+ not produce significantly more accuracy than the accurate integer algorithms
+ (to put numbers on this, the typical difference in PNSR between the two
+ algorithms is less than 0.10 dB, whereas changing the quality level by 1 in
+ the upper range of the quality scale is typically more like a 1.0 dB
+ difference.)
- If the floating point algorithms in libjpeg-turbo are not implemented using
SIMD instructions on a particular platform, then the accuracy of the
@@ -340,7 +341,7 @@ The algorithm used by the SIMD-accelerated quantization function cannot produce
correct results whenever the fast integer forward DCT is used along with a JPEG
quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
function in those cases. This causes performance to drop by as much as 40%.
-It is therefore strongly advised that you use the slow integer forward DCT
+It is therefore strongly advised that you use the accurate integer forward DCT
whenever encoding images with a JPEG quality of 98 or higher.
diff --git a/src/3rdparty/libjpeg/src/change.log b/src/3rdparty/libjpeg/src/change.log
index f090d7788c..e4d0ddc4bd 100644
--- a/src/3rdparty/libjpeg/src/change.log
+++ b/src/3rdparty/libjpeg/src/change.log
@@ -6,6 +6,25 @@ reference. Please see ChangeLog.md for information specific to libjpeg-turbo.
CHANGE LOG for Independent JPEG Group's JPEG software
+Version 9d 12-Jan-2020
+-----------------------
+
+Restore GIF read and write support from libjpeg version 6a.
+Thank to Wolfgang Werner (W.W.) Heinz for suggestion.
+
+Add jpegtran -drop option; add options to the crop extension and wipe
+to fill the extra area with content from the source image region,
+instead of gray out.
+
+
+Version 9c 14-Jan-2018
+-----------------------
+
+jpegtran: add an option to the -wipe switch to fill the region
+with the average of adjacent blocks, instead of gray out.
+Thank to Caitlyn Feddock and Maddie Ziegler for inspiration.
+
+
Version 9b 17-Jan-2016
-----------------------
@@ -13,6 +32,13 @@ Document 'f' specifier for jpegtran -crop specification.
Thank to Michele Martone for suggestion.
+Version 9a 19-Jan-2014
+-----------------------
+
+Add jpegtran -wipe option and extension for -crop.
+Thank to Andrew Senior, David Clunie, and Josef Schmid for suggestion.
+
+
Version 9 13-Jan-2013
----------------------
@@ -138,11 +164,6 @@ Huffman tables being used.
Huffman tables are checked for validity much more carefully than before.
-To avoid the Unisys LZW patent, djpeg's GIF output capability has been
-changed to produce "uncompressed GIFs", and cjpeg's GIF input capability
-has been removed altogether. We're not happy about it either, but there
-seems to be no good alternative.
-
The configure script now supports building libjpeg as a shared library
on many flavors of Unix (all the ones that GNU libtool knows how to
build shared libraries for). Use "./configure --enable-shared" to
diff --git a/src/3rdparty/libjpeg/src/jccolext.c b/src/3rdparty/libjpeg/src/jccolext.c
index 19c955c9d6..303b322ce6 100644
--- a/src/3rdparty/libjpeg/src/jccolext.c
+++ b/src/3rdparty/libjpeg/src/jccolext.c
@@ -48,9 +48,9 @@ rgb_ycc_convert_internal(j_compress_ptr cinfo, JSAMPARRAY input_buf,
outptr2 = output_buf[2][output_row];
output_row++;
for (col = 0; col < num_cols; col++) {
- r = GETJSAMPLE(inptr[RGB_RED]);
- g = GETJSAMPLE(inptr[RGB_GREEN]);
- b = GETJSAMPLE(inptr[RGB_BLUE]);
+ r = inptr[RGB_RED];
+ g = inptr[RGB_GREEN];
+ b = inptr[RGB_BLUE];
inptr += RGB_PIXELSIZE;
/* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
* must be too; we do not need an explicit range-limiting operation.
@@ -100,9 +100,9 @@ rgb_gray_convert_internal(j_compress_ptr cinfo, JSAMPARRAY input_buf,
outptr = output_buf[0][output_row];
output_row++;
for (col = 0; col < num_cols; col++) {
- r = GETJSAMPLE(inptr[RGB_RED]);
- g = GETJSAMPLE(inptr[RGB_GREEN]);
- b = GETJSAMPLE(inptr[RGB_BLUE]);
+ r = inptr[RGB_RED];
+ g = inptr[RGB_GREEN];
+ b = inptr[RGB_BLUE];
inptr += RGB_PIXELSIZE;
/* Y */
outptr[col] = (JSAMPLE)((ctab[r + R_Y_OFF] + ctab[g + G_Y_OFF] +
@@ -135,9 +135,9 @@ rgb_rgb_convert_internal(j_compress_ptr cinfo, JSAMPARRAY input_buf,
outptr2 = output_buf[2][output_row];
output_row++;
for (col = 0; col < num_cols; col++) {
- outptr0[col] = GETJSAMPLE(inptr[RGB_RED]);
- outptr1[col] = GETJSAMPLE(inptr[RGB_GREEN]);
- outptr2[col] = GETJSAMPLE(inptr[RGB_BLUE]);
+ outptr0[col] = inptr[RGB_RED];
+ outptr1[col] = inptr[RGB_GREEN];
+ outptr2[col] = inptr[RGB_BLUE];
inptr += RGB_PIXELSIZE;
}
}
diff --git a/src/3rdparty/libjpeg/src/jccolor.c b/src/3rdparty/libjpeg/src/jccolor.c
index 036f6016d1..bdc563c723 100644
--- a/src/3rdparty/libjpeg/src/jccolor.c
+++ b/src/3rdparty/libjpeg/src/jccolor.c
@@ -392,11 +392,11 @@ cmyk_ycck_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf,
outptr3 = output_buf[3][output_row];
output_row++;
for (col = 0; col < num_cols; col++) {
- r = MAXJSAMPLE - GETJSAMPLE(inptr[0]);
- g = MAXJSAMPLE - GETJSAMPLE(inptr[1]);
- b = MAXJSAMPLE - GETJSAMPLE(inptr[2]);
+ r = MAXJSAMPLE - inptr[0];
+ g = MAXJSAMPLE - inptr[1];
+ b = MAXJSAMPLE - inptr[2];
/* K passes through as-is */
- outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */
+ outptr3[col] = inptr[3];
inptr += 4;
/* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
* must be too; we do not need an explicit range-limiting operation.
@@ -438,7 +438,7 @@ grayscale_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf,
outptr = output_buf[0][output_row];
output_row++;
for (col = 0; col < num_cols; col++) {
- outptr[col] = inptr[0]; /* don't need GETJSAMPLE() here */
+ outptr[col] = inptr[0];
inptr += instride;
}
}
@@ -497,7 +497,7 @@ null_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
inptr = *input_buf;
outptr = output_buf[ci][output_row];
for (col = 0; col < num_cols; col++) {
- outptr[col] = inptr[ci]; /* don't need GETJSAMPLE() here */
+ outptr[col] = inptr[ci];
inptr += nc;
}
}
diff --git a/src/3rdparty/libjpeg/src/jcdctmgr.c b/src/3rdparty/libjpeg/src/jcdctmgr.c
index c04058e6ce..7dae17a6e1 100644
--- a/src/3rdparty/libjpeg/src/jcdctmgr.c
+++ b/src/3rdparty/libjpeg/src/jcdctmgr.c
@@ -381,19 +381,19 @@ convsamp(JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace)
elemptr = sample_data[elemr] + start_col;
#if DCTSIZE == 8 /* unroll the inner loop */
- *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
- *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
- *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
- *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
- *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
- *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
- *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
- *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
+ *workspaceptr++ = (*elemptr++) - CENTERJSAMPLE;
+ *workspaceptr++ = (*elemptr++) - CENTERJSAMPLE;
+ *workspaceptr++ = (*elemptr++) - CENTERJSAMPLE;
+ *workspaceptr++ = (*elemptr++) - CENTERJSAMPLE;
+ *workspaceptr++ = (*elemptr++) - CENTERJSAMPLE;
+ *workspaceptr++ = (*elemptr++) - CENTERJSAMPLE;
+ *workspaceptr++ = (*elemptr++) - CENTERJSAMPLE;
+ *workspaceptr++ = (*elemptr++) - CENTERJSAMPLE;
#else
{
register int elemc;
for (elemc = DCTSIZE; elemc > 0; elemc--)
- *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
+ *workspaceptr++ = (*elemptr++) - CENTERJSAMPLE;
}
#endif
}
@@ -533,20 +533,19 @@ convsamp_float(JSAMPARRAY sample_data, JDIMENSION start_col,
for (elemr = 0; elemr < DCTSIZE; elemr++) {
elemptr = sample_data[elemr] + start_col;
#if DCTSIZE == 8 /* unroll the inner loop */
- *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
- *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
- *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
- *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
- *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
- *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
- *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
- *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
+ *workspaceptr++ = (FAST_FLOAT)((*elemptr++) - CENTERJSAMPLE);
+ *workspaceptr++ = (FAST_FLOAT)((*elemptr++) - CENTERJSAMPLE);
+ *workspaceptr++ = (FAST_FLOAT)((*elemptr++) - CENTERJSAMPLE);
+ *workspaceptr++ = (FAST_FLOAT)((*elemptr++) - CENTERJSAMPLE);
+ *workspaceptr++ = (FAST_FLOAT)((*elemptr++) - CENTERJSAMPLE);
+ *workspaceptr++ = (FAST_FLOAT)((*elemptr++) - CENTERJSAMPLE);
+ *workspaceptr++ = (FAST_FLOAT)((*elemptr++) - CENTERJSAMPLE);
+ *workspaceptr++ = (FAST_FLOAT)((*elemptr++) - CENTERJSAMPLE);
#else
{
register int elemc;
for (elemc = DCTSIZE; elemc > 0; elemc--)
- *workspaceptr++ = (FAST_FLOAT)
- (GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
+ *workspaceptr++ = (FAST_FLOAT)((*elemptr++) - CENTERJSAMPLE);
}
#endif
}
diff --git a/src/3rdparty/libjpeg/src/jchuff.c b/src/3rdparty/libjpeg/src/jchuff.c
index cb05055d99..8ff817b151 100644
--- a/src/3rdparty/libjpeg/src/jchuff.c
+++ b/src/3rdparty/libjpeg/src/jchuff.c
@@ -4,8 +4,10 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1997, Thomas G. Lane.
* libjpeg-turbo Modifications:
- * Copyright (C) 2009-2011, 2014-2016, 2018-2019, D. R. Commander.
+ * Copyright (C) 2009-2011, 2014-2016, 2018-2021, D. R. Commander.
* Copyright (C) 2015, Matthieu Darbois.
+ * Copyright (C) 2018, Matthias Räncker.
+ * Copyright (C) 2020, Arm Limited.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -34,23 +36,28 @@
* memory footprint by 64k, which is important for some mobile applications
* that create many isolated instances of libjpeg-turbo (web browsers, for
* instance.) This may improve performance on some mobile platforms as well.
- * This feature is enabled by default only on ARM processors, because some x86
+ * This feature is enabled by default only on Arm processors, because some x86
* chips have a slow implementation of bsr, and the use of clz/bsr cannot be
* shown to have a significant performance impact even on the x86 chips that
- * have a fast implementation of it. When building for ARMv6, you can
+ * have a fast implementation of it. When building for Armv6, you can
* explicitly disable the use of clz/bsr by adding -mthumb to the compiler
* flags (this defines __thumb__).
*/
/* NOTE: Both GCC and Clang define __GNUC__ */
-#if defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__))
+#if (defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__))) || \
+ defined(_M_ARM) || defined(_M_ARM64)
#if !defined(__thumb__) || defined(__thumb2__)
#define USE_CLZ_INTRINSIC
#endif
#endif
#ifdef USE_CLZ_INTRINSIC
+#if defined(_MSC_VER) && !defined(__clang__)
+#define JPEG_NBITS_NONZERO(x) (32 - _CountLeadingZeros(x))
+#else
#define JPEG_NBITS_NONZERO(x) (32 - __builtin_clz(x))
+#endif
#define JPEG_NBITS(x) (x ? JPEG_NBITS_NONZERO(x) : 0)
#else
#include "jpeg_nbits_table.h"
@@ -65,31 +72,42 @@
* but must not be updated permanently until we complete the MCU.
*/
-typedef struct {
- size_t put_buffer; /* current bit-accumulation buffer */
- int put_bits; /* # of bits now in it */
- int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
-} savable_state;
+#if defined(__x86_64__) && defined(__ILP32__)
+typedef unsigned long long bit_buf_type;
+#else
+typedef size_t bit_buf_type;
+#endif
-/* This macro is to work around compilers with missing or broken
- * structure assignment. You'll need to fix this code if you have
- * such a compiler and you change MAX_COMPS_IN_SCAN.
+/* NOTE: The more optimal Huffman encoding algorithm is only used by the
+ * intrinsics implementation of the Arm Neon SIMD extensions, which is why we
+ * retain the old Huffman encoder behavior when using the GAS implementation.
*/
-
-#ifndef NO_STRUCT_ASSIGN
-#define ASSIGN_STATE(dest, src) ((dest) = (src))
+#if defined(WITH_SIMD) && !(defined(__arm__) || defined(__aarch64__) || \
+ defined(_M_ARM) || defined(_M_ARM64))
+typedef unsigned long long simd_bit_buf_type;
#else
-#if MAX_COMPS_IN_SCAN == 4
-#define ASSIGN_STATE(dest, src) \
- ((dest).put_buffer = (src).put_buffer, \
- (dest).put_bits = (src).put_bits, \
- (dest).last_dc_val[0] = (src).last_dc_val[0], \
- (dest).last_dc_val[1] = (src).last_dc_val[1], \
- (dest).last_dc_val[2] = (src).last_dc_val[2], \
- (dest).last_dc_val[3] = (src).last_dc_val[3])
+typedef bit_buf_type simd_bit_buf_type;
#endif
+
+#if (defined(SIZEOF_SIZE_T) && SIZEOF_SIZE_T == 8) || defined(_WIN64) || \
+ (defined(__x86_64__) && defined(__ILP32__))
+#define BIT_BUF_SIZE 64
+#elif (defined(SIZEOF_SIZE_T) && SIZEOF_SIZE_T == 4) || defined(_WIN32)
+#define BIT_BUF_SIZE 32
+#else
+#error Cannot determine word size
#endif
+#define SIMD_BIT_BUF_SIZE (sizeof(simd_bit_buf_type) * 8)
+typedef struct {
+ union {
+ bit_buf_type c;
+ simd_bit_buf_type simd;
+ } put_buffer; /* current bit accumulation buffer */
+ int free_bits; /* # of bits available in it */
+ /* (Neon GAS: # of bits now in it) */
+ int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
+} savable_state;
typedef struct {
struct jpeg_entropy_encoder pub; /* public fields */
@@ -123,6 +141,7 @@ typedef struct {
size_t free_in_buffer; /* # of byte spaces remaining in buffer */
savable_state cur; /* Current bit buffer & DC state */
j_compress_ptr cinfo; /* dump_buffer needs access to this */
+ int simd;
} working_state;
@@ -201,8 +220,17 @@ start_pass_huff(j_compress_ptr cinfo, boolean gather_statistics)
}
/* Initialize bit buffer to empty */
- entropy->saved.put_buffer = 0;
- entropy->saved.put_bits = 0;
+ if (entropy->simd) {
+ entropy->saved.put_buffer.simd = 0;
+#if defined(__aarch64__) && !defined(NEON_INTRINSICS)
+ entropy->saved.free_bits = 0;
+#else
+ entropy->saved.free_bits = SIMD_BIT_BUF_SIZE;
+#endif
+ } else {
+ entropy->saved.put_buffer.c = 0;
+ entropy->saved.free_bits = BIT_BUF_SIZE;
+ }
/* Initialize restart stuff */
entropy->restarts_to_go = cinfo->restart_interval;
@@ -287,6 +315,7 @@ jpeg_make_c_derived_tbl(j_compress_ptr cinfo, boolean isDC, int tblno,
* this lets us detect duplicate VAL entries here, and later
* allows emit_bits to detect any attempt to emit such symbols.
*/
+ MEMZERO(dtbl->ehufco, sizeof(dtbl->ehufco));
MEMZERO(dtbl->ehufsi, sizeof(dtbl->ehufsi));
/* This is also a convenient place to check for out-of-range
@@ -334,94 +363,94 @@ dump_buffer(working_state *state)
/* Outputting bits to the file */
-/* These macros perform the same task as the emit_bits() function in the
- * original libjpeg code. In addition to reducing overhead by explicitly
- * inlining the code, additional performance is achieved by taking into
- * account the size of the bit buffer and waiting until it is almost full
- * before emptying it. This mostly benefits 64-bit platforms, since 6
- * bytes can be stored in a 64-bit bit buffer before it has to be emptied.
+/* Output byte b and, speculatively, an additional 0 byte. 0xFF must be
+ * encoded as 0xFF 0x00, so the output buffer pointer is advanced by 2 if the
+ * byte is 0xFF. Otherwise, the output buffer pointer is advanced by 1, and
+ * the speculative 0 byte will be overwritten by the next byte.
*/
-
-#define EMIT_BYTE() { \
- JOCTET c; \
- put_bits -= 8; \
- c = (JOCTET)GETJOCTET(put_buffer >> put_bits); \
- *buffer++ = c; \
- if (c == 0xFF) /* need to stuff a zero byte? */ \
- *buffer++ = 0; \
+#define EMIT_BYTE(b) { \
+ buffer[0] = (JOCTET)(b); \
+ buffer[1] = 0; \
+ buffer -= -2 + ((JOCTET)(b) < 0xFF); \
}
-#define PUT_BITS(code, size) { \
- put_bits += size; \
- put_buffer = (put_buffer << size) | code; \
-}
-
-#if SIZEOF_SIZE_T != 8 && !defined(_WIN64)
-
-#define CHECKBUF15() { \
- if (put_bits > 15) { \
- EMIT_BYTE() \
- EMIT_BYTE() \
+/* Output the entire bit buffer. If there are no 0xFF bytes in it, then write
+ * directly to the output buffer. Otherwise, use the EMIT_BYTE() macro to
+ * encode 0xFF as 0xFF 0x00.
+ */
+#if BIT_BUF_SIZE == 64
+
+#define FLUSH() { \
+ if (put_buffer & 0x8080808080808080 & ~(put_buffer + 0x0101010101010101)) { \
+ EMIT_BYTE(put_buffer >> 56) \
+ EMIT_BYTE(put_buffer >> 48) \
+ EMIT_BYTE(put_buffer >> 40) \
+ EMIT_BYTE(put_buffer >> 32) \
+ EMIT_BYTE(put_buffer >> 24) \
+ EMIT_BYTE(put_buffer >> 16) \
+ EMIT_BYTE(put_buffer >> 8) \
+ EMIT_BYTE(put_buffer ) \
+ } else { \
+ buffer[0] = (JOCTET)(put_buffer >> 56); \
+ buffer[1] = (JOCTET)(put_buffer >> 48); \
+ buffer[2] = (JOCTET)(put_buffer >> 40); \
+ buffer[3] = (JOCTET)(put_buffer >> 32); \
+ buffer[4] = (JOCTET)(put_buffer >> 24); \
+ buffer[5] = (JOCTET)(put_buffer >> 16); \
+ buffer[6] = (JOCTET)(put_buffer >> 8); \
+ buffer[7] = (JOCTET)(put_buffer); \
+ buffer += 8; \
} \
}
-#endif
-
-#define CHECKBUF31() { \
- if (put_bits > 31) { \
- EMIT_BYTE() \
- EMIT_BYTE() \
- EMIT_BYTE() \
- EMIT_BYTE() \
- } \
-}
+#else
-#define CHECKBUF47() { \
- if (put_bits > 47) { \
- EMIT_BYTE() \
- EMIT_BYTE() \
- EMIT_BYTE() \
- EMIT_BYTE() \
- EMIT_BYTE() \
- EMIT_BYTE() \
+#define FLUSH() { \
+ if (put_buffer & 0x80808080 & ~(put_buffer + 0x01010101)) { \
+ EMIT_BYTE(put_buffer >> 24) \
+ EMIT_BYTE(put_buffer >> 16) \
+ EMIT_BYTE(put_buffer >> 8) \
+ EMIT_BYTE(put_buffer ) \
+ } else { \
+ buffer[0] = (JOCTET)(put_buffer >> 24); \
+ buffer[1] = (JOCTET)(put_buffer >> 16); \
+ buffer[2] = (JOCTET)(put_buffer >> 8); \
+ buffer[3] = (JOCTET)(put_buffer); \
+ buffer += 4; \
} \
}
-#if !defined(_WIN32) && !defined(SIZEOF_SIZE_T)
-#error Cannot determine word size
#endif
-#if SIZEOF_SIZE_T == 8 || defined(_WIN64)
-
-#define EMIT_BITS(code, size) { \
- CHECKBUF47() \
- PUT_BITS(code, size) \
-}
-
-#define EMIT_CODE(code, size) { \
- temp2 &= (((JLONG)1) << nbits) - 1; \
- CHECKBUF31() \
- PUT_BITS(code, size) \
- PUT_BITS(temp2, nbits) \
+/* Fill the bit buffer to capacity with the leading bits from code, then output
+ * the bit buffer and put the remaining bits from code into the bit buffer.
+ */
+#define PUT_AND_FLUSH(code, size) { \
+ put_buffer = (put_buffer << (size + free_bits)) | (code >> -free_bits); \
+ FLUSH() \
+ free_bits += BIT_BUF_SIZE; \
+ put_buffer = code; \
}
-#else
-
-#define EMIT_BITS(code, size) { \
- PUT_BITS(code, size) \
- CHECKBUF15() \
+/* Insert code into the bit buffer and output the bit buffer if needed.
+ * NOTE: We can't flush with free_bits == 0, since the left shift in
+ * PUT_AND_FLUSH() would have undefined behavior.
+ */
+#define PUT_BITS(code, size) { \
+ free_bits -= size; \
+ if (free_bits < 0) \
+ PUT_AND_FLUSH(code, size) \
+ else \
+ put_buffer = (put_buffer << size) | code; \
}
-#define EMIT_CODE(code, size) { \
- temp2 &= (((JLONG)1) << nbits) - 1; \
- PUT_BITS(code, size) \
- CHECKBUF15() \
- PUT_BITS(temp2, nbits) \
- CHECKBUF15() \
+#define PUT_CODE(code, size) { \
+ temp &= (((JLONG)1) << nbits) - 1; \
+ temp |= code << nbits; \
+ nbits += size; \
+ PUT_BITS(temp, nbits) \
}
-#endif
-
/* Although it is exceedingly rare, it is possible for a Huffman-encoded
* coefficient block to be larger than the 128-byte unencoded block. For each
@@ -444,6 +473,7 @@ dump_buffer(working_state *state)
#define STORE_BUFFER() { \
if (localbuf) { \
+ size_t bytes, bytestocopy; \
bytes = buffer - _buffer; \
buffer = _buffer; \
while (bytes > 0) { \
@@ -466,20 +496,46 @@ dump_buffer(working_state *state)
LOCAL(boolean)
flush_bits(working_state *state)
{
- JOCTET _buffer[BUFSIZE], *buffer;
- size_t put_buffer; int put_bits;
- size_t bytes, bytestocopy; int localbuf = 0;
+ JOCTET _buffer[BUFSIZE], *buffer, temp;
+ simd_bit_buf_type put_buffer; int put_bits;
+ int localbuf = 0;
+
+ if (state->simd) {
+#if defined(__aarch64__) && !defined(NEON_INTRINSICS)
+ put_bits = state->cur.free_bits;
+#else
+ put_bits = SIMD_BIT_BUF_SIZE - state->cur.free_bits;
+#endif
+ put_buffer = state->cur.put_buffer.simd;
+ } else {
+ put_bits = BIT_BUF_SIZE - state->cur.free_bits;
+ put_buffer = state->cur.put_buffer.c;
+ }
- put_buffer = state->cur.put_buffer;
- put_bits = state->cur.put_bits;
LOAD_BUFFER()
- /* fill any partial byte with ones */
- PUT_BITS(0x7F, 7)
- while (put_bits >= 8) EMIT_BYTE()
+ while (put_bits >= 8) {
+ put_bits -= 8;
+ temp = (JOCTET)(put_buffer >> put_bits);
+ EMIT_BYTE(temp)
+ }
+ if (put_bits) {
+ /* fill partial byte with ones */
+ temp = (JOCTET)((put_buffer << (8 - put_bits)) | (0xFF >> put_bits));
+ EMIT_BYTE(temp)
+ }
- state->cur.put_buffer = 0; /* and reset bit-buffer to empty */
- state->cur.put_bits = 0;
+ if (state->simd) { /* and reset bit buffer to empty */
+ state->cur.put_buffer.simd = 0;
+#if defined(__aarch64__) && !defined(NEON_INTRINSICS)
+ state->cur.free_bits = 0;
+#else
+ state->cur.free_bits = SIMD_BIT_BUF_SIZE;
+#endif
+ } else {
+ state->cur.put_buffer.c = 0;
+ state->cur.free_bits = BIT_BUF_SIZE;
+ }
STORE_BUFFER()
return TRUE;
@@ -493,7 +549,7 @@ encode_one_block_simd(working_state *state, JCOEFPTR block, int last_dc_val,
c_derived_tbl *dctbl, c_derived_tbl *actbl)
{
JOCTET _buffer[BUFSIZE], *buffer;
- size_t bytes, bytestocopy; int localbuf = 0;
+ int localbuf = 0;
LOAD_BUFFER()
@@ -509,53 +565,41 @@ LOCAL(boolean)
encode_one_block(working_state *state, JCOEFPTR block, int last_dc_val,
c_derived_tbl *dctbl, c_derived_tbl *actbl)
{
- int temp, temp2, temp3;
- int nbits;
- int r, code, size;
+ int temp, nbits, free_bits;
+ bit_buf_type put_buffer;
JOCTET _buffer[BUFSIZE], *buffer;
- size_t put_buffer; int put_bits;
- int code_0xf0 = actbl->ehufco[0xf0], size_0xf0 = actbl->ehufsi[0xf0];
- size_t bytes, bytestocopy; int localbuf = 0;
+ int localbuf = 0;
- put_buffer = state->cur.put_buffer;
- put_bits = state->cur.put_bits;
+ free_bits = state->cur.free_bits;
+ put_buffer = state->cur.put_buffer.c;
LOAD_BUFFER()
/* Encode the DC coefficient difference per section F.1.2.1 */
- temp = temp2 = block[0] - last_dc_val;
+ temp = block[0] - last_dc_val;
/* This is a well-known technique for obtaining the absolute value without a
* branch. It is derived from an assembly language technique presented in
* "How to Optimize for the Pentium Processors", Copyright (c) 1996, 1997 by
- * Agner Fog.
+ * Agner Fog. This code assumes we are on a two's complement machine.
*/
- temp3 = temp >> (CHAR_BIT * sizeof(int) - 1);
- temp ^= temp3;
- temp -= temp3;
-
- /* For a negative input, want temp2 = bitwise complement of abs(input) */
- /* This code assumes we are on a two's complement machine */
- temp2 += temp3;
+ nbits = temp >> (CHAR_BIT * sizeof(int) - 1);
+ temp += nbits;
+ nbits ^= temp;
/* Find the number of bits needed for the magnitude of the coefficient */
- nbits = JPEG_NBITS(temp);
-
- /* Emit the Huffman-coded symbol for the number of bits */
- code = dctbl->ehufco[nbits];
- size = dctbl->ehufsi[nbits];
- EMIT_BITS(code, size)
+ nbits = JPEG_NBITS(nbits);
- /* Mask off any extra bits in code */
- temp2 &= (((JLONG)1) << nbits) - 1;
-
- /* Emit that number of bits of the value, if positive, */
- /* or the complement of its magnitude, if negative. */
- EMIT_BITS(temp2, nbits)
+ /* Emit the Huffman-coded symbol for the number of bits.
+ * Emit that number of bits of the value, if positive,
+ * or the complement of its magnitude, if negative.
+ */
+ PUT_CODE(dctbl->ehufco[nbits], dctbl->ehufsi[nbits])
/* Encode the AC coefficients per section F.1.2.2 */
- r = 0; /* r = run length of zeros */
+ {
+ int r = 0; /* r = run length of zeros */
/* Manually unroll the k loop to eliminate the counter variable. This
* improves performance greatly on systems with a limited number of
@@ -563,51 +607,46 @@ encode_one_block(working_state *state, JCOEFPTR block, int last_dc_val,
*/
#define kloop(jpeg_natural_order_of_k) { \
if ((temp = block[jpeg_natural_order_of_k]) == 0) { \
- r++; \
+ r += 16; \
} else { \
- temp2 = temp; \
/* Branch-less absolute value, bitwise complement, etc., same as above */ \
- temp3 = temp >> (CHAR_BIT * sizeof(int) - 1); \
- temp ^= temp3; \
- temp -= temp3; \
- temp2 += temp3; \
- nbits = JPEG_NBITS_NONZERO(temp); \
+ nbits = temp >> (CHAR_BIT * sizeof(int) - 1); \
+ temp += nbits; \
+ nbits ^= temp; \
+ nbits = JPEG_NBITS_NONZERO(nbits); \
/* if run length > 15, must emit special run-length-16 codes (0xF0) */ \
- while (r > 15) { \
- EMIT_BITS(code_0xf0, size_0xf0) \
- r -= 16; \
+ while (r >= 16 * 16) { \
+ r -= 16 * 16; \
+ PUT_BITS(actbl->ehufco[0xf0], actbl->ehufsi[0xf0]) \
} \
/* Emit Huffman symbol for run length / number of bits */ \
- temp3 = (r << 4) + nbits; \
- code = actbl->ehufco[temp3]; \
- size = actbl->ehufsi[temp3]; \
- EMIT_CODE(code, size) \
+ r += nbits; \
+ PUT_CODE(actbl->ehufco[r], actbl->ehufsi[r]) \
r = 0; \
} \
}
- /* One iteration for each value in jpeg_natural_order[] */
- kloop(1); kloop(8); kloop(16); kloop(9); kloop(2); kloop(3);
- kloop(10); kloop(17); kloop(24); kloop(32); kloop(25); kloop(18);
- kloop(11); kloop(4); kloop(5); kloop(12); kloop(19); kloop(26);
- kloop(33); kloop(40); kloop(48); kloop(41); kloop(34); kloop(27);
- kloop(20); kloop(13); kloop(6); kloop(7); kloop(14); kloop(21);
- kloop(28); kloop(35); kloop(42); kloop(49); kloop(56); kloop(57);
- kloop(50); kloop(43); kloop(36); kloop(29); kloop(22); kloop(15);
- kloop(23); kloop(30); kloop(37); kloop(44); kloop(51); kloop(58);
- kloop(59); kloop(52); kloop(45); kloop(38); kloop(31); kloop(39);
- kloop(46); kloop(53); kloop(60); kloop(61); kloop(54); kloop(47);
- kloop(55); kloop(62); kloop(63);
-
- /* If the last coef(s) were zero, emit an end-of-block code */
- if (r > 0) {
- code = actbl->ehufco[0];
- size = actbl->ehufsi[0];
- EMIT_BITS(code, size)
+ /* One iteration for each value in jpeg_natural_order[] */
+ kloop(1); kloop(8); kloop(16); kloop(9); kloop(2); kloop(3);
+ kloop(10); kloop(17); kloop(24); kloop(32); kloop(25); kloop(18);
+ kloop(11); kloop(4); kloop(5); kloop(12); kloop(19); kloop(26);
+ kloop(33); kloop(40); kloop(48); kloop(41); kloop(34); kloop(27);
+ kloop(20); kloop(13); kloop(6); kloop(7); kloop(14); kloop(21);
+ kloop(28); kloop(35); kloop(42); kloop(49); kloop(56); kloop(57);
+ kloop(50); kloop(43); kloop(36); kloop(29); kloop(22); kloop(15);
+ kloop(23); kloop(30); kloop(37); kloop(44); kloop(51); kloop(58);
+ kloop(59); kloop(52); kloop(45); kloop(38); kloop(31); kloop(39);
+ kloop(46); kloop(53); kloop(60); kloop(61); kloop(54); kloop(47);
+ kloop(55); kloop(62); kloop(63);
+
+ /* If the last coef(s) were zero, emit an end-of-block code */
+ if (r > 0) {
+ PUT_BITS(actbl->ehufco[0], actbl->ehufsi[0])
+ }
}
- state->cur.put_buffer = put_buffer;
- state->cur.put_bits = put_bits;
+ state->cur.put_buffer.c = put_buffer;
+ state->cur.free_bits = free_bits;
STORE_BUFFER()
return TRUE;
@@ -654,8 +693,9 @@ encode_mcu_huff(j_compress_ptr cinfo, JBLOCKROW *MCU_data)
/* Load up working state */
state.next_output_byte = cinfo->dest->next_output_byte;
state.free_in_buffer = cinfo->dest->free_in_buffer;
- ASSIGN_STATE(state.cur, entropy->saved);
+ state.cur = entropy->saved;
state.cinfo = cinfo;
+ state.simd = entropy->simd;
/* Emit restart marker if needed */
if (cinfo->restart_interval) {
@@ -694,7 +734,7 @@ encode_mcu_huff(j_compress_ptr cinfo, JBLOCKROW *MCU_data)
/* Completed MCU, so update state */
cinfo->dest->next_output_byte = state.next_output_byte;
cinfo->dest->free_in_buffer = state.free_in_buffer;
- ASSIGN_STATE(entropy->saved, state.cur);
+ entropy->saved = state.cur;
/* Update restart-interval state too */
if (cinfo->restart_interval) {
@@ -723,8 +763,9 @@ finish_pass_huff(j_compress_ptr cinfo)
/* Load up working state ... flush_bits needs it */
state.next_output_byte = cinfo->dest->next_output_byte;
state.free_in_buffer = cinfo->dest->free_in_buffer;
- ASSIGN_STATE(state.cur, entropy->saved);
+ state.cur = entropy->saved;
state.cinfo = cinfo;
+ state.simd = entropy->simd;
/* Flush out the last data */
if (!flush_bits(&state))
@@ -733,7 +774,7 @@ finish_pass_huff(j_compress_ptr cinfo)
/* Update state */
cinfo->dest->next_output_byte = state.next_output_byte;
cinfo->dest->free_in_buffer = state.free_in_buffer;
- ASSIGN_STATE(entropy->saved, state.cur);
+ entropy->saved = state.cur;
}
diff --git a/src/3rdparty/libjpeg/src/jcinit.c b/src/3rdparty/libjpeg/src/jcinit.c
index 78aa465786..157353a22e 100644
--- a/src/3rdparty/libjpeg/src/jcinit.c
+++ b/src/3rdparty/libjpeg/src/jcinit.c
@@ -1,8 +1,10 @@
/*
* jcinit.c
*
+ * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -19,6 +21,7 @@
#define JPEG_INTERNALS
#include "jinclude.h"
#include "jpeglib.h"
+#include "jpegcomp.h"
/*
diff --git a/src/3rdparty/libjpeg/jconfig.h b/src/3rdparty/libjpeg/src/jconfig.h
index e25dba4b0f..fa82022edc 100644
--- a/src/3rdparty/libjpeg/jconfig.h
+++ b/src/3rdparty/libjpeg/src/jconfig.h
@@ -2,9 +2,9 @@
#define JPEG_LIB_VERSION 80
-#define LIBJPEG_TURBO_VERSION 2.0.5
+#define LIBJPEG_TURBO_VERSION 2.1.0
-#define LIBJPEG_TURBO_VERSION_NUMBER 2000005
+#define LIBJPEG_TURBO_VERSION_NUMBER 2001000
#define C_ARITH_CODING_SUPPORTED 1
diff --git a/src/3rdparty/libjpeg/src/jconfig.h.in b/src/3rdparty/libjpeg/src/jconfig.h.in
index 18a69a4814..d4284d97b8 100644
--- a/src/3rdparty/libjpeg/src/jconfig.h.in
+++ b/src/3rdparty/libjpeg/src/jconfig.h.in
@@ -61,11 +61,6 @@
unsigned. */
#cmakedefine RIGHT_SHIFT_IS_UNSIGNED 1
-/* Define to 1 if type `char' is unsigned and you are not using gcc. */
-#ifndef __CHAR_UNSIGNED__
- #cmakedefine __CHAR_UNSIGNED__ 1
-#endif
-
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
diff --git a/src/3rdparty/libjpeg/jconfigint.h b/src/3rdparty/libjpeg/src/jconfigint.h
index d118c9f909..cfcac904c5 100644
--- a/src/3rdparty/libjpeg/jconfigint.h
+++ b/src/3rdparty/libjpeg/src/jconfigint.h
@@ -8,7 +8,7 @@
#define PACKAGE_NAME "libjpeg-turbo"
-#define VERSION "2.0.5"
+#define VERSION "2.1.0"
#if SIZE_MAX == 0xffffffff
#define SIZEOF_SIZE_T 4
diff --git a/src/3rdparty/libjpeg/src/jcphuff.c b/src/3rdparty/libjpeg/src/jcphuff.c
index 8c4efaf16c..9bf96124b4 100644
--- a/src/3rdparty/libjpeg/src/jcphuff.c
+++ b/src/3rdparty/libjpeg/src/jcphuff.c
@@ -4,8 +4,9 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1995-1997, Thomas G. Lane.
* libjpeg-turbo Modifications:
- * Copyright (C) 2011, 2015, 2018, D. R. Commander.
+ * Copyright (C) 2011, 2015, 2018, 2021, D. R. Commander.
* Copyright (C) 2016, 2018, Matthieu Darbois.
+ * Copyright (C) 2020, Arm Limited.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -43,23 +44,28 @@
* memory footprint by 64k, which is important for some mobile applications
* that create many isolated instances of libjpeg-turbo (web browsers, for
* instance.) This may improve performance on some mobile platforms as well.
- * This feature is enabled by default only on ARM processors, because some x86
+ * This feature is enabled by default only on Arm processors, because some x86
* chips have a slow implementation of bsr, and the use of clz/bsr cannot be
* shown to have a significant performance impact even on the x86 chips that
- * have a fast implementation of it. When building for ARMv6, you can
+ * have a fast implementation of it. When building for Armv6, you can
* explicitly disable the use of clz/bsr by adding -mthumb to the compiler
* flags (this defines __thumb__).
*/
/* NOTE: Both GCC and Clang define __GNUC__ */
-#if defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__))
+#if (defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__))) || \
+ defined(_M_ARM) || defined(_M_ARM64)
#if !defined(__thumb__) || defined(__thumb2__)
#define USE_CLZ_INTRINSIC
#endif
#endif
#ifdef USE_CLZ_INTRINSIC
+#if defined(_MSC_VER) && !defined(__clang__)
+#define JPEG_NBITS_NONZERO(x) (32 - _CountLeadingZeros(x))
+#else
#define JPEG_NBITS_NONZERO(x) (32 - __builtin_clz(x))
+#endif
#define JPEG_NBITS(x) (x ? JPEG_NBITS_NONZERO(x) : 0)
#else
#include "jpeg_nbits_table.h"
@@ -169,24 +175,26 @@ INLINE
METHODDEF(int)
count_zeroes(size_t *x)
{
- int result;
#if defined(HAVE_BUILTIN_CTZL)
+ int result;
result = __builtin_ctzl(*x);
*x >>= result;
#elif defined(HAVE_BITSCANFORWARD64)
+ unsigned long result;
_BitScanForward64(&result, *x);
*x >>= result;
#elif defined(HAVE_BITSCANFORWARD)
+ unsigned long result;
_BitScanForward(&result, *x);
*x >>= result;
#else
- result = 0;
+ int result = 0;
while ((*x & 1) == 0) {
++result;
*x >>= 1;
}
#endif
- return result;
+ return (int)result;
}
@@ -860,7 +868,7 @@ encode_mcu_AC_refine_prepare(const JCOEF *block,
#define ENCODE_COEFS_AC_REFINE(label) { \
while (zerobits) { \
- int idx = count_zeroes(&zerobits); \
+ idx = count_zeroes(&zerobits); \
r += idx; \
cabsvalue += idx; \
signbits >>= idx; \
@@ -917,7 +925,7 @@ METHODDEF(boolean)
encode_mcu_AC_refine(j_compress_ptr cinfo, JBLOCKROW *MCU_data)
{
phuff_entropy_ptr entropy = (phuff_entropy_ptr)cinfo->entropy;
- register int temp, r;
+ register int temp, r, idx;
char *BR_buffer;
unsigned int BR;
int Sl = cinfo->Se - cinfo->Ss + 1;
@@ -968,7 +976,7 @@ encode_mcu_AC_refine(j_compress_ptr cinfo, JBLOCKROW *MCU_data)
if (zerobits) {
int diff = ((absvalues + DCTSIZE2 / 2) - cabsvalue);
- int idx = count_zeroes(&zerobits);
+ idx = count_zeroes(&zerobits);
signbits >>= idx;
idx += diff;
r += idx;
diff --git a/src/3rdparty/libjpeg/src/jcsample.c b/src/3rdparty/libjpeg/src/jcsample.c
index bd27b84e06..e8515ebf0f 100644
--- a/src/3rdparty/libjpeg/src/jcsample.c
+++ b/src/3rdparty/libjpeg/src/jcsample.c
@@ -6,7 +6,7 @@
* libjpeg-turbo Modifications:
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
* Copyright (C) 2014, MIPS Technologies, Inc., California.
- * Copyright (C) 2015, D. R. Commander.
+ * Copyright (C) 2015, 2019, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -103,7 +103,7 @@ expand_right_edge(JSAMPARRAY image_data, int num_rows, JDIMENSION input_cols,
if (numcols > 0) {
for (row = 0; row < num_rows; row++) {
ptr = image_data[row] + input_cols;
- pixval = ptr[-1]; /* don't need GETJSAMPLE() here */
+ pixval = ptr[-1];
for (count = numcols; count > 0; count--)
*ptr++ = pixval;
}
@@ -174,7 +174,7 @@ int_downsample(j_compress_ptr cinfo, jpeg_component_info *compptr,
for (v = 0; v < v_expand; v++) {
inptr = input_data[inrow + v] + outcol_h;
for (h = 0; h < h_expand; h++) {
- outvalue += (JLONG)GETJSAMPLE(*inptr++);
+ outvalue += (JLONG)(*inptr++);
}
}
*outptr++ = (JSAMPLE)((outvalue + numpix2) / numpix);
@@ -237,8 +237,7 @@ h2v1_downsample(j_compress_ptr cinfo, jpeg_component_info *compptr,
inptr = input_data[outrow];
bias = 0; /* bias = 0,1,0,1,... for successive samples */
for (outcol = 0; outcol < output_cols; outcol++) {
- *outptr++ =
- (JSAMPLE)((GETJSAMPLE(*inptr) + GETJSAMPLE(inptr[1]) + bias) >> 1);
+ *outptr++ = (JSAMPLE)((inptr[0] + inptr[1] + bias) >> 1);
bias ^= 1; /* 0=>1, 1=>0 */
inptr += 2;
}
@@ -277,8 +276,7 @@ h2v2_downsample(j_compress_ptr cinfo, jpeg_component_info *compptr,
bias = 1; /* bias = 1,2,1,2,... for successive samples */
for (outcol = 0; outcol < output_cols; outcol++) {
*outptr++ =
- (JSAMPLE)((GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
- GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]) + bias) >> 2);
+ (JSAMPLE)((inptr0[0] + inptr0[1] + inptr1[0] + inptr1[1] + bias) >> 2);
bias ^= 3; /* 1=>2, 2=>1 */
inptr0 += 2; inptr1 += 2;
}
@@ -337,33 +335,25 @@ h2v2_smooth_downsample(j_compress_ptr cinfo, jpeg_component_info *compptr,
below_ptr = input_data[inrow + 2];
/* Special case for first column: pretend column -1 is same as column 0 */
- membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
- GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]);
- neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) +
- GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) +
- GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[2]) +
- GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[2]);
+ membersum = inptr0[0] + inptr0[1] + inptr1[0] + inptr1[1];
+ neighsum = above_ptr[0] + above_ptr[1] + below_ptr[0] + below_ptr[1] +
+ inptr0[0] + inptr0[2] + inptr1[0] + inptr1[2];
neighsum += neighsum;
- neighsum += GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[2]) +
- GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[2]);
+ neighsum += above_ptr[0] + above_ptr[2] + below_ptr[0] + below_ptr[2];
membersum = membersum * memberscale + neighsum * neighscale;
*outptr++ = (JSAMPLE)((membersum + 32768) >> 16);
inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2;
for (colctr = output_cols - 2; colctr > 0; colctr--) {
/* sum of pixels directly mapped to this output element */
- membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
- GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]);
+ membersum = inptr0[0] + inptr0[1] + inptr1[0] + inptr1[1];
/* sum of edge-neighbor pixels */
- neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) +
- GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) +
- GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[2]) +
- GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[2]);
+ neighsum = above_ptr[0] + above_ptr[1] + below_ptr[0] + below_ptr[1] +
+ inptr0[-1] + inptr0[2] + inptr1[-1] + inptr1[2];
/* The edge-neighbors count twice as much as corner-neighbors */
neighsum += neighsum;
/* Add in the corner-neighbors */
- neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[2]) +
- GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[2]);
+ neighsum += above_ptr[-1] + above_ptr[2] + below_ptr[-1] + below_ptr[2];
/* form final output scaled up by 2^16 */
membersum = membersum * memberscale + neighsum * neighscale;
/* round, descale and output it */
@@ -372,15 +362,11 @@ h2v2_smooth_downsample(j_compress_ptr cinfo, jpeg_component_info *compptr,
}
/* Special case for last column */
- membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
- GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]);
- neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) +
- GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) +
- GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[1]) +
- GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[1]);
+ membersum = inptr0[0] + inptr0[1] + inptr1[0] + inptr1[1];
+ neighsum = above_ptr[0] + above_ptr[1] + below_ptr[0] + below_ptr[1] +
+ inptr0[-1] + inptr0[1] + inptr1[-1] + inptr1[1];
neighsum += neighsum;
- neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[1]) +
- GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[1]);
+ neighsum += above_ptr[-1] + above_ptr[1] + below_ptr[-1] + below_ptr[1];
membersum = membersum * memberscale + neighsum * neighscale;
*outptr = (JSAMPLE)((membersum + 32768) >> 16);
@@ -429,21 +415,18 @@ fullsize_smooth_downsample(j_compress_ptr cinfo, jpeg_component_info *compptr,
below_ptr = input_data[outrow + 1];
/* Special case for first column */
- colsum = GETJSAMPLE(*above_ptr++) + GETJSAMPLE(*below_ptr++) +
- GETJSAMPLE(*inptr);
- membersum = GETJSAMPLE(*inptr++);
- nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) +
- GETJSAMPLE(*inptr);
+ colsum = (*above_ptr++) + (*below_ptr++) + inptr[0];
+ membersum = *inptr++;
+ nextcolsum = above_ptr[0] + below_ptr[0] + inptr[0];
neighsum = colsum + (colsum - membersum) + nextcolsum;
membersum = membersum * memberscale + neighsum * neighscale;
*outptr++ = (JSAMPLE)((membersum + 32768) >> 16);
lastcolsum = colsum; colsum = nextcolsum;
for (colctr = output_cols - 2; colctr > 0; colctr--) {
- membersum = GETJSAMPLE(*inptr++);
+ membersum = *inptr++;
above_ptr++; below_ptr++;
- nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) +
- GETJSAMPLE(*inptr);
+ nextcolsum = above_ptr[0] + below_ptr[0] + inptr[0];
neighsum = lastcolsum + (colsum - membersum) + nextcolsum;
membersum = membersum * memberscale + neighsum * neighscale;
*outptr++ = (JSAMPLE)((membersum + 32768) >> 16);
@@ -451,7 +434,7 @@ fullsize_smooth_downsample(j_compress_ptr cinfo, jpeg_component_info *compptr,
}
/* Special case for last column */
- membersum = GETJSAMPLE(*inptr);
+ membersum = *inptr;
neighsum = lastcolsum + (colsum - membersum) + colsum;
membersum = membersum * memberscale + neighsum * neighscale;
*outptr = (JSAMPLE)((membersum + 32768) >> 16);
diff --git a/src/3rdparty/libjpeg/src/jctrans.c b/src/3rdparty/libjpeg/src/jctrans.c
index ce70a30940..ab6a2186db 100644
--- a/src/3rdparty/libjpeg/src/jctrans.c
+++ b/src/3rdparty/libjpeg/src/jctrans.c
@@ -4,8 +4,8 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1995-1998, Thomas G. Lane.
* Modified 2000-2009 by Guido Vollbeding.
- * It was modified by The libjpeg-turbo Project to include only code relevant
- * to libjpeg-turbo.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -17,6 +17,7 @@
#define JPEG_INTERNALS
#include "jinclude.h"
#include "jpeglib.h"
+#include "jpegcomp.h"
/* Forward declarations */
diff --git a/src/3rdparty/libjpeg/src/jdapistd.c b/src/3rdparty/libjpeg/src/jdapistd.c
index 2c808fa564..695a620099 100644
--- a/src/3rdparty/libjpeg/src/jdapistd.c
+++ b/src/3rdparty/libjpeg/src/jdapistd.c
@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1994-1996, Thomas G. Lane.
* libjpeg-turbo Modifications:
- * Copyright (C) 2010, 2015-2018, D. R. Commander.
+ * Copyright (C) 2010, 2015-2020, D. R. Commander.
* Copyright (C) 2015, Google, Inc.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
@@ -21,6 +21,8 @@
#include "jinclude.h"
#include "jdmainct.h"
#include "jdcoefct.h"
+#include "jdmaster.h"
+#include "jdmerge.h"
#include "jdsample.h"
#include "jmemsys.h"
@@ -316,6 +318,10 @@ LOCAL(void)
read_and_discard_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines)
{
JDIMENSION n;
+ my_master_ptr master = (my_master_ptr)cinfo->master;
+ JSAMPLE dummy_sample[1] = { 0 };
+ JSAMPROW dummy_row = dummy_sample;
+ JSAMPARRAY scanlines = NULL;
void (*color_convert) (j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
JDIMENSION input_row, JSAMPARRAY output_buf,
int num_rows) = NULL;
@@ -325,6 +331,10 @@ read_and_discard_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines)
if (cinfo->cconvert && cinfo->cconvert->color_convert) {
color_convert = cinfo->cconvert->color_convert;
cinfo->cconvert->color_convert = noop_convert;
+ /* This just prevents UBSan from complaining about adding 0 to a NULL
+ * pointer. The pointer isn't actually used.
+ */
+ scanlines = &dummy_row;
}
if (cinfo->cquantize && cinfo->cquantize->color_quantize) {
@@ -332,8 +342,13 @@ read_and_discard_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines)
cinfo->cquantize->color_quantize = noop_quantize;
}
+ if (master->using_merged_upsample && cinfo->max_v_samp_factor == 2) {
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
+ scanlines = &upsample->spare_row;
+ }
+
for (n = 0; n < num_lines; n++)
- jpeg_read_scanlines(cinfo, NULL, 1);
+ jpeg_read_scanlines(cinfo, scanlines, 1);
if (color_convert)
cinfo->cconvert->color_convert = color_convert;
@@ -353,6 +368,12 @@ increment_simple_rowgroup_ctr(j_decompress_ptr cinfo, JDIMENSION rows)
{
JDIMENSION rows_left;
my_main_ptr main_ptr = (my_main_ptr)cinfo->main;
+ my_master_ptr master = (my_master_ptr)cinfo->master;
+
+ if (master->using_merged_upsample && cinfo->max_v_samp_factor == 2) {
+ read_and_discard_scanlines(cinfo, rows);
+ return;
+ }
/* Increment the counter to the next row group after the skipped rows. */
main_ptr->rowgroup_ctr += rows / cinfo->max_v_samp_factor;
@@ -382,21 +403,27 @@ jpeg_skip_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines)
{
my_main_ptr main_ptr = (my_main_ptr)cinfo->main;
my_coef_ptr coef = (my_coef_ptr)cinfo->coef;
+ my_master_ptr master = (my_master_ptr)cinfo->master;
my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
JDIMENSION i, x;
int y;
JDIMENSION lines_per_iMCU_row, lines_left_in_iMCU_row, lines_after_iMCU_row;
JDIMENSION lines_to_skip, lines_to_read;
+ /* Two-pass color quantization is not supported. */
+ if (cinfo->quantize_colors && cinfo->two_pass_quantize)
+ ERREXIT(cinfo, JERR_NOTIMPL);
+
if (cinfo->global_state != DSTATE_SCANNING)
ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
/* Do not skip past the bottom of the image. */
if (cinfo->output_scanline + num_lines >= cinfo->output_height) {
+ num_lines = cinfo->output_height - cinfo->output_scanline;
cinfo->output_scanline = cinfo->output_height;
(*cinfo->inputctl->finish_input_pass) (cinfo);
cinfo->inputctl->eoi_reached = TRUE;
- return cinfo->output_height - cinfo->output_scanline;
+ return num_lines;
}
if (num_lines == 0)
@@ -445,8 +472,10 @@ jpeg_skip_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines)
main_ptr->buffer_full = FALSE;
main_ptr->rowgroup_ctr = 0;
main_ptr->context_state = CTX_PREPARE_FOR_IMCU;
- upsample->next_row_out = cinfo->max_v_samp_factor;
- upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline;
+ if (!master->using_merged_upsample) {
+ upsample->next_row_out = cinfo->max_v_samp_factor;
+ upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline;
+ }
}
/* Skipping is much simpler when context rows are not required. */
@@ -458,8 +487,10 @@ jpeg_skip_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines)
cinfo->output_scanline += lines_left_in_iMCU_row;
main_ptr->buffer_full = FALSE;
main_ptr->rowgroup_ctr = 0;
- upsample->next_row_out = cinfo->max_v_samp_factor;
- upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline;
+ if (!master->using_merged_upsample) {
+ upsample->next_row_out = cinfo->max_v_samp_factor;
+ upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline;
+ }
}
}
@@ -494,7 +525,8 @@ jpeg_skip_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines)
cinfo->output_iMCU_row += lines_to_skip / lines_per_iMCU_row;
increment_simple_rowgroup_ctr(cinfo, lines_to_read);
}
- upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline;
+ if (!master->using_merged_upsample)
+ upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline;
return num_lines;
}
@@ -506,6 +538,8 @@ jpeg_skip_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines)
* decoded coefficients. This is ~5% faster for large subsets, but
* it's tough to tell a difference for smaller images.
*/
+ if (!cinfo->entropy->insufficient_data)
+ cinfo->master->last_good_iMCU_row = cinfo->input_iMCU_row;
(*cinfo->entropy->decode_mcu) (cinfo, NULL);
}
}
@@ -535,7 +569,8 @@ jpeg_skip_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines)
* bit odd, since "rows_to_go" seems to be redundantly keeping track of
* output_scanline.
*/
- upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline;
+ if (!master->using_merged_upsample)
+ upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline;
/* Always skip the requested number of lines. */
return num_lines;
diff --git a/src/3rdparty/libjpeg/src/jdarith.c b/src/3rdparty/libjpeg/src/jdarith.c
index 6002481e24..7f0d3a785c 100644
--- a/src/3rdparty/libjpeg/src/jdarith.c
+++ b/src/3rdparty/libjpeg/src/jdarith.c
@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software:
* Developed 1997-2015 by Guido Vollbeding.
* libjpeg-turbo Modifications:
- * Copyright (C) 2015-2018, D. R. Commander.
+ * Copyright (C) 2015-2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -80,7 +80,7 @@ get_byte(j_decompress_ptr cinfo)
if (!(*src->fill_input_buffer) (cinfo))
ERREXIT(cinfo, JERR_CANT_SUSPEND);
src->bytes_in_buffer--;
- return GETJOCTET(*src->next_input_byte++);
+ return *src->next_input_byte++;
}
@@ -665,8 +665,16 @@ bad:
for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
int coefi, cindex = cinfo->cur_comp_info[ci]->component_index;
int *coef_bit_ptr = &cinfo->coef_bits[cindex][0];
+ int *prev_coef_bit_ptr =
+ &cinfo->coef_bits[cindex + cinfo->num_components][0];
if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */
WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0);
+ for (coefi = MIN(cinfo->Ss, 1); coefi <= MAX(cinfo->Se, 9); coefi++) {
+ if (cinfo->input_scan_number > 1)
+ prev_coef_bit_ptr[coefi] = coef_bit_ptr[coefi];
+ else
+ prev_coef_bit_ptr[coefi] = 0;
+ }
for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) {
int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi];
if (cinfo->Ah != expected)
@@ -727,6 +735,7 @@ bad:
entropy->c = 0;
entropy->a = 0;
entropy->ct = -16; /* force reading 2 initial bytes to fill C */
+ entropy->pub.insufficient_data = FALSE;
/* Initialize restart counter */
entropy->restarts_to_go = cinfo->restart_interval;
@@ -763,7 +772,7 @@ jinit_arith_decoder(j_decompress_ptr cinfo)
int *coef_bit_ptr, ci;
cinfo->coef_bits = (int (*)[DCTSIZE2])
(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
- cinfo->num_components * DCTSIZE2 *
+ cinfo->num_components * 2 * DCTSIZE2 *
sizeof(int));
coef_bit_ptr = &cinfo->coef_bits[0][0];
for (ci = 0; ci < cinfo->num_components; ci++)
diff --git a/src/3rdparty/libjpeg/src/jdcoefct.c b/src/3rdparty/libjpeg/src/jdcoefct.c
index 723a9ac2be..15e6cded62 100644
--- a/src/3rdparty/libjpeg/src/jdcoefct.c
+++ b/src/3rdparty/libjpeg/src/jdcoefct.c
@@ -5,8 +5,8 @@
* Copyright (C) 1994-1997, Thomas G. Lane.
* libjpeg-turbo Modifications:
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
- * Copyright (C) 2010, 2015-2016, D. R. Commander.
- * Copyright (C) 2015, Google, Inc.
+ * Copyright (C) 2010, 2015-2016, 2019-2020, D. R. Commander.
+ * Copyright (C) 2015, 2020, Google, Inc.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -102,6 +102,8 @@ decompress_onepass(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
/* Try to fetch an MCU. Entropy decoder expects buffer to be zeroed. */
jzero_far((void *)coef->MCU_buffer[0],
(size_t)(cinfo->blocks_in_MCU * sizeof(JBLOCK)));
+ if (!cinfo->entropy->insufficient_data)
+ cinfo->master->last_good_iMCU_row = cinfo->input_iMCU_row;
if (!(*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
/* Suspension forced; update state counters and exit */
coef->MCU_vert_offset = yoffset;
@@ -227,6 +229,8 @@ consume_data(j_decompress_ptr cinfo)
}
}
}
+ if (!cinfo->entropy->insufficient_data)
+ cinfo->master->last_good_iMCU_row = cinfo->input_iMCU_row;
/* Try to fetch the MCU. */
if (!(*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
/* Suspension forced; update state counters and exit */
@@ -326,19 +330,22 @@ decompress_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
#ifdef BLOCK_SMOOTHING_SUPPORTED
/*
- * This code applies interblock smoothing as described by section K.8
- * of the JPEG standard: the first 5 AC coefficients are estimated from
- * the DC values of a DCT block and its 8 neighboring blocks.
+ * This code applies interblock smoothing; the first 9 AC coefficients are
+ * estimated from the DC values of a DCT block and its 24 neighboring blocks.
* We apply smoothing only for progressive JPEG decoding, and only if
* the coefficients it can estimate are not yet known to full precision.
*/
-/* Natural-order array positions of the first 5 zigzag-order coefficients */
+/* Natural-order array positions of the first 9 zigzag-order coefficients */
#define Q01_POS 1
#define Q10_POS 8
#define Q20_POS 16
#define Q11_POS 9
#define Q02_POS 2
+#define Q03_POS 3
+#define Q12_POS 10
+#define Q21_POS 17
+#define Q30_POS 24
/*
* Determine whether block smoothing is applicable and safe.
@@ -356,8 +363,8 @@ smoothing_ok(j_decompress_ptr cinfo)
int ci, coefi;
jpeg_component_info *compptr;
JQUANT_TBL *qtable;
- int *coef_bits;
- int *coef_bits_latch;
+ int *coef_bits, *prev_coef_bits;
+ int *coef_bits_latch, *prev_coef_bits_latch;
if (!cinfo->progressive_mode || cinfo->coef_bits == NULL)
return FALSE;
@@ -366,34 +373,47 @@ smoothing_ok(j_decompress_ptr cinfo)
if (coef->coef_bits_latch == NULL)
coef->coef_bits_latch = (int *)
(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
- cinfo->num_components *
+ cinfo->num_components * 2 *
(SAVED_COEFS * sizeof(int)));
coef_bits_latch = coef->coef_bits_latch;
+ prev_coef_bits_latch =
+ &coef->coef_bits_latch[cinfo->num_components * SAVED_COEFS];
for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
ci++, compptr++) {
/* All components' quantization values must already be latched. */
if ((qtable = compptr->quant_table) == NULL)
return FALSE;
- /* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */
+ /* Verify DC & first 9 AC quantizers are nonzero to avoid zero-divide. */
if (qtable->quantval[0] == 0 ||
qtable->quantval[Q01_POS] == 0 ||
qtable->quantval[Q10_POS] == 0 ||
qtable->quantval[Q20_POS] == 0 ||
qtable->quantval[Q11_POS] == 0 ||
- qtable->quantval[Q02_POS] == 0)
+ qtable->quantval[Q02_POS] == 0 ||
+ qtable->quantval[Q03_POS] == 0 ||
+ qtable->quantval[Q12_POS] == 0 ||
+ qtable->quantval[Q21_POS] == 0 ||
+ qtable->quantval[Q30_POS] == 0)
return FALSE;
/* DC values must be at least partly known for all components. */
coef_bits = cinfo->coef_bits[ci];
+ prev_coef_bits = cinfo->coef_bits[ci + cinfo->num_components];
if (coef_bits[0] < 0)
return FALSE;
+ coef_bits_latch[0] = coef_bits[0];
/* Block smoothing is helpful if some AC coefficients remain inaccurate. */
- for (coefi = 1; coefi <= 5; coefi++) {
+ for (coefi = 1; coefi < SAVED_COEFS; coefi++) {
+ if (cinfo->input_scan_number > 1)
+ prev_coef_bits_latch[coefi] = prev_coef_bits[coefi];
+ else
+ prev_coef_bits_latch[coefi] = -1;
coef_bits_latch[coefi] = coef_bits[coefi];
if (coef_bits[coefi] != 0)
smoothing_useful = TRUE;
}
coef_bits_latch += SAVED_COEFS;
+ prev_coef_bits_latch += SAVED_COEFS;
}
return smoothing_useful;
@@ -412,17 +432,20 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
JDIMENSION block_num, last_block_column;
int ci, block_row, block_rows, access_rows;
JBLOCKARRAY buffer;
- JBLOCKROW buffer_ptr, prev_block_row, next_block_row;
+ JBLOCKROW buffer_ptr, prev_prev_block_row, prev_block_row;
+ JBLOCKROW next_block_row, next_next_block_row;
JSAMPARRAY output_ptr;
JDIMENSION output_col;
jpeg_component_info *compptr;
inverse_DCT_method_ptr inverse_DCT;
- boolean first_row, last_row;
+ boolean change_dc;
JCOEF *workspace;
int *coef_bits;
JQUANT_TBL *quanttbl;
- JLONG Q00, Q01, Q02, Q10, Q11, Q20, num;
- int DC1, DC2, DC3, DC4, DC5, DC6, DC7, DC8, DC9;
+ JLONG Q00, Q01, Q02, Q03 = 0, Q10, Q11, Q12 = 0, Q20, Q21 = 0, Q30 = 0, num;
+ int DC01, DC02, DC03, DC04, DC05, DC06, DC07, DC08, DC09, DC10, DC11, DC12,
+ DC13, DC14, DC15, DC16, DC17, DC18, DC19, DC20, DC21, DC22, DC23, DC24,
+ DC25;
int Al, pred;
/* Keep a local variable to avoid looking it up more than once */
@@ -434,10 +457,10 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
if (cinfo->input_scan_number == cinfo->output_scan_number) {
/* If input is working on current scan, we ordinarily want it to
* have completed the current row. But if input scan is DC,
- * we want it to keep one row ahead so that next block row's DC
+ * we want it to keep two rows ahead so that next two block rows' DC
* values are up to date.
*/
- JDIMENSION delta = (cinfo->Ss == 0) ? 1 : 0;
+ JDIMENSION delta = (cinfo->Ss == 0) ? 2 : 0;
if (cinfo->input_iMCU_row > cinfo->output_iMCU_row + delta)
break;
}
@@ -452,34 +475,53 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
if (!compptr->component_needed)
continue;
/* Count non-dummy DCT block rows in this iMCU row. */
- if (cinfo->output_iMCU_row < last_iMCU_row) {
+ if (cinfo->output_iMCU_row < last_iMCU_row - 1) {
+ block_rows = compptr->v_samp_factor;
+ access_rows = block_rows * 3; /* this and next two iMCU rows */
+ } else if (cinfo->output_iMCU_row < last_iMCU_row) {
block_rows = compptr->v_samp_factor;
access_rows = block_rows * 2; /* this and next iMCU row */
- last_row = FALSE;
} else {
/* NB: can't use last_row_height here; it is input-side-dependent! */
block_rows = (int)(compptr->height_in_blocks % compptr->v_samp_factor);
if (block_rows == 0) block_rows = compptr->v_samp_factor;
access_rows = block_rows; /* this iMCU row only */
- last_row = TRUE;
}
/* Align the virtual buffer for this component. */
- if (cinfo->output_iMCU_row > 0) {
- access_rows += compptr->v_samp_factor; /* prior iMCU row too */
+ if (cinfo->output_iMCU_row > 1) {
+ access_rows += 2 * compptr->v_samp_factor; /* prior two iMCU rows too */
+ buffer = (*cinfo->mem->access_virt_barray)
+ ((j_common_ptr)cinfo, coef->whole_image[ci],
+ (cinfo->output_iMCU_row - 2) * compptr->v_samp_factor,
+ (JDIMENSION)access_rows, FALSE);
+ buffer += 2 * compptr->v_samp_factor; /* point to current iMCU row */
+ } else if (cinfo->output_iMCU_row > 0) {
buffer = (*cinfo->mem->access_virt_barray)
((j_common_ptr)cinfo, coef->whole_image[ci],
(cinfo->output_iMCU_row - 1) * compptr->v_samp_factor,
(JDIMENSION)access_rows, FALSE);
buffer += compptr->v_samp_factor; /* point to current iMCU row */
- first_row = FALSE;
} else {
buffer = (*cinfo->mem->access_virt_barray)
((j_common_ptr)cinfo, coef->whole_image[ci],
(JDIMENSION)0, (JDIMENSION)access_rows, FALSE);
- first_row = TRUE;
}
- /* Fetch component-dependent info */
- coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS);
+ /* Fetch component-dependent info.
+ * If the current scan is incomplete, then we use the component-dependent
+ * info from the previous scan.
+ */
+ if (cinfo->output_iMCU_row > cinfo->master->last_good_iMCU_row)
+ coef_bits =
+ coef->coef_bits_latch + ((ci + cinfo->num_components) * SAVED_COEFS);
+ else
+ coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS);
+
+ /* We only do DC interpolation if no AC coefficient data is available. */
+ change_dc =
+ coef_bits[1] == -1 && coef_bits[2] == -1 && coef_bits[3] == -1 &&
+ coef_bits[4] == -1 && coef_bits[5] == -1 && coef_bits[6] == -1 &&
+ coef_bits[7] == -1 && coef_bits[8] == -1 && coef_bits[9] == -1;
+
quanttbl = compptr->quant_table;
Q00 = quanttbl->quantval[0];
Q01 = quanttbl->quantval[Q01_POS];
@@ -487,25 +529,51 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
Q20 = quanttbl->quantval[Q20_POS];
Q11 = quanttbl->quantval[Q11_POS];
Q02 = quanttbl->quantval[Q02_POS];
+ if (change_dc) {
+ Q03 = quanttbl->quantval[Q03_POS];
+ Q12 = quanttbl->quantval[Q12_POS];
+ Q21 = quanttbl->quantval[Q21_POS];
+ Q30 = quanttbl->quantval[Q30_POS];
+ }
inverse_DCT = cinfo->idct->inverse_DCT[ci];
output_ptr = output_buf[ci];
/* Loop over all DCT blocks to be processed. */
for (block_row = 0; block_row < block_rows; block_row++) {
buffer_ptr = buffer[block_row] + cinfo->master->first_MCU_col[ci];
- if (first_row && block_row == 0)
+
+ if (block_row > 0 || cinfo->output_iMCU_row > 0)
+ prev_block_row =
+ buffer[block_row - 1] + cinfo->master->first_MCU_col[ci];
+ else
prev_block_row = buffer_ptr;
+
+ if (block_row > 1 || cinfo->output_iMCU_row > 1)
+ prev_prev_block_row =
+ buffer[block_row - 2] + cinfo->master->first_MCU_col[ci];
+ else
+ prev_prev_block_row = prev_block_row;
+
+ if (block_row < block_rows - 1 || cinfo->output_iMCU_row < last_iMCU_row)
+ next_block_row =
+ buffer[block_row + 1] + cinfo->master->first_MCU_col[ci];
else
- prev_block_row = buffer[block_row - 1];
- if (last_row && block_row == block_rows - 1)
next_block_row = buffer_ptr;
+
+ if (block_row < block_rows - 2 ||
+ cinfo->output_iMCU_row < last_iMCU_row - 1)
+ next_next_block_row =
+ buffer[block_row + 2] + cinfo->master->first_MCU_col[ci];
else
- next_block_row = buffer[block_row + 1];
+ next_next_block_row = next_block_row;
+
/* We fetch the surrounding DC values using a sliding-register approach.
- * Initialize all nine here so as to do the right thing on narrow pics.
+ * Initialize all 25 here so as to do the right thing on narrow pics.
*/
- DC1 = DC2 = DC3 = (int)prev_block_row[0][0];
- DC4 = DC5 = DC6 = (int)buffer_ptr[0][0];
- DC7 = DC8 = DC9 = (int)next_block_row[0][0];
+ DC01 = DC02 = DC03 = DC04 = DC05 = (int)prev_prev_block_row[0][0];
+ DC06 = DC07 = DC08 = DC09 = DC10 = (int)prev_block_row[0][0];
+ DC11 = DC12 = DC13 = DC14 = DC15 = (int)buffer_ptr[0][0];
+ DC16 = DC17 = DC18 = DC19 = DC20 = (int)next_block_row[0][0];
+ DC21 = DC22 = DC23 = DC24 = DC25 = (int)next_next_block_row[0][0];
output_col = 0;
last_block_column = compptr->width_in_blocks - 1;
for (block_num = cinfo->master->first_MCU_col[ci];
@@ -513,18 +581,39 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
/* Fetch current DCT block into workspace so we can modify it. */
jcopy_block_row(buffer_ptr, (JBLOCKROW)workspace, (JDIMENSION)1);
/* Update DC values */
- if (block_num < last_block_column) {
- DC3 = (int)prev_block_row[1][0];
- DC6 = (int)buffer_ptr[1][0];
- DC9 = (int)next_block_row[1][0];
+ if (block_num == cinfo->master->first_MCU_col[ci] &&
+ block_num < last_block_column) {
+ DC04 = (int)prev_prev_block_row[1][0];
+ DC09 = (int)prev_block_row[1][0];
+ DC14 = (int)buffer_ptr[1][0];
+ DC19 = (int)next_block_row[1][0];
+ DC24 = (int)next_next_block_row[1][0];
}
- /* Compute coefficient estimates per K.8.
- * An estimate is applied only if coefficient is still zero,
- * and is not known to be fully accurate.
+ if (block_num + 1 < last_block_column) {
+ DC05 = (int)prev_prev_block_row[2][0];
+ DC10 = (int)prev_block_row[2][0];
+ DC15 = (int)buffer_ptr[2][0];
+ DC20 = (int)next_block_row[2][0];
+ DC25 = (int)next_next_block_row[2][0];
+ }
+ /* If DC interpolation is enabled, compute coefficient estimates using
+ * a Gaussian-like kernel, keeping the averages of the DC values.
+ *
+ * If DC interpolation is disabled, compute coefficient estimates using
+ * an algorithm similar to the one described in Section K.8 of the JPEG
+ * standard, except applied to a 5x5 window rather than a 3x3 window.
+ *
+ * An estimate is applied only if the coefficient is still zero and is
+ * not known to be fully accurate.
*/
/* AC01 */
if ((Al = coef_bits[1]) != 0 && workspace[1] == 0) {
- num = 36 * Q00 * (DC4 - DC6);
+ num = Q00 * (change_dc ?
+ (-DC01 - DC02 + DC04 + DC05 - 3 * DC06 + 13 * DC07 -
+ 13 * DC09 + 3 * DC10 - 3 * DC11 + 38 * DC12 - 38 * DC14 +
+ 3 * DC15 - 3 * DC16 + 13 * DC17 - 13 * DC19 + 3 * DC20 -
+ DC21 - DC22 + DC24 + DC25) :
+ (-7 * DC11 + 50 * DC12 - 50 * DC14 + 7 * DC15));
if (num >= 0) {
pred = (int)(((Q01 << 7) + num) / (Q01 << 8));
if (Al > 0 && pred >= (1 << Al))
@@ -539,7 +628,12 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
}
/* AC10 */
if ((Al = coef_bits[2]) != 0 && workspace[8] == 0) {
- num = 36 * Q00 * (DC2 - DC8);
+ num = Q00 * (change_dc ?
+ (-DC01 - 3 * DC02 - 3 * DC03 - 3 * DC04 - DC05 - DC06 +
+ 13 * DC07 + 38 * DC08 + 13 * DC09 - DC10 + DC16 -
+ 13 * DC17 - 38 * DC18 - 13 * DC19 + DC20 + DC21 +
+ 3 * DC22 + 3 * DC23 + 3 * DC24 + DC25) :
+ (-7 * DC03 + 50 * DC08 - 50 * DC18 + 7 * DC23));
if (num >= 0) {
pred = (int)(((Q10 << 7) + num) / (Q10 << 8));
if (Al > 0 && pred >= (1 << Al))
@@ -554,7 +648,10 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
}
/* AC20 */
if ((Al = coef_bits[3]) != 0 && workspace[16] == 0) {
- num = 9 * Q00 * (DC2 + DC8 - 2 * DC5);
+ num = Q00 * (change_dc ?
+ (DC03 + 2 * DC07 + 7 * DC08 + 2 * DC09 - 5 * DC12 - 14 * DC13 -
+ 5 * DC14 + 2 * DC17 + 7 * DC18 + 2 * DC19 + DC23) :
+ (-DC03 + 13 * DC08 - 24 * DC13 + 13 * DC18 - DC23));
if (num >= 0) {
pred = (int)(((Q20 << 7) + num) / (Q20 << 8));
if (Al > 0 && pred >= (1 << Al))
@@ -569,7 +666,11 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
}
/* AC11 */
if ((Al = coef_bits[4]) != 0 && workspace[9] == 0) {
- num = 5 * Q00 * (DC1 - DC3 - DC7 + DC9);
+ num = Q00 * (change_dc ?
+ (-DC01 + DC05 + 9 * DC07 - 9 * DC09 - 9 * DC17 +
+ 9 * DC19 + DC21 - DC25) :
+ (DC10 + DC16 - 10 * DC17 + 10 * DC19 - DC02 - DC20 + DC22 -
+ DC24 + DC04 - DC06 + 10 * DC07 - 10 * DC09));
if (num >= 0) {
pred = (int)(((Q11 << 7) + num) / (Q11 << 8));
if (Al > 0 && pred >= (1 << Al))
@@ -584,7 +685,10 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
}
/* AC02 */
if ((Al = coef_bits[5]) != 0 && workspace[2] == 0) {
- num = 9 * Q00 * (DC4 + DC6 - 2 * DC5);
+ num = Q00 * (change_dc ?
+ (2 * DC07 - 5 * DC08 + 2 * DC09 + DC11 + 7 * DC12 - 14 * DC13 +
+ 7 * DC14 + DC15 + 2 * DC17 - 5 * DC18 + 2 * DC19) :
+ (-DC11 + 13 * DC12 - 24 * DC13 + 13 * DC14 - DC15));
if (num >= 0) {
pred = (int)(((Q02 << 7) + num) / (Q02 << 8));
if (Al > 0 && pred >= (1 << Al))
@@ -597,14 +701,96 @@ decompress_smooth_data(j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
}
workspace[2] = (JCOEF)pred;
}
+ if (change_dc) {
+ /* AC03 */
+ if ((Al = coef_bits[6]) != 0 && workspace[3] == 0) {
+ num = Q00 * (DC07 - DC09 + 2 * DC12 - 2 * DC14 + DC17 - DC19);
+ if (num >= 0) {
+ pred = (int)(((Q03 << 7) + num) / (Q03 << 8));
+ if (Al > 0 && pred >= (1 << Al))
+ pred = (1 << Al) - 1;
+ } else {
+ pred = (int)(((Q03 << 7) - num) / (Q03 << 8));
+ if (Al > 0 && pred >= (1 << Al))
+ pred = (1 << Al) - 1;
+ pred = -pred;
+ }
+ workspace[3] = (JCOEF)pred;
+ }
+ /* AC12 */
+ if ((Al = coef_bits[7]) != 0 && workspace[10] == 0) {
+ num = Q00 * (DC07 - 3 * DC08 + DC09 - DC17 + 3 * DC18 - DC19);
+ if (num >= 0) {
+ pred = (int)(((Q12 << 7) + num) / (Q12 << 8));
+ if (Al > 0 && pred >= (1 << Al))
+ pred = (1 << Al) - 1;
+ } else {
+ pred = (int)(((Q12 << 7) - num) / (Q12 << 8));
+ if (Al > 0 && pred >= (1 << Al))
+ pred = (1 << Al) - 1;
+ pred = -pred;
+ }
+ workspace[10] = (JCOEF)pred;
+ }
+ /* AC21 */
+ if ((Al = coef_bits[8]) != 0 && workspace[17] == 0) {
+ num = Q00 * (DC07 - DC09 - 3 * DC12 + 3 * DC14 + DC17 - DC19);
+ if (num >= 0) {
+ pred = (int)(((Q21 << 7) + num) / (Q21 << 8));
+ if (Al > 0 && pred >= (1 << Al))
+ pred = (1 << Al) - 1;
+ } else {
+ pred = (int)(((Q21 << 7) - num) / (Q21 << 8));
+ if (Al > 0 && pred >= (1 << Al))
+ pred = (1 << Al) - 1;
+ pred = -pred;
+ }
+ workspace[17] = (JCOEF)pred;
+ }
+ /* AC30 */
+ if ((Al = coef_bits[9]) != 0 && workspace[24] == 0) {
+ num = Q00 * (DC07 + 2 * DC08 + DC09 - DC17 - 2 * DC18 - DC19);
+ if (num >= 0) {
+ pred = (int)(((Q30 << 7) + num) / (Q30 << 8));
+ if (Al > 0 && pred >= (1 << Al))
+ pred = (1 << Al) - 1;
+ } else {
+ pred = (int)(((Q30 << 7) - num) / (Q30 << 8));
+ if (Al > 0 && pred >= (1 << Al))
+ pred = (1 << Al) - 1;
+ pred = -pred;
+ }
+ workspace[24] = (JCOEF)pred;
+ }
+ /* coef_bits[0] is non-negative. Otherwise this function would not
+ * be called.
+ */
+ num = Q00 *
+ (-2 * DC01 - 6 * DC02 - 8 * DC03 - 6 * DC04 - 2 * DC05 -
+ 6 * DC06 + 6 * DC07 + 42 * DC08 + 6 * DC09 - 6 * DC10 -
+ 8 * DC11 + 42 * DC12 + 152 * DC13 + 42 * DC14 - 8 * DC15 -
+ 6 * DC16 + 6 * DC17 + 42 * DC18 + 6 * DC19 - 6 * DC20 -
+ 2 * DC21 - 6 * DC22 - 8 * DC23 - 6 * DC24 - 2 * DC25);
+ if (num >= 0) {
+ pred = (int)(((Q00 << 7) + num) / (Q00 << 8));
+ } else {
+ pred = (int)(((Q00 << 7) - num) / (Q00 << 8));
+ pred = -pred;
+ }
+ workspace[0] = (JCOEF)pred;
+ } /* change_dc */
+
/* OK, do the IDCT */
(*inverse_DCT) (cinfo, compptr, (JCOEFPTR)workspace, output_ptr,
output_col);
/* Advance for next column */
- DC1 = DC2; DC2 = DC3;
- DC4 = DC5; DC5 = DC6;
- DC7 = DC8; DC8 = DC9;
- buffer_ptr++, prev_block_row++, next_block_row++;
+ DC01 = DC02; DC02 = DC03; DC03 = DC04; DC04 = DC05;
+ DC06 = DC07; DC07 = DC08; DC08 = DC09; DC09 = DC10;
+ DC11 = DC12; DC12 = DC13; DC13 = DC14; DC14 = DC15;
+ DC16 = DC17; DC17 = DC18; DC18 = DC19; DC19 = DC20;
+ DC21 = DC22; DC22 = DC23; DC23 = DC24; DC24 = DC25;
+ buffer_ptr++, prev_block_row++, next_block_row++,
+ prev_prev_block_row++, next_next_block_row++;
output_col += compptr->_DCT_scaled_size;
}
output_ptr += compptr->_DCT_scaled_size;
@@ -653,7 +839,7 @@ jinit_d_coef_controller(j_decompress_ptr cinfo, boolean need_full_buffer)
#ifdef BLOCK_SMOOTHING_SUPPORTED
/* If block smoothing could be used, need a bigger window */
if (cinfo->progressive_mode)
- access_rows *= 3;
+ access_rows *= 5;
#endif
coef->whole_image[ci] = (*cinfo->mem->request_virt_barray)
((j_common_ptr)cinfo, JPOOL_IMAGE, TRUE,
diff --git a/src/3rdparty/libjpeg/src/jdcoefct.h b/src/3rdparty/libjpeg/src/jdcoefct.h
index c4d1943dd4..9a0e780663 100644
--- a/src/3rdparty/libjpeg/src/jdcoefct.h
+++ b/src/3rdparty/libjpeg/src/jdcoefct.h
@@ -5,6 +5,7 @@
* Copyright (C) 1994-1997, Thomas G. Lane.
* libjpeg-turbo Modifications:
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
+ * Copyright (C) 2020, Google, Inc.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*/
@@ -51,7 +52,7 @@ typedef struct {
#ifdef BLOCK_SMOOTHING_SUPPORTED
/* When doing block smoothing, we latch coefficient Al values here */
int *coef_bits_latch;
-#define SAVED_COEFS 6 /* we save coef_bits[0..5] */
+#define SAVED_COEFS 10 /* we save coef_bits[0..9] */
#endif
} my_coef_controller;
diff --git a/src/3rdparty/libjpeg/src/jdcol565.c b/src/3rdparty/libjpeg/src/jdcol565.c
index 40068ef84f..53c7bd9187 100644
--- a/src/3rdparty/libjpeg/src/jdcol565.c
+++ b/src/3rdparty/libjpeg/src/jdcol565.c
@@ -45,9 +45,9 @@ ycc_rgb565_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
outptr = *output_buf++;
if (PACK_NEED_ALIGNMENT(outptr)) {
- y = GETJSAMPLE(*inptr0++);
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ y = *inptr0++;
+ cb = *inptr1++;
+ cr = *inptr2++;
r = range_limit[y + Crrtab[cr]];
g = range_limit[y + ((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
SCALEBITS))];
@@ -58,18 +58,18 @@ ycc_rgb565_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
num_cols--;
}
for (col = 0; col < (num_cols >> 1); col++) {
- y = GETJSAMPLE(*inptr0++);
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ y = *inptr0++;
+ cb = *inptr1++;
+ cr = *inptr2++;
r = range_limit[y + Crrtab[cr]];
g = range_limit[y + ((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
SCALEBITS))];
b = range_limit[y + Cbbtab[cb]];
rgb = PACK_SHORT_565(r, g, b);
- y = GETJSAMPLE(*inptr0++);
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ y = *inptr0++;
+ cb = *inptr1++;
+ cr = *inptr2++;
r = range_limit[y + Crrtab[cr]];
g = range_limit[y + ((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
SCALEBITS))];
@@ -80,9 +80,9 @@ ycc_rgb565_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
outptr += 4;
}
if (num_cols & 1) {
- y = GETJSAMPLE(*inptr0);
- cb = GETJSAMPLE(*inptr1);
- cr = GETJSAMPLE(*inptr2);
+ y = *inptr0;
+ cb = *inptr1;
+ cr = *inptr2;
r = range_limit[y + Crrtab[cr]];
g = range_limit[y + ((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
SCALEBITS))];
@@ -125,9 +125,9 @@ ycc_rgb565D_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
input_row++;
outptr = *output_buf++;
if (PACK_NEED_ALIGNMENT(outptr)) {
- y = GETJSAMPLE(*inptr0++);
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ y = *inptr0++;
+ cb = *inptr1++;
+ cr = *inptr2++;
r = range_limit[DITHER_565_R(y + Crrtab[cr], d0)];
g = range_limit[DITHER_565_G(y +
((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
@@ -139,9 +139,9 @@ ycc_rgb565D_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
num_cols--;
}
for (col = 0; col < (num_cols >> 1); col++) {
- y = GETJSAMPLE(*inptr0++);
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ y = *inptr0++;
+ cb = *inptr1++;
+ cr = *inptr2++;
r = range_limit[DITHER_565_R(y + Crrtab[cr], d0)];
g = range_limit[DITHER_565_G(y +
((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
@@ -150,9 +150,9 @@ ycc_rgb565D_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
d0 = DITHER_ROTATE(d0);
rgb = PACK_SHORT_565(r, g, b);
- y = GETJSAMPLE(*inptr0++);
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ y = *inptr0++;
+ cb = *inptr1++;
+ cr = *inptr2++;
r = range_limit[DITHER_565_R(y + Crrtab[cr], d0)];
g = range_limit[DITHER_565_G(y +
((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
@@ -165,9 +165,9 @@ ycc_rgb565D_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
outptr += 4;
}
if (num_cols & 1) {
- y = GETJSAMPLE(*inptr0);
- cb = GETJSAMPLE(*inptr1);
- cr = GETJSAMPLE(*inptr2);
+ y = *inptr0;
+ cb = *inptr1;
+ cr = *inptr2;
r = range_limit[DITHER_565_R(y + Crrtab[cr], d0)];
g = range_limit[DITHER_565_G(y +
((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
@@ -202,32 +202,32 @@ rgb_rgb565_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
input_row++;
outptr = *output_buf++;
if (PACK_NEED_ALIGNMENT(outptr)) {
- r = GETJSAMPLE(*inptr0++);
- g = GETJSAMPLE(*inptr1++);
- b = GETJSAMPLE(*inptr2++);
+ r = *inptr0++;
+ g = *inptr1++;
+ b = *inptr2++;
rgb = PACK_SHORT_565(r, g, b);
*(INT16 *)outptr = (INT16)rgb;
outptr += 2;
num_cols--;
}
for (col = 0; col < (num_cols >> 1); col++) {
- r = GETJSAMPLE(*inptr0++);
- g = GETJSAMPLE(*inptr1++);
- b = GETJSAMPLE(*inptr2++);
+ r = *inptr0++;
+ g = *inptr1++;
+ b = *inptr2++;
rgb = PACK_SHORT_565(r, g, b);
- r = GETJSAMPLE(*inptr0++);
- g = GETJSAMPLE(*inptr1++);
- b = GETJSAMPLE(*inptr2++);
+ r = *inptr0++;
+ g = *inptr1++;
+ b = *inptr2++;
rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b));
WRITE_TWO_ALIGNED_PIXELS(outptr, rgb);
outptr += 4;
}
if (num_cols & 1) {
- r = GETJSAMPLE(*inptr0);
- g = GETJSAMPLE(*inptr1);
- b = GETJSAMPLE(*inptr2);
+ r = *inptr0;
+ g = *inptr1;
+ b = *inptr2;
rgb = PACK_SHORT_565(r, g, b);
*(INT16 *)outptr = (INT16)rgb;
}
@@ -259,24 +259,24 @@ rgb_rgb565D_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
input_row++;
outptr = *output_buf++;
if (PACK_NEED_ALIGNMENT(outptr)) {
- r = range_limit[DITHER_565_R(GETJSAMPLE(*inptr0++), d0)];
- g = range_limit[DITHER_565_G(GETJSAMPLE(*inptr1++), d0)];
- b = range_limit[DITHER_565_B(GETJSAMPLE(*inptr2++), d0)];
+ r = range_limit[DITHER_565_R(*inptr0++, d0)];
+ g = range_limit[DITHER_565_G(*inptr1++, d0)];
+ b = range_limit[DITHER_565_B(*inptr2++, d0)];
rgb = PACK_SHORT_565(r, g, b);
*(INT16 *)outptr = (INT16)rgb;
outptr += 2;
num_cols--;
}
for (col = 0; col < (num_cols >> 1); col++) {
- r = range_limit[DITHER_565_R(GETJSAMPLE(*inptr0++), d0)];
- g = range_limit[DITHER_565_G(GETJSAMPLE(*inptr1++), d0)];
- b = range_limit[DITHER_565_B(GETJSAMPLE(*inptr2++), d0)];
+ r = range_limit[DITHER_565_R(*inptr0++, d0)];
+ g = range_limit[DITHER_565_G(*inptr1++, d0)];
+ b = range_limit[DITHER_565_B(*inptr2++, d0)];
d0 = DITHER_ROTATE(d0);
rgb = PACK_SHORT_565(r, g, b);
- r = range_limit[DITHER_565_R(GETJSAMPLE(*inptr0++), d0)];
- g = range_limit[DITHER_565_G(GETJSAMPLE(*inptr1++), d0)];
- b = range_limit[DITHER_565_B(GETJSAMPLE(*inptr2++), d0)];
+ r = range_limit[DITHER_565_R(*inptr0++, d0)];
+ g = range_limit[DITHER_565_G(*inptr1++, d0)];
+ b = range_limit[DITHER_565_B(*inptr2++, d0)];
d0 = DITHER_ROTATE(d0);
rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b));
@@ -284,9 +284,9 @@ rgb_rgb565D_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
outptr += 4;
}
if (num_cols & 1) {
- r = range_limit[DITHER_565_R(GETJSAMPLE(*inptr0), d0)];
- g = range_limit[DITHER_565_G(GETJSAMPLE(*inptr1), d0)];
- b = range_limit[DITHER_565_B(GETJSAMPLE(*inptr2), d0)];
+ r = range_limit[DITHER_565_R(*inptr0, d0)];
+ g = range_limit[DITHER_565_G(*inptr1, d0)];
+ b = range_limit[DITHER_565_B(*inptr2, d0)];
rgb = PACK_SHORT_565(r, g, b);
*(INT16 *)outptr = (INT16)rgb;
}
diff --git a/src/3rdparty/libjpeg/src/jdcolext.c b/src/3rdparty/libjpeg/src/jdcolext.c
index 72a5301070..863c7a2fbc 100644
--- a/src/3rdparty/libjpeg/src/jdcolext.c
+++ b/src/3rdparty/libjpeg/src/jdcolext.c
@@ -53,9 +53,9 @@ ycc_rgb_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
input_row++;
outptr = *output_buf++;
for (col = 0; col < num_cols; col++) {
- y = GETJSAMPLE(inptr0[col]);
- cb = GETJSAMPLE(inptr1[col]);
- cr = GETJSAMPLE(inptr2[col]);
+ y = inptr0[col];
+ cb = inptr1[col];
+ cr = inptr2[col];
/* Range-limiting is essential due to noise introduced by DCT losses. */
outptr[RGB_RED] = range_limit[y + Crrtab[cr]];
outptr[RGB_GREEN] = range_limit[y +
@@ -93,7 +93,6 @@ gray_rgb_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
inptr = input_buf[0][input_row++];
outptr = *output_buf++;
for (col = 0; col < num_cols; col++) {
- /* We can dispense with GETJSAMPLE() here */
outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col];
/* Set unused byte to 0xFF so it can be interpreted as an opaque */
/* alpha channel value */
@@ -128,7 +127,6 @@ rgb_rgb_convert_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
input_row++;
outptr = *output_buf++;
for (col = 0; col < num_cols; col++) {
- /* We can dispense with GETJSAMPLE() here */
outptr[RGB_RED] = inptr0[col];
outptr[RGB_GREEN] = inptr1[col];
outptr[RGB_BLUE] = inptr2[col];
diff --git a/src/3rdparty/libjpeg/src/jdcolor.c b/src/3rdparty/libjpeg/src/jdcolor.c
index dc0e3b6c0e..8da2b4eaf2 100644
--- a/src/3rdparty/libjpeg/src/jdcolor.c
+++ b/src/3rdparty/libjpeg/src/jdcolor.c
@@ -341,9 +341,9 @@ rgb_gray_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
input_row++;
outptr = *output_buf++;
for (col = 0; col < num_cols; col++) {
- r = GETJSAMPLE(inptr0[col]);
- g = GETJSAMPLE(inptr1[col]);
- b = GETJSAMPLE(inptr2[col]);
+ r = inptr0[col];
+ g = inptr1[col];
+ b = inptr2[col];
/* Y */
outptr[col] = (JSAMPLE)((ctab[r + R_Y_OFF] + ctab[g + G_Y_OFF] +
ctab[b + B_Y_OFF]) >> SCALEBITS);
@@ -550,9 +550,9 @@ ycck_cmyk_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
input_row++;
outptr = *output_buf++;
for (col = 0; col < num_cols; col++) {
- y = GETJSAMPLE(inptr0[col]);
- cb = GETJSAMPLE(inptr1[col]);
- cr = GETJSAMPLE(inptr2[col]);
+ y = inptr0[col];
+ cb = inptr1[col];
+ cr = inptr2[col];
/* Range-limiting is essential due to noise introduced by DCT losses. */
outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */
outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */
@@ -560,7 +560,7 @@ ycck_cmyk_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
SCALEBITS)))];
outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])]; /* blue */
/* K passes through unchanged */
- outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */
+ outptr[3] = inptr3[col];
outptr += 4;
}
}
@@ -571,11 +571,10 @@ ycck_cmyk_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
* RGB565 conversion
*/
-#define PACK_SHORT_565_LE(r, g, b) ((((r) << 8) & 0xF800) | \
- (((g) << 3) & 0x7E0) | ((b) >> 3))
-#define PACK_SHORT_565_BE(r, g, b) (((r) & 0xF8) | ((g) >> 5) | \
- (((g) << 11) & 0xE000) | \
- (((b) << 5) & 0x1F00))
+#define PACK_SHORT_565_LE(r, g, b) \
+ ((((r) << 8) & 0xF800) | (((g) << 3) & 0x7E0) | ((b) >> 3))
+#define PACK_SHORT_565_BE(r, g, b) \
+ (((r) & 0xF8) | ((g) >> 5) | (((g) << 11) & 0xE000) | (((b) << 5) & 0x1F00))
#define PACK_TWO_PIXELS_LE(l, r) ((r << 16) | l)
#define PACK_TWO_PIXELS_BE(l, r) ((l << 16) | r)
diff --git a/src/3rdparty/libjpeg/src/jdhuff.c b/src/3rdparty/libjpeg/src/jdhuff.c
index a1128178b0..f786c10547 100644
--- a/src/3rdparty/libjpeg/src/jdhuff.c
+++ b/src/3rdparty/libjpeg/src/jdhuff.c
@@ -5,6 +5,7 @@
* Copyright (C) 1991-1997, Thomas G. Lane.
* libjpeg-turbo Modifications:
* Copyright (C) 2009-2011, 2016, 2018-2019, D. R. Commander.
+ * Copyright (C) 2018, Matthias Räncker.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -39,24 +40,6 @@ typedef struct {
int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
} savable_state;
-/* This macro is to work around compilers with missing or broken
- * structure assignment. You'll need to fix this code if you have
- * such a compiler and you change MAX_COMPS_IN_SCAN.
- */
-
-#ifndef NO_STRUCT_ASSIGN
-#define ASSIGN_STATE(dest, src) ((dest) = (src))
-#else
-#if MAX_COMPS_IN_SCAN == 4
-#define ASSIGN_STATE(dest, src) \
- ((dest).last_dc_val[0] = (src).last_dc_val[0], \
- (dest).last_dc_val[1] = (src).last_dc_val[1], \
- (dest).last_dc_val[2] = (src).last_dc_val[2], \
- (dest).last_dc_val[3] = (src).last_dc_val[3])
-#endif
-#endif
-
-
typedef struct {
struct jpeg_entropy_decoder pub; /* public fields */
@@ -325,7 +308,7 @@ jpeg_fill_bit_buffer(bitread_working_state *state,
bytes_in_buffer = cinfo->src->bytes_in_buffer;
}
bytes_in_buffer--;
- c = GETJOCTET(*next_input_byte++);
+ c = *next_input_byte++;
/* If it's 0xFF, check and discard stuffed zero byte */
if (c == 0xFF) {
@@ -342,7 +325,7 @@ jpeg_fill_bit_buffer(bitread_working_state *state,
bytes_in_buffer = cinfo->src->bytes_in_buffer;
}
bytes_in_buffer--;
- c = GETJOCTET(*next_input_byte++);
+ c = *next_input_byte++;
} while (c == 0xFF);
if (c == 0) {
@@ -405,8 +388,8 @@ no_more_bytes:
#define GET_BYTE { \
register int c0, c1; \
- c0 = GETJOCTET(*buffer++); \
- c1 = GETJOCTET(*buffer); \
+ c0 = *buffer++; \
+ c1 = *buffer; \
/* Pre-execute most common case */ \
get_buffer = (get_buffer << 8) | c0; \
bits_left += 8; \
@@ -423,7 +406,7 @@ no_more_bytes:
} \
}
-#if SIZEOF_SIZE_T == 8 || defined(_WIN64)
+#if SIZEOF_SIZE_T == 8 || defined(_WIN64) || (defined(__x86_64__) && defined(__ILP32__))
/* Pre-fetch 48 bytes, because the holding register is 64-bit */
#define FILL_BIT_BUFFER_FAST \
@@ -557,6 +540,12 @@ process_restart(j_decompress_ptr cinfo)
}
+#if defined(__has_feature)
+#if __has_feature(undefined_behavior_sanitizer)
+__attribute__((no_sanitize("signed-integer-overflow"),
+ no_sanitize("unsigned-integer-overflow")))
+#endif
+#endif
LOCAL(boolean)
decode_mcu_slow(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
{
@@ -568,7 +557,7 @@ decode_mcu_slow(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
/* Load up working state */
BITREAD_LOAD_STATE(cinfo, entropy->bitstate);
- ASSIGN_STATE(state, entropy->saved);
+ state = entropy->saved;
for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
JBLOCKROW block = MCU_data ? MCU_data[blkn] : NULL;
@@ -589,11 +578,15 @@ decode_mcu_slow(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
if (entropy->dc_needed[blkn]) {
/* Convert DC difference to actual value, update last_dc_val */
int ci = cinfo->MCU_membership[blkn];
- /* This is really just
- * s += state.last_dc_val[ci];
- * It is written this way in order to shut up UBSan.
+ /* Certain malformed JPEG images produce repeated DC coefficient
+ * differences of 2047 or -2047, which causes state.last_dc_val[ci] to
+ * grow until it overflows or underflows a 32-bit signed integer. This
+ * behavior is, to the best of our understanding, innocuous, and it is
+ * unclear how to work around it without potentially affecting
+ * performance. Thus, we (hopefully temporarily) suppress UBSan integer
+ * overflow errors for this function.
*/
- s = (int)((unsigned int)s + (unsigned int)state.last_dc_val[ci]);
+ s += state.last_dc_val[ci];
state.last_dc_val[ci] = s;
if (block) {
/* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */
@@ -653,7 +646,7 @@ decode_mcu_slow(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
/* Completed MCU, so update state */
BITREAD_SAVE_STATE(cinfo, entropy->bitstate);
- ASSIGN_STATE(entropy->saved, state);
+ entropy->saved = state;
return TRUE;
}
@@ -671,7 +664,7 @@ decode_mcu_fast(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
/* Load up working state */
BITREAD_LOAD_STATE(cinfo, entropy->bitstate);
buffer = (JOCTET *)br_state.next_input_byte;
- ASSIGN_STATE(state, entropy->saved);
+ state = entropy->saved;
for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
JBLOCKROW block = MCU_data ? MCU_data[blkn] : NULL;
@@ -688,7 +681,7 @@ decode_mcu_fast(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
if (entropy->dc_needed[blkn]) {
int ci = cinfo->MCU_membership[blkn];
- s = (int)((unsigned int)s + (unsigned int)state.last_dc_val[ci]);
+ s += state.last_dc_val[ci];
state.last_dc_val[ci] = s;
if (block)
(*block)[0] = (JCOEF)s;
@@ -740,7 +733,7 @@ decode_mcu_fast(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
br_state.bytes_in_buffer -= (buffer - br_state.next_input_byte);
br_state.next_input_byte = buffer;
BITREAD_SAVE_STATE(cinfo, entropy->bitstate);
- ASSIGN_STATE(entropy->saved, state);
+ entropy->saved = state;
return TRUE;
}
@@ -795,7 +788,8 @@ use_slow:
}
/* Account for restart interval (no-op if not using restarts) */
- entropy->restarts_to_go--;
+ if (cinfo->restart_interval)
+ entropy->restarts_to_go--;
return TRUE;
}
diff --git a/src/3rdparty/libjpeg/src/jdhuff.h b/src/3rdparty/libjpeg/src/jdhuff.h
index 6a8d90f402..cfa0b7f558 100644
--- a/src/3rdparty/libjpeg/src/jdhuff.h
+++ b/src/3rdparty/libjpeg/src/jdhuff.h
@@ -4,7 +4,8 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1997, Thomas G. Lane.
* libjpeg-turbo Modifications:
- * Copyright (C) 2010-2011, 2015-2016, D. R. Commander.
+ * Copyright (C) 2010-2011, 2015-2016, 2021, D. R. Commander.
+ * Copyright (C) 2018, Matthias Räncker.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -78,6 +79,11 @@ EXTERN(void) jpeg_make_d_derived_tbl(j_decompress_ptr cinfo, boolean isDC,
typedef size_t bit_buf_type; /* type of bit-extraction buffer */
#define BIT_BUF_SIZE 64 /* size of buffer in bits */
+#elif defined(__x86_64__) && defined(__ILP32__)
+
+typedef unsigned long long bit_buf_type; /* type of bit-extraction buffer */
+#define BIT_BUF_SIZE 64 /* size of buffer in bits */
+
#else
typedef unsigned long bit_buf_type; /* type of bit-extraction buffer */
@@ -228,7 +234,10 @@ slowlabel: \
s |= GET_BITS(1); \
nb++; \
} \
- s = htbl->pub->huffval[(int)(s + htbl->valoffset[nb]) & 0xFF]; \
+ if (nb > 16) \
+ s = 0; \
+ else \
+ s = htbl->pub->huffval[(int)(s + htbl->valoffset[nb]) & 0xFF]; \
}
/* Out-of-line case for Huffman code fetching */
diff --git a/src/3rdparty/libjpeg/src/jdmarker.c b/src/3rdparty/libjpeg/src/jdmarker.c
index c9c7ef6399..b964c3a1a6 100644
--- a/src/3rdparty/libjpeg/src/jdmarker.c
+++ b/src/3rdparty/libjpeg/src/jdmarker.c
@@ -151,7 +151,7 @@ typedef my_marker_reader *my_marker_ptr;
#define INPUT_BYTE(cinfo, V, action) \
MAKESTMT( MAKE_BYTE_AVAIL(cinfo, action); \
bytes_in_buffer--; \
- V = GETJOCTET(*next_input_byte++); )
+ V = *next_input_byte++; )
/* As above, but read two bytes interpreted as an unsigned 16-bit integer.
* V should be declared unsigned int or perhaps JLONG.
@@ -159,10 +159,10 @@ typedef my_marker_reader *my_marker_ptr;
#define INPUT_2BYTES(cinfo, V, action) \
MAKESTMT( MAKE_BYTE_AVAIL(cinfo, action); \
bytes_in_buffer--; \
- V = ((unsigned int)GETJOCTET(*next_input_byte++)) << 8; \
+ V = ((unsigned int)(*next_input_byte++)) << 8; \
MAKE_BYTE_AVAIL(cinfo, action); \
bytes_in_buffer--; \
- V += GETJOCTET(*next_input_byte++); )
+ V += *next_input_byte++; )
/*
@@ -608,18 +608,18 @@ examine_app0(j_decompress_ptr cinfo, JOCTET *data, unsigned int datalen,
JLONG totallen = (JLONG)datalen + remaining;
if (datalen >= APP0_DATA_LEN &&
- GETJOCTET(data[0]) == 0x4A &&
- GETJOCTET(data[1]) == 0x46 &&
- GETJOCTET(data[2]) == 0x49 &&
- GETJOCTET(data[3]) == 0x46 &&
- GETJOCTET(data[4]) == 0) {
+ data[0] == 0x4A &&
+ data[1] == 0x46 &&
+ data[2] == 0x49 &&
+ data[3] == 0x46 &&
+ data[4] == 0) {
/* Found JFIF APP0 marker: save info */
cinfo->saw_JFIF_marker = TRUE;
- cinfo->JFIF_major_version = GETJOCTET(data[5]);
- cinfo->JFIF_minor_version = GETJOCTET(data[6]);
- cinfo->density_unit = GETJOCTET(data[7]);
- cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]);
- cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]);
+ cinfo->JFIF_major_version = data[5];
+ cinfo->JFIF_minor_version = data[6];
+ cinfo->density_unit = data[7];
+ cinfo->X_density = (data[8] << 8) + data[9];
+ cinfo->Y_density = (data[10] << 8) + data[11];
/* Check version.
* Major version must be 1, anything else signals an incompatible change.
* (We used to treat this as an error, but now it's a nonfatal warning,
@@ -634,24 +634,22 @@ examine_app0(j_decompress_ptr cinfo, JOCTET *data, unsigned int datalen,
cinfo->JFIF_major_version, cinfo->JFIF_minor_version,
cinfo->X_density, cinfo->Y_density, cinfo->density_unit);
/* Validate thumbnail dimensions and issue appropriate messages */
- if (GETJOCTET(data[12]) | GETJOCTET(data[13]))
- TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL,
- GETJOCTET(data[12]), GETJOCTET(data[13]));
+ if (data[12] | data[13])
+ TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL, data[12], data[13]);
totallen -= APP0_DATA_LEN;
- if (totallen !=
- ((JLONG)GETJOCTET(data[12]) * (JLONG)GETJOCTET(data[13]) * (JLONG)3))
+ if (totallen != ((JLONG)data[12] * (JLONG)data[13] * (JLONG)3))
TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int)totallen);
} else if (datalen >= 6 &&
- GETJOCTET(data[0]) == 0x4A &&
- GETJOCTET(data[1]) == 0x46 &&
- GETJOCTET(data[2]) == 0x58 &&
- GETJOCTET(data[3]) == 0x58 &&
- GETJOCTET(data[4]) == 0) {
+ data[0] == 0x4A &&
+ data[1] == 0x46 &&
+ data[2] == 0x58 &&
+ data[3] == 0x58 &&
+ data[4] == 0) {
/* Found JFIF "JFXX" extension APP0 marker */
/* The library doesn't actually do anything with these,
* but we try to produce a helpful trace message.
*/
- switch (GETJOCTET(data[5])) {
+ switch (data[5]) {
case 0x10:
TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int)totallen);
break;
@@ -662,8 +660,7 @@ examine_app0(j_decompress_ptr cinfo, JOCTET *data, unsigned int datalen,
TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int)totallen);
break;
default:
- TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION,
- GETJOCTET(data[5]), (int)totallen);
+ TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION, data[5], (int)totallen);
break;
}
} else {
@@ -684,16 +681,16 @@ examine_app14(j_decompress_ptr cinfo, JOCTET *data, unsigned int datalen,
unsigned int version, flags0, flags1, transform;
if (datalen >= APP14_DATA_LEN &&
- GETJOCTET(data[0]) == 0x41 &&
- GETJOCTET(data[1]) == 0x64 &&
- GETJOCTET(data[2]) == 0x6F &&
- GETJOCTET(data[3]) == 0x62 &&
- GETJOCTET(data[4]) == 0x65) {
+ data[0] == 0x41 &&
+ data[1] == 0x64 &&
+ data[2] == 0x6F &&
+ data[3] == 0x62 &&
+ data[4] == 0x65) {
/* Found Adobe APP14 marker */
- version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]);
- flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]);
- flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]);
- transform = GETJOCTET(data[11]);
+ version = (data[5] << 8) + data[6];
+ flags0 = (data[7] << 8) + data[8];
+ flags1 = (data[9] << 8) + data[10];
+ transform = data[11];
TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform);
cinfo->saw_Adobe_marker = TRUE;
cinfo->Adobe_transform = (UINT8)transform;
diff --git a/src/3rdparty/libjpeg/src/jdmaster.c b/src/3rdparty/libjpeg/src/jdmaster.c
index b20906438e..cbc8774b1f 100644
--- a/src/3rdparty/libjpeg/src/jdmaster.c
+++ b/src/3rdparty/libjpeg/src/jdmaster.c
@@ -5,7 +5,7 @@
* Copyright (C) 1991-1997, Thomas G. Lane.
* Modified 2002-2009 by Guido Vollbeding.
* libjpeg-turbo Modifications:
- * Copyright (C) 2009-2011, 2016, D. R. Commander.
+ * Copyright (C) 2009-2011, 2016, 2019, D. R. Commander.
* Copyright (C) 2013, Linaro Limited.
* Copyright (C) 2015, Google, Inc.
* For conditions of distribution and use, see the accompanying README.ijg
@@ -22,7 +22,6 @@
#include "jpeglib.h"
#include "jpegcomp.h"
#include "jdmaster.h"
-#include "jsimd.h"
/*
@@ -70,17 +69,6 @@ use_merged_upsample(j_decompress_ptr cinfo)
cinfo->comp_info[1]._DCT_scaled_size != cinfo->_min_DCT_scaled_size ||
cinfo->comp_info[2]._DCT_scaled_size != cinfo->_min_DCT_scaled_size)
return FALSE;
-#ifdef WITH_SIMD
- /* If YCbCr-to-RGB color conversion is SIMD-accelerated but merged upsampling
- isn't, then disabling merged upsampling is likely to be faster when
- decompressing YCbCr JPEG images. */
- if (!jsimd_can_h2v2_merged_upsample() && !jsimd_can_h2v1_merged_upsample() &&
- jsimd_can_ycc_rgb() && cinfo->jpeg_color_space == JCS_YCbCr &&
- (cinfo->out_color_space == JCS_RGB ||
- (cinfo->out_color_space >= JCS_EXT_RGB &&
- cinfo->out_color_space <= JCS_EXT_ARGB)))
- return FALSE;
-#endif
/* ??? also need to test for upsample-time rescaling, when & if supported */
return TRUE; /* by golly, it'll work... */
#else
@@ -580,6 +568,7 @@ master_selection(j_decompress_ptr cinfo)
*/
cinfo->master->first_iMCU_col = 0;
cinfo->master->last_iMCU_col = cinfo->MCUs_per_row - 1;
+ cinfo->master->last_good_iMCU_row = 0;
#ifdef D_MULTISCAN_FILES_SUPPORTED
/* If jpeg_start_decompress will read the whole file, initialize
diff --git a/src/3rdparty/libjpeg/src/jdmerge.c b/src/3rdparty/libjpeg/src/jdmerge.c
index dff5a35087..3a456d6581 100644
--- a/src/3rdparty/libjpeg/src/jdmerge.c
+++ b/src/3rdparty/libjpeg/src/jdmerge.c
@@ -5,7 +5,7 @@
* Copyright (C) 1994-1996, Thomas G. Lane.
* libjpeg-turbo Modifications:
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
- * Copyright (C) 2009, 2011, 2014-2015, D. R. Commander.
+ * Copyright (C) 2009, 2011, 2014-2015, 2020, D. R. Commander.
* Copyright (C) 2013, Linaro Limited.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
@@ -40,41 +40,13 @@
#define JPEG_INTERNALS
#include "jinclude.h"
#include "jpeglib.h"
+#include "jdmerge.h"
#include "jsimd.h"
#include "jconfigint.h"
#ifdef UPSAMPLE_MERGING_SUPPORTED
-/* Private subobject */
-
-typedef struct {
- struct jpeg_upsampler pub; /* public fields */
-
- /* Pointer to routine to do actual upsampling/conversion of one row group */
- void (*upmethod) (j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
- JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
-
- /* Private state for YCC->RGB conversion */
- int *Cr_r_tab; /* => table for Cr to R conversion */
- int *Cb_b_tab; /* => table for Cb to B conversion */
- JLONG *Cr_g_tab; /* => table for Cr to G conversion */
- JLONG *Cb_g_tab; /* => table for Cb to G conversion */
-
- /* For 2:1 vertical sampling, we produce two output rows at a time.
- * We need a "spare" row buffer to hold the second output row if the
- * application provides just a one-row buffer; we also use the spare
- * to discard the dummy last row if the image height is odd.
- */
- JSAMPROW spare_row;
- boolean spare_full; /* T if spare buffer is occupied */
-
- JDIMENSION out_row_width; /* samples per output row */
- JDIMENSION rows_to_go; /* counts rows remaining in image */
-} my_upsampler;
-
-typedef my_upsampler *my_upsample_ptr;
-
#define SCALEBITS 16 /* speediest right-shift on some machines */
#define ONE_HALF ((JLONG)1 << (SCALEBITS - 1))
#define FIX(x) ((JLONG)((x) * (1L << SCALEBITS) + 0.5))
@@ -189,7 +161,7 @@ typedef my_upsampler *my_upsample_ptr;
LOCAL(void)
build_ycc_rgb_table(j_decompress_ptr cinfo)
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
int i;
JLONG x;
SHIFT_TEMPS
@@ -232,7 +204,7 @@ build_ycc_rgb_table(j_decompress_ptr cinfo)
METHODDEF(void)
start_pass_merged_upsample(j_decompress_ptr cinfo)
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
/* Mark the spare buffer empty */
upsample->spare_full = FALSE;
@@ -254,7 +226,7 @@ merged_2v_upsample(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)
/* 2:1 vertical sampling case: may need a spare row. */
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
JSAMPROW work_ptrs[2];
JDIMENSION num_rows; /* number of rows returned to caller */
@@ -305,7 +277,7 @@ merged_1v_upsample(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)
/* 1:1 vertical sampling case: much easier, never need a spare row. */
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
/* Just do the upsampling. */
(*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr,
@@ -420,11 +392,10 @@ h2v2_merged_upsample(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
* RGB565 conversion
*/
-#define PACK_SHORT_565_LE(r, g, b) ((((r) << 8) & 0xF800) | \
- (((g) << 3) & 0x7E0) | ((b) >> 3))
-#define PACK_SHORT_565_BE(r, g, b) (((r) & 0xF8) | ((g) >> 5) | \
- (((g) << 11) & 0xE000) | \
- (((b) << 5) & 0x1F00))
+#define PACK_SHORT_565_LE(r, g, b) \
+ ((((r) << 8) & 0xF800) | (((g) << 3) & 0x7E0) | ((b) >> 3))
+#define PACK_SHORT_565_BE(r, g, b) \
+ (((r) & 0xF8) | ((g) >> 5) | (((g) << 11) & 0xE000) | (((b) << 5) & 0x1F00))
#define PACK_TWO_PIXELS_LE(l, r) ((r << 16) | l)
#define PACK_TWO_PIXELS_BE(l, r) ((l << 16) | r)
@@ -566,11 +537,11 @@ h2v2_merged_upsample_565D(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
GLOBAL(void)
jinit_merged_upsampler(j_decompress_ptr cinfo)
{
- my_upsample_ptr upsample;
+ my_merged_upsample_ptr upsample;
- upsample = (my_upsample_ptr)
+ upsample = (my_merged_upsample_ptr)
(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
- sizeof(my_upsampler));
+ sizeof(my_merged_upsampler));
cinfo->upsample = (struct jpeg_upsampler *)upsample;
upsample->pub.start_pass = start_pass_merged_upsample;
upsample->pub.need_context_rows = FALSE;
diff --git a/src/3rdparty/libjpeg/src/jdmerge.h b/src/3rdparty/libjpeg/src/jdmerge.h
new file mode 100644
index 0000000000..b583396b10
--- /dev/null
+++ b/src/3rdparty/libjpeg/src/jdmerge.h
@@ -0,0 +1,47 @@
+/*
+ * jdmerge.h
+ *
+ * This file was part of the Independent JPEG Group's software:
+ * Copyright (C) 1994-1996, Thomas G. Lane.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2020, D. R. Commander.
+ * For conditions of distribution and use, see the accompanying README.ijg
+ * file.
+ */
+
+#define JPEG_INTERNALS
+#include "jpeglib.h"
+
+#ifdef UPSAMPLE_MERGING_SUPPORTED
+
+
+/* Private subobject */
+
+typedef struct {
+ struct jpeg_upsampler pub; /* public fields */
+
+ /* Pointer to routine to do actual upsampling/conversion of one row group */
+ void (*upmethod) (j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
+ JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
+
+ /* Private state for YCC->RGB conversion */
+ int *Cr_r_tab; /* => table for Cr to R conversion */
+ int *Cb_b_tab; /* => table for Cb to B conversion */
+ JLONG *Cr_g_tab; /* => table for Cr to G conversion */
+ JLONG *Cb_g_tab; /* => table for Cb to G conversion */
+
+ /* For 2:1 vertical sampling, we produce two output rows at a time.
+ * We need a "spare" row buffer to hold the second output row if the
+ * application provides just a one-row buffer; we also use the spare
+ * to discard the dummy last row if the image height is odd.
+ */
+ JSAMPROW spare_row;
+ boolean spare_full; /* T if spare buffer is occupied */
+
+ JDIMENSION out_row_width; /* samples per output row */
+ JDIMENSION rows_to_go; /* counts rows remaining in image */
+} my_merged_upsampler;
+
+typedef my_merged_upsampler *my_merged_upsample_ptr;
+
+#endif /* UPSAMPLE_MERGING_SUPPORTED */
diff --git a/src/3rdparty/libjpeg/src/jdmrg565.c b/src/3rdparty/libjpeg/src/jdmrg565.c
index 1b87e3718d..980a4e216e 100644
--- a/src/3rdparty/libjpeg/src/jdmrg565.c
+++ b/src/3rdparty/libjpeg/src/jdmrg565.c
@@ -5,7 +5,7 @@
* Copyright (C) 1994-1996, Thomas G. Lane.
* libjpeg-turbo Modifications:
* Copyright (C) 2013, Linaro Limited.
- * Copyright (C) 2014-2015, 2018, D. R. Commander.
+ * Copyright (C) 2014-2015, 2018, 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -19,7 +19,7 @@ h2v1_merged_upsample_565_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf)
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
register int y, cred, cgreen, cblue;
int cb, cr;
register JSAMPROW outptr;
@@ -43,20 +43,20 @@ h2v1_merged_upsample_565_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
/* Loop for each pair of output pixels */
for (col = cinfo->output_width >> 1; col > 0; col--) {
/* Do the chroma part of the calculation */
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ cb = *inptr1++;
+ cr = *inptr2++;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
/* Fetch 2 Y values and emit 2 pixels */
- y = GETJSAMPLE(*inptr0++);
+ y = *inptr0++;
r = range_limit[y + cred];
g = range_limit[y + cgreen];
b = range_limit[y + cblue];
rgb = PACK_SHORT_565(r, g, b);
- y = GETJSAMPLE(*inptr0++);
+ y = *inptr0++;
r = range_limit[y + cred];
g = range_limit[y + cgreen];
b = range_limit[y + cblue];
@@ -68,12 +68,12 @@ h2v1_merged_upsample_565_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
/* If image width is odd, do the last output column separately */
if (cinfo->output_width & 1) {
- cb = GETJSAMPLE(*inptr1);
- cr = GETJSAMPLE(*inptr2);
+ cb = *inptr1;
+ cr = *inptr2;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
- y = GETJSAMPLE(*inptr0);
+ y = *inptr0;
r = range_limit[y + cred];
g = range_limit[y + cgreen];
b = range_limit[y + cblue];
@@ -90,7 +90,7 @@ h2v1_merged_upsample_565D_internal(j_decompress_ptr cinfo,
JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf)
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
register int y, cred, cgreen, cblue;
int cb, cr;
register JSAMPROW outptr;
@@ -115,21 +115,21 @@ h2v1_merged_upsample_565D_internal(j_decompress_ptr cinfo,
/* Loop for each pair of output pixels */
for (col = cinfo->output_width >> 1; col > 0; col--) {
/* Do the chroma part of the calculation */
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ cb = *inptr1++;
+ cr = *inptr2++;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
/* Fetch 2 Y values and emit 2 pixels */
- y = GETJSAMPLE(*inptr0++);
+ y = *inptr0++;
r = range_limit[DITHER_565_R(y + cred, d0)];
g = range_limit[DITHER_565_G(y + cgreen, d0)];
b = range_limit[DITHER_565_B(y + cblue, d0)];
d0 = DITHER_ROTATE(d0);
rgb = PACK_SHORT_565(r, g, b);
- y = GETJSAMPLE(*inptr0++);
+ y = *inptr0++;
r = range_limit[DITHER_565_R(y + cred, d0)];
g = range_limit[DITHER_565_G(y + cgreen, d0)];
b = range_limit[DITHER_565_B(y + cblue, d0)];
@@ -142,12 +142,12 @@ h2v1_merged_upsample_565D_internal(j_decompress_ptr cinfo,
/* If image width is odd, do the last output column separately */
if (cinfo->output_width & 1) {
- cb = GETJSAMPLE(*inptr1);
- cr = GETJSAMPLE(*inptr2);
+ cb = *inptr1;
+ cr = *inptr2;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
- y = GETJSAMPLE(*inptr0);
+ y = *inptr0;
r = range_limit[DITHER_565_R(y + cred, d0)];
g = range_limit[DITHER_565_G(y + cgreen, d0)];
b = range_limit[DITHER_565_B(y + cblue, d0)];
@@ -163,7 +163,7 @@ h2v2_merged_upsample_565_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf)
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
register int y, cred, cgreen, cblue;
int cb, cr;
register JSAMPROW outptr0, outptr1;
@@ -189,20 +189,20 @@ h2v2_merged_upsample_565_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
/* Loop for each group of output pixels */
for (col = cinfo->output_width >> 1; col > 0; col--) {
/* Do the chroma part of the calculation */
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ cb = *inptr1++;
+ cr = *inptr2++;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
/* Fetch 4 Y values and emit 4 pixels */
- y = GETJSAMPLE(*inptr00++);
+ y = *inptr00++;
r = range_limit[y + cred];
g = range_limit[y + cgreen];
b = range_limit[y + cblue];
rgb = PACK_SHORT_565(r, g, b);
- y = GETJSAMPLE(*inptr00++);
+ y = *inptr00++;
r = range_limit[y + cred];
g = range_limit[y + cgreen];
b = range_limit[y + cblue];
@@ -211,13 +211,13 @@ h2v2_merged_upsample_565_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
WRITE_TWO_PIXELS(outptr0, rgb);
outptr0 += 4;
- y = GETJSAMPLE(*inptr01++);
+ y = *inptr01++;
r = range_limit[y + cred];
g = range_limit[y + cgreen];
b = range_limit[y + cblue];
rgb = PACK_SHORT_565(r, g, b);
- y = GETJSAMPLE(*inptr01++);
+ y = *inptr01++;
r = range_limit[y + cred];
g = range_limit[y + cgreen];
b = range_limit[y + cblue];
@@ -229,20 +229,20 @@ h2v2_merged_upsample_565_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
/* If image width is odd, do the last output column separately */
if (cinfo->output_width & 1) {
- cb = GETJSAMPLE(*inptr1);
- cr = GETJSAMPLE(*inptr2);
+ cb = *inptr1;
+ cr = *inptr2;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
- y = GETJSAMPLE(*inptr00);
+ y = *inptr00;
r = range_limit[y + cred];
g = range_limit[y + cgreen];
b = range_limit[y + cblue];
rgb = PACK_SHORT_565(r, g, b);
*(INT16 *)outptr0 = (INT16)rgb;
- y = GETJSAMPLE(*inptr01);
+ y = *inptr01;
r = range_limit[y + cred];
g = range_limit[y + cgreen];
b = range_limit[y + cblue];
@@ -259,7 +259,7 @@ h2v2_merged_upsample_565D_internal(j_decompress_ptr cinfo,
JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf)
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
register int y, cred, cgreen, cblue;
int cb, cr;
register JSAMPROW outptr0, outptr1;
@@ -287,21 +287,21 @@ h2v2_merged_upsample_565D_internal(j_decompress_ptr cinfo,
/* Loop for each group of output pixels */
for (col = cinfo->output_width >> 1; col > 0; col--) {
/* Do the chroma part of the calculation */
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ cb = *inptr1++;
+ cr = *inptr2++;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
/* Fetch 4 Y values and emit 4 pixels */
- y = GETJSAMPLE(*inptr00++);
+ y = *inptr00++;
r = range_limit[DITHER_565_R(y + cred, d0)];
g = range_limit[DITHER_565_G(y + cgreen, d0)];
b = range_limit[DITHER_565_B(y + cblue, d0)];
d0 = DITHER_ROTATE(d0);
rgb = PACK_SHORT_565(r, g, b);
- y = GETJSAMPLE(*inptr00++);
+ y = *inptr00++;
r = range_limit[DITHER_565_R(y + cred, d0)];
g = range_limit[DITHER_565_G(y + cgreen, d0)];
b = range_limit[DITHER_565_B(y + cblue, d0)];
@@ -311,14 +311,14 @@ h2v2_merged_upsample_565D_internal(j_decompress_ptr cinfo,
WRITE_TWO_PIXELS(outptr0, rgb);
outptr0 += 4;
- y = GETJSAMPLE(*inptr01++);
+ y = *inptr01++;
r = range_limit[DITHER_565_R(y + cred, d1)];
g = range_limit[DITHER_565_G(y + cgreen, d1)];
b = range_limit[DITHER_565_B(y + cblue, d1)];
d1 = DITHER_ROTATE(d1);
rgb = PACK_SHORT_565(r, g, b);
- y = GETJSAMPLE(*inptr01++);
+ y = *inptr01++;
r = range_limit[DITHER_565_R(y + cred, d1)];
g = range_limit[DITHER_565_G(y + cgreen, d1)];
b = range_limit[DITHER_565_B(y + cblue, d1)];
@@ -331,20 +331,20 @@ h2v2_merged_upsample_565D_internal(j_decompress_ptr cinfo,
/* If image width is odd, do the last output column separately */
if (cinfo->output_width & 1) {
- cb = GETJSAMPLE(*inptr1);
- cr = GETJSAMPLE(*inptr2);
+ cb = *inptr1;
+ cr = *inptr2;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
- y = GETJSAMPLE(*inptr00);
+ y = *inptr00;
r = range_limit[DITHER_565_R(y + cred, d0)];
g = range_limit[DITHER_565_G(y + cgreen, d0)];
b = range_limit[DITHER_565_B(y + cblue, d0)];
rgb = PACK_SHORT_565(r, g, b);
*(INT16 *)outptr0 = (INT16)rgb;
- y = GETJSAMPLE(*inptr01);
+ y = *inptr01;
r = range_limit[DITHER_565_R(y + cred, d1)];
g = range_limit[DITHER_565_G(y + cgreen, d1)];
b = range_limit[DITHER_565_B(y + cblue, d1)];
diff --git a/src/3rdparty/libjpeg/src/jdmrgext.c b/src/3rdparty/libjpeg/src/jdmrgext.c
index b1c27df56a..9bf4f1a307 100644
--- a/src/3rdparty/libjpeg/src/jdmrgext.c
+++ b/src/3rdparty/libjpeg/src/jdmrgext.c
@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1994-1996, Thomas G. Lane.
* libjpeg-turbo Modifications:
- * Copyright (C) 2011, 2015, D. R. Commander.
+ * Copyright (C) 2011, 2015, 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -25,7 +25,7 @@ h2v1_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf)
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
register int y, cred, cgreen, cblue;
int cb, cr;
register JSAMPROW outptr;
@@ -46,13 +46,13 @@ h2v1_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
/* Loop for each pair of output pixels */
for (col = cinfo->output_width >> 1; col > 0; col--) {
/* Do the chroma part of the calculation */
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ cb = *inptr1++;
+ cr = *inptr2++;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
/* Fetch 2 Y values and emit 2 pixels */
- y = GETJSAMPLE(*inptr0++);
+ y = *inptr0++;
outptr[RGB_RED] = range_limit[y + cred];
outptr[RGB_GREEN] = range_limit[y + cgreen];
outptr[RGB_BLUE] = range_limit[y + cblue];
@@ -60,7 +60,7 @@ h2v1_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
outptr[RGB_ALPHA] = 0xFF;
#endif
outptr += RGB_PIXELSIZE;
- y = GETJSAMPLE(*inptr0++);
+ y = *inptr0++;
outptr[RGB_RED] = range_limit[y + cred];
outptr[RGB_GREEN] = range_limit[y + cgreen];
outptr[RGB_BLUE] = range_limit[y + cblue];
@@ -71,12 +71,12 @@ h2v1_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
}
/* If image width is odd, do the last output column separately */
if (cinfo->output_width & 1) {
- cb = GETJSAMPLE(*inptr1);
- cr = GETJSAMPLE(*inptr2);
+ cb = *inptr1;
+ cr = *inptr2;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
- y = GETJSAMPLE(*inptr0);
+ y = *inptr0;
outptr[RGB_RED] = range_limit[y + cred];
outptr[RGB_GREEN] = range_limit[y + cgreen];
outptr[RGB_BLUE] = range_limit[y + cblue];
@@ -97,7 +97,7 @@ h2v2_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf)
{
- my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample;
+ my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample;
register int y, cred, cgreen, cblue;
int cb, cr;
register JSAMPROW outptr0, outptr1;
@@ -120,13 +120,13 @@ h2v2_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
/* Loop for each group of output pixels */
for (col = cinfo->output_width >> 1; col > 0; col--) {
/* Do the chroma part of the calculation */
- cb = GETJSAMPLE(*inptr1++);
- cr = GETJSAMPLE(*inptr2++);
+ cb = *inptr1++;
+ cr = *inptr2++;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
/* Fetch 4 Y values and emit 4 pixels */
- y = GETJSAMPLE(*inptr00++);
+ y = *inptr00++;
outptr0[RGB_RED] = range_limit[y + cred];
outptr0[RGB_GREEN] = range_limit[y + cgreen];
outptr0[RGB_BLUE] = range_limit[y + cblue];
@@ -134,7 +134,7 @@ h2v2_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
outptr0[RGB_ALPHA] = 0xFF;
#endif
outptr0 += RGB_PIXELSIZE;
- y = GETJSAMPLE(*inptr00++);
+ y = *inptr00++;
outptr0[RGB_RED] = range_limit[y + cred];
outptr0[RGB_GREEN] = range_limit[y + cgreen];
outptr0[RGB_BLUE] = range_limit[y + cblue];
@@ -142,7 +142,7 @@ h2v2_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
outptr0[RGB_ALPHA] = 0xFF;
#endif
outptr0 += RGB_PIXELSIZE;
- y = GETJSAMPLE(*inptr01++);
+ y = *inptr01++;
outptr1[RGB_RED] = range_limit[y + cred];
outptr1[RGB_GREEN] = range_limit[y + cgreen];
outptr1[RGB_BLUE] = range_limit[y + cblue];
@@ -150,7 +150,7 @@ h2v2_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
outptr1[RGB_ALPHA] = 0xFF;
#endif
outptr1 += RGB_PIXELSIZE;
- y = GETJSAMPLE(*inptr01++);
+ y = *inptr01++;
outptr1[RGB_RED] = range_limit[y + cred];
outptr1[RGB_GREEN] = range_limit[y + cgreen];
outptr1[RGB_BLUE] = range_limit[y + cblue];
@@ -161,19 +161,19 @@ h2v2_merged_upsample_internal(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
}
/* If image width is odd, do the last output column separately */
if (cinfo->output_width & 1) {
- cb = GETJSAMPLE(*inptr1);
- cr = GETJSAMPLE(*inptr2);
+ cb = *inptr1;
+ cr = *inptr2;
cred = Crrtab[cr];
cgreen = (int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
- y = GETJSAMPLE(*inptr00);
+ y = *inptr00;
outptr0[RGB_RED] = range_limit[y + cred];
outptr0[RGB_GREEN] = range_limit[y + cgreen];
outptr0[RGB_BLUE] = range_limit[y + cblue];
#ifdef RGB_ALPHA
outptr0[RGB_ALPHA] = 0xFF;
#endif
- y = GETJSAMPLE(*inptr01);
+ y = *inptr01;
outptr1[RGB_RED] = range_limit[y + cred];
outptr1[RGB_GREEN] = range_limit[y + cgreen];
outptr1[RGB_BLUE] = range_limit[y + cblue];
diff --git a/src/3rdparty/libjpeg/src/jdphuff.c b/src/3rdparty/libjpeg/src/jdphuff.c
index 9e82636bbd..c6d82ca14b 100644
--- a/src/3rdparty/libjpeg/src/jdphuff.c
+++ b/src/3rdparty/libjpeg/src/jdphuff.c
@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1995-1997, Thomas G. Lane.
* libjpeg-turbo Modifications:
- * Copyright (C) 2015-2016, 2018, D. R. Commander.
+ * Copyright (C) 2015-2016, 2018-2021, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -41,25 +41,6 @@ typedef struct {
int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
} savable_state;
-/* This macro is to work around compilers with missing or broken
- * structure assignment. You'll need to fix this code if you have
- * such a compiler and you change MAX_COMPS_IN_SCAN.
- */
-
-#ifndef NO_STRUCT_ASSIGN
-#define ASSIGN_STATE(dest, src) ((dest) = (src))
-#else
-#if MAX_COMPS_IN_SCAN == 4
-#define ASSIGN_STATE(dest, src) \
- ((dest).EOBRUN = (src).EOBRUN, \
- (dest).last_dc_val[0] = (src).last_dc_val[0], \
- (dest).last_dc_val[1] = (src).last_dc_val[1], \
- (dest).last_dc_val[2] = (src).last_dc_val[2], \
- (dest).last_dc_val[3] = (src).last_dc_val[3])
-#endif
-#endif
-
-
typedef struct {
struct jpeg_entropy_decoder pub; /* public fields */
@@ -102,7 +83,7 @@ start_pass_phuff_decoder(j_decompress_ptr cinfo)
boolean is_DC_band, bad;
int ci, coefi, tbl;
d_derived_tbl **pdtbl;
- int *coef_bit_ptr;
+ int *coef_bit_ptr, *prev_coef_bit_ptr;
jpeg_component_info *compptr;
is_DC_band = (cinfo->Ss == 0);
@@ -143,8 +124,15 @@ start_pass_phuff_decoder(j_decompress_ptr cinfo)
for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
int cindex = cinfo->cur_comp_info[ci]->component_index;
coef_bit_ptr = &cinfo->coef_bits[cindex][0];
+ prev_coef_bit_ptr = &cinfo->coef_bits[cindex + cinfo->num_components][0];
if (!is_DC_band && coef_bit_ptr[0] < 0) /* AC without prior DC scan */
WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0);
+ for (coefi = MIN(cinfo->Ss, 1); coefi <= MAX(cinfo->Se, 9); coefi++) {
+ if (cinfo->input_scan_number > 1)
+ prev_coef_bit_ptr[coefi] = coef_bit_ptr[coefi];
+ else
+ prev_coef_bit_ptr[coefi] = 0;
+ }
for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) {
int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi];
if (cinfo->Ah != expected)
@@ -323,7 +311,7 @@ decode_mcu_DC_first(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
/* Load up working state */
BITREAD_LOAD_STATE(cinfo, entropy->bitstate);
- ASSIGN_STATE(state, entropy->saved);
+ state = entropy->saved;
/* Outer loop handles each block in the MCU */
@@ -356,11 +344,12 @@ decode_mcu_DC_first(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
/* Completed MCU, so update state */
BITREAD_SAVE_STATE(cinfo, entropy->bitstate);
- ASSIGN_STATE(entropy->saved, state);
+ entropy->saved = state;
}
/* Account for restart interval (no-op if not using restarts) */
- entropy->restarts_to_go--;
+ if (cinfo->restart_interval)
+ entropy->restarts_to_go--;
return TRUE;
}
@@ -444,7 +433,8 @@ decode_mcu_AC_first(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
}
/* Account for restart interval (no-op if not using restarts) */
- entropy->restarts_to_go--;
+ if (cinfo->restart_interval)
+ entropy->restarts_to_go--;
return TRUE;
}
@@ -495,7 +485,8 @@ decode_mcu_DC_refine(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
BITREAD_SAVE_STATE(cinfo, entropy->bitstate);
/* Account for restart interval (no-op if not using restarts) */
- entropy->restarts_to_go--;
+ if (cinfo->restart_interval)
+ entropy->restarts_to_go--;
return TRUE;
}
@@ -638,7 +629,8 @@ decode_mcu_AC_refine(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
}
/* Account for restart interval (no-op if not using restarts) */
- entropy->restarts_to_go--;
+ if (cinfo->restart_interval)
+ entropy->restarts_to_go--;
return TRUE;
@@ -676,7 +668,7 @@ jinit_phuff_decoder(j_decompress_ptr cinfo)
/* Create progression status table */
cinfo->coef_bits = (int (*)[DCTSIZE2])
(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
- cinfo->num_components * DCTSIZE2 *
+ cinfo->num_components * 2 * DCTSIZE2 *
sizeof(int));
coef_bit_ptr = &cinfo->coef_bits[0][0];
for (ci = 0; ci < cinfo->num_components; ci++)
diff --git a/src/3rdparty/libjpeg/src/jdsample.c b/src/3rdparty/libjpeg/src/jdsample.c
index 50a68b3013..eaad72a030 100644
--- a/src/3rdparty/libjpeg/src/jdsample.c
+++ b/src/3rdparty/libjpeg/src/jdsample.c
@@ -8,7 +8,7 @@
* Copyright (C) 2010, 2015-2016, D. R. Commander.
* Copyright (C) 2014, MIPS Technologies, Inc., California.
* Copyright (C) 2015, Google, Inc.
- * Copyright (C) 2019, Arm Limited.
+ * Copyright (C) 2019-2020, Arm Limited.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -177,7 +177,7 @@ int_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
outptr = output_data[outrow];
outend = outptr + cinfo->output_width;
while (outptr < outend) {
- invalue = *inptr++; /* don't need GETJSAMPLE() here */
+ invalue = *inptr++;
for (h = h_expand; h > 0; h--) {
*outptr++ = invalue;
}
@@ -213,7 +213,7 @@ h2v1_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
outptr = output_data[inrow];
outend = outptr + cinfo->output_width;
while (outptr < outend) {
- invalue = *inptr++; /* don't need GETJSAMPLE() here */
+ invalue = *inptr++;
*outptr++ = invalue;
*outptr++ = invalue;
}
@@ -242,7 +242,7 @@ h2v2_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
outptr = output_data[outrow];
outend = outptr + cinfo->output_width;
while (outptr < outend) {
- invalue = *inptr++; /* don't need GETJSAMPLE() here */
+ invalue = *inptr++;
*outptr++ = invalue;
*outptr++ = invalue;
}
@@ -283,20 +283,20 @@ h2v1_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
inptr = input_data[inrow];
outptr = output_data[inrow];
/* Special case for first column */
- invalue = GETJSAMPLE(*inptr++);
+ invalue = *inptr++;
*outptr++ = (JSAMPLE)invalue;
- *outptr++ = (JSAMPLE)((invalue * 3 + GETJSAMPLE(*inptr) + 2) >> 2);
+ *outptr++ = (JSAMPLE)((invalue * 3 + inptr[0] + 2) >> 2);
for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) {
/* General case: 3/4 * nearer pixel + 1/4 * further pixel */
- invalue = GETJSAMPLE(*inptr++) * 3;
- *outptr++ = (JSAMPLE)((invalue + GETJSAMPLE(inptr[-2]) + 1) >> 2);
- *outptr++ = (JSAMPLE)((invalue + GETJSAMPLE(*inptr) + 2) >> 2);
+ invalue = (*inptr++) * 3;
+ *outptr++ = (JSAMPLE)((invalue + inptr[-2] + 1) >> 2);
+ *outptr++ = (JSAMPLE)((invalue + inptr[0] + 2) >> 2);
}
/* Special case for last column */
- invalue = GETJSAMPLE(*inptr);
- *outptr++ = (JSAMPLE)((invalue * 3 + GETJSAMPLE(inptr[-1]) + 1) >> 2);
+ invalue = *inptr;
+ *outptr++ = (JSAMPLE)((invalue * 3 + inptr[-1] + 1) >> 2);
*outptr++ = (JSAMPLE)invalue;
}
}
@@ -338,7 +338,7 @@ h1v2_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
outptr = output_data[outrow++];
for (colctr = 0; colctr < compptr->downsampled_width; colctr++) {
- thiscolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++);
+ thiscolsum = (*inptr0++) * 3 + (*inptr1++);
*outptr++ = (JSAMPLE)((thiscolsum + bias) >> 2);
}
}
@@ -381,8 +381,8 @@ h2v2_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
outptr = output_data[outrow++];
/* Special case for first column */
- thiscolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++);
- nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++);
+ thiscolsum = (*inptr0++) * 3 + (*inptr1++);
+ nextcolsum = (*inptr0++) * 3 + (*inptr1++);
*outptr++ = (JSAMPLE)((thiscolsum * 4 + 8) >> 4);
*outptr++ = (JSAMPLE)((thiscolsum * 3 + nextcolsum + 7) >> 4);
lastcolsum = thiscolsum; thiscolsum = nextcolsum;
@@ -390,7 +390,7 @@ h2v2_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) {
/* General case: 3/4 * nearer pixel + 1/4 * further pixel in each */
/* dimension, thus 9/16, 3/16, 3/16, 1/16 overall */
- nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++);
+ nextcolsum = (*inptr0++) * 3 + (*inptr1++);
*outptr++ = (JSAMPLE)((thiscolsum * 3 + lastcolsum + 8) >> 4);
*outptr++ = (JSAMPLE)((thiscolsum * 3 + nextcolsum + 7) >> 4);
lastcolsum = thiscolsum; thiscolsum = nextcolsum;
@@ -477,7 +477,13 @@ jinit_upsampler(j_decompress_ptr cinfo)
} else if (h_in_group == h_out_group &&
v_in_group * 2 == v_out_group && do_fancy) {
/* Non-fancy upsampling is handled by the generic method */
- upsample->methods[ci] = h1v2_fancy_upsample;
+#if defined(__arm__) || defined(__aarch64__) || \
+ defined(_M_ARM) || defined(_M_ARM64)
+ if (jsimd_can_h1v2_fancy_upsample())
+ upsample->methods[ci] = jsimd_h1v2_fancy_upsample;
+ else
+#endif
+ upsample->methods[ci] = h1v2_fancy_upsample;
upsample->pub.need_context_rows = TRUE;
} else if (h_in_group * 2 == h_out_group &&
v_in_group * 2 == v_out_group) {
diff --git a/src/3rdparty/libjpeg/src/jdtrans.c b/src/3rdparty/libjpeg/src/jdtrans.c
index 56713efe64..d7ec4b83b3 100644
--- a/src/3rdparty/libjpeg/src/jdtrans.c
+++ b/src/3rdparty/libjpeg/src/jdtrans.c
@@ -3,8 +3,8 @@
*
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1995-1997, Thomas G. Lane.
- * It was modified by The libjpeg-turbo Project to include only code relevant
- * to libjpeg-turbo.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -16,6 +16,7 @@
#define JPEG_INTERNALS
#include "jinclude.h"
#include "jpeglib.h"
+#include "jpegcomp.h"
/* Forward declarations */
diff --git a/src/3rdparty/libjpeg/src/jerror.h b/src/3rdparty/libjpeg/src/jerror.h
index 933a3690fd..4476df2c93 100644
--- a/src/3rdparty/libjpeg/src/jerror.h
+++ b/src/3rdparty/libjpeg/src/jerror.h
@@ -207,6 +207,10 @@ JMESSAGE(JWRN_ARITH_BAD_CODE, "Corrupt JPEG data: bad arithmetic code")
#endif
#endif
JMESSAGE(JWRN_BOGUS_ICC, "Corrupt JPEG data: bad ICC marker")
+#if JPEG_LIB_VERSION < 70
+JMESSAGE(JERR_BAD_DROP_SAMPLING,
+ "Component index %d: mismatching sampling ratio %d:%d, %d:%d, %c")
+#endif
#ifdef JMAKE_ENUM_LIST
@@ -252,6 +256,15 @@ JMESSAGE(JWRN_BOGUS_ICC, "Corrupt JPEG data: bad ICC marker")
(cinfo)->err->msg_parm.i[2] = (p3), \
(cinfo)->err->msg_parm.i[3] = (p4), \
(*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
+#define ERREXIT6(cinfo, code, p1, p2, p3, p4, p5, p6) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (cinfo)->err->msg_parm.i[2] = (p3), \
+ (cinfo)->err->msg_parm.i[3] = (p4), \
+ (cinfo)->err->msg_parm.i[4] = (p5), \
+ (cinfo)->err->msg_parm.i[5] = (p6), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
#define ERREXITS(cinfo, code, str) \
((cinfo)->err->msg_code = (code), \
strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
diff --git a/src/3rdparty/libjpeg/src/jfdctint.c b/src/3rdparty/libjpeg/src/jfdctint.c
index b47c3061ac..c95a3a7fb8 100644
--- a/src/3rdparty/libjpeg/src/jfdctint.c
+++ b/src/3rdparty/libjpeg/src/jfdctint.c
@@ -4,11 +4,11 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1996, Thomas G. Lane.
* libjpeg-turbo Modifications:
- * Copyright (C) 2015, D. R. Commander.
+ * Copyright (C) 2015, 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
- * This file contains a slow-but-accurate integer implementation of the
+ * This file contains a slower but more accurate integer implementation of the
* forward DCT (Discrete Cosine Transform).
*
* A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
diff --git a/src/3rdparty/libjpeg/src/jidctint.c b/src/3rdparty/libjpeg/src/jidctint.c
index 98425d5fd0..bb08748019 100644
--- a/src/3rdparty/libjpeg/src/jidctint.c
+++ b/src/3rdparty/libjpeg/src/jidctint.c
@@ -3,13 +3,13 @@
*
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1998, Thomas G. Lane.
- * Modification developed 2002-2009 by Guido Vollbeding.
+ * Modification developed 2002-2018 by Guido Vollbeding.
* libjpeg-turbo Modifications:
- * Copyright (C) 2015, D. R. Commander.
+ * Copyright (C) 2015, 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
- * This file contains a slow-but-accurate integer implementation of the
+ * This file contains a slower but more accurate integer implementation of the
* inverse DCT (Discrete Cosine Transform). In the IJG code, this routine
* must also perform dequantization of the input coefficients.
*
@@ -417,7 +417,7 @@ jpeg_idct_islow(j_decompress_ptr cinfo, jpeg_component_info *compptr,
/*
* Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 7x7 output block.
+ * producing a reduced-size 7x7 output block.
*
* Optimized algorithm with 12 multiplications in the 1-D kernel.
* cK represents sqrt(2) * cos(K*pi/14).
@@ -1258,7 +1258,7 @@ jpeg_idct_10x10(j_decompress_ptr cinfo, jpeg_component_info *compptr,
/*
* Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 11x11 output block.
+ * producing an 11x11 output block.
*
* Optimized algorithm with 24 multiplications in the 1-D kernel.
* cK represents sqrt(2) * cos(K*pi/22).
@@ -2398,7 +2398,7 @@ jpeg_idct_16x16(j_decompress_ptr cinfo, jpeg_component_info *compptr,
tmp0 = DEQUANTIZE(inptr[DCTSIZE * 0], quantptr[DCTSIZE * 0]);
tmp0 = LEFT_SHIFT(tmp0, CONST_BITS);
/* Add fudge factor here for final descale. */
- tmp0 += 1 << (CONST_BITS - PASS1_BITS - 1);
+ tmp0 += ONE << (CONST_BITS - PASS1_BITS - 1);
z1 = DEQUANTIZE(inptr[DCTSIZE * 4], quantptr[DCTSIZE * 4]);
tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */
diff --git a/src/3rdparty/libjpeg/src/jmorecfg.h b/src/3rdparty/libjpeg/src/jmorecfg.h
index d0b930079a..fb3a9cf411 100644
--- a/src/3rdparty/libjpeg/src/jmorecfg.h
+++ b/src/3rdparty/libjpeg/src/jmorecfg.h
@@ -5,7 +5,7 @@
* Copyright (C) 1991-1997, Thomas G. Lane.
* Modified 1997-2009 by Guido Vollbeding.
* libjpeg-turbo Modifications:
- * Copyright (C) 2009, 2011, 2014-2015, 2018, D. R. Commander.
+ * Copyright (C) 2009, 2011, 2014-2015, 2018, 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -43,25 +43,11 @@
#if BITS_IN_JSAMPLE == 8
/* JSAMPLE should be the smallest type that will hold the values 0..255.
- * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
*/
-#ifdef HAVE_UNSIGNED_CHAR
-
typedef unsigned char JSAMPLE;
#define GETJSAMPLE(value) ((int)(value))
-#else /* not HAVE_UNSIGNED_CHAR */
-
-typedef char JSAMPLE;
-#ifdef __CHAR_UNSIGNED__
-#define GETJSAMPLE(value) ((int)(value))
-#else
-#define GETJSAMPLE(value) ((int)(value) & 0xFF)
-#endif /* __CHAR_UNSIGNED__ */
-
-#endif /* HAVE_UNSIGNED_CHAR */
-
#define MAXJSAMPLE 255
#define CENTERJSAMPLE 128
@@ -97,22 +83,9 @@ typedef short JCOEF;
* managers, this is also the data type passed to fread/fwrite.
*/
-#ifdef HAVE_UNSIGNED_CHAR
-
typedef unsigned char JOCTET;
#define GETJOCTET(value) (value)
-#else /* not HAVE_UNSIGNED_CHAR */
-
-typedef char JOCTET;
-#ifdef __CHAR_UNSIGNED__
-#define GETJOCTET(value) (value)
-#else
-#define GETJOCTET(value) ((value) & 0xFF)
-#endif /* __CHAR_UNSIGNED__ */
-
-#endif /* HAVE_UNSIGNED_CHAR */
-
/* These typedefs are used for various table entries and so forth.
* They must be at least as wide as specified; but making them too big
@@ -123,15 +96,7 @@ typedef char JOCTET;
/* UINT8 must hold at least the values 0..255. */
-#ifdef HAVE_UNSIGNED_CHAR
typedef unsigned char UINT8;
-#else /* not HAVE_UNSIGNED_CHAR */
-#ifdef __CHAR_UNSIGNED__
-typedef char UINT8;
-#else /* not __CHAR_UNSIGNED__ */
-typedef short UINT8;
-#endif /* __CHAR_UNSIGNED__ */
-#endif /* HAVE_UNSIGNED_CHAR */
/* UINT16 must hold at least the values 0..65535. */
@@ -273,9 +238,9 @@ typedef int boolean;
/* Capability options common to encoder and decoder: */
-#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */
-#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */
-#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */
+#define DCT_ISLOW_SUPPORTED /* accurate integer method */
+#define DCT_IFAST_SUPPORTED /* less accurate int method [legacy feature] */
+#define DCT_FLOAT_SUPPORTED /* floating-point method [legacy feature] */
/* Encoder capability options: */
diff --git a/src/3rdparty/libjpeg/src/jpegcomp.h b/src/3rdparty/libjpeg/src/jpegcomp.h
index b32d544bf1..c4834ac0df 100644
--- a/src/3rdparty/libjpeg/src/jpegcomp.h
+++ b/src/3rdparty/libjpeg/src/jpegcomp.h
@@ -1,7 +1,7 @@
/*
* jpegcomp.h
*
- * Copyright (C) 2010, D. R. Commander.
+ * Copyright (C) 2010, 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -19,6 +19,7 @@
#define _min_DCT_v_scaled_size min_DCT_v_scaled_size
#define _jpeg_width jpeg_width
#define _jpeg_height jpeg_height
+#define JERR_ARITH_NOTIMPL JERR_NOT_COMPILED
#else
#define _DCT_scaled_size DCT_scaled_size
#define _DCT_h_scaled_size DCT_scaled_size
diff --git a/src/3rdparty/libjpeg/src/jpegint.h b/src/3rdparty/libjpeg/src/jpegint.h
index ad36ca8b56..195fbcb9b6 100644
--- a/src/3rdparty/libjpeg/src/jpegint.h
+++ b/src/3rdparty/libjpeg/src/jpegint.h
@@ -5,7 +5,7 @@
* Copyright (C) 1991-1997, Thomas G. Lane.
* Modified 1997-2009 by Guido Vollbeding.
* libjpeg-turbo Modifications:
- * Copyright (C) 2015-2016, D. R. Commander.
+ * Copyright (C) 2015-2016, 2019, D. R. Commander.
* Copyright (C) 2015, Google, Inc.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
@@ -158,6 +158,9 @@ struct jpeg_decomp_master {
JDIMENSION first_MCU_col[MAX_COMPONENTS];
JDIMENSION last_MCU_col[MAX_COMPONENTS];
boolean jinit_upsampler_no_alloc;
+
+ /* Last iMCU row that was successfully decoded */
+ JDIMENSION last_good_iMCU_row;
};
/* Input control module */
diff --git a/src/3rdparty/libjpeg/src/jpeglib.h b/src/3rdparty/libjpeg/src/jpeglib.h
index 33f8ad2791..d7664f0630 100644
--- a/src/3rdparty/libjpeg/src/jpeglib.h
+++ b/src/3rdparty/libjpeg/src/jpeglib.h
@@ -5,7 +5,7 @@
* Copyright (C) 1991-1998, Thomas G. Lane.
* Modified 2002-2009 by Guido Vollbeding.
* libjpeg-turbo Modifications:
- * Copyright (C) 2009-2011, 2013-2014, 2016-2017, D. R. Commander.
+ * Copyright (C) 2009-2011, 2013-2014, 2016-2017, 2020, D. R. Commander.
* Copyright (C) 2015, Google, Inc.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
@@ -244,9 +244,9 @@ typedef enum {
/* DCT/IDCT algorithm options. */
typedef enum {
- JDCT_ISLOW, /* slow but accurate integer algorithm */
- JDCT_IFAST, /* faster, less accurate integer method */
- JDCT_FLOAT /* floating-point: accurate, fast on fast HW */
+ JDCT_ISLOW, /* accurate integer method */
+ JDCT_IFAST, /* less accurate integer method [legacy feature] */
+ JDCT_FLOAT /* floating-point method [legacy feature] */
} J_DCT_METHOD;
#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */
diff --git a/src/3rdparty/libjpeg/src/jquant1.c b/src/3rdparty/libjpeg/src/jquant1.c
index 40bbb28cc7..73b83e16e5 100644
--- a/src/3rdparty/libjpeg/src/jquant1.c
+++ b/src/3rdparty/libjpeg/src/jquant1.c
@@ -479,7 +479,7 @@ color_quantize(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
for (col = width; col > 0; col--) {
pixcode = 0;
for (ci = 0; ci < nc; ci++) {
- pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]);
+ pixcode += colorindex[ci][*ptrin++];
}
*ptrout++ = (JSAMPLE)pixcode;
}
@@ -506,9 +506,9 @@ color_quantize3(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
ptrin = input_buf[row];
ptrout = output_buf[row];
for (col = width; col > 0; col--) {
- pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]);
- pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]);
- pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]);
+ pixcode = colorindex0[*ptrin++];
+ pixcode += colorindex1[*ptrin++];
+ pixcode += colorindex2[*ptrin++];
*ptrout++ = (JSAMPLE)pixcode;
}
}
@@ -552,7 +552,7 @@ quantize_ord_dither(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
* required amount of padding.
*/
*output_ptr +=
- colorindex_ci[GETJSAMPLE(*input_ptr) + dither[col_index]];
+ colorindex_ci[*input_ptr + dither[col_index]];
input_ptr += nc;
output_ptr++;
col_index = (col_index + 1) & ODITHER_MASK;
@@ -595,12 +595,9 @@ quantize3_ord_dither(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
col_index = 0;
for (col = width; col > 0; col--) {
- pixcode =
- GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + dither0[col_index]]);
- pixcode +=
- GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + dither1[col_index]]);
- pixcode +=
- GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + dither2[col_index]]);
+ pixcode = colorindex0[(*input_ptr++) + dither0[col_index]];
+ pixcode += colorindex1[(*input_ptr++) + dither1[col_index]];
+ pixcode += colorindex2[(*input_ptr++) + dither2[col_index]];
*output_ptr++ = (JSAMPLE)pixcode;
col_index = (col_index + 1) & ODITHER_MASK;
}
@@ -677,15 +674,15 @@ quantize_fs_dither(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
* The maximum error is +- MAXJSAMPLE; this sets the required size
* of the range_limit array.
*/
- cur += GETJSAMPLE(*input_ptr);
- cur = GETJSAMPLE(range_limit[cur]);
+ cur += *input_ptr;
+ cur = range_limit[cur];
/* Select output value, accumulate into output code for this pixel */
- pixcode = GETJSAMPLE(colorindex_ci[cur]);
+ pixcode = colorindex_ci[cur];
*output_ptr += (JSAMPLE)pixcode;
/* Compute actual representation error at this pixel */
/* Note: we can do this even though we don't have the final */
/* pixel code, because the colormap is orthogonal. */
- cur -= GETJSAMPLE(colormap_ci[pixcode]);
+ cur -= colormap_ci[pixcode];
/* Compute error fractions to be propagated to adjacent pixels.
* Add these into the running sums, and simultaneously shift the
* next-line error sums left by 1 column.
diff --git a/src/3rdparty/libjpeg/src/jquant2.c b/src/3rdparty/libjpeg/src/jquant2.c
index 0ce0ca5472..44efb18cad 100644
--- a/src/3rdparty/libjpeg/src/jquant2.c
+++ b/src/3rdparty/libjpeg/src/jquant2.c
@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1996, Thomas G. Lane.
* libjpeg-turbo Modifications:
- * Copyright (C) 2009, 2014-2015, D. R. Commander.
+ * Copyright (C) 2009, 2014-2015, 2020, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -215,9 +215,9 @@ prescan_quantize(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
ptr = input_buf[row];
for (col = width; col > 0; col--) {
/* get pixel value and index into the histogram */
- histp = &histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT]
- [GETJSAMPLE(ptr[1]) >> C1_SHIFT]
- [GETJSAMPLE(ptr[2]) >> C2_SHIFT];
+ histp = &histogram[ptr[0] >> C0_SHIFT]
+ [ptr[1] >> C1_SHIFT]
+ [ptr[2] >> C2_SHIFT];
/* increment, check for overflow and undo increment if so. */
if (++(*histp) <= 0)
(*histp)--;
@@ -665,7 +665,7 @@ find_nearby_colors(j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
for (i = 0; i < numcolors; i++) {
/* We compute the squared-c0-distance term, then add in the other two. */
- x = GETJSAMPLE(cinfo->colormap[0][i]);
+ x = cinfo->colormap[0][i];
if (x < minc0) {
tdist = (x - minc0) * C0_SCALE;
min_dist = tdist * tdist;
@@ -688,7 +688,7 @@ find_nearby_colors(j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
}
}
- x = GETJSAMPLE(cinfo->colormap[1][i]);
+ x = cinfo->colormap[1][i];
if (x < minc1) {
tdist = (x - minc1) * C1_SCALE;
min_dist += tdist * tdist;
@@ -710,7 +710,7 @@ find_nearby_colors(j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
}
}
- x = GETJSAMPLE(cinfo->colormap[2][i]);
+ x = cinfo->colormap[2][i];
if (x < minc2) {
tdist = (x - minc2) * C2_SCALE;
min_dist += tdist * tdist;
@@ -788,13 +788,13 @@ find_best_colors(j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
#define STEP_C2 ((1 << C2_SHIFT) * C2_SCALE)
for (i = 0; i < numcolors; i++) {
- icolor = GETJSAMPLE(colorlist[i]);
+ icolor = colorlist[i];
/* Compute (square of) distance from minc0/c1/c2 to this color */
- inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE;
+ inc0 = (minc0 - cinfo->colormap[0][icolor]) * C0_SCALE;
dist0 = inc0 * inc0;
- inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE;
+ inc1 = (minc1 - cinfo->colormap[1][icolor]) * C1_SCALE;
dist0 += inc1 * inc1;
- inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE;
+ inc2 = (minc2 - cinfo->colormap[2][icolor]) * C2_SCALE;
dist0 += inc2 * inc2;
/* Form the initial difference increments */
inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0;
@@ -879,7 +879,7 @@ fill_inverse_cmap(j_decompress_ptr cinfo, int c0, int c1, int c2)
for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) {
cachep = &histogram[c0 + ic0][c1 + ic1][c2];
for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) {
- *cachep++ = (histcell)(GETJSAMPLE(*cptr++) + 1);
+ *cachep++ = (histcell)((*cptr++) + 1);
}
}
}
@@ -909,9 +909,9 @@ pass2_no_dither(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
outptr = output_buf[row];
for (col = width; col > 0; col--) {
/* get pixel value and index into the cache */
- c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT;
- c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT;
- c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT;
+ c0 = (*inptr++) >> C0_SHIFT;
+ c1 = (*inptr++) >> C1_SHIFT;
+ c2 = (*inptr++) >> C2_SHIFT;
cachep = &histogram[c0][c1][c2];
/* If we have not seen this color before, find nearest colormap entry */
/* and update the cache */
@@ -996,12 +996,12 @@ pass2_fs_dither(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
* The maximum error is +- MAXJSAMPLE (or less with error limiting);
* this sets the required size of the range_limit array.
*/
- cur0 += GETJSAMPLE(inptr[0]);
- cur1 += GETJSAMPLE(inptr[1]);
- cur2 += GETJSAMPLE(inptr[2]);
- cur0 = GETJSAMPLE(range_limit[cur0]);
- cur1 = GETJSAMPLE(range_limit[cur1]);
- cur2 = GETJSAMPLE(range_limit[cur2]);
+ cur0 += inptr[0];
+ cur1 += inptr[1];
+ cur2 += inptr[2];
+ cur0 = range_limit[cur0];
+ cur1 = range_limit[cur1];
+ cur2 = range_limit[cur2];
/* Index into the cache with adjusted pixel value */
cachep =
&histogram[cur0 >> C0_SHIFT][cur1 >> C1_SHIFT][cur2 >> C2_SHIFT];
@@ -1015,9 +1015,9 @@ pass2_fs_dither(j_decompress_ptr cinfo, JSAMPARRAY input_buf,
register int pixcode = *cachep - 1;
*outptr = (JSAMPLE)pixcode;
/* Compute representation error for this pixel */
- cur0 -= GETJSAMPLE(colormap0[pixcode]);
- cur1 -= GETJSAMPLE(colormap1[pixcode]);
- cur2 -= GETJSAMPLE(colormap2[pixcode]);
+ cur0 -= colormap0[pixcode];
+ cur1 -= colormap1[pixcode];
+ cur2 -= colormap2[pixcode];
}
/* Compute error fractions to be propagated to adjacent pixels.
* Add these into the running sums, and simultaneously shift the
@@ -1145,7 +1145,7 @@ start_pass_2_quant(j_decompress_ptr cinfo, boolean is_pre_scan)
int i;
/* Only F-S dithering or no dithering is supported. */
- /* If user asks for ordered dither, give him F-S. */
+ /* If user asks for ordered dither, give them F-S. */
if (cinfo->dither_mode != JDITHER_NONE)
cinfo->dither_mode = JDITHER_FS;
@@ -1263,7 +1263,7 @@ jinit_2pass_quantizer(j_decompress_ptr cinfo)
cquantize->sv_colormap = NULL;
/* Only F-S dithering or no dithering is supported. */
- /* If user asks for ordered dither, give him F-S. */
+ /* If user asks for ordered dither, give them F-S. */
if (cinfo->dither_mode != JDITHER_NONE)
cinfo->dither_mode = JDITHER_FS;
diff --git a/src/3rdparty/libjpeg/src/jsimd.h b/src/3rdparty/libjpeg/src/jsimd.h
index 51e2b8c89d..6c203655ef 100644
--- a/src/3rdparty/libjpeg/src/jsimd.h
+++ b/src/3rdparty/libjpeg/src/jsimd.h
@@ -4,6 +4,7 @@
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
* Copyright (C) 2011, 2014, D. R. Commander.
* Copyright (C) 2015-2016, 2018, Matthieu Darbois.
+ * Copyright (C) 2020, Arm Limited.
*
* Based on the x86 SIMD extension for IJG JPEG library,
* Copyright (C) 1999-2006, MIYASAKA Masaru.
@@ -75,6 +76,7 @@ EXTERN(void) jsimd_int_upsample(j_decompress_ptr cinfo,
EXTERN(int) jsimd_can_h2v2_fancy_upsample(void);
EXTERN(int) jsimd_can_h2v1_fancy_upsample(void);
+EXTERN(int) jsimd_can_h1v2_fancy_upsample(void);
EXTERN(void) jsimd_h2v2_fancy_upsample(j_decompress_ptr cinfo,
jpeg_component_info *compptr,
@@ -84,6 +86,10 @@ EXTERN(void) jsimd_h2v1_fancy_upsample(j_decompress_ptr cinfo,
jpeg_component_info *compptr,
JSAMPARRAY input_data,
JSAMPARRAY *output_data_ptr);
+EXTERN(void) jsimd_h1v2_fancy_upsample(j_decompress_ptr cinfo,
+ jpeg_component_info *compptr,
+ JSAMPARRAY input_data,
+ JSAMPARRAY *output_data_ptr);
EXTERN(int) jsimd_can_h2v2_merged_upsample(void);
EXTERN(int) jsimd_can_h2v1_merged_upsample(void);
diff --git a/src/3rdparty/libjpeg/src/jsimd_none.c b/src/3rdparty/libjpeg/src/jsimd_none.c
index 3cb6c80f8a..5b38a9fb5c 100644
--- a/src/3rdparty/libjpeg/src/jsimd_none.c
+++ b/src/3rdparty/libjpeg/src/jsimd_none.c
@@ -4,6 +4,7 @@
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
* Copyright (C) 2009-2011, 2014, D. R. Commander.
* Copyright (C) 2015-2016, 2018, Matthieu Darbois.
+ * Copyright (C) 2020, Arm Limited.
*
* Based on the x86 SIMD extension for IJG JPEG library,
* Copyright (C) 1999-2006, MIYASAKA Masaru.
@@ -169,6 +170,12 @@ jsimd_can_h2v1_fancy_upsample(void)
return 0;
}
+GLOBAL(int)
+jsimd_can_h1v2_fancy_upsample(void)
+{
+ return 0;
+}
+
GLOBAL(void)
jsimd_h2v2_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr)
@@ -181,6 +188,12 @@ jsimd_h2v1_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
{
}
+GLOBAL(void)
+jsimd_h1v2_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
+ JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr)
+{
+}
+
GLOBAL(int)
jsimd_can_h2v2_merged_upsample(void)
{
diff --git a/src/3rdparty/libjpeg/src/jversion.h b/src/3rdparty/libjpeg/src/jversion.h
index ab4a2c5703..2ab534af41 100644
--- a/src/3rdparty/libjpeg/src/jversion.h
+++ b/src/3rdparty/libjpeg/src/jversion.h
@@ -2,9 +2,9 @@
* jversion.h
*
* This file was part of the Independent JPEG Group's software:
- * Copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding.
+ * Copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding.
* libjpeg-turbo Modifications:
- * Copyright (C) 2010, 2012-2020, D. R. Commander.
+ * Copyright (C) 2010, 2012-2021, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -30,23 +30,25 @@
* NOTE: It is our convention to place the authors in the following order:
* - libjpeg-turbo authors (2009-) in descending order of the date of their
* most recent contribution to the project, then in ascending order of the
- * date of their first contribution to the project
+ * date of their first contribution to the project, then in alphabetical
+ * order
* - Upstream authors in descending order of the date of the first inclusion of
* their code
*/
#define JCOPYRIGHT \
- "Copyright (C) 2009-2020 D. R. Commander\n" \
- "Copyright (C) 2011-2016 Siarhei Siamashka\n" \
+ "Copyright (C) 2009-2021 D. R. Commander\n" \
+ "Copyright (C) 2015, 2020 Google, Inc.\n" \
+ "Copyright (C) 2019-2020 Arm Limited\n" \
"Copyright (C) 2015-2016, 2018 Matthieu Darbois\n" \
+ "Copyright (C) 2011-2016 Siarhei Siamashka\n" \
"Copyright (C) 2015 Intel Corporation\n" \
- "Copyright (C) 2015 Google, Inc.\n" \
+ "Copyright (C) 2013-2014 Linaro Limited\n" \
"Copyright (C) 2013-2014 MIPS Technologies, Inc.\n" \
- "Copyright (C) 2013 Linaro Limited\n" \
+ "Copyright (C) 2009, 2012 Pierre Ossman for Cendio AB\n" \
"Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)\n" \
- "Copyright (C) 2009 Pierre Ossman for Cendio AB\n" \
"Copyright (C) 1999-2006 MIYASAKA Masaru\n" \
- "Copyright (C) 1991-2016 Thomas G. Lane, Guido Vollbeding"
+ "Copyright (C) 1991-2020 Thomas G. Lane, Guido Vollbeding"
#define JCOPYRIGHT_SHORT \
- "Copyright (C) 1991-2020 The libjpeg-turbo Project and many others"
+ "Copyright (C) 1991-2021 The libjpeg-turbo Project and many others"
diff --git a/src/3rdparty/libjpeg/zlib-license.txt b/src/3rdparty/libjpeg/zlib-license.txt
new file mode 100644
index 0000000000..480c61edca
--- /dev/null
+++ b/src/3rdparty/libjpeg/zlib-license.txt
@@ -0,0 +1,15 @@
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
diff --git a/src/3rdparty/sqlite/qt_attribution.json b/src/3rdparty/sqlite/qt_attribution.json
index 4de484e56d..1c1d9b7746 100644
--- a/src/3rdparty/sqlite/qt_attribution.json
+++ b/src/3rdparty/sqlite/qt_attribution.json
@@ -6,8 +6,8 @@
"Description": "SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.",
"Homepage": "https://www.sqlite.org/",
- "Version": "3.34.0",
- "DownloadLocation": "https://www.sqlite.org/2020/sqlite-amalgamation-3340000.zip",
+ "Version": "3.35.2",
+ "DownloadLocation": "https://www.sqlite.org/2020/sqlite-amalgamation-3350200.zip",
"License": "Public Domain",
"Copyright": "The authors disclaim copyright to the source code. However, a license can be obtained if needed."
}
diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
index 41937b742f..54f8277a71 100644
--- a/src/3rdparty/sqlite/sqlite3.c
+++ b/src/3rdparty/sqlite/sqlite3.c
@@ -1,6 +1,6 @@
/******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite
-** version 3.34.0. By combining all the individual C code files into this
+** version 3.35.2. By combining all the individual C code files into this
** single large file, the entire code can be compiled as a single translation
** unit. This allows many compilers to do optimizations that would not be
** possible if the files were compiled separately. Performance improvements
@@ -284,6 +284,9 @@ static const char * const sqlite3azCompileOpt[] = {
#ifdef SQLITE_ENABLE_LOCKING_STYLE
"ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE),
#endif
+#if SQLITE_ENABLE_MATH_FUNCTIONS
+ "ENABLE_MATH_FUNCTIONS",
+#endif
#if SQLITE_ENABLE_MEMORY_MANAGEMENT
"ENABLE_MEMORY_MANAGEMENT",
#endif
@@ -990,6 +993,18 @@ SQLITE_PRIVATE const char **sqlite3CompileOptions(int *pnOpt){
# define MSVC_VERSION 0
#endif
+/*
+** Some C99 functions in "math.h" are only present for MSVC when its version
+** is associated with Visual Studio 2013 or higher.
+*/
+#ifndef SQLITE_HAVE_C99_MATH_FUNCS
+# if MSVC_VERSION==0 || MSVC_VERSION>=1800
+# define SQLITE_HAVE_C99_MATH_FUNCS (1)
+# else
+# define SQLITE_HAVE_C99_MATH_FUNCS (0)
+# endif
+#endif
+
/* Needed for various definitions... */
#if defined(__GNUC__) && !defined(_GNU_SOURCE)
# define _GNU_SOURCE
@@ -1171,9 +1186,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.34.0"
-#define SQLITE_VERSION_NUMBER 3034000
-#define SQLITE_SOURCE_ID "2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b"
+#define SQLITE_VERSION "3.35.2"
+#define SQLITE_VERSION_NUMBER 3035002
+#define SQLITE_SOURCE_ID "2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -3163,7 +3178,13 @@ struct sqlite3_mem_methods {
** The second parameter is a pointer to an integer into which
** is written 0 or 1 to indicate whether triggers are disabled or enabled
** following this call. The second parameter may be a NULL pointer, in
-** which case the trigger setting is not reported back. </dd>
+** which case the trigger setting is not reported back.
+**
+** <p>Originally this option disabled all triggers. ^(However, since
+** SQLite version 3.35.0, TEMP triggers are still allowed even if
+** this option is off. So, in other words, this option now only disables
+** triggers in the main database schema or in the schemas of ATTACH-ed
+** databases.)^ </dd>
**
** [[SQLITE_DBCONFIG_ENABLE_VIEW]]
** <dt>SQLITE_DBCONFIG_ENABLE_VIEW</dt>
@@ -3174,7 +3195,13 @@ struct sqlite3_mem_methods {
** The second parameter is a pointer to an integer into which
** is written 0 or 1 to indicate whether views are disabled or enabled
** following this call. The second parameter may be a NULL pointer, in
-** which case the view setting is not reported back. </dd>
+** which case the view setting is not reported back.
+**
+** <p>Originally this option disabled all views. ^(However, since
+** SQLite version 3.35.0, TEMP views are still allowed even if
+** this option is off. So, in other words, this option now only disables
+** views in the main database schema or in the schemas of ATTACH-ed
+** databases.)^ </dd>
**
** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]]
** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
@@ -4547,6 +4574,7 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** that uses dot-files in place of posix advisory locking.
** <tr><td> file:data.db?mode=readonly <td>
** An error. "readonly" is not a valid option for the "mode" parameter.
+** Use "ro" instead: "file:data.db?mode=ro".
** </table>
**
** ^URI hexadecimal escape sequences (%HH) are supported within the path and
@@ -4745,7 +4773,7 @@ SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*);
** If the Y parameter to sqlite3_free_filename(Y) is anything other
** than a NULL pointer or a pointer previously acquired from
** sqlite3_create_filename(), then bad things such as heap
-** corruption or segfaults may occur. The value Y should be
+** corruption or segfaults may occur. The value Y should not be
** used again after sqlite3_free_filename(Y) has been called. This means
** that if the [sqlite3_vfs.xOpen()] method of a VFS has been called using Y,
** then the corresponding [sqlite3_module.xClose() method should also be
@@ -8813,7 +8841,8 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_PRNG_SEED 28
#define SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS 29
#define SQLITE_TESTCTRL_SEEK_COUNT 30
-#define SQLITE_TESTCTRL_LAST 30 /* Largest TESTCTRL */
+#define SQLITE_TESTCTRL_TRACEFLAGS 31
+#define SQLITE_TESTCTRL_LAST 31 /* Largest TESTCTRL */
/*
** CAPI3REF: SQL Keyword Checking
@@ -11487,6 +11516,14 @@ SQLITE_API int sqlite3session_patchset(
SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession);
/*
+** CAPI3REF: Query for the amount of heap memory used by a session object.
+**
+** This API returns the total amount of heap memory in bytes currently
+** used by the session object passed as the only argument.
+*/
+SQLITE_API sqlite3_int64 sqlite3session_memory_used(sqlite3_session *pSession);
+
+/*
** CAPI3REF: Create An Iterator To Traverse A Changeset
** CONSTRUCTOR: sqlite3_changeset_iter
**
@@ -11588,18 +11625,23 @@ SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter);
** call to [sqlite3changeset_next()] must have returned [SQLITE_ROW]. If this
** is not the case, this function returns [SQLITE_MISUSE].
**
-** If argument pzTab is not NULL, then *pzTab is set to point to a
-** nul-terminated utf-8 encoded string containing the name of the table
-** affected by the current change. The buffer remains valid until either
-** sqlite3changeset_next() is called on the iterator or until the
-** conflict-handler function returns. If pnCol is not NULL, then *pnCol is
-** set to the number of columns in the table affected by the change. If
-** pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change
+** Arguments pOp, pnCol and pzTab may not be NULL. Upon return, three
+** outputs are set through these pointers:
+**
+** *pOp is set to one of [SQLITE_INSERT], [SQLITE_DELETE] or [SQLITE_UPDATE],
+** depending on the type of change that the iterator currently points to;
+**
+** *pnCol is set to the number of columns in the table affected by the change; and
+**
+** *pzTab is set to point to a nul-terminated utf-8 encoded string containing
+** the name of the table affected by the current change. The buffer remains
+** valid until either sqlite3changeset_next() is called on the iterator
+** or until the conflict-handler function returns.
+**
+** If pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change
** is an indirect change, or false (0) otherwise. See the documentation for
** [sqlite3session_indirect()] for a description of direct and indirect
-** changes. Finally, if pOp is not NULL, then *pOp is set to one of
-** [SQLITE_INSERT], [SQLITE_DELETE] or [SQLITE_UPDATE], depending on the
-** type of change that the iterator currently points to.
+** changes.
**
** If no error occurs, SQLITE_OK is returned. If an error does occur, an
** SQLite error code is returned. The values of the output variables may not
@@ -13528,7 +13570,8 @@ struct fts5_api {
#ifndef __has_extension
# define __has_extension(x) 0 /* compatibility with non-clang compilers */
#endif
-#if GCC_VERSION>=4007000 || __has_extension(c_atomic)
+#if GCC_VERSION>=4007000 || \
+ (__has_extension(c_atomic) && __has_extension(c_atomic_store_n))
# define AtomicLoad(PTR) __atomic_load_n((PTR),__ATOMIC_RELAXED)
# define AtomicStore(PTR,VAL) __atomic_store_n((PTR),(VAL),__ATOMIC_RELAXED)
#else
@@ -14095,90 +14138,92 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#define TK_TIES 94
#define TK_GENERATED 95
#define TK_ALWAYS 96
-#define TK_REINDEX 97
-#define TK_RENAME 98
-#define TK_CTIME_KW 99
-#define TK_ANY 100
-#define TK_BITAND 101
-#define TK_BITOR 102
-#define TK_LSHIFT 103
-#define TK_RSHIFT 104
-#define TK_PLUS 105
-#define TK_MINUS 106
-#define TK_STAR 107
-#define TK_SLASH 108
-#define TK_REM 109
-#define TK_CONCAT 110
-#define TK_COLLATE 111
-#define TK_BITNOT 112
-#define TK_ON 113
-#define TK_INDEXED 114
-#define TK_STRING 115
-#define TK_JOIN_KW 116
-#define TK_CONSTRAINT 117
-#define TK_DEFAULT 118
-#define TK_NULL 119
-#define TK_PRIMARY 120
-#define TK_UNIQUE 121
-#define TK_CHECK 122
-#define TK_REFERENCES 123
-#define TK_AUTOINCR 124
-#define TK_INSERT 125
-#define TK_DELETE 126
-#define TK_UPDATE 127
-#define TK_SET 128
-#define TK_DEFERRABLE 129
-#define TK_FOREIGN 130
-#define TK_DROP 131
-#define TK_UNION 132
-#define TK_ALL 133
-#define TK_EXCEPT 134
-#define TK_INTERSECT 135
-#define TK_SELECT 136
-#define TK_VALUES 137
-#define TK_DISTINCT 138
-#define TK_DOT 139
-#define TK_FROM 140
-#define TK_JOIN 141
-#define TK_USING 142
-#define TK_ORDER 143
-#define TK_GROUP 144
-#define TK_HAVING 145
-#define TK_LIMIT 146
-#define TK_WHERE 147
-#define TK_INTO 148
-#define TK_NOTHING 149
-#define TK_FLOAT 150
-#define TK_BLOB 151
-#define TK_INTEGER 152
-#define TK_VARIABLE 153
-#define TK_CASE 154
-#define TK_WHEN 155
-#define TK_THEN 156
-#define TK_ELSE 157
-#define TK_INDEX 158
-#define TK_ALTER 159
-#define TK_ADD 160
-#define TK_WINDOW 161
-#define TK_OVER 162
-#define TK_FILTER 163
-#define TK_COLUMN 164
-#define TK_AGG_FUNCTION 165
-#define TK_AGG_COLUMN 166
-#define TK_TRUEFALSE 167
-#define TK_ISNOT 168
-#define TK_FUNCTION 169
-#define TK_UMINUS 170
-#define TK_UPLUS 171
-#define TK_TRUTH 172
-#define TK_REGISTER 173
-#define TK_VECTOR 174
-#define TK_SELECT_COLUMN 175
-#define TK_IF_NULL_ROW 176
-#define TK_ASTERISK 177
-#define TK_SPAN 178
-#define TK_SPACE 179
-#define TK_ILLEGAL 180
+#define TK_MATERIALIZED 97
+#define TK_REINDEX 98
+#define TK_RENAME 99
+#define TK_CTIME_KW 100
+#define TK_ANY 101
+#define TK_BITAND 102
+#define TK_BITOR 103
+#define TK_LSHIFT 104
+#define TK_RSHIFT 105
+#define TK_PLUS 106
+#define TK_MINUS 107
+#define TK_STAR 108
+#define TK_SLASH 109
+#define TK_REM 110
+#define TK_CONCAT 111
+#define TK_COLLATE 112
+#define TK_BITNOT 113
+#define TK_ON 114
+#define TK_INDEXED 115
+#define TK_STRING 116
+#define TK_JOIN_KW 117
+#define TK_CONSTRAINT 118
+#define TK_DEFAULT 119
+#define TK_NULL 120
+#define TK_PRIMARY 121
+#define TK_UNIQUE 122
+#define TK_CHECK 123
+#define TK_REFERENCES 124
+#define TK_AUTOINCR 125
+#define TK_INSERT 126
+#define TK_DELETE 127
+#define TK_UPDATE 128
+#define TK_SET 129
+#define TK_DEFERRABLE 130
+#define TK_FOREIGN 131
+#define TK_DROP 132
+#define TK_UNION 133
+#define TK_ALL 134
+#define TK_EXCEPT 135
+#define TK_INTERSECT 136
+#define TK_SELECT 137
+#define TK_VALUES 138
+#define TK_DISTINCT 139
+#define TK_DOT 140
+#define TK_FROM 141
+#define TK_JOIN 142
+#define TK_USING 143
+#define TK_ORDER 144
+#define TK_GROUP 145
+#define TK_HAVING 146
+#define TK_LIMIT 147
+#define TK_WHERE 148
+#define TK_RETURNING 149
+#define TK_INTO 150
+#define TK_NOTHING 151
+#define TK_FLOAT 152
+#define TK_BLOB 153
+#define TK_INTEGER 154
+#define TK_VARIABLE 155
+#define TK_CASE 156
+#define TK_WHEN 157
+#define TK_THEN 158
+#define TK_ELSE 159
+#define TK_INDEX 160
+#define TK_ALTER 161
+#define TK_ADD 162
+#define TK_WINDOW 163
+#define TK_OVER 164
+#define TK_FILTER 165
+#define TK_COLUMN 166
+#define TK_AGG_FUNCTION 167
+#define TK_AGG_COLUMN 168
+#define TK_TRUEFALSE 169
+#define TK_ISNOT 170
+#define TK_FUNCTION 171
+#define TK_UMINUS 172
+#define TK_UPLUS 173
+#define TK_TRUTH 174
+#define TK_REGISTER 175
+#define TK_VECTOR 176
+#define TK_SELECT_COLUMN 177
+#define TK_IF_NULL_ROW 178
+#define TK_ASTERISK 179
+#define TK_SPAN 180
+#define TK_SPACE 181
+#define TK_ILLEGAL 182
/************** End of parse.h ***********************************************/
/************** Continuing where we left off in sqliteInt.h ******************/
@@ -14594,15 +14639,14 @@ typedef INT16_TYPE LogEst;
** SELECTTRACE_ENABLED will be either 1 or 0 depending on whether or not
** the Select query generator tracing logic is turned on.
*/
-#if defined(SQLITE_ENABLE_SELECTTRACE)
-# define SELECTTRACE_ENABLED 1
-#else
-# define SELECTTRACE_ENABLED 0
+#if !defined(SQLITE_AMALGAMATION)
+SQLITE_PRIVATE u32 sqlite3SelectTrace;
#endif
-#if defined(SQLITE_ENABLE_SELECTTRACE)
+#if defined(SQLITE_DEBUG) \
+ && (defined(SQLITE_TEST) || defined(SQLITE_ENABLE_SELECTTRACE))
# define SELECTTRACE_ENABLED 1
# define SELECTTRACE(K,P,S,X) \
- if(sqlite3_unsupported_selecttrace&(K)) \
+ if(sqlite3SelectTrace&(K)) \
sqlite3DebugPrintf("%u/%d/%p: ",(S)->selId,(P)->addrExplain,(S)),\
sqlite3DebugPrintf X
#else
@@ -14611,6 +14655,19 @@ typedef INT16_TYPE LogEst;
#endif
/*
+** Macros for "wheretrace"
+*/
+SQLITE_PRIVATE u32 sqlite3WhereTrace;
+#if defined(SQLITE_DEBUG) \
+ && (defined(SQLITE_TEST) || defined(SQLITE_ENABLE_WHERETRACE))
+# define WHERETRACE(K,X) if(sqlite3WhereTrace&(K)) sqlite3DebugPrintf X
+# define WHERETRACE_ENABLED 1
+#else
+# define WHERETRACE(K,X)
+#endif
+
+
+/*
** An instance of the following structure is used to store the busy-handler
** callback for a given sqlite handle.
**
@@ -14721,7 +14778,10 @@ typedef struct AutoincInfo AutoincInfo;
typedef struct Bitvec Bitvec;
typedef struct CollSeq CollSeq;
typedef struct Column Column;
+typedef struct Cte Cte;
+typedef struct CteUse CteUse;
typedef struct Db Db;
+typedef struct DbFixer DbFixer;
typedef struct Schema Schema;
typedef struct Expr Expr;
typedef struct ExprList ExprList;
@@ -14739,14 +14799,17 @@ typedef struct LookasideSlot LookasideSlot;
typedef struct Module Module;
typedef struct NameContext NameContext;
typedef struct Parse Parse;
+typedef struct ParseCleanup ParseCleanup;
typedef struct PreUpdate PreUpdate;
typedef struct PrintfArguments PrintfArguments;
typedef struct RenameToken RenameToken;
+typedef struct Returning Returning;
typedef struct RowSet RowSet;
typedef struct Savepoint Savepoint;
typedef struct Select Select;
typedef struct SQLiteThread SQLiteThread;
typedef struct SelectDest SelectDest;
+typedef struct SrcItem SrcItem;
typedef struct SrcList SrcList;
typedef struct sqlite3_str StrAccum; /* Internal alias for sqlite3_str */
typedef struct Table Table;
@@ -15318,6 +15381,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor*, u8 flags);
#define BTREE_SAVEPOSITION 0x02 /* Leave cursor pointing at NEXT or PREV */
#define BTREE_AUXDELETE 0x04 /* not the primary delete operation */
#define BTREE_APPEND 0x08 /* Insert is likely an append */
+#define BTREE_PREFORMAT 0x80 /* Inserted data is a preformated cell */
/* An instance of the BtreePayload object describes the content of a single
** entry in either an index or table btree.
@@ -15417,6 +15481,8 @@ SQLITE_PRIVATE void sqlite3BtreeCursorList(Btree*);
SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree*, int, int *, int *);
#endif
+SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor*, BtCursor*, i64);
+
/*
** If we are not using shared cache, then there is no need to
** use mutexes to access the BtShared structures. So make the
@@ -15716,103 +15782,105 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Copy 77 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */
#define OP_SCopy 78 /* synopsis: r[P2]=r[P1] */
#define OP_IntCopy 79 /* synopsis: r[P2]=r[P1] */
-#define OP_ResultRow 80 /* synopsis: output=r[P1@P2] */
-#define OP_CollSeq 81
-#define OP_AddImm 82 /* synopsis: r[P1]=r[P1]+P2 */
-#define OP_RealAffinity 83
-#define OP_Cast 84 /* synopsis: affinity(r[P1]) */
-#define OP_Permutation 85
-#define OP_Compare 86 /* synopsis: r[P1@P3] <-> r[P2@P3] */
-#define OP_IsTrue 87 /* synopsis: r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4 */
-#define OP_Offset 88 /* synopsis: r[P3] = sqlite_offset(P1) */
-#define OP_Column 89 /* synopsis: r[P3]=PX */
-#define OP_Affinity 90 /* synopsis: affinity(r[P1@P2]) */
-#define OP_MakeRecord 91 /* synopsis: r[P3]=mkrec(r[P1@P2]) */
-#define OP_Count 92 /* synopsis: r[P2]=count() */
-#define OP_ReadCookie 93
-#define OP_SetCookie 94
-#define OP_ReopenIdx 95 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenRead 96 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenWrite 97 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenDup 98
-#define OP_OpenAutoindex 99 /* synopsis: nColumn=P2 */
-#define OP_OpenEphemeral 100 /* synopsis: nColumn=P2 */
-#define OP_BitAnd 101 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */
-#define OP_BitOr 102 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */
-#define OP_ShiftLeft 103 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<<r[P1] */
-#define OP_ShiftRight 104 /* same as TK_RSHIFT, synopsis: r[P3]=r[P2]>>r[P1] */
-#define OP_Add 105 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */
-#define OP_Subtract 106 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */
-#define OP_Multiply 107 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */
-#define OP_Divide 108 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */
-#define OP_Remainder 109 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */
-#define OP_Concat 110 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */
-#define OP_SorterOpen 111
-#define OP_BitNot 112 /* same as TK_BITNOT, synopsis: r[P2]= ~r[P1] */
-#define OP_SequenceTest 113 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */
-#define OP_OpenPseudo 114 /* synopsis: P3 columns in r[P2] */
-#define OP_String8 115 /* same as TK_STRING, synopsis: r[P2]='P4' */
-#define OP_Close 116
-#define OP_ColumnsUsed 117
-#define OP_SeekScan 118 /* synopsis: Scan-ahead up to P1 rows */
-#define OP_SeekHit 119 /* synopsis: set P2<=seekHit<=P3 */
-#define OP_Sequence 120 /* synopsis: r[P2]=cursor[P1].ctr++ */
-#define OP_NewRowid 121 /* synopsis: r[P2]=rowid */
-#define OP_Insert 122 /* synopsis: intkey=r[P3] data=r[P2] */
-#define OP_Delete 123
-#define OP_ResetCount 124
-#define OP_SorterCompare 125 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */
-#define OP_SorterData 126 /* synopsis: r[P2]=data */
-#define OP_RowData 127 /* synopsis: r[P2]=data */
-#define OP_Rowid 128 /* synopsis: r[P2]=rowid */
-#define OP_NullRow 129
-#define OP_SeekEnd 130
-#define OP_IdxInsert 131 /* synopsis: key=r[P2] */
-#define OP_SorterInsert 132 /* synopsis: key=r[P2] */
-#define OP_IdxDelete 133 /* synopsis: key=r[P2@P3] */
-#define OP_DeferredSeek 134 /* synopsis: Move P3 to P1.rowid if needed */
-#define OP_IdxRowid 135 /* synopsis: r[P2]=rowid */
-#define OP_FinishSeek 136
-#define OP_Destroy 137
-#define OP_Clear 138
-#define OP_ResetSorter 139
-#define OP_CreateBtree 140 /* synopsis: r[P2]=root iDb=P1 flags=P3 */
-#define OP_SqlExec 141
-#define OP_ParseSchema 142
-#define OP_LoadAnalysis 143
-#define OP_DropTable 144
-#define OP_DropIndex 145
-#define OP_DropTrigger 146
-#define OP_IntegrityCk 147
-#define OP_RowSetAdd 148 /* synopsis: rowset(P1)=r[P2] */
-#define OP_Param 149
-#define OP_Real 150 /* same as TK_FLOAT, synopsis: r[P2]=P4 */
-#define OP_FkCounter 151 /* synopsis: fkctr[P1]+=P2 */
-#define OP_MemMax 152 /* synopsis: r[P1]=max(r[P1],r[P2]) */
-#define OP_OffsetLimit 153 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */
-#define OP_AggInverse 154 /* synopsis: accum=r[P3] inverse(r[P2@P5]) */
-#define OP_AggStep 155 /* synopsis: accum=r[P3] step(r[P2@P5]) */
-#define OP_AggStep1 156 /* synopsis: accum=r[P3] step(r[P2@P5]) */
-#define OP_AggValue 157 /* synopsis: r[P3]=value N=P2 */
-#define OP_AggFinal 158 /* synopsis: accum=r[P1] N=P2 */
-#define OP_Expire 159
-#define OP_CursorLock 160
-#define OP_CursorUnlock 161
-#define OP_TableLock 162 /* synopsis: iDb=P1 root=P2 write=P3 */
-#define OP_VBegin 163
-#define OP_VCreate 164
-#define OP_VDestroy 165
-#define OP_VOpen 166
-#define OP_VColumn 167 /* synopsis: r[P3]=vcolumn(P2) */
-#define OP_VRename 168
-#define OP_Pagecount 169
-#define OP_MaxPgcnt 170
-#define OP_Trace 171
-#define OP_CursorHint 172
-#define OP_ReleaseReg 173 /* synopsis: release r[P1@P2] mask P3 */
-#define OP_Noop 174
-#define OP_Explain 175
-#define OP_Abortable 176
+#define OP_ChngCntRow 80 /* synopsis: output=r[P1] */
+#define OP_ResultRow 81 /* synopsis: output=r[P1@P2] */
+#define OP_CollSeq 82
+#define OP_AddImm 83 /* synopsis: r[P1]=r[P1]+P2 */
+#define OP_RealAffinity 84
+#define OP_Cast 85 /* synopsis: affinity(r[P1]) */
+#define OP_Permutation 86
+#define OP_Compare 87 /* synopsis: r[P1@P3] <-> r[P2@P3] */
+#define OP_IsTrue 88 /* synopsis: r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4 */
+#define OP_Offset 89 /* synopsis: r[P3] = sqlite_offset(P1) */
+#define OP_Column 90 /* synopsis: r[P3]=PX */
+#define OP_Affinity 91 /* synopsis: affinity(r[P1@P2]) */
+#define OP_MakeRecord 92 /* synopsis: r[P3]=mkrec(r[P1@P2]) */
+#define OP_Count 93 /* synopsis: r[P2]=count() */
+#define OP_ReadCookie 94
+#define OP_SetCookie 95
+#define OP_ReopenIdx 96 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenRead 97 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenWrite 98 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenDup 99
+#define OP_OpenAutoindex 100 /* synopsis: nColumn=P2 */
+#define OP_OpenEphemeral 101 /* synopsis: nColumn=P2 */
+#define OP_BitAnd 102 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */
+#define OP_BitOr 103 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */
+#define OP_ShiftLeft 104 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<<r[P1] */
+#define OP_ShiftRight 105 /* same as TK_RSHIFT, synopsis: r[P3]=r[P2]>>r[P1] */
+#define OP_Add 106 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */
+#define OP_Subtract 107 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */
+#define OP_Multiply 108 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */
+#define OP_Divide 109 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */
+#define OP_Remainder 110 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */
+#define OP_Concat 111 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */
+#define OP_SorterOpen 112
+#define OP_BitNot 113 /* same as TK_BITNOT, synopsis: r[P2]= ~r[P1] */
+#define OP_SequenceTest 114 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */
+#define OP_OpenPseudo 115 /* synopsis: P3 columns in r[P2] */
+#define OP_String8 116 /* same as TK_STRING, synopsis: r[P2]='P4' */
+#define OP_Close 117
+#define OP_ColumnsUsed 118
+#define OP_SeekScan 119 /* synopsis: Scan-ahead up to P1 rows */
+#define OP_SeekHit 120 /* synopsis: set P2<=seekHit<=P3 */
+#define OP_Sequence 121 /* synopsis: r[P2]=cursor[P1].ctr++ */
+#define OP_NewRowid 122 /* synopsis: r[P2]=rowid */
+#define OP_Insert 123 /* synopsis: intkey=r[P3] data=r[P2] */
+#define OP_RowCell 124
+#define OP_Delete 125
+#define OP_ResetCount 126
+#define OP_SorterCompare 127 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */
+#define OP_SorterData 128 /* synopsis: r[P2]=data */
+#define OP_RowData 129 /* synopsis: r[P2]=data */
+#define OP_Rowid 130 /* synopsis: r[P2]=rowid */
+#define OP_NullRow 131
+#define OP_SeekEnd 132
+#define OP_IdxInsert 133 /* synopsis: key=r[P2] */
+#define OP_SorterInsert 134 /* synopsis: key=r[P2] */
+#define OP_IdxDelete 135 /* synopsis: key=r[P2@P3] */
+#define OP_DeferredSeek 136 /* synopsis: Move P3 to P1.rowid if needed */
+#define OP_IdxRowid 137 /* synopsis: r[P2]=rowid */
+#define OP_FinishSeek 138
+#define OP_Destroy 139
+#define OP_Clear 140
+#define OP_ResetSorter 141
+#define OP_CreateBtree 142 /* synopsis: r[P2]=root iDb=P1 flags=P3 */
+#define OP_SqlExec 143
+#define OP_ParseSchema 144
+#define OP_LoadAnalysis 145
+#define OP_DropTable 146
+#define OP_DropIndex 147
+#define OP_DropTrigger 148
+#define OP_IntegrityCk 149
+#define OP_RowSetAdd 150 /* synopsis: rowset(P1)=r[P2] */
+#define OP_Param 151
+#define OP_Real 152 /* same as TK_FLOAT, synopsis: r[P2]=P4 */
+#define OP_FkCounter 153 /* synopsis: fkctr[P1]+=P2 */
+#define OP_MemMax 154 /* synopsis: r[P1]=max(r[P1],r[P2]) */
+#define OP_OffsetLimit 155 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */
+#define OP_AggInverse 156 /* synopsis: accum=r[P3] inverse(r[P2@P5]) */
+#define OP_AggStep 157 /* synopsis: accum=r[P3] step(r[P2@P5]) */
+#define OP_AggStep1 158 /* synopsis: accum=r[P3] step(r[P2@P5]) */
+#define OP_AggValue 159 /* synopsis: r[P3]=value N=P2 */
+#define OP_AggFinal 160 /* synopsis: accum=r[P1] N=P2 */
+#define OP_Expire 161
+#define OP_CursorLock 162
+#define OP_CursorUnlock 163
+#define OP_TableLock 164 /* synopsis: iDb=P1 root=P2 write=P3 */
+#define OP_VBegin 165
+#define OP_VCreate 166
+#define OP_VDestroy 167
+#define OP_VOpen 168
+#define OP_VColumn 169 /* synopsis: r[P3]=vcolumn(P2) */
+#define OP_VRename 170
+#define OP_Pagecount 171
+#define OP_MaxPgcnt 172
+#define OP_Trace 173
+#define OP_CursorHint 174
+#define OP_ReleaseReg 175 /* synopsis: release r[P1@P2] mask P3 */
+#define OP_Noop 176
+#define OP_Explain 177
+#define OP_Abortable 178
/* Properties such as "out2" or "jump" that are specified in
** comments following the "case" for each opcode in the vdbe.c
@@ -15835,19 +15903,19 @@ typedef struct VdbeOpList VdbeOpList;
/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x01, 0x01, 0x01, 0x00,\
/* 64 */ 0x00, 0x02, 0x02, 0x08, 0x00, 0x10, 0x10, 0x10,\
/* 72 */ 0x10, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10,\
-/* 80 */ 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x12,\
-/* 88 */ 0x20, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\
-/* 96 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x26, 0x26,\
-/* 104 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x00,\
-/* 112 */ 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,\
-/* 120 */ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
-/* 128 */ 0x10, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x10,\
-/* 136 */ 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,\
-/* 144 */ 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00,\
-/* 152 */ 0x04, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
+/* 80 */ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,\
+/* 88 */ 0x12, 0x20, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,\
+/* 96 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x26,\
+/* 104 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,\
+/* 112 */ 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,\
+/* 120 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\
+/* 128 */ 0x00, 0x00, 0x10, 0x00, 0x00, 0x04, 0x04, 0x00,\
+/* 136 */ 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00,\
+/* 144 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10,\
+/* 152 */ 0x10, 0x00, 0x04, 0x1a, 0x00, 0x00, 0x00, 0x00,\
/* 160 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
-/* 168 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\
-/* 176 */ 0x00,}
+/* 168 */ 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00,\
+/* 176 */ 0x00, 0x00, 0x00,}
/* The sqlite3P2Values() routine is able to run faster if it knows
** the value of the largest JUMP opcode. The smaller the maximum
@@ -15915,7 +15983,7 @@ SQLITE_PRIVATE void sqlite3ExplainBreakpoint(const char*,const char*);
#else
# define sqlite3ExplainBreakpoint(A,B) /*no-op*/
#endif
-SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*);
+SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*, int, char*, u16);
SQLITE_PRIVATE void sqlite3VdbeChangeOpcode(Vdbe*, int addr, u8);
SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, int addr, int P1);
SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, int addr, int P2);
@@ -16887,6 +16955,11 @@ SQLITE_PRIVATE void sqlite3CryptFunc(sqlite3_context*,int,sqlite3_value**);
#endif /* SQLITE_OMIT_DEPRECATED */
#define SQLITE_TRACE_NONLEGACY_MASK 0x0f /* Normal flags */
+/*
+** Maximum number of sqlite3.aDb[] entries. This is the number of attached
+** databases plus 2 for "main" and "temp".
+*/
+#define SQLITE_MAX_DB (SQLITE_MAX_ATTACHED+2)
/*
** Each database connection is an instance of the following structure.
@@ -16907,7 +16980,7 @@ struct sqlite3 {
int errCode; /* Most recent error code (SQLITE_*) */
int errMask; /* & result codes with this before returning */
int iSysErrno; /* Errno value from last system error */
- u16 dbOptFlags; /* Flags to enable/disable optimizations */
+ u32 dbOptFlags; /* Flags to enable/disable optimizations */
u8 enc; /* Text encoding */
u8 autoCommit; /* The auto-commit flag. */
u8 temp_store; /* 1: file 2: memory 0: default */
@@ -16934,7 +17007,10 @@ struct sqlite3 {
unsigned orphanTrigger : 1; /* Last statement is orphaned TEMP trigger */
unsigned imposterTable : 1; /* Building an imposter table */
unsigned reopenMemdb : 1; /* ATTACH is really a reopen using MemDB */
+ unsigned bDropColumn : 1; /* Doing schema check after DROP COLUMN */
char **azInit; /* "type", "name", and "tbl_name" columns */
+ /* or if bDropColumn, then azInit[0] is the */
+ /* name of the column being dropped */
} init;
int nVdbeActive; /* Number of VDBEs currently running */
int nVdbeRead; /* Number of active VDBEs that read or write */
@@ -17114,24 +17190,26 @@ struct sqlite3 {
** sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS,...) interface to
** selectively disable various optimizations.
*/
-#define SQLITE_QueryFlattener 0x0001 /* Query flattening */
-#define SQLITE_WindowFunc 0x0002 /* Use xInverse for window functions */
-#define SQLITE_GroupByOrder 0x0004 /* GROUPBY cover of ORDERBY */
-#define SQLITE_FactorOutConst 0x0008 /* Constant factoring */
-#define SQLITE_DistinctOpt 0x0010 /* DISTINCT using indexes */
-#define SQLITE_CoverIdxScan 0x0020 /* Covering index scans */
-#define SQLITE_OrderByIdxJoin 0x0040 /* ORDER BY of joins via index */
-#define SQLITE_Transitive 0x0080 /* Transitive constraints */
-#define SQLITE_OmitNoopJoin 0x0100 /* Omit unused tables in joins */
-#define SQLITE_CountOfView 0x0200 /* The count-of-view optimization */
-#define SQLITE_CursorHints 0x0400 /* Add OP_CursorHint opcodes */
-#define SQLITE_Stat4 0x0800 /* Use STAT4 data */
- /* TH3 expects the Stat4 ^^^^^^ value to be 0x0800. Don't change it */
-#define SQLITE_PushDown 0x1000 /* The push-down optimization */
-#define SQLITE_SimplifyJoin 0x2000 /* Convert LEFT JOIN to JOIN */
-#define SQLITE_SkipScan 0x4000 /* Skip-scans */
-#define SQLITE_PropagateConst 0x8000 /* The constant propagation opt */
-#define SQLITE_AllOpts 0xffff /* All optimizations */
+#define SQLITE_QueryFlattener 0x00000001 /* Query flattening */
+#define SQLITE_WindowFunc 0x00000002 /* Use xInverse for window functions */
+#define SQLITE_GroupByOrder 0x00000004 /* GROUPBY cover of ORDERBY */
+#define SQLITE_FactorOutConst 0x00000008 /* Constant factoring */
+#define SQLITE_DistinctOpt 0x00000010 /* DISTINCT using indexes */
+#define SQLITE_CoverIdxScan 0x00000020 /* Covering index scans */
+#define SQLITE_OrderByIdxJoin 0x00000040 /* ORDER BY of joins via index */
+#define SQLITE_Transitive 0x00000080 /* Transitive constraints */
+#define SQLITE_OmitNoopJoin 0x00000100 /* Omit unused tables in joins */
+#define SQLITE_CountOfView 0x00000200 /* The count-of-view optimization */
+#define SQLITE_CursorHints 0x00000400 /* Add OP_CursorHint opcodes */
+#define SQLITE_Stat4 0x00000800 /* Use STAT4 data */
+ /* TH3 expects this value ^^^^^^^^^^ to be 0x0000800. Don't change it */
+#define SQLITE_PushDown 0x00001000 /* The push-down optimization */
+#define SQLITE_SimplifyJoin 0x00002000 /* Convert LEFT JOIN to JOIN */
+#define SQLITE_SkipScan 0x00004000 /* Skip-scans */
+#define SQLITE_PropagateConst 0x00008000 /* The constant propagation opt */
+#define SQLITE_MinMaxOpt 0x00010000 /* The min/max optimization */
+#define SQLITE_ExistsToIN 0x00020000 /* The EXISTS-to-IN optimization */
+#define SQLITE_AllOpts 0xffffffff /* All optimizations */
/*
** Macros for testing whether or not optimizations are enabled or disabled.
@@ -17287,6 +17365,9 @@ struct FuncDestructor {
** a single query. The iArg is ignored. The user-data is always set
** to a NULL pointer. The bNC parameter is not used.
**
+** MFUNCTION(zName, nArg, xPtr, xFunc)
+** For math-library functions. xPtr is an arbitrary pointer.
+**
** PURE_DATE(zName, nArg, iArg, bNC, xFunc)
** Used for "pure" date/time functions, this macro is like DFUNCTION
** except that it does set the SQLITE_FUNC_CONSTANT flags. iArg is
@@ -17322,6 +17403,9 @@ struct FuncDestructor {
#define SFUNCTION(zName, nArg, iArg, bNC, xFunc) \
{nArg, SQLITE_UTF8|SQLITE_DIRECTONLY|SQLITE_FUNC_UNSAFE, \
SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} }
+#define MFUNCTION(zName, nArg, xPtr, xFunc) \
+ {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8, \
+ xPtr, 0, xFunc, 0, 0, 0, #zName, {0} }
#define INLINE_FUNC(zName, nArg, iArg, mFlags) \
{nArg, SQLITE_UTF8|SQLITE_FUNC_INLINE|SQLITE_FUNC_CONSTANT|(mFlags), \
SQLITE_INT_TO_PTR(iArg), 0, noopFunc, 0, 0, 0, #zName, {0} }
@@ -17416,7 +17500,12 @@ struct Column {
u16 colFlags; /* Boolean properties. See COLFLAG_ defines below */
};
-/* Allowed values for Column.colFlags:
+/* Allowed values for Column.colFlags.
+**
+** Constraints:
+** TF_HasVirtual == COLFLAG_VIRTUAL
+** TF_HasStored == COLFLAG_STORED
+** TF_HasHidden == COLFLAG_HIDDEN
*/
#define COLFLAG_PRIMKEY 0x0001 /* Column is part of the primary key */
#define COLFLAG_HIDDEN 0x0002 /* A hidden column in a virtual table */
@@ -17592,7 +17681,6 @@ struct Table {
#endif
Trigger *pTrigger; /* List of triggers stored in pSchema */
Schema *pSchema; /* Schema that contains this table */
- Table *pNextZombie; /* Next on the Parse.pZombieTab list */
};
/*
@@ -17606,11 +17694,12 @@ struct Table {
**
** Constraints:
**
-** TF_HasVirtual == COLFLAG_Virtual
-** TF_HasStored == COLFLAG_Stored
+** TF_HasVirtual == COLFLAG_VIRTUAL
+** TF_HasStored == COLFLAG_STORED
+** TF_HasHidden == COLFLAG_HIDDEN
*/
#define TF_Readonly 0x0001 /* Read-only system table */
-#define TF_Ephemeral 0x0002 /* An ephemeral table */
+#define TF_HasHidden 0x0002 /* Has one or more hidden columns */
#define TF_HasPrimaryKey 0x0004 /* Table has a primary key */
#define TF_Autoincrement 0x0008 /* Integer primary key is autoincrement */
#define TF_HasStat1 0x0010 /* nRowLogEst set from sqlite_stat1 */
@@ -17625,6 +17714,7 @@ struct Table {
#define TF_HasNotNull 0x0800 /* Contains NOT NULL constraints */
#define TF_Shadow 0x1000 /* True for a shadow table */
#define TF_HasStat4 0x2000 /* STAT4 info available for this table */
+#define TF_Ephemeral 0x4000 /* An ephemeral table */
/*
** Test to see whether or not a table is a virtual table. This is
@@ -17721,16 +17811,22 @@ struct FKey {
** is returned. REPLACE means that preexisting database rows that caused
** a UNIQUE constraint violation are removed so that the new insert or
** update can proceed. Processing continues and no error is reported.
+** UPDATE applies to insert operations only and means that the insert
+** is omitted and the DO UPDATE clause of an upsert is run instead.
**
-** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys.
+** RESTRICT, SETNULL, SETDFLT, and CASCADE actions apply only to foreign keys.
** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the
** same as ROLLBACK for DEFERRED keys. SETNULL means that the foreign
-** key is set to NULL. CASCADE means that a DELETE or UPDATE of the
+** key is set to NULL. SETDFLT means that the foreign key is set
+** to its default value. CASCADE means that a DELETE or UPDATE of the
** referenced table row is propagated into the row that holds the
** foreign key.
**
+** The OE_Default value is a place holder that means to use whatever
+** conflict resolution algorthm is required from context.
+**
** The following symbolic values are used to record which type
-** of action to take.
+** of conflict resolution action to take.
*/
#define OE_None 0 /* There is no constraint to check */
#define OE_Rollback 1 /* Fail the operation and rollback the transaction */
@@ -17987,7 +18083,6 @@ struct AggInfo {
} *aFunc;
int nFunc; /* Number of entries in aFunc[] */
u32 selId; /* Select to which this AggInfo belongs */
- AggInfo *pNext; /* Next in list of them all */
};
/*
@@ -18116,7 +18211,7 @@ struct Expr {
** TK_VARIABLE: variable number (always >= 1).
** TK_SELECT_COLUMN: column of the result vector */
i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
- i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */
+ int iRightJoinTable; /* If EP_FromJoin, the right table of the join */
AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
union {
Table *pTab; /* TK_COLUMN: Table containing column. Can be NULL
@@ -18158,7 +18253,7 @@ struct Expr {
#define EP_ConstFunc 0x080000 /* A SQLITE_FUNC_CONSTANT or _SLOCHNG function */
#define EP_CanBeNull 0x100000 /* Can be null despite NOT NULL constraint */
#define EP_Subquery 0x200000 /* Tree contains a TK_SELECT operator */
-#define EP_Alias 0x400000 /* Is an alias for a result set column */
+ /* 0x400000 // Available */
#define EP_Leaf 0x800000 /* Expr.pLeft, .pRight, .u.pSelect all NULL */
#define EP_WinFunc 0x1000000 /* TK_FUNCTION with Expr.y.pWin set */
#define EP_Subrtn 0x2000000 /* Uses Expr.y.sub. TK_IN, _SELECT, or _EXISTS */
@@ -18307,6 +18402,45 @@ struct IdList {
};
/*
+** The SrcItem object represents a single term in the FROM clause of a query.
+** The SrcList object is mostly an array of SrcItems.
+*/
+struct SrcItem {
+ Schema *pSchema; /* Schema to which this item is fixed */
+ char *zDatabase; /* Name of database holding this table */
+ char *zName; /* Name of the table */
+ char *zAlias; /* The "B" part of a "A AS B" phrase. zName is the "A" */
+ Table *pTab; /* An SQL table corresponding to zName */
+ Select *pSelect; /* A SELECT statement used in place of a table name */
+ int addrFillSub; /* Address of subroutine to manifest a subquery */
+ int regReturn; /* Register holding return address of addrFillSub */
+ int regResult; /* Registers holding results of a co-routine */
+ struct {
+ u8 jointype; /* Type of join between this table and the previous */
+ unsigned notIndexed :1; /* True if there is a NOT INDEXED clause */
+ unsigned isIndexedBy :1; /* True if there is an INDEXED BY clause */
+ unsigned isTabFunc :1; /* True if table-valued-function syntax */
+ unsigned isCorrelated :1; /* True if sub-query is correlated */
+ unsigned viaCoroutine :1; /* Implemented as a co-routine */
+ unsigned isRecursive :1; /* True for recursive reference in WITH */
+ unsigned fromDDL :1; /* Comes from sqlite_schema */
+ unsigned isCte :1; /* This is a CTE */
+ } fg;
+ int iCursor; /* The VDBE cursor number used to access this table */
+ Expr *pOn; /* The ON clause of a join */
+ IdList *pUsing; /* The USING clause of a join */
+ Bitmask colUsed; /* Bit N (1<<N) set if column N of pTab is used */
+ union {
+ char *zIndexedBy; /* Identifier from "INDEXED BY <zIndex>" clause */
+ ExprList *pFuncArg; /* Arguments to table-valued-function */
+ } u1;
+ union {
+ Index *pIBIndex; /* Index structure corresponding to u1.zIndexedBy */
+ CteUse *pCteUse; /* CTE Usage info info fg.isCte is true */
+ } u2;
+};
+
+/*
** The following structure describes the FROM clause of a SELECT statement.
** Each table or subquery in the FROM clause is a separate element of
** the SrcList.a[] array.
@@ -18328,36 +18462,7 @@ struct IdList {
struct SrcList {
int nSrc; /* Number of tables or subqueries in the FROM clause */
u32 nAlloc; /* Number of entries allocated in a[] below */
- struct SrcList_item {
- Schema *pSchema; /* Schema to which this item is fixed */
- char *zDatabase; /* Name of database holding this table */
- char *zName; /* Name of the table */
- char *zAlias; /* The "B" part of a "A AS B" phrase. zName is the "A" */
- Table *pTab; /* An SQL table corresponding to zName */
- Select *pSelect; /* A SELECT statement used in place of a table name */
- int addrFillSub; /* Address of subroutine to manifest a subquery */
- int regReturn; /* Register holding return address of addrFillSub */
- int regResult; /* Registers holding results of a co-routine */
- struct {
- u8 jointype; /* Type of join between this table and the previous */
- unsigned notIndexed :1; /* True if there is a NOT INDEXED clause */
- unsigned isIndexedBy :1; /* True if there is an INDEXED BY clause */
- unsigned isTabFunc :1; /* True if table-valued-function syntax */
- unsigned isCorrelated :1; /* True if sub-query is correlated */
- unsigned viaCoroutine :1; /* Implemented as a co-routine */
- unsigned isRecursive :1; /* True for recursive reference in WITH */
- unsigned fromDDL :1; /* Comes from sqlite_schema */
- } fg;
- int iCursor; /* The VDBE cursor number used to access this table */
- Expr *pOn; /* The ON clause of a join */
- IdList *pUsing; /* The USING clause of a join */
- Bitmask colUsed; /* Bit N (1<<N) set if column N of pTab is used */
- union {
- char *zIndexedBy; /* Identifier from "INDEXED BY <zIndex>" clause */
- ExprList *pFuncArg; /* Arguments to table-valued-function */
- } u1;
- Index *pIBIndex; /* Index structure corresponding to u1.zIndexedBy */
- } a[1]; /* One entry for each identifier on the list */
+ SrcItem a[1]; /* One entry for each identifier on the list */
};
/*
@@ -18433,6 +18538,7 @@ struct NameContext {
ExprList *pEList; /* Optional list of result-set columns */
AggInfo *pAggInfo; /* Information about aggregates at this level */
Upsert *pUpsert; /* ON CONFLICT clause information from an upsert */
+ int iBaseReg; /* For TK_REGISTER when parsing RETURNING */
} uNC;
NameContext *pNext; /* Next outer name context. NULL for outermost */
int nRef; /* Number of names resolved by this context */
@@ -18461,6 +18567,7 @@ struct NameContext {
#define NC_UEList 0x00080 /* True if uNC.pEList is used */
#define NC_UAggInfo 0x00100 /* True if uNC.pAggInfo is used */
#define NC_UUpsert 0x00200 /* True if uNC.pUpsert is used */
+#define NC_UBaseReg 0x00400 /* True if uNC.iBaseReg is used */
#define NC_MinMaxAgg 0x01000 /* min/max aggregates seen. See note above */
#define NC_Complex 0x02000 /* True if a function or subquery seen */
#define NC_AllowWin 0x04000 /* Window functions are allowed here */
@@ -18484,15 +18591,21 @@ struct NameContext {
** WHERE clause is omitted.
*/
struct Upsert {
- ExprList *pUpsertTarget; /* Optional description of conflicting index */
+ ExprList *pUpsertTarget; /* Optional description of conflict target */
Expr *pUpsertTargetWhere; /* WHERE clause for partial index targets */
ExprList *pUpsertSet; /* The SET clause from an ON CONFLICT UPDATE */
Expr *pUpsertWhere; /* WHERE clause for the ON CONFLICT UPDATE */
- /* The fields above comprise the parse tree for the upsert clause.
- ** The fields below are used to transfer information from the INSERT
- ** processing down into the UPDATE processing while generating code.
- ** Upsert owns the memory allocated above, but not the memory below. */
- Index *pUpsertIdx; /* Constraint that pUpsertTarget identifies */
+ Upsert *pNextUpsert; /* Next ON CONFLICT clause in the list */
+ u8 isDoUpdate; /* True for DO UPDATE. False for DO NOTHING */
+ /* Above this point is the parse tree for the ON CONFLICT clauses.
+ ** The next group of fields stores intermediate data. */
+ void *pToFree; /* Free memory when deleting the Upsert object */
+ /* All fields above are owned by the Upsert object and must be freed
+ ** when the Upsert is destroyed. The fields below are used to transfer
+ ** information from the INSERT processing down into the UPDATE processing
+ ** while generating code. The fields below are owned by the INSERT
+ ** statement and will be freed by INSERT processing. */
+ Index *pUpsertIdx; /* UNIQUE constraint specified by pUpsertTarget */
SrcList *pUpsertSrc; /* Table to be updated */
int regData; /* First register holding array of VALUES */
int iDataCur; /* Index of the data cursor */
@@ -18572,6 +18685,8 @@ struct Select {
#define SF_View 0x0200000 /* SELECT statement is a view */
#define SF_NoopOrderBy 0x0400000 /* ORDER BY is ignored for this query */
#define SF_UpdateFrom 0x0800000 /* Statement is an UPDATE...FROM */
+#define SF_PushDown 0x1000000 /* SELECT has be modified by push-down opt */
+#define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */
/*
** The results of a SELECT can be distributed in several ways, as defined
@@ -18743,6 +18858,17 @@ struct TriggerPrg {
#endif
/*
+** An instance of the ParseCleanup object specifies an operation that
+** should be performed after parsing to deallocation resources obtained
+** during the parse and which are no longer needed.
+*/
+struct ParseCleanup {
+ ParseCleanup *pNext; /* Next cleanup task */
+ void *pPtr; /* Pointer to object to deallocate */
+ void (*xCleanup)(sqlite3*,void*); /* Deallocation routine */
+};
+
+/*
** An SQL parser context. A copy of this structure is passed through
** the parser and down into all the parser action routine in order to
** carry around information that is global to the entire parse.
@@ -18773,6 +18899,9 @@ struct Parse {
u8 okConstFactor; /* OK to factor out constants */
u8 disableLookaside; /* Number of times lookaside has been disabled */
u8 disableVtab; /* Disable all virtual tables for this parse */
+#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
+ u8 earlyCleanup; /* OOM inside sqlite3ParserAddCleanup() */
+#endif
int nRangeReg; /* Size of the temporary register block */
int iRangeReg; /* First register in temporary register block */
int nErr; /* Number of errors seen */
@@ -18800,12 +18929,15 @@ struct Parse {
Parse *pToplevel; /* Parse structure for main program (or NULL) */
Table *pTriggerTab; /* Table triggers are being coded for */
Parse *pParentParse; /* Parent parser if this parser is nested */
- AggInfo *pAggList; /* List of all AggInfo objects */
- int addrCrTab; /* Address of OP_CreateBtree opcode on CREATE TABLE */
+ union {
+ int addrCrTab; /* Address of OP_CreateBtree on CREATE TABLE */
+ Returning *pReturning; /* The RETURNING clause */
+ } u1;
u32 nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */
u32 oldmask; /* Mask of old.* columns referenced */
u32 newmask; /* Mask of new.* columns referenced */
u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */
+ u8 bReturning; /* Coding a RETURNING trigger */
u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */
u8 disableTriggers; /* True to disable triggers */
@@ -18851,10 +18983,9 @@ struct Parse {
Token sArg; /* Complete text of a module argument */
Table **apVtabLock; /* Pointer to virtual tables needing locking */
#endif
- Table *pZombieTab; /* List of Table objects to delete after code gen */
TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */
With *pWith; /* Current WITH clause, or NULL */
- With *pWithToFree; /* Free this WITH object at the end of the parse */
+ ParseCleanup *pCleanup; /* List of cleanup operations to run after parse */
#ifndef SQLITE_OMIT_ALTERTABLE
RenameToken *pRename; /* Tokens subject to renaming by ALTER TABLE */
#endif
@@ -18934,6 +19065,7 @@ struct AuthContext {
#define OPFLAG_SAVEPOSITION 0x02 /* OP_Delete/Insert: save cursor pos */
#define OPFLAG_AUXDELETE 0x04 /* OP_Delete: index in a DELETE op */
#define OPFLAG_NOCHNG_MAGIC 0x6d /* OP_MakeRecord: serialtype 10 is ok */
+#define OPFLAG_PREFORMAT 0x80 /* OP_Insert uses preformatted cell */
/*
* Each trigger present in the database schema is stored as an instance of
@@ -18955,6 +19087,7 @@ struct Trigger {
char *table; /* The table or view to which the trigger applies */
u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT */
u8 tr_tm; /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
+ u8 bReturning; /* This trigger implements a RETURNING clause */
Expr *pWhen; /* The WHEN clause of the expression (may be NULL) */
IdList *pColumns; /* If this is an UPDATE OF <column-list> trigger,
the <column-list> is stored here */
@@ -19013,14 +19146,15 @@ struct Trigger {
*
*/
struct TriggerStep {
- u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */
+ u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT,
+ ** or TK_RETURNING */
u8 orconf; /* OE_Rollback etc. */
Trigger *pTrig; /* The trigger that this step is a part of */
Select *pSelect; /* SELECT statement or RHS of INSERT INTO SELECT ... */
char *zTarget; /* Target table for DELETE, UPDATE, INSERT */
SrcList *pFrom; /* FROM clause for UPDATE statement (if any) */
Expr *pWhere; /* The WHERE clause for DELETE or UPDATE steps */
- ExprList *pExprList; /* SET clause for UPDATE */
+ ExprList *pExprList; /* SET clause for UPDATE, or RETURNING clause */
IdList *pIdList; /* Column names for INSERT */
Upsert *pUpsert; /* Upsert clauses on an INSERT */
char *zSpan; /* Original SQL text of this command */
@@ -19029,18 +19163,16 @@ struct TriggerStep {
};
/*
-** The following structure contains information used by the sqliteFix...
-** routines as they walk the parse tree to make database references
-** explicit.
+** Information about a RETURNING clause
*/
-typedef struct DbFixer DbFixer;
-struct DbFixer {
- Parse *pParse; /* The parsing context. Error messages written here */
- Schema *pSchema; /* Fix items to this schema */
- u8 bTemp; /* True for TEMP schema entries */
- const char *zDb; /* Make sure all objects are contained in this database */
- const char *zType; /* Type of the container - used for error messages */
- const Token *pName; /* Name of the container - used for error messages */
+struct Returning {
+ Parse *pParse; /* The parse that includes the RETURNING clause */
+ ExprList *pReturnEL; /* List of expressions to return */
+ Trigger retTrig; /* The transient trigger that implements RETURNING */
+ TriggerStep retTStep; /* The trigger step */
+ int iRetCur; /* Transient table holding RETURNING results */
+ int nRetCol; /* Number of in pReturnEL after expansion */
+ int iRetReg; /* Register array for holding a row of RETURNING */
};
/*
@@ -19080,7 +19212,8 @@ typedef struct {
/*
** Allowed values for mInitFlags
*/
-#define INITFLAG_AlterTable 0x0001 /* This is a reparse after ALTER TABLE */
+#define INITFLAG_AlterRename 0x0001 /* Reparse after a RENAME */
+#define INITFLAG_AlterDrop 0x0002 /* Reparse after a DROP COLUMN */
/*
** Structure containing global configuration data for the SQLite library.
@@ -19192,10 +19325,26 @@ struct Walker {
struct WhereConst *pConst; /* WHERE clause constants */
struct RenameCtx *pRename; /* RENAME COLUMN context */
struct Table *pTab; /* Table of generated column */
- struct SrcList_item *pSrcItem; /* A single FROM clause item */
+ SrcItem *pSrcItem; /* A single FROM clause item */
+ DbFixer *pFix;
} u;
};
+/*
+** The following structure contains information used by the sqliteFix...
+** routines as they walk the parse tree to make database references
+** explicit.
+*/
+struct DbFixer {
+ Parse *pParse; /* The parsing context. Error messages written here */
+ Walker w; /* Walker object */
+ Schema *pSchema; /* Fix items to this schema */
+ u8 bTemp; /* True for TEMP schema entries */
+ const char *zDb; /* Make sure all objects are contained in this database */
+ const char *zType; /* Type of the container - used for error messages */
+ const Token *pName; /* Name of the container - used for error messages */
+};
+
/* Forward declarations */
SQLITE_PRIVATE int sqlite3WalkExpr(Walker*, Expr*);
SQLITE_PRIVATE int sqlite3WalkExprList(Walker*, ExprList*);
@@ -19221,20 +19370,55 @@ SQLITE_PRIVATE void sqlite3SelectWalkAssert2(Walker*, Select*);
#define WRC_Abort 2 /* Abandon the tree walk */
/*
-** An instance of this structure represents a set of one or more CTEs
-** (common table expressions) created by a single WITH clause.
+** A single common table expression
+*/
+struct Cte {
+ char *zName; /* Name of this CTE */
+ ExprList *pCols; /* List of explicit column names, or NULL */
+ Select *pSelect; /* The definition of this CTE */
+ const char *zCteErr; /* Error message for circular references */
+ CteUse *pUse; /* Usage information for this CTE */
+ u8 eM10d; /* The MATERIALIZED flag */
+};
+
+/*
+** Allowed values for the materialized flag (eM10d):
+*/
+#define M10d_Yes 0 /* AS MATERIALIZED */
+#define M10d_Any 1 /* Not specified. Query planner's choice */
+#define M10d_No 2 /* AS NOT MATERIALIZED */
+
+/*
+** An instance of the With object represents a WITH clause containing
+** one or more CTEs (common table expressions).
*/
struct With {
- int nCte; /* Number of CTEs in the WITH clause */
- With *pOuter; /* Containing WITH clause, or NULL */
- struct Cte { /* For each CTE in the WITH clause.... */
- char *zName; /* Name of this CTE */
- ExprList *pCols; /* List of explicit column names, or NULL */
- Select *pSelect; /* The definition of this CTE */
- const char *zCteErr; /* Error message for circular references */
- } a[1];
+ int nCte; /* Number of CTEs in the WITH clause */
+ With *pOuter; /* Containing WITH clause, or NULL */
+ Cte a[1]; /* For each CTE in the WITH clause.... */
};
+/*
+** The Cte object is not guaranteed to persist for the entire duration
+** of code generation. (The query flattener or other parser tree
+** edits might delete it.) The following object records information
+** about each Common Table Expression that must be preserved for the
+** duration of the parse.
+**
+** The CteUse objects are freed using sqlite3ParserAddCleanup() rather
+** than sqlite3SelectDelete(), which is what enables them to persist
+** until the end of code generation.
+*/
+struct CteUse {
+ int nUse; /* Number of users of this CTE */
+ int addrM9e; /* Start of subroutine to compute materialization */
+ int regRtn; /* Return address register for addrM9e subroutine */
+ int iCur; /* Ephemeral table holding the materialization */
+ LogEst nRowEst; /* Estimated number of rows in the table */
+ u8 eM10d; /* The MATERIALIZED flag */
+};
+
+
#ifdef SQLITE_DEBUG
/*
** An instance of the TreeView object is used for printing the content of
@@ -19312,7 +19496,6 @@ SQLITE_PRIVATE int sqlite3WindowCompare(Parse*, Window*, Window*, int);
SQLITE_PRIVATE void sqlite3WindowCodeInit(Parse*, Select*);
SQLITE_PRIVATE void sqlite3WindowCodeStep(Parse*, Select*, WhereInfo*, int, int);
SQLITE_PRIVATE int sqlite3WindowRewrite(Parse*, Select*);
-SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse*, struct SrcList_item*);
SQLITE_PRIVATE void sqlite3WindowUpdate(Parse*, Window*, Window*, FuncDef*);
SQLITE_PRIVATE Window *sqlite3WindowDup(sqlite3 *db, Expr *pOwner, Window *p);
SQLITE_PRIVATE Window *sqlite3WindowListDup(sqlite3 *db, Window *p);
@@ -19629,6 +19812,7 @@ SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,Expr*,const char*,const char*)
SQLITE_PRIVATE void sqlite3AddCollateType(Parse*, Token*);
SQLITE_PRIVATE void sqlite3AddGenerated(Parse*,Expr*,Token*);
SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,u8,Select*);
+SQLITE_PRIVATE void sqlite3AddReturning(Parse*,ExprList*);
SQLITE_PRIVATE int sqlite3ParseUri(const char*,const char*,unsigned int*,
sqlite3_vfs**,char**,char **);
#define sqlite3CodecQueryParameters(A,B,C) 0
@@ -19694,7 +19878,7 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, T
Token*, Select*, Expr*, IdList*);
SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *, SrcList *, Token *);
SQLITE_PRIVATE void sqlite3SrcListFuncArgs(Parse*, SrcList*, ExprList*);
-SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *, struct SrcList_item *);
+SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *, SrcItem *);
SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList*);
SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse*, SrcList*);
SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3*, IdList*);
@@ -19722,6 +19906,7 @@ SQLITE_PRIVATE LogEst sqlite3WhereOutputRowCount(WhereInfo*);
SQLITE_PRIVATE int sqlite3WhereIsDistinct(WhereInfo*);
SQLITE_PRIVATE int sqlite3WhereIsOrdered(WhereInfo*);
SQLITE_PRIVATE int sqlite3WhereOrderByLimitOptLabel(WhereInfo*);
+SQLITE_PRIVATE void sqlite3WhereMinMaxOptEarlyOut(Vdbe*,WhereInfo*);
SQLITE_PRIVATE int sqlite3WhereIsSorted(WhereInfo*);
SQLITE_PRIVATE int sqlite3WhereContinueLabel(WhereInfo*);
SQLITE_PRIVATE int sqlite3WhereBreakLabel(WhereInfo*);
@@ -19755,7 +19940,7 @@ SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3*,const char*, const char*);
#define LOCATE_VIEW 0x01
#define LOCATE_NOERR 0x02
SQLITE_PRIVATE Table *sqlite3LocateTable(Parse*,u32 flags,const char*, const char*);
-SQLITE_PRIVATE Table *sqlite3LocateTableItem(Parse*,u32 flags,struct SrcList_item *);
+SQLITE_PRIVATE Table *sqlite3LocateTableItem(Parse*,u32 flags,SrcItem *);
SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3*,const char*, const char*);
SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*);
SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*);
@@ -19883,6 +20068,7 @@ SQLITE_PRIVATE SrcList *sqlite3TriggerStepSrc(Parse*, TriggerStep*);
#endif
SQLITE_PRIVATE int sqlite3JoinType(Parse*, Token*, Token*, Token*);
+SQLITE_PRIVATE int sqlite3ColumnIndex(Table *pTab, const char *zCol);
SQLITE_PRIVATE void sqlite3SetJoinExpr(Expr*,int);
SQLITE_PRIVATE void sqlite3CreateForeignKey(Parse*, ExprList*, Token*, ExprList*, int);
SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse*, int);
@@ -19905,7 +20091,6 @@ SQLITE_PRIVATE void sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Tok
SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*);
SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
-SQLITE_PRIVATE int sqlite3FixExprList(DbFixer*, ExprList*);
SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64);
SQLITE_PRIVATE void sqlite3Int64ToText(i64,char*);
@@ -19968,6 +20153,7 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char*, i64*);
SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...);
SQLITE_PRIVATE void sqlite3Error(sqlite3*,int);
+SQLITE_PRIVATE void sqlite3ErrorClear(sqlite3*);
SQLITE_PRIVATE void sqlite3SystemError(sqlite3*,int);
SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
SQLITE_PRIVATE u8 sqlite3HexToInt(int h);
@@ -20031,7 +20217,6 @@ SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[];
SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[];
SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config;
SQLITE_PRIVATE FuncDefHash sqlite3BuiltinFunctions;
-SQLITE_API extern u32 sqlite3_unsupported_selecttrace;
#ifndef SQLITE_OMIT_WSD
SQLITE_PRIVATE int sqlite3PendingByte;
#endif
@@ -20050,6 +20235,7 @@ SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3*, int);
SQLITE_PRIVATE void sqlite3CodeRhsOfIN(Parse*, Expr*, int);
SQLITE_PRIVATE int sqlite3CodeSubselect(Parse*, Expr*);
SQLITE_PRIVATE void sqlite3SelectPrep(Parse*, Select*, NameContext*);
+SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse*, SrcItem*);
SQLITE_PRIVATE void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p);
SQLITE_PRIVATE int sqlite3MatchEName(
const struct ExprList_item*,
@@ -20067,6 +20253,7 @@ SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const
SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *, Table *, int, int);
SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *, Token *);
SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *, SrcList *);
+SQLITE_PRIVATE void sqlite3AlterDropColumn(Parse*, SrcList*, Token*);
SQLITE_PRIVATE void *sqlite3RenameTokenMap(Parse*, void*, Token*);
SQLITE_PRIVATE void sqlite3RenameTokenRemap(Parse*, void *pTo, void *pFrom);
SQLITE_PRIVATE void sqlite3RenameExprUnmap(Parse*, Expr*);
@@ -20090,6 +20277,7 @@ SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo*);
SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoRef(KeyInfo*);
SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse*, Index*);
SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoFromExprList(Parse*, ExprList*, int, int);
+SQLITE_PRIVATE const char *sqlite3SelectOpName(int);
SQLITE_PRIVATE int sqlite3HasExplicitNulls(Parse*, ExprList*);
#ifdef SQLITE_DEBUG
@@ -20220,6 +20408,7 @@ SQLITE_PRIVATE sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context*);
SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe*, const char*, int);
SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *);
SQLITE_PRIVATE void sqlite3ParserReset(Parse*);
+SQLITE_PRIVATE void *sqlite3ParserAddCleanup(Parse*,void(*)(sqlite3*,void*),void*);
#ifdef SQLITE_ENABLE_NORMALIZE
SQLITE_PRIVATE char *sqlite3Normalize(Vdbe*, const char*);
#endif
@@ -20234,23 +20423,32 @@ SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3*, int, int, int*, int*);
SQLITE_PRIVATE int sqlite3WalDefaultHook(void*,sqlite3*,const char*,int);
#endif
#ifndef SQLITE_OMIT_CTE
-SQLITE_PRIVATE With *sqlite3WithAdd(Parse*,With*,Token*,ExprList*,Select*);
+SQLITE_PRIVATE Cte *sqlite3CteNew(Parse*,Token*,ExprList*,Select*,u8);
+SQLITE_PRIVATE void sqlite3CteDelete(sqlite3*,Cte*);
+SQLITE_PRIVATE With *sqlite3WithAdd(Parse*,With*,Cte*);
SQLITE_PRIVATE void sqlite3WithDelete(sqlite3*,With*);
SQLITE_PRIVATE void sqlite3WithPush(Parse*, With*, u8);
#else
-#define sqlite3WithPush(x,y,z)
-#define sqlite3WithDelete(x,y)
+# define sqlite3CteNew(P,T,E,S) ((void*)0)
+# define sqlite3CteDelete(D,C)
+# define sqlite3CteWithAdd(P,W,C) ((void*)0)
+# define sqlite3WithDelete(x,y)
+# define sqlite3WithPush(x,y,z)
#endif
#ifndef SQLITE_OMIT_UPSERT
-SQLITE_PRIVATE Upsert *sqlite3UpsertNew(sqlite3*,ExprList*,Expr*,ExprList*,Expr*);
+SQLITE_PRIVATE Upsert *sqlite3UpsertNew(sqlite3*,ExprList*,Expr*,ExprList*,Expr*,Upsert*);
SQLITE_PRIVATE void sqlite3UpsertDelete(sqlite3*,Upsert*);
SQLITE_PRIVATE Upsert *sqlite3UpsertDup(sqlite3*,Upsert*);
SQLITE_PRIVATE int sqlite3UpsertAnalyzeTarget(Parse*,SrcList*,Upsert*);
SQLITE_PRIVATE void sqlite3UpsertDoUpdate(Parse*,Upsert*,Table*,Index*,int);
+SQLITE_PRIVATE Upsert *sqlite3UpsertOfIndex(Upsert*,Index*);
+SQLITE_PRIVATE int sqlite3UpsertNextIsIPK(Upsert*);
#else
-#define sqlite3UpsertNew(v,w,x,y,z) ((Upsert*)0)
+#define sqlite3UpsertNew(u,v,w,x,y,z) ((Upsert*)0)
#define sqlite3UpsertDelete(x,y)
-#define sqlite3UpsertDup(x,y) ((Upsert*)0)
+#define sqlite3UpsertDup(x,y) ((Upsert*)0)
+#define sqlite3UpsertOfIndex(x,y) ((Upsert*)0)
+#define sqlite3UpsertNextIsIPK(x) 0
#endif
@@ -20746,9 +20944,10 @@ SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000;
#endif
/*
-** Flags for select tracing and the ".selecttrace" macro of the CLI
+** Tracing flags set by SQLITE_TESTCTRL_TRACEFLAGS.
*/
-SQLITE_API u32 sqlite3_unsupported_selecttrace = 0;
+SQLITE_PRIVATE u32 sqlite3SelectTrace = 0;
+SQLITE_PRIVATE u32 sqlite3WhereTrace = 0;
/* #include "opcodes.h" */
/*
@@ -21167,7 +21366,7 @@ struct Vdbe {
Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */
Parse *pParse; /* Parsing context used to create this Vdbe */
ynVar nVar; /* Number of entries in aVar[] */
- u32 magic; /* Magic number for sanity checking */
+ u32 iVdbeMagic; /* Magic number defining state of the SQL statement */
int nMem; /* Number of memory locations currently allocated */
int nCursor; /* Number of slots in apCsr[] */
u32 cacheCtr; /* VdbeCursor row cache generation counter */
@@ -22672,6 +22871,7 @@ static int isDate(
int eType;
memset(p, 0, sizeof(*p));
if( argc==0 ){
+ if( !sqlite3NotPureFunc(context) ) return 1;
return setDateTimeToCurrent(context, p);
}
if( (eType = sqlite3_value_type(argv[0]))==SQLITE_FLOAT
@@ -23172,6 +23372,8 @@ SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){
#ifdef SQLITE_TEST
if( op!=SQLITE_FCNTL_COMMIT_PHASETWO
&& op!=SQLITE_FCNTL_LOCK_TIMEOUT
+ && op!=SQLITE_FCNTL_CKPT_DONE
+ && op!=SQLITE_FCNTL_CKPT_START
){
/* Faults are not injected into COMMIT_PHASETWO because, assuming SQLite
** is using a regular VFS, it is called after the corresponding
@@ -23182,7 +23384,12 @@ SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){
** The core must call OsFileControl() though, not OsFileControlHint(),
** as if a custom VFS (e.g. zipvfs) returns an error here, it probably
** means the commit really has failed and an error should be returned
- ** to the user. */
+ ** to the user.
+ **
+ ** The CKPT_DONE and CKPT_START file-controls are write-only signals
+ ** to the cksumvfs. Their return code is meaningless and is ignored
+ ** by the SQLite core, so there is no point in simulating OOMs for them.
+ */
DO_OS_MALLOC_TEST(id);
}
#endif
@@ -29081,7 +29288,7 @@ SQLITE_API void sqlite3_str_vappendf(
case etSRCLIST: {
SrcList *pSrc;
int k;
- struct SrcList_item *pItem;
+ SrcItem *pItem;
if( (pAccum->printfFlags & SQLITE_PRINTF_INTERNAL)==0 ) return;
pSrc = va_arg(ap, SrcList*);
k = va_arg(ap, int);
@@ -29146,7 +29353,7 @@ static int sqlite3StrAccumEnlarge(StrAccum *p, int N){
}else{
char *zOld = isMalloced(p) ? p->zText : 0;
i64 szNew = p->nChar;
- szNew += N + 1;
+ szNew += (sqlite3_int64)N + 1;
if( szNew+p->nChar<=p->mxAlloc ){
/* Force exponential buffer size growth as long as it does not overflow,
** to avoid having to call this routine too often */
@@ -29649,7 +29856,10 @@ SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView *pView, const With *pWith, u8 m
}
sqlite3_str_appendf(&x, ")");
}
- sqlite3_str_appendf(&x, " AS");
+ if( pCte->pUse ){
+ sqlite3_str_appendf(&x, " (pUse=0x%p, nUse=%d)", pCte->pUse,
+ pCte->pUse->nUse);
+ }
sqlite3StrAccumFinish(&x);
sqlite3TreeViewItem(pView, zLine, i<pWith->nCte-1);
sqlite3TreeViewSelect(pView, pCte->pSelect, 0);
@@ -29665,7 +29875,7 @@ SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView *pView, const With *pWith, u8 m
SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc){
int i;
for(i=0; i<pSrc->nSrc; i++){
- const struct SrcList_item *pItem = &pSrc->a[i];
+ const SrcItem *pItem = &pSrc->a[i];
StrAccum x;
char zLine[100];
sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0);
@@ -29688,6 +29898,9 @@ SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc)
if( pItem->fg.fromDDL ){
sqlite3_str_appendf(&x, " DDL");
}
+ if( pItem->fg.isCte ){
+ sqlite3_str_appendf(&x, " CteUse=0x%p", pItem->u2.pCteUse);
+ }
sqlite3StrAccumFinish(&x);
sqlite3TreeViewItem(pView, zLine, i<pSrc->nSrc-1);
if( pItem->pSelect ){
@@ -31385,6 +31598,16 @@ SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code){
}
/*
+** The equivalent of sqlite3Error(db, SQLITE_OK). Clear the error state
+** and error message.
+*/
+SQLITE_PRIVATE void sqlite3ErrorClear(sqlite3 *db){
+ assert( db!=0 );
+ db->errCode = SQLITE_OK;
+ if( db->pErr ) sqlite3ValueSetNull(db->pErr);
+}
+
+/*
** Load the sqlite3.iSysErrno field if that is an appropriate thing
** to do based on the SQLite error code in rc.
*/
@@ -33330,103 +33553,105 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 77 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"),
/* 78 */ "SCopy" OpHelp("r[P2]=r[P1]"),
/* 79 */ "IntCopy" OpHelp("r[P2]=r[P1]"),
- /* 80 */ "ResultRow" OpHelp("output=r[P1@P2]"),
- /* 81 */ "CollSeq" OpHelp(""),
- /* 82 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"),
- /* 83 */ "RealAffinity" OpHelp(""),
- /* 84 */ "Cast" OpHelp("affinity(r[P1])"),
- /* 85 */ "Permutation" OpHelp(""),
- /* 86 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"),
- /* 87 */ "IsTrue" OpHelp("r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4"),
- /* 88 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"),
- /* 89 */ "Column" OpHelp("r[P3]=PX"),
- /* 90 */ "Affinity" OpHelp("affinity(r[P1@P2])"),
- /* 91 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"),
- /* 92 */ "Count" OpHelp("r[P2]=count()"),
- /* 93 */ "ReadCookie" OpHelp(""),
- /* 94 */ "SetCookie" OpHelp(""),
- /* 95 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"),
- /* 96 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
- /* 97 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
- /* 98 */ "OpenDup" OpHelp(""),
- /* 99 */ "OpenAutoindex" OpHelp("nColumn=P2"),
- /* 100 */ "OpenEphemeral" OpHelp("nColumn=P2"),
- /* 101 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"),
- /* 102 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"),
- /* 103 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<<r[P1]"),
- /* 104 */ "ShiftRight" OpHelp("r[P3]=r[P2]>>r[P1]"),
- /* 105 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"),
- /* 106 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"),
- /* 107 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"),
- /* 108 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"),
- /* 109 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"),
- /* 110 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"),
- /* 111 */ "SorterOpen" OpHelp(""),
- /* 112 */ "BitNot" OpHelp("r[P2]= ~r[P1]"),
- /* 113 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"),
- /* 114 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"),
- /* 115 */ "String8" OpHelp("r[P2]='P4'"),
- /* 116 */ "Close" OpHelp(""),
- /* 117 */ "ColumnsUsed" OpHelp(""),
- /* 118 */ "SeekScan" OpHelp("Scan-ahead up to P1 rows"),
- /* 119 */ "SeekHit" OpHelp("set P2<=seekHit<=P3"),
- /* 120 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"),
- /* 121 */ "NewRowid" OpHelp("r[P2]=rowid"),
- /* 122 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
- /* 123 */ "Delete" OpHelp(""),
- /* 124 */ "ResetCount" OpHelp(""),
- /* 125 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"),
- /* 126 */ "SorterData" OpHelp("r[P2]=data"),
- /* 127 */ "RowData" OpHelp("r[P2]=data"),
- /* 128 */ "Rowid" OpHelp("r[P2]=rowid"),
- /* 129 */ "NullRow" OpHelp(""),
- /* 130 */ "SeekEnd" OpHelp(""),
- /* 131 */ "IdxInsert" OpHelp("key=r[P2]"),
- /* 132 */ "SorterInsert" OpHelp("key=r[P2]"),
- /* 133 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
- /* 134 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"),
- /* 135 */ "IdxRowid" OpHelp("r[P2]=rowid"),
- /* 136 */ "FinishSeek" OpHelp(""),
- /* 137 */ "Destroy" OpHelp(""),
- /* 138 */ "Clear" OpHelp(""),
- /* 139 */ "ResetSorter" OpHelp(""),
- /* 140 */ "CreateBtree" OpHelp("r[P2]=root iDb=P1 flags=P3"),
- /* 141 */ "SqlExec" OpHelp(""),
- /* 142 */ "ParseSchema" OpHelp(""),
- /* 143 */ "LoadAnalysis" OpHelp(""),
- /* 144 */ "DropTable" OpHelp(""),
- /* 145 */ "DropIndex" OpHelp(""),
- /* 146 */ "DropTrigger" OpHelp(""),
- /* 147 */ "IntegrityCk" OpHelp(""),
- /* 148 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
- /* 149 */ "Param" OpHelp(""),
- /* 150 */ "Real" OpHelp("r[P2]=P4"),
- /* 151 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
- /* 152 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
- /* 153 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"),
- /* 154 */ "AggInverse" OpHelp("accum=r[P3] inverse(r[P2@P5])"),
- /* 155 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"),
- /* 156 */ "AggStep1" OpHelp("accum=r[P3] step(r[P2@P5])"),
- /* 157 */ "AggValue" OpHelp("r[P3]=value N=P2"),
- /* 158 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
- /* 159 */ "Expire" OpHelp(""),
- /* 160 */ "CursorLock" OpHelp(""),
- /* 161 */ "CursorUnlock" OpHelp(""),
- /* 162 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
- /* 163 */ "VBegin" OpHelp(""),
- /* 164 */ "VCreate" OpHelp(""),
- /* 165 */ "VDestroy" OpHelp(""),
- /* 166 */ "VOpen" OpHelp(""),
- /* 167 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
- /* 168 */ "VRename" OpHelp(""),
- /* 169 */ "Pagecount" OpHelp(""),
- /* 170 */ "MaxPgcnt" OpHelp(""),
- /* 171 */ "Trace" OpHelp(""),
- /* 172 */ "CursorHint" OpHelp(""),
- /* 173 */ "ReleaseReg" OpHelp("release r[P1@P2] mask P3"),
- /* 174 */ "Noop" OpHelp(""),
- /* 175 */ "Explain" OpHelp(""),
- /* 176 */ "Abortable" OpHelp(""),
+ /* 80 */ "ChngCntRow" OpHelp("output=r[P1]"),
+ /* 81 */ "ResultRow" OpHelp("output=r[P1@P2]"),
+ /* 82 */ "CollSeq" OpHelp(""),
+ /* 83 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"),
+ /* 84 */ "RealAffinity" OpHelp(""),
+ /* 85 */ "Cast" OpHelp("affinity(r[P1])"),
+ /* 86 */ "Permutation" OpHelp(""),
+ /* 87 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"),
+ /* 88 */ "IsTrue" OpHelp("r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4"),
+ /* 89 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"),
+ /* 90 */ "Column" OpHelp("r[P3]=PX"),
+ /* 91 */ "Affinity" OpHelp("affinity(r[P1@P2])"),
+ /* 92 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"),
+ /* 93 */ "Count" OpHelp("r[P2]=count()"),
+ /* 94 */ "ReadCookie" OpHelp(""),
+ /* 95 */ "SetCookie" OpHelp(""),
+ /* 96 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"),
+ /* 97 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
+ /* 98 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
+ /* 99 */ "OpenDup" OpHelp(""),
+ /* 100 */ "OpenAutoindex" OpHelp("nColumn=P2"),
+ /* 101 */ "OpenEphemeral" OpHelp("nColumn=P2"),
+ /* 102 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"),
+ /* 103 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"),
+ /* 104 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<<r[P1]"),
+ /* 105 */ "ShiftRight" OpHelp("r[P3]=r[P2]>>r[P1]"),
+ /* 106 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"),
+ /* 107 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"),
+ /* 108 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"),
+ /* 109 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"),
+ /* 110 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"),
+ /* 111 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"),
+ /* 112 */ "SorterOpen" OpHelp(""),
+ /* 113 */ "BitNot" OpHelp("r[P2]= ~r[P1]"),
+ /* 114 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"),
+ /* 115 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"),
+ /* 116 */ "String8" OpHelp("r[P2]='P4'"),
+ /* 117 */ "Close" OpHelp(""),
+ /* 118 */ "ColumnsUsed" OpHelp(""),
+ /* 119 */ "SeekScan" OpHelp("Scan-ahead up to P1 rows"),
+ /* 120 */ "SeekHit" OpHelp("set P2<=seekHit<=P3"),
+ /* 121 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"),
+ /* 122 */ "NewRowid" OpHelp("r[P2]=rowid"),
+ /* 123 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
+ /* 124 */ "RowCell" OpHelp(""),
+ /* 125 */ "Delete" OpHelp(""),
+ /* 126 */ "ResetCount" OpHelp(""),
+ /* 127 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"),
+ /* 128 */ "SorterData" OpHelp("r[P2]=data"),
+ /* 129 */ "RowData" OpHelp("r[P2]=data"),
+ /* 130 */ "Rowid" OpHelp("r[P2]=rowid"),
+ /* 131 */ "NullRow" OpHelp(""),
+ /* 132 */ "SeekEnd" OpHelp(""),
+ /* 133 */ "IdxInsert" OpHelp("key=r[P2]"),
+ /* 134 */ "SorterInsert" OpHelp("key=r[P2]"),
+ /* 135 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
+ /* 136 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"),
+ /* 137 */ "IdxRowid" OpHelp("r[P2]=rowid"),
+ /* 138 */ "FinishSeek" OpHelp(""),
+ /* 139 */ "Destroy" OpHelp(""),
+ /* 140 */ "Clear" OpHelp(""),
+ /* 141 */ "ResetSorter" OpHelp(""),
+ /* 142 */ "CreateBtree" OpHelp("r[P2]=root iDb=P1 flags=P3"),
+ /* 143 */ "SqlExec" OpHelp(""),
+ /* 144 */ "ParseSchema" OpHelp(""),
+ /* 145 */ "LoadAnalysis" OpHelp(""),
+ /* 146 */ "DropTable" OpHelp(""),
+ /* 147 */ "DropIndex" OpHelp(""),
+ /* 148 */ "DropTrigger" OpHelp(""),
+ /* 149 */ "IntegrityCk" OpHelp(""),
+ /* 150 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
+ /* 151 */ "Param" OpHelp(""),
+ /* 152 */ "Real" OpHelp("r[P2]=P4"),
+ /* 153 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
+ /* 154 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
+ /* 155 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"),
+ /* 156 */ "AggInverse" OpHelp("accum=r[P3] inverse(r[P2@P5])"),
+ /* 157 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"),
+ /* 158 */ "AggStep1" OpHelp("accum=r[P3] step(r[P2@P5])"),
+ /* 159 */ "AggValue" OpHelp("r[P3]=value N=P2"),
+ /* 160 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
+ /* 161 */ "Expire" OpHelp(""),
+ /* 162 */ "CursorLock" OpHelp(""),
+ /* 163 */ "CursorUnlock" OpHelp(""),
+ /* 164 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
+ /* 165 */ "VBegin" OpHelp(""),
+ /* 166 */ "VCreate" OpHelp(""),
+ /* 167 */ "VDestroy" OpHelp(""),
+ /* 168 */ "VOpen" OpHelp(""),
+ /* 169 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
+ /* 170 */ "VRename" OpHelp(""),
+ /* 171 */ "Pagecount" OpHelp(""),
+ /* 172 */ "MaxPgcnt" OpHelp(""),
+ /* 173 */ "Trace" OpHelp(""),
+ /* 174 */ "CursorHint" OpHelp(""),
+ /* 175 */ "ReleaseReg" OpHelp("release r[P1@P2] mask P3"),
+ /* 176 */ "Noop" OpHelp(""),
+ /* 177 */ "Explain" OpHelp(""),
+ /* 178 */ "Abortable" OpHelp(""),
};
return azName[i];
}
@@ -50435,6 +50660,7 @@ static PgHdr1 *pcache1AllocPage(PCache1 *pCache, int benignMalloc){
p->page.pExtra = &p[1];
p->isBulkLocal = 0;
p->isAnchor = 0;
+ p->pLruPrev = 0; /* Initializing this saves a valgrind error */
}
(*pCache->pnPurgeable)++;
return p;
@@ -52353,6 +52579,7 @@ struct PagerSavepoint {
Bitvec *pInSavepoint; /* Set of pages in this savepoint */
Pgno nOrig; /* Original number of pages in file */
Pgno iSubRec; /* Index of first record in sub-journal */
+ int bTruncateOnRelease; /* If stmt journal may be truncated on RELEASE */
#ifndef SQLITE_OMIT_WAL
u32 aWalData[WAL_SAVEPOINT_NDATA]; /* WAL savepoint context */
#endif
@@ -52988,6 +53215,9 @@ static int subjRequiresPage(PgHdr *pPg){
for(i=0; i<pPager->nSavepoint; i++){
p = &pPager->aSavepoint[i];
if( p->nOrig>=pgno && 0==sqlite3BitvecTestNotNull(p->pInSavepoint, pgno) ){
+ for(i=i+1; i<pPager->nSavepoint; i++){
+ pPager->aSavepoint[i].bTruncateOnRelease = 0;
+ }
return 1;
}
}
@@ -58766,6 +58996,7 @@ static SQLITE_NOINLINE int pagerOpenSavepoint(Pager *pPager, int nSavepoint){
}
aNew[ii].iSubRec = pPager->nSubRec;
aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize);
+ aNew[ii].bTruncateOnRelease = 1;
if( !aNew[ii].pInSavepoint ){
return SQLITE_NOMEM_BKPT;
}
@@ -58847,13 +59078,15 @@ SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){
/* If this is a release of the outermost savepoint, truncate
** the sub-journal to zero bytes in size. */
if( op==SAVEPOINT_RELEASE ){
- if( nNew==0 && isOpen(pPager->sjfd) ){
+ PagerSavepoint *pRel = &pPager->aSavepoint[nNew];
+ if( pRel->bTruncateOnRelease && isOpen(pPager->sjfd) ){
/* Only truncate if it is an in-memory sub-journal. */
if( sqlite3JournalIsInMemory(pPager->sjfd) ){
- rc = sqlite3OsTruncate(pPager->sjfd, 0);
+ i64 sz = (pPager->pageSize+4)*pRel->iSubRec;
+ rc = sqlite3OsTruncate(pPager->sjfd, sz);
assert( rc==SQLITE_OK );
}
- pPager->nSubRec = 0;
+ pPager->nSubRec = pRel->iSubRec;
}
}
/* Else this is a rollback operation, playback the specified savepoint.
@@ -64149,6 +64382,7 @@ struct BtShared {
Btree *pWriter; /* Btree with currently open write transaction */
#endif
u8 *pTmpSpace; /* Temp space sufficient to hold a single cell */
+ int nPreformatSize; /* Size of last cell written by TransferRow() */
};
/*
@@ -65863,6 +66097,24 @@ static SQLITE_NOINLINE void btreeParseCellAdjustSizeForOverflow(
}
/*
+** Given a record with nPayload bytes of payload stored within btree
+** page pPage, return the number of bytes of payload stored locally.
+*/
+static int btreePayloadToLocal(MemPage *pPage, i64 nPayload){
+ int maxLocal; /* Maximum amount of payload held locally */
+ maxLocal = pPage->maxLocal;
+ if( nPayload<=maxLocal ){
+ return nPayload;
+ }else{
+ int minLocal; /* Minimum amount of payload held locally */
+ int surplus; /* Overflow payload available for local storage */
+ minLocal = pPage->minLocal;
+ surplus = minLocal + (nPayload - minLocal)%(pPage->pBt->usableSize-4);
+ return ( surplus <= maxLocal ) ? surplus : minLocal;
+ }
+}
+
+/*
** The following routines are implementations of the MemPage.xParseCell()
** method.
**
@@ -67602,6 +67854,7 @@ SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve,
((pageSize-1)&pageSize)==0 ){
assert( (pageSize & 7)==0 );
assert( !pBt->pCursor );
+ if( nReserve>32 && pageSize==512 ) pageSize = 1024;
pBt->pageSize = (u32)pageSize;
freeTempSpace(pBt);
}
@@ -72337,7 +72590,9 @@ static int balance_nonroot(
}
pgno = get4byte(pRight);
while( 1 ){
- rc = getAndInitPage(pBt, pgno, &apOld[i], 0, 0);
+ if( rc==SQLITE_OK ){
+ rc = getAndInitPage(pBt, pgno, &apOld[i], 0, 0);
+ }
if( rc ){
memset(apOld, 0, (i+1)*sizeof(MemPage*));
goto balance_cleanup;
@@ -72376,12 +72631,10 @@ static int balance_nonroot(
if( pBt->btsFlags & BTS_FAST_SECURE ){
int iOff;
+ /* If the following if() condition is not true, the db is corrupted.
+ ** The call to dropCell() below will detect this. */
iOff = SQLITE_PTR_TO_INT(apDiv[i]) - SQLITE_PTR_TO_INT(pParent->aData);
- if( (iOff+szNew[i])>(int)pBt->usableSize ){
- rc = SQLITE_CORRUPT_BKPT;
- memset(apOld, 0, (i+1)*sizeof(MemPage*));
- goto balance_cleanup;
- }else{
+ if( (iOff+szNew[i])<=(int)pBt->usableSize ){
memcpy(&aOvflSpace[iOff], apDiv[i], szNew[i]);
apDiv[i] = &aOvflSpace[apDiv[i]-pParent->aData];
}
@@ -72675,6 +72928,9 @@ static int balance_nonroot(
apOld[i] = 0;
rc = sqlite3PagerWrite(pNew->pDbPage);
nNew++;
+ if( sqlite3PagerPageRefcount(pNew->pDbPage)!=1+(i==(iParentIdx-nxDiv)) ){
+ rc = SQLITE_CORRUPT_BKPT;
+ }
if( rc ) goto balance_cleanup;
}else{
assert( i>0 );
@@ -72711,7 +72967,7 @@ static int balance_nonroot(
aPgOrder[i] = aPgno[i] = apNew[i]->pgno;
aPgFlags[i] = apNew[i]->pDbPage->flags;
for(j=0; j<i; j++){
- if( aPgno[j]==aPgno[i] ){
+ if( NEVER(aPgno[j]==aPgno[i]) ){
/* This branch is taken if the set of sibling pages somehow contains
** duplicate entries. This can happen if the database is corrupt.
** It would be simpler to detect this as part of the loop below, but
@@ -73379,7 +73635,8 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
unsigned char *oldCell;
unsigned char *newCell = 0;
- assert( (flags & (BTREE_SAVEPOSITION|BTREE_APPEND))==flags );
+ assert( (flags & (BTREE_SAVEPOSITION|BTREE_APPEND|BTREE_PREFORMAT))==flags );
+ assert( (flags & BTREE_PREFORMAT)==0 || seekResult || pCur->pKeyInfo==0 );
if( pCur->eState==CURSOR_FAULT ){
assert( pCur->skipNext!=SQLITE_OK );
@@ -73397,7 +73654,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
** keys with no associated data. If the cursor was opened expecting an
** intkey table, the caller should be inserting integer keys with a
** blob of associated data. */
- assert( (pX->pKey==0)==(pCur->pKeyInfo==0) );
+ assert( (flags & BTREE_PREFORMAT) || (pX->pKey==0)==(pCur->pKeyInfo==0) );
/* Save the positions of any other cursors open on this table.
**
@@ -73507,7 +73764,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
|| CORRUPT_DB );
pPage = pCur->pPage;
- assert( pPage->intKey || pX->nKey>=0 );
+ assert( pPage->intKey || pX->nKey>=0 || (flags & BTREE_PREFORMAT) );
assert( pPage->leaf || !pPage->intKey );
if( pPage->nFree<0 ){
if( pCur->eState>CURSOR_INVALID ){
@@ -73524,7 +73781,21 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
assert( pPage->isInit );
newCell = pBt->pTmpSpace;
assert( newCell!=0 );
- rc = fillInCell(pPage, newCell, pX, &szNew);
+ if( flags & BTREE_PREFORMAT ){
+ rc = SQLITE_OK;
+ szNew = pBt->nPreformatSize;
+ if( szNew<4 ) szNew = 4;
+ if( ISAUTOVACUUM && szNew>pPage->maxLocal ){
+ CellInfo info;
+ pPage->xParseCell(pPage, newCell, &info);
+ if( info.nPayload!=info.nLocal ){
+ Pgno ovfl = get4byte(&newCell[szNew-4]);
+ ptrmapPut(pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, &rc);
+ }
+ }
+ }else{
+ rc = fillInCell(pPage, newCell, pX, &szNew);
+ }
if( rc ) goto end_insert;
assert( szNew==pPage->xCellSize(pPage, newCell) );
assert( szNew <= MX_CELL_SIZE(pBt) );
@@ -73632,6 +73903,114 @@ end_insert:
}
/*
+** This function is used as part of copying the current row from cursor
+** pSrc into cursor pDest. If the cursors are open on intkey tables, then
+** parameter iKey is used as the rowid value when the record is copied
+** into pDest. Otherwise, the record is copied verbatim.
+**
+** This function does not actually write the new value to cursor pDest.
+** Instead, it creates and populates any required overflow pages and
+** writes the data for the new cell into the BtShared.pTmpSpace buffer
+** for the destination database. The size of the cell, in bytes, is left
+** in BtShared.nPreformatSize. The caller completes the insertion by
+** calling sqlite3BtreeInsert() with the BTREE_PREFORMAT flag specified.
+**
+** SQLITE_OK is returned if successful, or an SQLite error code otherwise.
+*/
+SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 iKey){
+ int rc = SQLITE_OK;
+ BtShared *pBt = pDest->pBt;
+ u8 *aOut = pBt->pTmpSpace; /* Pointer to next output buffer */
+ const u8 *aIn; /* Pointer to next input buffer */
+ u32 nIn; /* Size of input buffer aIn[] */
+ u32 nRem; /* Bytes of data still to copy */
+
+ getCellInfo(pSrc);
+ aOut += putVarint32(aOut, pSrc->info.nPayload);
+ if( pDest->pKeyInfo==0 ) aOut += putVarint(aOut, iKey);
+ nIn = pSrc->info.nLocal;
+ aIn = pSrc->info.pPayload;
+ if( aIn+nIn>pSrc->pPage->aDataEnd ){
+ return SQLITE_CORRUPT_BKPT;
+ }
+ nRem = pSrc->info.nPayload;
+ if( nIn==nRem && nIn<pDest->pPage->maxLocal ){
+ memcpy(aOut, aIn, nIn);
+ pBt->nPreformatSize = nIn + (aOut - pBt->pTmpSpace);
+ }else{
+ Pager *pSrcPager = pSrc->pBt->pPager;
+ u8 *pPgnoOut = 0;
+ Pgno ovflIn = 0;
+ DbPage *pPageIn = 0;
+ MemPage *pPageOut = 0;
+ u32 nOut; /* Size of output buffer aOut[] */
+
+ nOut = btreePayloadToLocal(pDest->pPage, pSrc->info.nPayload);
+ pBt->nPreformatSize = nOut + (aOut - pBt->pTmpSpace);
+ if( nOut<pSrc->info.nPayload ){
+ pPgnoOut = &aOut[nOut];
+ pBt->nPreformatSize += 4;
+ }
+
+ if( nRem>nIn ){
+ if( aIn+nIn+4>pSrc->pPage->aDataEnd ){
+ return SQLITE_CORRUPT_BKPT;
+ }
+ ovflIn = get4byte(&pSrc->info.pPayload[nIn]);
+ }
+
+ do {
+ nRem -= nOut;
+ do{
+ assert( nOut>0 );
+ if( nIn>0 ){
+ int nCopy = MIN(nOut, nIn);
+ memcpy(aOut, aIn, nCopy);
+ nOut -= nCopy;
+ nIn -= nCopy;
+ aOut += nCopy;
+ aIn += nCopy;
+ }
+ if( nOut>0 ){
+ sqlite3PagerUnref(pPageIn);
+ pPageIn = 0;
+ rc = sqlite3PagerGet(pSrcPager, ovflIn, &pPageIn, PAGER_GET_READONLY);
+ if( rc==SQLITE_OK ){
+ aIn = (const u8*)sqlite3PagerGetData(pPageIn);
+ ovflIn = get4byte(aIn);
+ aIn += 4;
+ nIn = pSrc->pBt->usableSize - 4;
+ }
+ }
+ }while( rc==SQLITE_OK && nOut>0 );
+
+ if( rc==SQLITE_OK && nRem>0 ){
+ Pgno pgnoNew;
+ MemPage *pNew = 0;
+ rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0);
+ put4byte(pPgnoOut, pgnoNew);
+ if( ISAUTOVACUUM && pPageOut ){
+ ptrmapPut(pBt, pgnoNew, PTRMAP_OVERFLOW2, pPageOut->pgno, &rc);
+ }
+ releasePage(pPageOut);
+ pPageOut = pNew;
+ if( pPageOut ){
+ pPgnoOut = pPageOut->aData;
+ put4byte(pPgnoOut, 0);
+ aOut = &pPgnoOut[4];
+ nOut = MIN(pBt->usableSize - 4, nRem);
+ }
+ }
+ }while( nRem>0 && rc==SQLITE_OK );
+
+ releasePage(pPageOut);
+ sqlite3PagerUnref(pPageIn);
+ }
+
+ return rc;
+}
+
+/*
** Delete the entry that the cursor is pointing to.
**
** If the BTREE_SAVEPOSITION bit of the flags parameter is zero, then
@@ -78019,7 +78398,7 @@ SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(Parse *pParse){
p->pNext = db->pVdbe;
p->pPrev = 0;
db->pVdbe = p;
- p->magic = VDBE_MAGIC_INIT;
+ p->iVdbeMagic = VDBE_MAGIC_INIT;
p->pParse = pParse;
pParse->pVdbe = p;
assert( pParse->aLabel==0 );
@@ -78220,7 +78599,7 @@ SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
VdbeOp *pOp;
i = p->nOp;
- assert( p->magic==VDBE_MAGIC_INIT );
+ assert( p->iVdbeMagic==VDBE_MAGIC_INIT );
assert( op>=0 && op<0xff );
if( p->nOpAlloc<=i ){
return growOp3(p, op, p1, p2, p3);
@@ -78455,9 +78834,10 @@ SQLITE_PRIVATE void sqlite3VdbeExplainPop(Parse *pParse){
** The zWhere string must have been obtained from sqlite3_malloc().
** This routine will take ownership of the allocated memory.
*/
-SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere){
+SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere, u16 p5){
int j;
sqlite3VdbeAddOp4(p, OP_ParseSchema, iDb, 0, 0, zWhere, P4_DYNAMIC);
+ sqlite3VdbeChangeP5(p, p5);
for(j=0; j<p->db->nDb; j++) sqlite3VdbeUsesBtree(p, j);
sqlite3MayAbort(p->pParse);
}
@@ -78549,7 +78929,7 @@ static SQLITE_NOINLINE void resizeResolveLabel(Parse *p, Vdbe *v, int j){
SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *v, int x){
Parse *p = v->pParse;
int j = ADDR(x);
- assert( v->magic==VDBE_MAGIC_INIT );
+ assert( v->iVdbeMagic==VDBE_MAGIC_INIT );
assert( j<-p->nLabel );
assert( j>=0 );
#ifdef SQLITE_DEBUG
@@ -78874,7 +79254,7 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
** Return the address of the next instruction to be inserted.
*/
SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe *p){
- assert( p->magic==VDBE_MAGIC_INIT );
+ assert( p->iVdbeMagic==VDBE_MAGIC_INIT );
return p->nOp;
}
@@ -78959,7 +79339,7 @@ SQLITE_PRIVATE VdbeOp *sqlite3VdbeAddOpList(
int i;
VdbeOp *pOut, *pFirst;
assert( nOp>0 );
- assert( p->magic==VDBE_MAGIC_INIT );
+ assert( p->iVdbeMagic==VDBE_MAGIC_INIT );
if( p->nOp + nOp > p->nOpAlloc && growOpArray(p, nOp) ){
return 0;
}
@@ -79283,7 +79663,7 @@ SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int
sqlite3 *db;
assert( p!=0 );
db = p->db;
- assert( p->magic==VDBE_MAGIC_INIT );
+ assert( p->iVdbeMagic==VDBE_MAGIC_INIT );
assert( p->aOp!=0 || db->mallocFailed );
if( db->mallocFailed ){
if( n!=P4_VTAB ) freeP4(db, n, (void*)*(char**)&zP4);
@@ -79412,7 +79792,7 @@ SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
/* C89 specifies that the constant "dummy" will be initialized to all
** zeros, which is correct. MSVC generates a warning, nevertheless. */
static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */
- assert( p->magic==VDBE_MAGIC_INIT );
+ assert( p->iVdbeMagic==VDBE_MAGIC_INIT );
if( addr<0 ){
addr = p->nOp - 1;
}
@@ -80097,7 +80477,7 @@ SQLITE_PRIVATE int sqlite3VdbeList(
Op *pOp; /* Current opcode */
assert( p->explain );
- assert( p->magic==VDBE_MAGIC_RUN );
+ assert( p->iVdbeMagic==VDBE_MAGIC_RUN );
assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM );
/* Even though this opcode does not use dynamic strings for
@@ -80277,14 +80657,14 @@ SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){
int i;
#endif
assert( p!=0 );
- assert( p->magic==VDBE_MAGIC_INIT || p->magic==VDBE_MAGIC_RESET );
+ assert( p->iVdbeMagic==VDBE_MAGIC_INIT || p->iVdbeMagic==VDBE_MAGIC_RESET );
/* There should be at least one opcode.
*/
assert( p->nOp>0 );
/* Set the magic to VDBE_MAGIC_RUN sooner rather than later. */
- p->magic = VDBE_MAGIC_RUN;
+ p->iVdbeMagic = VDBE_MAGIC_RUN;
#ifdef SQLITE_DEBUG
for(i=0; i<p->nMem; i++){
@@ -80340,8 +80720,10 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady(
assert( p!=0 );
assert( p->nOp>0 );
assert( pParse!=0 );
- assert( p->magic==VDBE_MAGIC_INIT );
+ assert( p->iVdbeMagic==VDBE_MAGIC_INIT );
assert( pParse==p->pParse );
+ p->pVList = pParse->pVList;
+ pParse->pVList = 0;
db = p->db;
assert( db->mallocFailed==0 );
nVar = pParse->nVar;
@@ -80426,8 +80808,6 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady(
}
}
- p->pVList = pParse->pVList;
- pParse->pVList = 0;
if( db->mallocFailed ){
p->nVar = 0;
p->nCursor = 0;
@@ -81025,7 +81405,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
** one, or the complete transaction if there is no statement transaction.
*/
- if( p->magic!=VDBE_MAGIC_RUN ){
+ if( p->iVdbeMagic!=VDBE_MAGIC_RUN ){
return SQLITE_OK;
}
if( db->mallocFailed ){
@@ -81183,7 +81563,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
assert( db->nVdbeRead>=db->nVdbeWrite );
assert( db->nVdbeWrite>=0 );
}
- p->magic = VDBE_MAGIC_HALT;
+ p->iVdbeMagic = VDBE_MAGIC_HALT;
checkActiveVdbeCnt(db);
if( db->mallocFailed ){
p->rc = SQLITE_NOMEM_BKPT;
@@ -81356,7 +81736,7 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
}
}
#endif
- p->magic = VDBE_MAGIC_RESET;
+ p->iVdbeMagic = VDBE_MAGIC_RESET;
return p->rc & db->errMask;
}
@@ -81366,7 +81746,7 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
*/
SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){
int rc = SQLITE_OK;
- if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){
+ if( p->iVdbeMagic==VDBE_MAGIC_RUN || p->iVdbeMagic==VDBE_MAGIC_HALT ){
rc = sqlite3VdbeReset(p);
assert( (rc & p->db->errMask)==rc );
}
@@ -81427,7 +81807,7 @@ SQLITE_PRIVATE void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
sqlite3DbFree(db, pSub);
}
- if( p->magic!=VDBE_MAGIC_INIT ){
+ if( p->iVdbeMagic!=VDBE_MAGIC_INIT ){
releaseMemArray(p->aVar, p->nVar);
sqlite3DbFree(db, p->pVList);
sqlite3DbFree(db, p->pFree);
@@ -81475,7 +81855,7 @@ SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
if( p->pNext ){
p->pNext->pPrev = p->pPrev;
}
- p->magic = VDBE_MAGIC_DEAD;
+ p->iVdbeMagic = VDBE_MAGIC_DEAD;
p->db = 0;
sqlite3DbFreeNN(db, p);
}
@@ -83854,7 +84234,7 @@ static int sqlite3Step(Vdbe *p){
int rc;
assert(p);
- if( p->magic!=VDBE_MAGIC_RUN ){
+ if( p->iVdbeMagic!=VDBE_MAGIC_RUN ){
/* We used to require that sqlite3_reset() be called before retrying
** sqlite3_step() after any error or after SQLITE_DONE. But beginning
** with version 3.7.0, we changed this so that sqlite3_reset() would
@@ -84570,7 +84950,7 @@ static int vdbeUnbind(Vdbe *p, int i){
return SQLITE_MISUSE_BKPT;
}
sqlite3_mutex_enter(p->db->mutex);
- if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
+ if( p->iVdbeMagic!=VDBE_MAGIC_RUN || p->pc>=0 ){
sqlite3Error(p->db, SQLITE_MISUSE);
sqlite3_mutex_leave(p->db->mutex);
sqlite3_log(SQLITE_MISUSE,
@@ -84924,7 +85304,7 @@ SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt){
*/
SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
Vdbe *v = (Vdbe*)pStmt;
- return v!=0 && v->magic==VDBE_MAGIC_RUN && v->pc>=0;
+ return v!=0 && v->iVdbeMagic==VDBE_MAGIC_RUN && v->pc>=0;
}
/*
@@ -85416,7 +85796,7 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
assert( idx>0 );
}
zRawSql += nToken;
- nextIndex = idx + 1;
+ nextIndex = MAX(idx + 1, nextIndex);
assert( idx>0 && idx<=p->nVar );
pVar = &p->aVar[idx-1];
if( pVar->flags & MEM_Null ){
@@ -86262,7 +86642,7 @@ SQLITE_PRIVATE int sqlite3VdbeExec(
#endif
/*** INSERT STACK UNION HERE ***/
- assert( p->magic==VDBE_MAGIC_RUN ); /* sqlite3_step() verifies this */
+ assert( p->iVdbeMagic==VDBE_MAGIC_RUN ); /* sqlite3_step() verifies this */
sqlite3VdbeEnter(p);
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
if( db->xProgress ){
@@ -87022,6 +87402,26 @@ case OP_IntCopy: { /* out2 */
break;
}
+/* Opcode: ChngCntRow P1 P2 * * *
+** Synopsis: output=r[P1]
+**
+** Output value in register P1 as the chance count for a DML statement,
+** due to the "PRAGMA count_changes=ON" setting. Or, if there was a
+** foreign key error in the statement, trigger the error now.
+**
+** This opcode is a variant of OP_ResultRow that checks the foreign key
+** immediate constraint count and throws an error if the count is
+** non-zero. The P2 opcode must be 1.
+*/
+case OP_ChngCntRow: {
+ assert( pOp->p2==1 );
+ if( (rc = sqlite3VdbeCheckFk(p,0))!=SQLITE_OK ){
+ goto abort_due_to_error;
+ }
+ /* Fall through to the next case, OP_ResultRow */
+ /* no break */ deliberate_fall_through
+}
+
/* Opcode: ResultRow P1 P2 * * *
** Synopsis: output=r[P1@P2]
**
@@ -87038,34 +87438,6 @@ case OP_ResultRow: {
assert( pOp->p1>0 );
assert( pOp->p1+pOp->p2<=(p->nMem+1 - p->nCursor)+1 );
- /* If this statement has violated immediate foreign key constraints, do
- ** not return the number of rows modified. And do not RELEASE the statement
- ** transaction. It needs to be rolled back. */
- if( SQLITE_OK!=(rc = sqlite3VdbeCheckFk(p, 0)) ){
- assert( db->flags&SQLITE_CountRows );
- assert( p->usesStmtJournal );
- goto abort_due_to_error;
- }
-
- /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then
- ** DML statements invoke this opcode to return the number of rows
- ** modified to the user. This is the only way that a VM that
- ** opens a statement transaction may invoke this opcode.
- **
- ** In case this is such a statement, close any statement transaction
- ** opened by this VM before returning control to the user. This is to
- ** ensure that statement-transactions are always nested, not overlapping.
- ** If the open statement-transaction is not closed here, then the user
- ** may step another VM that opens its own statement transaction. This
- ** may lead to overlapping statement transactions.
- **
- ** The statement transaction is never a top-level transaction. Hence
- ** the RELEASE call below can never fail.
- */
- assert( p->iStatement==0 || db->flags&SQLITE_CountRows );
- rc = sqlite3VdbeCloseStatement(p, SAVEPOINT_RELEASE);
- assert( rc==SQLITE_OK );
-
/* Invalidate all ephemeral cursor row caches */
p->cacheCtr = (p->cacheCtr + 2)|1;
@@ -89534,7 +89906,7 @@ case OP_OpenEphemeral: {
aMem[pOp->p3].z = "";
}
pCx = p->apCsr[pOp->p1];
- if( pCx && pCx->pBtx ){
+ if( pCx && ALWAYS(pCx->pBtx) ){
/* If the ephermeral table is already open, erase all existing content
** so that the table is empty again, rather than creating a new table. */
assert( pCx->isEphemeral );
@@ -90486,8 +90858,10 @@ case OP_NewRowid: { /* out2 */
VdbeCursor *pC; /* Cursor of table to get the new rowid */
int res; /* Result of an sqlite3BtreeLast() */
int cnt; /* Counter to limit the number of searches */
+#ifndef SQLITE_OMIT_AUTOINCREMENT
Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */
VdbeFrame *pFrame; /* Root frame of VDBE */
+#endif
v = 0;
res = 0;
@@ -90703,7 +91077,8 @@ case OP_Insert: {
}
x.pKey = 0;
rc = sqlite3BtreeInsert(pC->uc.pCursor, &x,
- (pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION)), seekResult
+ (pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION|OPFLAG_PREFORMAT)),
+ seekResult
);
pC->deferredMoveto = 0;
pC->cacheStatus = CACHE_STALE;
@@ -90720,6 +91095,33 @@ case OP_Insert: {
break;
}
+/* Opcode: RowCell P1 P2 P3 * *
+**
+** P1 and P2 are both open cursors. Both must be opened on the same type
+** of table - intkey or index. This opcode is used as part of copying
+** the current row from P2 into P1. If the cursors are opened on intkey
+** tables, register P3 contains the rowid to use with the new record in
+** P1. If they are opened on index tables, P3 is not used.
+**
+** This opcode must be followed by either an Insert or InsertIdx opcode
+** with the OPFLAG_PREFORMAT flag set to complete the insert operation.
+*/
+case OP_RowCell: {
+ VdbeCursor *pDest; /* Cursor to write to */
+ VdbeCursor *pSrc; /* Cursor to read from */
+ i64 iKey; /* Rowid value to insert with */
+ assert( pOp[1].opcode==OP_Insert || pOp[1].opcode==OP_IdxInsert );
+ assert( pOp[1].opcode==OP_Insert || pOp->p3==0 );
+ assert( pOp[1].opcode==OP_IdxInsert || pOp->p3>0 );
+ assert( pOp[1].p5 & OPFLAG_PREFORMAT );
+ pDest = p->apCsr[pOp->p1];
+ pSrc = p->apCsr[pOp->p2];
+ iKey = pOp->p3 ? aMem[pOp->p3].u.i : 0;
+ rc = sqlite3BtreeTransferRow(pDest->uc.pCursor, pSrc->uc.pCursor, iKey);
+ if( rc!=SQLITE_OK ) goto abort_due_to_error;
+ break;
+};
+
/* Opcode: Delete P1 P2 P3 P4 P5
**
** Delete the record at which the P1 cursor is currently pointing.
@@ -91375,7 +91777,7 @@ case OP_IdxInsert: { /* in2 */
assert( pC!=0 );
assert( !isSorter(pC) );
pIn2 = &aMem[pOp->p2];
- assert( pIn2->flags & MEM_Blob );
+ assert( (pIn2->flags & MEM_Blob) || (pOp->p5 & OPFLAG_PREFORMAT) );
if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
assert( pC->eCurType==CURTYPE_BTREE );
assert( pC->isTable==0 );
@@ -91386,7 +91788,7 @@ case OP_IdxInsert: { /* in2 */
x.aMem = aMem + pOp->p3;
x.nMem = (u16)pOp->p4.i;
rc = sqlite3BtreeInsert(pC->uc.pCursor, &x,
- (pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION)),
+ (pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION|OPFLAG_PREFORMAT)),
((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0)
);
assert( pC->deferredMoveto==0 );
@@ -91459,7 +91861,7 @@ case OP_IdxDelete: {
rc = sqlite3BtreeDelete(pCrsr, BTREE_AUXDELETE);
if( rc ) goto abort_due_to_error;
}else if( pOp->p5 ){
- rc = SQLITE_CORRUPT_INDEX;
+ rc = sqlite3ReportError(SQLITE_CORRUPT_INDEX, __LINE__, "index corruption");
goto abort_due_to_error;
}
assert( pC->deferredMoveto==0 );
@@ -91885,7 +92287,7 @@ case OP_ParseSchema: {
if( pOp->p4.z==0 ){
sqlite3SchemaClear(db->aDb[iDb].pSchema);
db->mDbFlags &= ~DBFLAG_SchemaKnownOk;
- rc = sqlite3InitOne(db, iDb, &p->zErrMsg, INITFLAG_AlterTable);
+ rc = sqlite3InitOne(db, iDb, &p->zErrMsg, pOp->p5);
db->mDbFlags |= DBFLAG_SchemaChange;
p->expired = 0;
}else
@@ -97593,7 +97995,6 @@ struct MemJournal {
int nChunkSize; /* In-memory chunk-size */
int nSpill; /* Bytes of data before flushing */
- int nSize; /* Bytes of data currently in memory */
FileChunk *pFirst; /* Head of in-memory chunk-list */
FilePoint endpoint; /* Pointer to the end of the file */
FilePoint readpoint; /* Pointer to the end of the last xRead() */
@@ -97654,14 +98055,13 @@ static int memjrnlRead(
/*
** Free the list of FileChunk structures headed at MemJournal.pFirst.
*/
-static void memjrnlFreeChunks(MemJournal *p){
+static void memjrnlFreeChunks(FileChunk *pFirst){
FileChunk *pIter;
FileChunk *pNext;
- for(pIter=p->pFirst; pIter; pIter=pNext){
+ for(pIter=pFirst; pIter; pIter=pNext){
pNext = pIter->pNext;
sqlite3_free(pIter);
}
- p->pFirst = 0;
}
/*
@@ -97688,7 +98088,7 @@ static int memjrnlCreateFile(MemJournal *p){
}
if( rc==SQLITE_OK ){
/* No error has occurred. Free the in-memory buffers. */
- memjrnlFreeChunks(&copy);
+ memjrnlFreeChunks(copy.pFirst);
}
}
if( rc!=SQLITE_OK ){
@@ -97771,7 +98171,6 @@ static int memjrnlWrite(
nWrite -= iSpace;
p->endpoint.iOffset += iSpace;
}
- p->nSize = iAmt + iOfst;
}
}
@@ -97779,22 +98178,30 @@ static int memjrnlWrite(
}
/*
-** Truncate the file.
-**
-** If the journal file is already on disk, truncate it there. Or, if it
-** is still in main memory but is being truncated to zero bytes in size,
-** ignore
+** Truncate the in-memory file.
*/
static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
MemJournal *p = (MemJournal *)pJfd;
- if( ALWAYS(size==0) ){
- memjrnlFreeChunks(p);
- p->nSize = 0;
- p->endpoint.pChunk = 0;
- p->endpoint.iOffset = 0;
- p->readpoint.pChunk = 0;
- p->readpoint.iOffset = 0;
+ FileChunk *pIter = 0;
+
+ if( size==0 ){
+ memjrnlFreeChunks(p->pFirst);
+ p->pFirst = 0;
+ }else{
+ i64 iOff = p->nChunkSize;
+ for(pIter=p->pFirst; ALWAYS(pIter) && iOff<=size; pIter=pIter->pNext){
+ iOff += p->nChunkSize;
+ }
+ if( ALWAYS(pIter) ){
+ memjrnlFreeChunks(pIter->pNext);
+ pIter->pNext = 0;
+ }
}
+
+ p->endpoint.pChunk = pIter;
+ p->endpoint.iOffset = size;
+ p->readpoint.pChunk = 0;
+ p->readpoint.iOffset = 0;
return SQLITE_OK;
}
@@ -97803,7 +98210,7 @@ static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
*/
static int memjrnlClose(sqlite3_file *pJfd){
MemJournal *p = (MemJournal *)pJfd;
- memjrnlFreeChunks(p);
+ memjrnlFreeChunks(p->pFirst);
return SQLITE_OK;
}
@@ -97977,7 +98384,7 @@ SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){
** Walk all expressions linked into the list of Window objects passed
** as the second argument.
*/
-static int walkWindowList(Walker *pWalker, Window *pList){
+static int walkWindowList(Walker *pWalker, Window *pList, int bOneOnly){
Window *pWin;
for(pWin=pList; pWin; pWin=pWin->pNextWin){
int rc;
@@ -97996,6 +98403,7 @@ static int walkWindowList(Walker *pWalker, Window *pList){
if( NEVER(rc) ) return WRC_Abort;
rc = sqlite3WalkExpr(pWalker, pWin->pEnd);
if( NEVER(rc) ) return WRC_Abort;
+ if( bOneOnly ) break;
}
return WRC_Continue;
}
@@ -98043,7 +98451,7 @@ static SQLITE_NOINLINE int walkExpr(Walker *pWalker, Expr *pExpr){
}
#ifndef SQLITE_OMIT_WINDOWFUNC
if( ExprHasProperty(pExpr, EP_WinFunc) ){
- if( walkWindowList(pWalker, pExpr->y.pWin) ) return WRC_Abort;
+ if( walkWindowList(pWalker, pExpr->y.pWin, 1) ) return WRC_Abort;
}
#endif
}
@@ -98090,7 +98498,7 @@ SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
if( pParse && IN_RENAME_OBJECT ){
/* The following may return WRC_Abort if there are unresolvable
** symbols (e.g. a table that does not exist) in a window definition. */
- int rc = walkWindowList(pWalker, p->pWinDefn);
+ int rc = walkWindowList(pWalker, p->pWinDefn, 0);
return rc;
}
}
@@ -98108,7 +98516,7 @@ SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){
SrcList *pSrc;
int i;
- struct SrcList_item *pItem;
+ SrcItem *pItem;
pSrc = p->pSrc;
if( pSrc ){
@@ -98274,7 +98682,6 @@ static void resolveAlias(
ExprList *pEList, /* A result set */
int iCol, /* A column in the result set. 0..pEList->nExpr-1 */
Expr *pExpr, /* Transform this into an alias to the result set */
- const char *zType, /* "GROUP" or "ORDER" or "" */
int nSubquery /* Number of subqueries that the label is moving */
){
Expr *pOrig; /* The iCol-th column of the result set */
@@ -98287,7 +98694,7 @@ static void resolveAlias(
db = pParse->db;
pDup = sqlite3ExprDup(db, pOrig, 0);
if( pDup!=0 ){
- if( zType[0]!='G' ) incrAggFunctionDepth(pDup, nSubquery);
+ incrAggFunctionDepth(pDup, nSubquery);
if( pExpr->op==TK_COLLATE ){
pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken);
}
@@ -98316,7 +98723,6 @@ static void resolveAlias(
}
sqlite3DbFree(db, pDup);
}
- ExprSetProperty(pExpr, EP_Alias);
}
@@ -98451,8 +98857,8 @@ static int lookupName(
int cntTab = 0; /* Number of matching table names */
int nSubquery = 0; /* How many levels of subquery */
sqlite3 *db = pParse->db; /* The database connection */
- struct SrcList_item *pItem; /* Use for looping over pSrcList items */
- struct SrcList_item *pMatch = 0; /* The matching pSrcList item */
+ SrcItem *pItem; /* Use for looping over pSrcList items */
+ SrcItem *pMatch = 0; /* The matching pSrcList item */
NameContext *pTopNC = pNC; /* First namecontext in the list */
Schema *pSchema = 0; /* Schema of the expression */
int eNewExprOp = TK_COLUMN; /* New value for pExpr->op on success */
@@ -98573,25 +98979,29 @@ static int lookupName(
#if !defined(SQLITE_OMIT_TRIGGER) || !defined(SQLITE_OMIT_UPSERT)
/* If we have not already resolved the name, then maybe
** it is a new.* or old.* trigger argument reference. Or
- ** maybe it is an excluded.* from an upsert.
+ ** maybe it is an excluded.* from an upsert. Or maybe it is
+ ** a reference in the RETURNING clause to a table being modified.
*/
- if( zDb==0 && zTab!=0 && cntTab==0 ){
+ if( cnt==0 && zDb==0 ){
pTab = 0;
#ifndef SQLITE_OMIT_TRIGGER
if( pParse->pTriggerTab!=0 ){
int op = pParse->eTriggerOp;
assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT );
- if( op!=TK_DELETE && sqlite3StrICmp("new",zTab) == 0 ){
+ if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){
pExpr->iTable = 1;
pTab = pParse->pTriggerTab;
- }else if( op!=TK_INSERT && sqlite3StrICmp("old",zTab)==0 ){
+ }else if( op!=TK_INSERT && zTab && sqlite3StrICmp("old",zTab)==0 ){
pExpr->iTable = 0;
pTab = pParse->pTriggerTab;
+ }else if( pParse->bReturning && (pNC->ncFlags & NC_UBaseReg)!=0 ){
+ pExpr->iTable = op!=TK_DELETE;
+ pTab = pParse->pTriggerTab;
}
}
#endif /* SQLITE_OMIT_TRIGGER */
#ifndef SQLITE_OMIT_UPSERT
- if( (pNC->ncFlags & NC_UUpsert)!=0 ){
+ if( (pNC->ncFlags & NC_UUpsert)!=0 && zTab!=0 ){
Upsert *pUpsert = pNC->uNC.pUpsert;
if( pUpsert && sqlite3StrICmp("excluded",zTab)==0 ){
pTab = pUpsert->pUpsertSrc->a[0].pTab;
@@ -98619,6 +99029,7 @@ static int lookupName(
}
if( iCol<pTab->nCol ){
cnt++;
+ pMatch = 0;
#ifndef SQLITE_OMIT_UPSERT
if( pExpr->iTable==EXCLUDED_TABLE_NUMBER ){
testcase( iCol==(-1) );
@@ -98630,27 +99041,32 @@ static int lookupName(
pExpr->iTable = pNC->uNC.pUpsert->regData +
sqlite3TableColumnToStorage(pTab, iCol);
eNewExprOp = TK_REGISTER;
- ExprSetProperty(pExpr, EP_Alias);
}
}else
#endif /* SQLITE_OMIT_UPSERT */
{
-#ifndef SQLITE_OMIT_TRIGGER
- if( iCol<0 ){
- pExpr->affExpr = SQLITE_AFF_INTEGER;
- }else if( pExpr->iTable==0 ){
- testcase( iCol==31 );
- testcase( iCol==32 );
- pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
- }else{
- testcase( iCol==31 );
- testcase( iCol==32 );
- pParse->newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
- }
pExpr->y.pTab = pTab;
- pExpr->iColumn = (i16)iCol;
- eNewExprOp = TK_TRIGGER;
+ if( pParse->bReturning ){
+ eNewExprOp = TK_REGISTER;
+ pExpr->iTable = pNC->uNC.iBaseReg + (pTab->nCol+1)*pExpr->iTable +
+ sqlite3TableColumnToStorage(pTab, iCol) + 1;
+ }else{
+ pExpr->iColumn = (i16)iCol;
+ eNewExprOp = TK_TRIGGER;
+#ifndef SQLITE_OMIT_TRIGGER
+ if( iCol<0 ){
+ pExpr->affExpr = SQLITE_AFF_INTEGER;
+ }else if( pExpr->iTable==0 ){
+ testcase( iCol==31 );
+ testcase( iCol==32 );
+ pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
+ }else{
+ testcase( iCol==31 );
+ testcase( iCol==32 );
+ pParse->newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
+ }
#endif /* SQLITE_OMIT_TRIGGER */
+ }
}
}
}
@@ -98720,7 +99136,7 @@ static int lookupName(
sqlite3ErrorMsg(pParse, "row value misused");
return WRC_Abort;
}
- resolveAlias(pParse, pEList, j, pExpr, "", nSubquery);
+ resolveAlias(pParse, pEList, j, pExpr, nSubquery);
cnt = 1;
pMatch = 0;
assert( zTab==0 && zDb==0 );
@@ -98755,6 +99171,7 @@ static int lookupName(
assert( pExpr->op==TK_ID );
if( ExprHasProperty(pExpr,EP_DblQuoted)
&& areDoubleQuotedStringsEnabled(db, pTopNC)
+ && (db->init.bDropColumn==0 || sqlite3StrICmp(zCol, db->init.azInit[0])!=0)
){
/* If a double-quoted identifier does not match any known column name,
** then treat it as a string.
@@ -98769,6 +99186,11 @@ static int lookupName(
** Someday, I hope to get rid of this hack. Unfortunately there is
** a huge amount of legacy SQL that uses it. So for now, we just
** issue a warning.
+ **
+ ** 2021-03-15: ticket 1c24a659e6d7f3a1
+ ** Do not do the ID-to-STRING conversion when doing the schema
+ ** sanity check following a DROP COLUMN if the identifer name matches
+ ** the name of the column being dropped.
*/
sqlite3_log(SQLITE_WARNING,
"double-quoted string literal: \"%w\"", zCol);
@@ -98822,18 +99244,24 @@ static int lookupName(
/* Clean up and return
*/
- sqlite3ExprDelete(db, pExpr->pLeft);
- pExpr->pLeft = 0;
- sqlite3ExprDelete(db, pExpr->pRight);
- pExpr->pRight = 0;
+ if( !ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){
+ sqlite3ExprDelete(db, pExpr->pLeft);
+ pExpr->pLeft = 0;
+ sqlite3ExprDelete(db, pExpr->pRight);
+ pExpr->pRight = 0;
+ }
pExpr->op = eNewExprOp;
ExprSetProperty(pExpr, EP_Leaf);
lookupname_end:
if( cnt==1 ){
assert( pNC!=0 );
- if( !ExprHasProperty(pExpr, EP_Alias) ){
+#ifndef SQLITE_OMIT_AUTHORIZATION
+ if( pParse->db->xAuth
+ && (pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER)
+ ){
sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
}
+#endif
/* Increment the nRef value on all name contexts from TopNC up to
** the point where the name matched. */
for(;;){
@@ -98855,7 +99283,7 @@ lookupname_end:
SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSrc, int iCol){
Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0);
if( p ){
- struct SrcList_item *pItem = &pSrc->a[iSrc];
+ SrcItem *pItem = &pSrc->a[iSrc];
Table *pTab = p->y.pTab = pItem->pTab;
p->iTable = pItem->iCursor;
if( p->y.pTab->iPKey==iCol ){
@@ -98967,7 +99395,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
*/
case TK_ROW: {
SrcList *pSrcList = pNC->pSrcList;
- struct SrcList_item *pItem;
+ SrcItem *pItem;
assert( pSrcList && pSrcList->nSrc>=1 );
pItem = pSrcList->a;
pExpr->op = TK_COLUMN;
@@ -98978,6 +99406,47 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
break;
}
+ /* An optimization: Attempt to convert
+ **
+ ** "expr IS NOT NULL" --> "TRUE"
+ ** "expr IS NULL" --> "FALSE"
+ **
+ ** if we can prove that "expr" is never NULL. Call this the
+ ** "NOT NULL strength reduction optimization".
+ **
+ ** If this optimization occurs, also restore the NameContext ref-counts
+ ** to the state they where in before the "column" LHS expression was
+ ** resolved. This prevents "column" from being counted as having been
+ ** referenced, which might prevent a SELECT from being erroneously
+ ** marked as correlated.
+ */
+ case TK_NOTNULL:
+ case TK_ISNULL: {
+ int anRef[8];
+ NameContext *p;
+ int i;
+ for(i=0, p=pNC; p && i<ArraySize(anRef); p=p->pNext, i++){
+ anRef[i] = p->nRef;
+ }
+ sqlite3WalkExpr(pWalker, pExpr->pLeft);
+ if( 0==sqlite3ExprCanBeNull(pExpr->pLeft) && !IN_RENAME_OBJECT ){
+ if( pExpr->op==TK_NOTNULL ){
+ pExpr->u.zToken = "true";
+ ExprSetProperty(pExpr, EP_IsTrue);
+ }else{
+ pExpr->u.zToken = "false";
+ ExprSetProperty(pExpr, EP_IsFalse);
+ }
+ pExpr->op = TK_TRUEFALSE;
+ for(i=0, p=pNC; p && i<ArraySize(anRef); p=p->pNext, i++){
+ p->nRef = anRef[i];
+ }
+ sqlite3ExprDelete(pParse->db, pExpr->pLeft);
+ pExpr->pLeft = 0;
+ }
+ return WRC_Prune;
+ }
+
/* A column name: ID
** Or table name and column name: ID.ID
** Or a database, table and column: ID.ID.ID
@@ -99205,6 +99674,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
assert( pWin==pExpr->y.pWin );
if( IN_RENAME_OBJECT==0 ){
sqlite3WindowUpdate(pParse, pSel ? pSel->pWinDefn : 0, pWin, pDef);
+ if( pParse->db->mallocFailed ) break;
}
sqlite3WalkExprList(pWalker, pWin->pPartition);
sqlite3WalkExprList(pWalker, pWin->pOrderBy);
@@ -99279,7 +99749,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
assert( !ExprHasProperty(pExpr, EP_Reduced) );
/* Handle special cases of "x IS TRUE", "x IS FALSE", "x IS NOT TRUE",
** and "x IS NOT FALSE". */
- if( pRight && (pRight->op==TK_ID || pRight->op==TK_TRUEFALSE) ){
+ if( ALWAYS(pRight) && (pRight->op==TK_ID || pRight->op==TK_TRUEFALSE) ){
int rc = resolveExprStep(pWalker, pRight);
if( rc==WRC_Abort ) return WRC_Abort;
if( pRight->op==TK_TRUEFALSE ){
@@ -99595,8 +100065,7 @@ SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(
resolveOutOfRangeError(pParse, zType, i+1, pEList->nExpr);
return 1;
}
- resolveAlias(pParse, pEList, pItem->u.x.iOrderByCol-1, pItem->pExpr,
- zType,0);
+ resolveAlias(pParse, pEList, pItem->u.x.iOrderByCol-1, pItem->pExpr,0);
}
}
return 0;
@@ -99781,27 +100250,26 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
/* Recursively resolve names in all subqueries
*/
for(i=0; i<p->pSrc->nSrc; i++){
- struct SrcList_item *pItem = &p->pSrc->a[i];
+ SrcItem *pItem = &p->pSrc->a[i];
if( pItem->pSelect && (pItem->pSelect->selFlags & SF_Resolved)==0 ){
- NameContext *pNC; /* Used to iterate name contexts */
- int nRef = 0; /* Refcount for pOuterNC and outer contexts */
+ int nRef = pOuterNC ? pOuterNC->nRef : 0;
const char *zSavedContext = pParse->zAuthContext;
- /* Count the total number of references to pOuterNC and all of its
- ** parent contexts. After resolving references to expressions in
- ** pItem->pSelect, check if this value has changed. If so, then
- ** SELECT statement pItem->pSelect must be correlated. Set the
- ** pItem->fg.isCorrelated flag if this is the case. */
- for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef += pNC->nRef;
-
if( pItem->zName ) pParse->zAuthContext = pItem->zName;
sqlite3ResolveSelectNames(pParse, pItem->pSelect, pOuterNC);
pParse->zAuthContext = zSavedContext;
if( pParse->nErr || db->mallocFailed ) return WRC_Abort;
- for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef -= pNC->nRef;
- assert( pItem->fg.isCorrelated==0 && nRef<=0 );
- pItem->fg.isCorrelated = (nRef!=0);
+ /* If the number of references to the outer context changed when
+ ** expressions in the sub-select were resolved, the sub-select
+ ** is correlated. It is not required to check the refcount on any
+ ** but the innermost outer context object, as lookupName() increments
+ ** the refcount on all contexts between the current one and the
+ ** context containing the column when it resolves a name. */
+ if( pOuterNC ){
+ assert( pItem->fg.isCorrelated==0 && pOuterNC->nRef>=nRef );
+ pItem->fg.isCorrelated = (pOuterNC->nRef>nRef);
+ }
}
}
@@ -99843,7 +100311,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
** Minor point: If this is the case, then the expression will be
** re-evaluated for each reference to it.
*/
- assert( (sNC.ncFlags & (NC_UAggInfo|NC_UUpsert))==0 );
+ assert( (sNC.ncFlags & (NC_UAggInfo|NC_UUpsert|NC_UBaseReg))==0 );
sNC.uNC.pEList = p->pEList;
sNC.ncFlags |= NC_UEList;
if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort;
@@ -99851,7 +100319,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
/* Resolve names in table-valued-function arguments */
for(i=0; i<p->pSrc->nSrc; i++){
- struct SrcList_item *pItem = &p->pSrc->a[i];
+ SrcItem *pItem = &p->pSrc->a[i];
if( pItem->fg.isTabFunc
&& sqlite3ResolveExprListNames(&sNC, pItem->u1.pFuncArg)
){
@@ -100260,7 +100728,18 @@ SQLITE_PRIVATE Expr *sqlite3ExprAddCollateToken(
const Token *pCollName, /* Name of collating sequence */
int dequote /* True to dequote pCollName */
){
- if( pCollName->n>0 ){
+ assert( pExpr!=0 || pParse->db->mallocFailed );
+ if( pExpr==0 ) return 0;
+ if( pExpr->op==TK_VECTOR ){
+ ExprList *pList = pExpr->x.pList;
+ if( ALWAYS(pList!=0) ){
+ int i;
+ for(i=0; i<pList->nExpr; i++){
+ pList->a[i].pExpr = sqlite3ExprAddCollateToken(pParse,pList->a[i].pExpr,
+ pCollName, dequote);
+ }
+ }
+ }else if( pCollName->n>0 ){
Expr *pNew = sqlite3ExprAlloc(pParse->db, TK_COLLATE, pCollName, dequote);
if( pNew ){
pNew->pLeft = pExpr;
@@ -101684,8 +102163,8 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){
if( pNew==0 ) return 0;
pNew->nSrc = pNew->nAlloc = p->nSrc;
for(i=0; i<p->nSrc; i++){
- struct SrcList_item *pNewItem = &pNew->a[i];
- struct SrcList_item *pOldItem = &p->a[i];
+ SrcItem *pNewItem = &pNew->a[i];
+ SrcItem *pOldItem = &p->a[i];
Table *pTab;
pNewItem->pSchema = pOldItem->pSchema;
pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase);
@@ -101698,7 +102177,10 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){
if( pNewItem->fg.isIndexedBy ){
pNewItem->u1.zIndexedBy = sqlite3DbStrDup(db, pOldItem->u1.zIndexedBy);
}
- pNewItem->pIBIndex = pOldItem->pIBIndex;
+ pNewItem->u2 = pOldItem->u2;
+ if( pNewItem->fg.isCte ){
+ pNewItem->u2.pCteUse->nUse++;
+ }
if( pNewItem->fg.isTabFunc ){
pNewItem->u1.pFuncArg =
sqlite3ExprListDup(db, pOldItem->u1.pFuncArg, flags);
@@ -102736,7 +103218,7 @@ SQLITE_PRIVATE int sqlite3FindInIndex(
/* Code an OP_Transaction and OP_TableLock for <table>. */
iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
- assert( iDb>=0 && iDb<SQLITE_MAX_ATTACHED );
+ assert( iDb>=0 && iDb<SQLITE_MAX_DB );
sqlite3CodeVerifySchema(pParse, iDb);
sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
@@ -106015,7 +106497,7 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
/* Check to see if the column is in one of the tables in the FROM
** clause of the aggregate query */
if( ALWAYS(pSrcList!=0) ){
- struct SrcList_item *pItem = pSrcList->a;
+ SrcItem *pItem = pSrcList->a;
for(i=0; i<pSrcList->nSrc; i++, pItem++){
struct AggInfo_col *pCol;
assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) );
@@ -106304,15 +106786,22 @@ static int isAlterableTable(Parse *pParse, Table *pTab){
** statement to ensure that the operation has not rendered any schema
** objects unusable.
*/
-static void renameTestSchema(Parse *pParse, const char *zDb, int bTemp){
+static void renameTestSchema(
+ Parse *pParse, /* Parse context */
+ const char *zDb, /* Name of db to verify schema of */
+ int bTemp, /* True if this is the temp db */
+ const char *zWhen, /* "when" part of error message */
+ const char *zDropColumn /* Name of column being dropped */
+){
+ pParse->colNamesSet = 1;
sqlite3NestedParse(pParse,
"SELECT 1 "
"FROM \"%w\"." DFLT_SCHEMA_TABLE " "
"WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'"
" AND sql NOT LIKE 'create virtual%%'"
- " AND sqlite_rename_test(%Q, sql, type, name, %d)=NULL ",
+ " AND sqlite_rename_test(%Q, sql, type, name, %d, %Q, %Q)=NULL ",
zDb,
- zDb, bTemp
+ zDb, bTemp, zWhen, zDropColumn
);
if( bTemp==0 ){
@@ -106321,8 +106810,8 @@ static void renameTestSchema(Parse *pParse, const char *zDb, int bTemp){
"FROM temp." DFLT_SCHEMA_TABLE " "
"WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'"
" AND sql NOT LIKE 'create virtual%%'"
- " AND sqlite_rename_test(%Q, sql, type, name, 1)=NULL ",
- zDb
+ " AND sqlite_rename_test(%Q, sql, type, name, 1, %Q, %Q)=NULL ",
+ zDb, zWhen, zDropColumn
);
}
}
@@ -106331,12 +106820,12 @@ static void renameTestSchema(Parse *pParse, const char *zDb, int bTemp){
** Generate code to reload the schema for database iDb. And, if iDb!=1, for
** the temp database as well.
*/
-static void renameReloadSchema(Parse *pParse, int iDb){
+static void renameReloadSchema(Parse *pParse, int iDb, u16 p5){
Vdbe *v = pParse->pVdbe;
if( v ){
sqlite3ChangeCookie(pParse, iDb);
- sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, iDb, 0);
- if( iDb!=1 ) sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, 1, 0);
+ sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, iDb, 0, p5);
+ if( iDb!=1 ) sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, 1, 0, p5);
}
}
@@ -106485,7 +106974,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
"sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, 1), "
"tbl_name = "
"CASE WHEN tbl_name=%Q COLLATE nocase AND "
- " sqlite_rename_test(%Q, sql, type, name, 1) "
+ " sqlite_rename_test(%Q, sql, type, name, 1, 'after rename',0) "
"THEN %Q ELSE tbl_name END "
"WHERE type IN ('view', 'trigger')"
, zDb, zTabName, zName, zTabName, zDb, zName);
@@ -106504,8 +106993,8 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
}
#endif
- renameReloadSchema(pParse, iDb);
- renameTestSchema(pParse, zDb, iDb==1);
+ renameReloadSchema(pParse, iDb, INITFLAG_AlterRename);
+ renameTestSchema(pParse, zDb, iDb==1, "after rename", 0);
exit_rename_table:
sqlite3SrcListDelete(db, pSrc);
@@ -106636,11 +107125,14 @@ SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
*zEnd-- = '\0';
}
db->mDbFlags |= DBFLAG_PreferBuiltin;
+ /* substr() operations on characters, but addColOffset is in bytes. So we
+ ** have to use printf() to translate between these units: */
sqlite3NestedParse(pParse,
"UPDATE \"%w\"." DFLT_SCHEMA_TABLE " SET "
- "sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) "
+ "sql = printf('%%.%ds, ',sql) || %Q"
+ " || substr(sql,1+length(printf('%%.%ds',sql))) "
"WHERE type = 'table' AND name = %Q",
- zDb, pNew->addColOffset, zCol, pNew->addColOffset+1,
+ zDb, pNew->addColOffset, zCol, pNew->addColOffset,
zTab
);
sqlite3DbFree(db, zCol);
@@ -106664,7 +107156,7 @@ SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
}
/* Reload the table definition */
- renameReloadSchema(pParse, iDb);
+ renameReloadSchema(pParse, iDb, INITFLAG_AlterRename);
}
/*
@@ -106764,7 +107256,7 @@ exit_begin_add_column:
** Or, if pTab is not a view or virtual table, zero is returned.
*/
#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
-static int isRealTable(Parse *pParse, Table *pTab){
+static int isRealTable(Parse *pParse, Table *pTab, int bDrop){
const char *zType = 0;
#ifndef SQLITE_OMIT_VIEW
if( pTab->pSelect ){
@@ -106777,15 +107269,16 @@ static int isRealTable(Parse *pParse, Table *pTab){
}
#endif
if( zType ){
- sqlite3ErrorMsg(
- pParse, "cannot rename columns of %s \"%s\"", zType, pTab->zName
+ sqlite3ErrorMsg(pParse, "cannot %s %s \"%s\"",
+ (bDrop ? "drop column from" : "rename columns of"),
+ zType, pTab->zName
);
return 1;
}
return 0;
}
#else /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
-# define isRealTable(x,y) (0)
+# define isRealTable(x,y,z) (0)
#endif
/*
@@ -106814,7 +107307,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameColumn(
/* Cannot alter a system table */
if( SQLITE_OK!=isAlterableTable(pParse, pTab) ) goto exit_rename_column;
- if( SQLITE_OK!=isRealTable(pParse, pTab) ) goto exit_rename_column;
+ if( SQLITE_OK!=isRealTable(pParse, pTab, 0) ) goto exit_rename_column;
/* Which schema holds the table to be altered */
iSchema = sqlite3SchemaToIndex(db, pTab->pSchema);
@@ -106868,8 +107361,8 @@ SQLITE_PRIVATE void sqlite3AlterRenameColumn(
);
/* Drop and reload the database schema. */
- renameReloadSchema(pParse, iSchema);
- renameTestSchema(pParse, zDb, iSchema==1);
+ renameReloadSchema(pParse, iSchema, INITFLAG_AlterRename);
+ renameTestSchema(pParse, zDb, iSchema==1, "after rename", 0);
exit_rename_column:
sqlite3SrcListDelete(db, pSrc);
@@ -107121,23 +107614,33 @@ static void renameTokenFree(sqlite3 *db, RenameToken *pToken){
/*
** Search the Parse object passed as the first argument for a RenameToken
-** object associated with parse tree element pPtr. If found, remove it
-** from the Parse object and add it to the list maintained by the
-** RenameCtx object passed as the second argument.
+** object associated with parse tree element pPtr. If found, return a pointer
+** to it. Otherwise, return NULL.
+**
+** If the second argument passed to this function is not NULL and a matching
+** RenameToken object is found, remove it from the Parse object and add it to
+** the list maintained by the RenameCtx object.
*/
-static void renameTokenFind(Parse *pParse, struct RenameCtx *pCtx, void *pPtr){
+static RenameToken *renameTokenFind(
+ Parse *pParse,
+ struct RenameCtx *pCtx,
+ void *pPtr
+){
RenameToken **pp;
assert( pPtr!=0 );
for(pp=&pParse->pRename; (*pp); pp=&(*pp)->pNext){
if( (*pp)->p==pPtr ){
RenameToken *pToken = *pp;
- *pp = pToken->pNext;
- pToken->pNext = pCtx->pList;
- pCtx->pList = pToken;
- pCtx->nList++;
- break;
+ if( pCtx ){
+ *pp = pToken->pNext;
+ pToken->pNext = pCtx->pList;
+ pCtx->pList = pToken;
+ pCtx->nList++;
+ }
+ return pToken;
}
}
+ return 0;
}
/*
@@ -107208,7 +107711,7 @@ static RenameToken *renameColumnTokenNext(RenameCtx *pCtx){
*/
static void renameColumnParseError(
sqlite3_context *pCtx,
- int bPost,
+ const char *zWhen,
sqlite3_value *pType,
sqlite3_value *pObject,
Parse *pParse
@@ -107217,8 +107720,8 @@ static void renameColumnParseError(
const char *zN = (const char*)sqlite3_value_text(pObject);
char *zErr;
- zErr = sqlite3_mprintf("error in %s %s%s: %s",
- zT, zN, (bPost ? " after rename" : ""),
+ zErr = sqlite3_mprintf("error in %s %s%s%s: %s",
+ zT, zN, (zWhen[0] ? " " : ""), zWhen,
pParse->zErrMsg
);
sqlite3_result_error(pCtx, zErr, -1);
@@ -107283,12 +107786,17 @@ static int renameParseSql(
const char *zDb, /* Name of schema SQL belongs to */
sqlite3 *db, /* Database handle */
const char *zSql, /* SQL to parse */
- int bTemp /* True if SQL is from temp schema */
+ int bTemp, /* True if SQL is from temp schema */
+ const char *zDropColumn /* Name of column being dropped */
){
int rc;
char *zErr = 0;
db->init.iDb = bTemp ? 1 : sqlite3FindDbName(db, zDb);
+ if( zDropColumn ){
+ db->init.bDropColumn = 1;
+ db->init.azInit = (char**)&zDropColumn;
+ }
/* Parse the SQL statement passed as the first argument. If no error
** occurs and the parse does not result in a new table, index or
@@ -107297,7 +107805,7 @@ static int renameParseSql(
p->eParseMode = PARSE_MODE_RENAME;
p->db = db;
p->nQueryLoop = 1;
- rc = sqlite3RunParser(p, zSql, &zErr);
+ rc = zSql ? sqlite3RunParser(p, zSql, &zErr) : SQLITE_NOMEM;
assert( p->zErrMsg==0 );
assert( rc!=SQLITE_OK || zErr==0 );
p->zErrMsg = zErr;
@@ -107321,6 +107829,7 @@ static int renameParseSql(
#endif
db->init.iDb = 0;
+ db->init.bDropColumn = 0;
return rc;
}
@@ -107450,7 +107959,7 @@ static int renameResolveTrigger(Parse *pParse){
if( pSrc ){
int i;
for(i=0; i<pSrc->nSrc && rc==SQLITE_OK; i++){
- struct SrcList_item *p = &pSrc->a[i];
+ SrcItem *p = &pSrc->a[i];
p->iCursor = pParse->nTab++;
if( p->pSelect ){
sqlite3SelectPrep(pParse, p->pSelect, 0);
@@ -107476,9 +107985,8 @@ static int renameResolveTrigger(Parse *pParse){
rc = sqlite3ResolveExprListNames(&sNC, pStep->pExprList);
}
assert( !pStep->pUpsert || (!pStep->pWhere && !pStep->pExprList) );
- if( pStep->pUpsert ){
+ if( pStep->pUpsert && rc==SQLITE_OK ){
Upsert *pUpsert = pStep->pUpsert;
- assert( rc==SQLITE_OK );
pUpsert->pUpsertSrc = pSrc;
sNC.uNC.pUpsert = pUpsert;
sNC.ncFlags = NC_UUpsert;
@@ -107623,7 +108131,7 @@ static void renameColumnFunc(
#ifndef SQLITE_OMIT_AUTHORIZATION
db->xAuth = 0;
#endif
- rc = renameParseSql(&sParse, zDb, db, zSql, bTemp);
+ rc = renameParseSql(&sParse, zDb, db, zSql, bTemp, 0);
/* Find tokens that need to be replaced. */
memset(&sWalker, 0, sizeof(Walker));
@@ -107665,12 +108173,12 @@ static void renameColumnFunc(
for(pIdx=sParse.pNewIndex; pIdx; pIdx=pIdx->pNext){
sqlite3WalkExprList(&sWalker, pIdx->aColExpr);
}
- }
#ifndef SQLITE_OMIT_GENERATED_COLUMNS
- for(i=0; i<sParse.pNewTable->nCol; i++){
- sqlite3WalkExpr(&sWalker, sParse.pNewTable->aCol[i].pDflt);
- }
+ for(i=0; i<sParse.pNewTable->nCol; i++){
+ sqlite3WalkExpr(&sWalker, sParse.pNewTable->aCol[i].pDflt);
+ }
#endif
+ }
for(pFKey=sParse.pNewTable->pFKey; pFKey; pFKey=pFKey->pNextFrom){
for(i=0; i<pFKey->nCol; i++){
@@ -107724,7 +108232,7 @@ static void renameColumnFunc(
renameColumnFunc_done:
if( rc!=SQLITE_OK ){
if( sParse.zErrMsg ){
- renameColumnParseError(context, 0, argv[1], argv[2], &sParse);
+ renameColumnParseError(context, "", argv[1], argv[2], &sParse);
}else{
sqlite3_result_error_code(context, rc);
}
@@ -107762,7 +108270,7 @@ static int renameTableSelectCb(Walker *pWalker, Select *pSelect){
return WRC_Abort;
}
for(i=0; i<pSrc->nSrc; i++){
- struct SrcList_item *pItem = &pSrc->a[i];
+ SrcItem *pItem = &pSrc->a[i];
if( pItem->pTab==p->pTab ){
renameTokenFind(pWalker->pParse, p, pItem->zName);
}
@@ -107827,7 +108335,7 @@ static void renameTableFunc(
sWalker.xSelectCallback = renameTableSelectCb;
sWalker.u.pRename = &sCtx;
- rc = renameParseSql(&sParse, zDb, db, zInput, bTemp);
+ rc = renameParseSql(&sParse, zDb, db, zInput, bTemp, 0);
if( rc==SQLITE_OK ){
int isLegacy = (db->flags & SQLITE_LegacyAlter);
@@ -107913,7 +108421,7 @@ static void renameTableFunc(
}
if( rc!=SQLITE_OK ){
if( sParse.zErrMsg ){
- renameColumnParseError(context, 0, argv[1], argv[2], &sParse);
+ renameColumnParseError(context, "", argv[1], argv[2], &sParse);
}else{
sqlite3_result_error_code(context, rc);
}
@@ -107942,6 +108450,8 @@ static void renameTableFunc(
** 2: Object type ("view", "table", "trigger" or "index").
** 3: Object name.
** 4: True if object is from temp schema.
+** 5: "when" part of error message.
+** 6: Name of column being dropped, or NULL.
**
** Unless it finds an error, this function normally returns NULL. However, it
** returns integer value 1 if:
@@ -107959,6 +108469,8 @@ static void renameTableTest(
char const *zInput = (const char*)sqlite3_value_text(argv[1]);
int bTemp = sqlite3_value_int(argv[4]);
int isLegacy = (db->flags & SQLITE_LegacyAlter);
+ char const *zWhen = (const char*)sqlite3_value_text(argv[5]);
+ char const *zDropColumn = (const char*)sqlite3_value_text(argv[6]);
#ifndef SQLITE_OMIT_AUTHORIZATION
sqlite3_xauth xAuth = db->xAuth;
@@ -107969,7 +108481,7 @@ static void renameTableTest(
if( zDb && zInput ){
int rc;
Parse sParse;
- rc = renameParseSql(&sParse, zDb, db, zInput, bTemp);
+ rc = renameParseSql(&sParse, zDb, db, zInput, bTemp, zDropColumn);
if( rc==SQLITE_OK ){
if( isLegacy==0 && sParse.pNewTable && sParse.pNewTable->pSelect ){
NameContext sNC;
@@ -107991,8 +108503,8 @@ static void renameTableTest(
}
}
- if( rc!=SQLITE_OK ){
- renameColumnParseError(context, 1, argv[2], argv[3], &sParse);
+ if( rc!=SQLITE_OK && zWhen ){
+ renameColumnParseError(context, zWhen, argv[2], argv[3],&sParse);
}
renameParseCleanup(&sParse);
}
@@ -108003,13 +108515,205 @@ static void renameTableTest(
}
/*
+** The implementation of internal UDF sqlite_drop_column().
+**
+** Arguments:
+**
+** argv[0]: An integer - the index of the schema containing the table
+** argv[1]: CREATE TABLE statement to modify.
+** argv[2]: An integer - the index of the column to remove.
+**
+** The value returned is a string containing the CREATE TABLE statement
+** with column argv[2] removed.
+*/
+static void dropColumnFunc(
+ sqlite3_context *context,
+ int NotUsed,
+ sqlite3_value **argv
+){
+ sqlite3 *db = sqlite3_context_db_handle(context);
+ int iSchema = sqlite3_value_int(argv[0]);
+ const char *zSql = (const char*)sqlite3_value_text(argv[1]);
+ int iCol = sqlite3_value_int(argv[2]);
+ const char *zDb = db->aDb[iSchema].zDbSName;
+ int rc;
+ Parse sParse;
+ RenameToken *pCol;
+ Table *pTab;
+ const char *zEnd;
+ char *zNew = 0;
+
+#ifndef SQLITE_OMIT_AUTHORIZATION
+ sqlite3_xauth xAuth = db->xAuth;
+ db->xAuth = 0;
+#endif
+
+ UNUSED_PARAMETER(NotUsed);
+ rc = renameParseSql(&sParse, zDb, db, zSql, iSchema==1, 0);
+ if( rc!=SQLITE_OK ) goto drop_column_done;
+ pTab = sParse.pNewTable;
+ if( pTab==0 || pTab->nCol==1 || iCol>=pTab->nCol ){
+ /* This can happen if the sqlite_schema table is corrupt */
+ rc = SQLITE_CORRUPT_BKPT;
+ goto drop_column_done;
+ }
+
+ pCol = renameTokenFind(&sParse, 0, (void*)pTab->aCol[iCol].zName);
+ if( iCol<pTab->nCol-1 ){
+ RenameToken *pEnd;
+ pEnd = renameTokenFind(&sParse, 0, (void*)pTab->aCol[iCol+1].zName);
+ zEnd = (const char*)pEnd->t.z;
+ }else{
+ zEnd = (const char*)&zSql[pTab->addColOffset];
+ while( ALWAYS(pCol->t.z[0]!=0) && pCol->t.z[0]!=',' ) pCol->t.z--;
+ }
+
+ zNew = sqlite3MPrintf(db, "%.*s%s", pCol->t.z-zSql, zSql, zEnd);
+ sqlite3_result_text(context, zNew, -1, SQLITE_TRANSIENT);
+ sqlite3_free(zNew);
+
+drop_column_done:
+ renameParseCleanup(&sParse);
+#ifndef SQLITE_OMIT_AUTHORIZATION
+ db->xAuth = xAuth;
+#endif
+ if( rc!=SQLITE_OK ){
+ sqlite3_result_error_code(context, rc);
+ }
+}
+
+/*
+** This function is called by the parser upon parsing an
+**
+** ALTER TABLE pSrc DROP COLUMN pName
+**
+** statement. Argument pSrc contains the possibly qualified name of the
+** table being edited, and token pName the name of the column to drop.
+*/
+SQLITE_PRIVATE void sqlite3AlterDropColumn(Parse *pParse, SrcList *pSrc, Token *pName){
+ sqlite3 *db = pParse->db; /* Database handle */
+ Table *pTab; /* Table to modify */
+ int iDb; /* Index of db containing pTab in aDb[] */
+ const char *zDb; /* Database containing pTab ("main" etc.) */
+ char *zCol = 0; /* Name of column to drop */
+ int iCol; /* Index of column zCol in pTab->aCol[] */
+
+ /* Look up the table being altered. */
+ assert( pParse->pNewTable==0 );
+ assert( sqlite3BtreeHoldsAllMutexes(db) );
+ if( NEVER(db->mallocFailed) ) goto exit_drop_column;
+ pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]);
+ if( !pTab ) goto exit_drop_column;
+
+ /* Make sure this is not an attempt to ALTER a view, virtual table or
+ ** system table. */
+ if( SQLITE_OK!=isAlterableTable(pParse, pTab) ) goto exit_drop_column;
+ if( SQLITE_OK!=isRealTable(pParse, pTab, 1) ) goto exit_drop_column;
+
+ /* Find the index of the column being dropped. */
+ zCol = sqlite3NameFromToken(db, pName);
+ if( zCol==0 ){
+ assert( db->mallocFailed );
+ goto exit_drop_column;
+ }
+ iCol = sqlite3ColumnIndex(pTab, zCol);
+ if( iCol<0 ){
+ sqlite3ErrorMsg(pParse, "no such column: \"%s\"", zCol);
+ goto exit_drop_column;
+ }
+
+ /* Do not allow the user to drop a PRIMARY KEY column or a column
+ ** constrained by a UNIQUE constraint. */
+ if( pTab->aCol[iCol].colFlags & (COLFLAG_PRIMKEY|COLFLAG_UNIQUE) ){
+ sqlite3ErrorMsg(pParse, "cannot drop %s column: \"%s\"",
+ (pTab->aCol[iCol].colFlags&COLFLAG_PRIMKEY) ? "PRIMARY KEY" : "UNIQUE",
+ zCol
+ );
+ goto exit_drop_column;
+ }
+
+ /* Do not allow the number of columns to go to zero */
+ if( pTab->nCol<=1 ){
+ sqlite3ErrorMsg(pParse, "cannot drop column \"%s\": no other columns exist",zCol);
+ goto exit_drop_column;
+ }
+
+ /* Edit the sqlite_schema table */
+ iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
+ assert( iDb>=0 );
+ zDb = db->aDb[iDb].zDbSName;
+ renameTestSchema(pParse, zDb, iDb==1, "", 0);
+ sqlite3NestedParse(pParse,
+ "UPDATE \"%w\"." DFLT_SCHEMA_TABLE " SET "
+ "sql = sqlite_drop_column(%d, sql, %d) "
+ "WHERE (type=='table' AND tbl_name=%Q COLLATE nocase)"
+ , zDb, iDb, iCol, pTab->zName
+ );
+
+ /* Drop and reload the database schema. */
+ renameReloadSchema(pParse, iDb, INITFLAG_AlterDrop);
+ renameTestSchema(pParse, zDb, iDb==1, "after drop column", zCol);
+
+ /* Edit rows of table on disk */
+ if( pParse->nErr==0 && (pTab->aCol[iCol].colFlags & COLFLAG_VIRTUAL)==0 ){
+ int i;
+ int addr;
+ int reg;
+ int regRec;
+ Index *pPk = 0;
+ int nField = 0; /* Number of non-virtual columns after drop */
+ int iCur;
+ Vdbe *v = sqlite3GetVdbe(pParse);
+ iCur = pParse->nTab++;
+ sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenWrite);
+ addr = sqlite3VdbeAddOp1(v, OP_Rewind, iCur); VdbeCoverage(v);
+ reg = ++pParse->nMem;
+ pParse->nMem += pTab->nCol;
+ if( HasRowid(pTab) ){
+ sqlite3VdbeAddOp2(v, OP_Rowid, iCur, reg);
+ }else{
+ pPk = sqlite3PrimaryKeyIndex(pTab);
+ }
+ for(i=0; i<pTab->nCol; i++){
+ if( i!=iCol && (pTab->aCol[i].colFlags & COLFLAG_VIRTUAL)==0 ){
+ int regOut;
+ if( pPk ){
+ int iPos = sqlite3TableColumnToIndex(pPk, i);
+ int iColPos = sqlite3TableColumnToIndex(pPk, iCol);
+ regOut = reg+1+iPos-(iPos>iColPos);
+ }else{
+ regOut = reg+1+nField;
+ }
+ sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOut);
+ nField++;
+ }
+ }
+ regRec = reg + pTab->nCol;
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, reg+1, nField, regRec);
+ if( pPk ){
+ sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iCur, regRec, reg+1, pPk->nKeyCol);
+ }else{
+ sqlite3VdbeAddOp3(v, OP_Insert, iCur, regRec, reg);
+ }
+
+ sqlite3VdbeAddOp2(v, OP_Next, iCur, addr+1); VdbeCoverage(v);
+ sqlite3VdbeJumpHere(v, addr);
+ }
+
+exit_drop_column:
+ sqlite3DbFree(db, zCol);
+ sqlite3SrcListDelete(db, pSrc);
+}
+
+/*
** Register built-in functions used to help implement ALTER TABLE
*/
SQLITE_PRIVATE void sqlite3AlterFunctions(void){
static FuncDef aAlterTableFuncs[] = {
- INTERNAL_FUNCTION(sqlite_rename_column, 9, renameColumnFunc),
- INTERNAL_FUNCTION(sqlite_rename_table, 7, renameTableFunc),
- INTERNAL_FUNCTION(sqlite_rename_test, 5, renameTableTest),
+ INTERNAL_FUNCTION(sqlite_rename_column, 9, renameColumnFunc),
+ INTERNAL_FUNCTION(sqlite_rename_table, 7, renameTableFunc),
+ INTERNAL_FUNCTION(sqlite_rename_test, 7, renameTableTest),
+ INTERNAL_FUNCTION(sqlite_drop_column, 3, dropColumnFunc),
};
sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs));
}
@@ -110399,6 +111103,62 @@ SQLITE_PRIVATE void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname, Expr *p
#endif /* SQLITE_OMIT_ATTACH */
/*
+** Expression callback used by sqlite3FixAAAA() routines.
+*/
+static int fixExprCb(Walker *p, Expr *pExpr){
+ DbFixer *pFix = p->u.pFix;
+ if( !pFix->bTemp ) ExprSetProperty(pExpr, EP_FromDDL);
+ if( pExpr->op==TK_VARIABLE ){
+ if( pFix->pParse->db->init.busy ){
+ pExpr->op = TK_NULL;
+ }else{
+ sqlite3ErrorMsg(pFix->pParse, "%s cannot use variables", pFix->zType);
+ return WRC_Abort;
+ }
+ }
+ return WRC_Continue;
+}
+
+/*
+** Select callback used by sqlite3FixAAAA() routines.
+*/
+static int fixSelectCb(Walker *p, Select *pSelect){
+ DbFixer *pFix = p->u.pFix;
+ int i;
+ SrcItem *pItem;
+ sqlite3 *db = pFix->pParse->db;
+ int iDb = sqlite3FindDbName(db, pFix->zDb);
+ SrcList *pList = pSelect->pSrc;
+
+ if( NEVER(pList==0) ) return WRC_Continue;
+ for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
+ if( pFix->bTemp==0 ){
+ if( pItem->zDatabase && iDb!=sqlite3FindDbName(db, pItem->zDatabase) ){
+ sqlite3ErrorMsg(pFix->pParse,
+ "%s %T cannot reference objects in database %s",
+ pFix->zType, pFix->pName, pItem->zDatabase);
+ return WRC_Abort;
+ }
+ sqlite3DbFree(db, pItem->zDatabase);
+ pItem->zDatabase = 0;
+ pItem->pSchema = pFix->pSchema;
+ pItem->fg.fromDDL = 1;
+ }
+#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
+ if( sqlite3WalkExpr(&pFix->w, pList->a[i].pOn) ) return WRC_Abort;
+#endif
+ }
+ if( pSelect->pWith ){
+ for(i=0; i<pSelect->pWith->nCte; i++){
+ if( sqlite3WalkSelect(p, pSelect->pWith->a[i].pSelect) ){
+ return WRC_Abort;
+ }
+ }
+ }
+ return WRC_Continue;
+}
+
+/*
** Initialize a DbFixer structure. This routine must be called prior
** to passing the structure to one of the sqliteFixAAAA() routines below.
*/
@@ -110409,9 +111169,7 @@ SQLITE_PRIVATE void sqlite3FixInit(
const char *zType, /* "view", "trigger", or "index" */
const Token *pName /* Name of the view, trigger, or index */
){
- sqlite3 *db;
-
- db = pParse->db;
+ sqlite3 *db = pParse->db;
assert( db->nDb>iDb );
pFix->pParse = pParse;
pFix->zDb = db->aDb[iDb].zDbSName;
@@ -110419,6 +111177,13 @@ SQLITE_PRIVATE void sqlite3FixInit(
pFix->zType = zType;
pFix->pName = pName;
pFix->bTemp = (iDb==1);
+ pFix->w.pParse = pParse;
+ pFix->w.xExprCallback = fixExprCb;
+ pFix->w.xSelectCallback = fixSelectCb;
+ pFix->w.xSelectCallback2 = 0;
+ pFix->w.walkerDepth = 0;
+ pFix->w.eCode = 0;
+ pFix->w.u.pFix = pFix;
}
/*
@@ -110439,115 +111204,27 @@ SQLITE_PRIVATE int sqlite3FixSrcList(
DbFixer *pFix, /* Context of the fixation */
SrcList *pList /* The Source list to check and modify */
){
- int i;
- struct SrcList_item *pItem;
- sqlite3 *db = pFix->pParse->db;
- int iDb = sqlite3FindDbName(db, pFix->zDb);
-
- if( NEVER(pList==0) ) return 0;
-
- for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
- if( pFix->bTemp==0 ){
- if( pItem->zDatabase && iDb!=sqlite3FindDbName(db, pItem->zDatabase) ){
- sqlite3ErrorMsg(pFix->pParse,
- "%s %T cannot reference objects in database %s",
- pFix->zType, pFix->pName, pItem->zDatabase);
- return 1;
- }
- sqlite3DbFree(db, pItem->zDatabase);
- pItem->zDatabase = 0;
- pItem->pSchema = pFix->pSchema;
- pItem->fg.fromDDL = 1;
- }
-#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
- if( sqlite3FixSelect(pFix, pItem->pSelect) ) return 1;
- if( sqlite3FixExpr(pFix, pItem->pOn) ) return 1;
-#endif
- if( pItem->fg.isTabFunc && sqlite3FixExprList(pFix, pItem->u1.pFuncArg) ){
- return 1;
- }
+ int res = 0;
+ if( pList ){
+ Select s;
+ memset(&s, 0, sizeof(s));
+ s.pSrc = pList;
+ res = sqlite3WalkSelect(&pFix->w, &s);
}
- return 0;
+ return res;
}
#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
SQLITE_PRIVATE int sqlite3FixSelect(
DbFixer *pFix, /* Context of the fixation */
Select *pSelect /* The SELECT statement to be fixed to one database */
){
- while( pSelect ){
- if( sqlite3FixExprList(pFix, pSelect->pEList) ){
- return 1;
- }
- if( sqlite3FixSrcList(pFix, pSelect->pSrc) ){
- return 1;
- }
- if( sqlite3FixExpr(pFix, pSelect->pWhere) ){
- return 1;
- }
- if( sqlite3FixExprList(pFix, pSelect->pGroupBy) ){
- return 1;
- }
- if( sqlite3FixExpr(pFix, pSelect->pHaving) ){
- return 1;
- }
- if( sqlite3FixExprList(pFix, pSelect->pOrderBy) ){
- return 1;
- }
- if( sqlite3FixExpr(pFix, pSelect->pLimit) ){
- return 1;
- }
- if( pSelect->pWith ){
- int i;
- for(i=0; i<pSelect->pWith->nCte; i++){
- if( sqlite3FixSelect(pFix, pSelect->pWith->a[i].pSelect) ){
- return 1;
- }
- }
- }
- pSelect = pSelect->pPrior;
- }
- return 0;
+ return sqlite3WalkSelect(&pFix->w, pSelect);
}
SQLITE_PRIVATE int sqlite3FixExpr(
DbFixer *pFix, /* Context of the fixation */
Expr *pExpr /* The expression to be fixed to one database */
){
- while( pExpr ){
- if( !pFix->bTemp ) ExprSetProperty(pExpr, EP_FromDDL);
- if( pExpr->op==TK_VARIABLE ){
- if( pFix->pParse->db->init.busy ){
- pExpr->op = TK_NULL;
- }else{
- sqlite3ErrorMsg(pFix->pParse, "%s cannot use variables", pFix->zType);
- return 1;
- }
- }
- if( ExprHasProperty(pExpr, EP_TokenOnly|EP_Leaf) ) break;
- if( ExprHasProperty(pExpr, EP_xIsSelect) ){
- if( sqlite3FixSelect(pFix, pExpr->x.pSelect) ) return 1;
- }else{
- if( sqlite3FixExprList(pFix, pExpr->x.pList) ) return 1;
- }
- if( sqlite3FixExpr(pFix, pExpr->pRight) ){
- return 1;
- }
- pExpr = pExpr->pLeft;
- }
- return 0;
-}
-SQLITE_PRIVATE int sqlite3FixExprList(
- DbFixer *pFix, /* Context of the fixation */
- ExprList *pList /* The expression to be fixed to one database */
-){
- int i;
- struct ExprList_item *pItem;
- if( pList==0 ) return 0;
- for(i=0, pItem=pList->a; i<pList->nExpr; i++, pItem++){
- if( sqlite3FixExpr(pFix, pItem->pExpr) ){
- return 1;
- }
- }
- return 0;
+ return sqlite3WalkExpr(&pFix->w, pExpr);
}
#endif
@@ -110557,25 +111234,20 @@ SQLITE_PRIVATE int sqlite3FixTriggerStep(
TriggerStep *pStep /* The trigger step be fixed to one database */
){
while( pStep ){
- if( sqlite3FixSelect(pFix, pStep->pSelect) ){
- return 1;
- }
- if( sqlite3FixExpr(pFix, pStep->pWhere) ){
- return 1;
- }
- if( sqlite3FixExprList(pFix, pStep->pExprList) ){
- return 1;
- }
- if( pStep->pFrom && sqlite3FixSrcList(pFix, pStep->pFrom) ){
+ if( sqlite3WalkSelect(&pFix->w, pStep->pSelect)
+ || sqlite3WalkExpr(&pFix->w, pStep->pWhere)
+ || sqlite3WalkExprList(&pFix->w, pStep->pExprList)
+ || sqlite3FixSrcList(pFix, pStep->pFrom)
+ ){
return 1;
}
#ifndef SQLITE_OMIT_UPSERT
if( pStep->pUpsert ){
Upsert *pUp = pStep->pUpsert;
- if( sqlite3FixExprList(pFix, pUp->pUpsertTarget)
- || sqlite3FixExpr(pFix, pUp->pUpsertTargetWhere)
- || sqlite3FixExprList(pFix, pUp->pUpsertSet)
- || sqlite3FixExpr(pFix, pUp->pUpsertWhere)
+ if( sqlite3WalkExprList(&pFix->w, pUp->pUpsertTarget)
+ || sqlite3WalkExpr(&pFix->w, pUp->pUpsertTargetWhere)
+ || sqlite3WalkExprList(&pFix->w, pUp->pUpsertSet)
+ || sqlite3WalkExpr(&pFix->w, pUp->pUpsertWhere)
){
return 1;
}
@@ -110583,6 +111255,7 @@ SQLITE_PRIVATE int sqlite3FixTriggerStep(
#endif
pStep = pStep->pNext;
}
+
return 0;
}
#endif
@@ -110734,7 +111407,6 @@ SQLITE_PRIVATE void sqlite3AuthRead(
Schema *pSchema, /* The schema of the expression */
SrcList *pTabList /* All table that pExpr might refer to */
){
- sqlite3 *db = pParse->db;
Table *pTab = 0; /* The table being read */
const char *zCol; /* Name of the column of the table */
int iSrc; /* Index in pTabList->a[] of table being read */
@@ -110742,8 +111414,8 @@ SQLITE_PRIVATE void sqlite3AuthRead(
int iCol; /* Index of column in table */
assert( pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER );
- assert( !IN_RENAME_OBJECT || db->xAuth==0 );
- if( db->xAuth==0 ) return;
+ assert( !IN_RENAME_OBJECT );
+ assert( pParse->db->xAuth!=0 );
iDb = sqlite3SchemaToIndex(pParse->db, pSchema);
if( iDb<0 ){
/* An attempt to read a column out of a subquery or other
@@ -110755,7 +111427,7 @@ SQLITE_PRIVATE void sqlite3AuthRead(
pTab = pParse->pTriggerTab;
}else{
assert( pTabList );
- for(iSrc=0; ALWAYS(iSrc<pTabList->nSrc); iSrc++){
+ for(iSrc=0; iSrc<pTabList->nSrc; iSrc++){
if( pExpr->iTable==pTabList->a[iSrc].iCursor ){
pTab = pTabList->a[iSrc].pTab;
break;
@@ -110763,7 +111435,7 @@ SQLITE_PRIVATE void sqlite3AuthRead(
}
}
iCol = pExpr->iColumn;
- if( NEVER(pTab==0) ) return;
+ if( pTab==0 ) return;
if( iCol>=0 ){
assert( iCol<pTab->nCol );
@@ -110774,7 +111446,7 @@ SQLITE_PRIVATE void sqlite3AuthRead(
}else{
zCol = "ROWID";
}
- assert( iDb>=0 && iDb<db->nDb );
+ assert( iDb>=0 && iDb<pParse->db->nDb );
if( SQLITE_IGNORE==sqlite3AuthReadCol(pParse, pTab->zName, zCol, iDb) ){
pExpr->op = TK_NULL;
}
@@ -110800,11 +111472,7 @@ SQLITE_PRIVATE int sqlite3AuthCheck(
** or if the parser is being invoked from within sqlite3_declare_vtab.
*/
assert( !IN_RENAME_OBJECT || db->xAuth==0 );
- if( db->init.busy || IN_SPECIAL_PARSE ){
- return SQLITE_OK;
- }
-
- if( db->xAuth==0 ){
+ if( db->xAuth==0 || db->init.busy || IN_SPECIAL_PARSE ){
return SQLITE_OK;
}
@@ -111010,10 +111678,36 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
/* Begin by generating some termination code at the end of the
** vdbe program
*/
- v = sqlite3GetVdbe(pParse);
+ v = pParse->pVdbe;
+ if( v==0 ){
+ if( db->init.busy ){
+ pParse->rc = SQLITE_DONE;
+ return;
+ }
+ v = sqlite3GetVdbe(pParse);
+ if( v==0 ) pParse->rc = SQLITE_ERROR;
+ }
assert( !pParse->isMultiWrite
|| sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));
if( v ){
+ if( pParse->bReturning ){
+ Returning *pReturning = pParse->u1.pReturning;
+ int addrRewind;
+ int i;
+ int reg;
+
+ addrRewind =
+ sqlite3VdbeAddOp1(v, OP_Rewind, pReturning->iRetCur);
+ VdbeCoverage(v);
+ reg = pReturning->iRetReg;
+ for(i=0; i<pReturning->nRetCol; i++){
+ sqlite3VdbeAddOp3(v, OP_Column, pReturning->iRetCur, i, reg+i);
+ }
+ sqlite3VdbeAddOp2(v, OP_ResultRow, reg, i);
+ sqlite3VdbeAddOp2(v, OP_Next, pReturning->iRetCur, addrRewind+1);
+ VdbeCoverage(v);
+ sqlite3VdbeJumpHere(v, addrRewind);
+ }
sqlite3VdbeAddOp0(v, OP_Halt);
#if SQLITE_USER_AUTHENTICATION
@@ -111091,12 +111785,16 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
}
}
+ if( pParse->bReturning ){
+ Returning *pRet = pParse->u1.pReturning;
+ sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol);
+ }
+
/* Finally, jump back to the beginning of the executable code. */
sqlite3VdbeGoto(v, 1);
}
}
-
/* Get the VDBE program ready for execution
*/
if( v && pParse->nErr==0 && !db->mallocFailed ){
@@ -111315,7 +112013,7 @@ SQLITE_PRIVATE Table *sqlite3LocateTable(
SQLITE_PRIVATE Table *sqlite3LocateTableItem(
Parse *pParse,
u32 flags,
- struct SrcList_item *p
+ SrcItem *p
){
const char *zDb;
assert( p->pSchema==0 || p->zDatabase==0 );
@@ -112073,7 +112771,8 @@ SQLITE_PRIVATE void sqlite3StartTable(
}else
#endif
{
- pParse->addrCrTab =
+ assert( !pParse->bReturning );
+ pParse->u1.addrCrTab =
sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, reg2, BTREE_INTKEY);
}
sqlite3OpenSchemaTable(pParse, iDb);
@@ -112100,12 +112799,85 @@ begin_table_error:
SQLITE_PRIVATE void sqlite3ColumnPropertiesFromName(Table *pTab, Column *pCol){
if( sqlite3_strnicmp(pCol->zName, "__hidden__", 10)==0 ){
pCol->colFlags |= COLFLAG_HIDDEN;
+ if( pTab ) pTab->tabFlags |= TF_HasHidden;
}else if( pTab && pCol!=pTab->aCol && (pCol[-1].colFlags & COLFLAG_HIDDEN) ){
pTab->tabFlags |= TF_OOOHidden;
}
}
#endif
+/*
+** Name of the special TEMP trigger used to implement RETURNING. The
+** name begins with "sqlite_" so that it is guaranteed not to collide
+** with any application-generated triggers.
+*/
+#define RETURNING_TRIGGER_NAME "sqlite_returning"
+
+/*
+** Clean up the data structures associated with the RETURNING clause.
+*/
+static void sqlite3DeleteReturning(sqlite3 *db, Returning *pRet){
+ Hash *pHash;
+ pHash = &(db->aDb[1].pSchema->trigHash);
+ sqlite3HashInsert(pHash, RETURNING_TRIGGER_NAME, 0);
+ sqlite3ExprListDelete(db, pRet->pReturnEL);
+ sqlite3DbFree(db, pRet);
+}
+
+/*
+** Add the RETURNING clause to the parse currently underway.
+**
+** This routine creates a special TEMP trigger that will fire for each row
+** of the DML statement. That TEMP trigger contains a single SELECT
+** statement with a result set that is the argument of the RETURNING clause.
+** The trigger has the Trigger.bReturning flag and an opcode of
+** TK_RETURNING instead of TK_SELECT, so that the trigger code generator
+** knows to handle it specially. The TEMP trigger is automatically
+** removed at the end of the parse.
+**
+** When this routine is called, we do not yet know if the RETURNING clause
+** is attached to a DELETE, INSERT, or UPDATE, so construct it as a
+** RETURNING trigger instead. It will then be converted into the appropriate
+** type on the first call to sqlite3TriggersExist().
+*/
+SQLITE_PRIVATE void sqlite3AddReturning(Parse *pParse, ExprList *pList){
+ Returning *pRet;
+ Hash *pHash;
+ sqlite3 *db = pParse->db;
+ if( pParse->pNewTrigger ){
+ sqlite3ErrorMsg(pParse, "cannot use RETURNING in a trigger");
+ }else{
+ assert( pParse->bReturning==0 );
+ }
+ pParse->bReturning = 1;
+ pRet = sqlite3DbMallocZero(db, sizeof(*pRet));
+ if( pRet==0 ){
+ sqlite3ExprListDelete(db, pList);
+ return;
+ }
+ pParse->u1.pReturning = pRet;
+ pRet->pParse = pParse;
+ pRet->pReturnEL = pList;
+ sqlite3ParserAddCleanup(pParse,
+ (void(*)(sqlite3*,void*))sqlite3DeleteReturning, pRet);
+ testcase( pParse->earlyCleanup );
+ if( db->mallocFailed ) return;
+ pRet->retTrig.zName = RETURNING_TRIGGER_NAME;
+ pRet->retTrig.op = TK_RETURNING;
+ pRet->retTrig.tr_tm = TRIGGER_AFTER;
+ pRet->retTrig.bReturning = 1;
+ pRet->retTrig.pSchema = db->aDb[1].pSchema;
+ pRet->retTrig.step_list = &pRet->retTStep;
+ pRet->retTStep.op = TK_RETURNING;
+ pRet->retTStep.pTrig = &pRet->retTrig;
+ pRet->retTStep.pExprList = pList;
+ pHash = &(db->aDb[1].pSchema->trigHash);
+ assert( sqlite3HashFind(pHash, RETURNING_TRIGGER_NAME)==0 || pParse->nErr );
+ if( sqlite3HashInsert(pHash, RETURNING_TRIGGER_NAME, &pRet->retTrig)
+ ==&pRet->retTrig ){
+ sqlite3OomFault(db);
+ }
+}
/*
** Add a new column to the table currently being constructed.
@@ -112122,6 +112894,8 @@ SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
char *zType;
Column *pCol;
sqlite3 *db = pParse->db;
+ u8 hName;
+
if( (p = pParse->pNewTable)==0 ) return;
if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){
sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
@@ -112133,8 +112907,9 @@ SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
memcpy(z, pName->z, pName->n);
z[pName->n] = 0;
sqlite3Dequote(z);
+ hName = sqlite3StrIHash(z);
for(i=0; i<p->nCol; i++){
- if( sqlite3_stricmp(z, p->aCol[i].zName)==0 ){
+ if( p->aCol[i].hName==hName && sqlite3StrICmp(z, p->aCol[i].zName)==0 ){
sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
sqlite3DbFree(db, z);
return;
@@ -112152,7 +112927,7 @@ SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
pCol = &p->aCol[p->nCol];
memset(pCol, 0, sizeof(p->aCol[0]));
pCol->zName = z;
- pCol->hName = sqlite3StrIHash(z);
+ pCol->hName = hName;
sqlite3ColumnPropertiesFromName(p, pCol);
if( pType->n==0 ){
@@ -112935,9 +113710,10 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
/* Convert the P3 operand of the OP_CreateBtree opcode from BTREE_INTKEY
** into BTREE_BLOBKEY.
*/
- if( pParse->addrCrTab ){
+ assert( !pParse->bReturning );
+ if( pParse->u1.addrCrTab ){
assert( v );
- sqlite3VdbeChangeP3(v, pParse->addrCrTab, BTREE_BLOBKEY);
+ sqlite3VdbeChangeP3(v, pParse->u1.addrCrTab, BTREE_BLOBKEY);
}
/* Locate the PRIMARY KEY index. Or, if this table was originally
@@ -113401,7 +114177,7 @@ SQLITE_PRIVATE void sqlite3EndTable(
/* Reparse everything to update our internal data structures */
sqlite3VdbeAddParseSchemaOp(v, iDb,
- sqlite3MPrintf(db, "tbl_name='%q' AND type!='trigger'", p->zName));
+ sqlite3MPrintf(db, "tbl_name='%q' AND type!='trigger'", p->zName),0);
}
/* Add the table to the in-memory representation of the database.
@@ -113418,20 +114194,17 @@ SQLITE_PRIVATE void sqlite3EndTable(
}
pParse->pNewTable = 0;
db->mDbFlags |= DBFLAG_SchemaChange;
+ }
#ifndef SQLITE_OMIT_ALTERTABLE
- if( !p->pSelect ){
- const char *zName = (const char *)pParse->sNameToken.z;
- int nName;
- assert( !pSelect && pCons && pEnd );
- if( pCons->z==0 ){
- pCons = pEnd;
- }
- nName = (int)((const char *)pCons->z - zName);
- p->addColOffset = 13 + sqlite3Utf8CharLen(zName, nName);
+ if( !pSelect && !p->pSelect ){
+ assert( pCons && pEnd );
+ if( pCons->z==0 ){
+ pCons = pEnd;
}
-#endif
+ p->addColOffset = 13 + (int)(pCons->z - pParse->sNameToken.z);
}
+#endif
}
#ifndef SQLITE_OMIT_VIEW
@@ -113622,6 +114395,7 @@ SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
assert( pTable->aCol==0 );
pTable->nCol = pSelTab->nCol;
pTable->aCol = pSelTab->aCol;
+ pTable->tabFlags |= (pSelTab->tabFlags & COLFLAG_NOINSERT);
pSelTab->nCol = 0;
pSelTab->aCol = 0;
assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) );
@@ -114889,7 +115663,7 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
sqlite3RefillIndex(pParse, pIndex, iMem);
sqlite3ChangeCookie(pParse, iDb);
sqlite3VdbeAddParseSchemaOp(v, iDb,
- sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName));
+ sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName), 0);
sqlite3VdbeAddOp2(v, OP_Expire, 0, 1);
}
@@ -115282,7 +116056,7 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(
Token *pTable, /* Table to append */
Token *pDatabase /* Database of the table */
){
- struct SrcList_item *pItem;
+ SrcItem *pItem;
sqlite3 *db;
assert( pDatabase==0 || pTable!=0 ); /* Cannot have C without B */
assert( pParse!=0 );
@@ -115323,7 +116097,7 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(
*/
SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){
int i;
- struct SrcList_item *pItem;
+ SrcItem *pItem;
assert(pList || pParse->db->mallocFailed );
if( pList ){
for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
@@ -115341,7 +116115,7 @@ SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){
*/
SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
int i;
- struct SrcList_item *pItem;
+ SrcItem *pItem;
if( pList==0 ) return;
for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
if( pItem->zDatabase ) sqlite3DbFreeNN(db, pItem->zDatabase);
@@ -115383,7 +116157,7 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
Expr *pOn, /* The ON clause of a join */
IdList *pUsing /* The USING clause of a join */
){
- struct SrcList_item *pItem;
+ SrcItem *pItem;
sqlite3 *db = pParse->db;
if( !p && (pOn || pUsing) ){
sqlite3ErrorMsg(pParse, "a JOIN clause is required before %s",
@@ -115427,7 +116201,7 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
assert( pIndexedBy!=0 );
if( p && pIndexedBy->n>0 ){
- struct SrcList_item *pItem;
+ SrcItem *pItem;
assert( p->nSrc>0 );
pItem = &p->a[p->nSrc-1];
assert( pItem->fg.notIndexed==0 );
@@ -115457,7 +116231,7 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendList(Parse *pParse, SrcList *p1, Src
sqlite3SrcListDelete(pParse->db, p2);
}else{
p1 = pNew;
- memcpy(&p1->a[1], p2->a, p2->nSrc*sizeof(struct SrcList_item));
+ memcpy(&p1->a[1], p2->a, p2->nSrc*sizeof(SrcItem));
sqlite3DbFree(pParse->db, p2);
}
}
@@ -115470,7 +116244,7 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendList(Parse *pParse, SrcList *p1, Src
*/
SQLITE_PRIVATE void sqlite3SrcListFuncArgs(Parse *pParse, SrcList *p, ExprList *pList){
if( p ){
- struct SrcList_item *pItem = &p->a[p->nSrc-1];
+ SrcItem *pItem = &p->a[p->nSrc-1];
assert( pItem->fg.notIndexed==0 );
assert( pItem->fg.isIndexedBy==0 );
assert( pItem->fg.isTabFunc==0 );
@@ -115625,7 +116399,7 @@ SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *pParse){
static void sqlite3CodeVerifySchemaAtToplevel(Parse *pToplevel, int iDb){
assert( iDb>=0 && iDb<pToplevel->db->nDb );
assert( pToplevel->db->aDb[iDb].pBt!=0 || iDb==1 );
- assert( iDb<SQLITE_MAX_ATTACHED+2 );
+ assert( iDb<SQLITE_MAX_DB );
assert( sqlite3SchemaMutexHeld(pToplevel->db, iDb, 0) );
if( DbMaskTest(pToplevel->cookieMask, iDb)==0 ){
DbMaskSet(pToplevel->cookieMask, iDb);
@@ -115968,23 +116742,75 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){
#ifndef SQLITE_OMIT_CTE
/*
+** Create a new CTE object
+*/
+SQLITE_PRIVATE Cte *sqlite3CteNew(
+ Parse *pParse, /* Parsing context */
+ Token *pName, /* Name of the common-table */
+ ExprList *pArglist, /* Optional column name list for the table */
+ Select *pQuery, /* Query used to initialize the table */
+ u8 eM10d /* The MATERIALIZED flag */
+){
+ Cte *pNew;
+ sqlite3 *db = pParse->db;
+
+ pNew = sqlite3DbMallocZero(db, sizeof(*pNew));
+ assert( pNew!=0 || db->mallocFailed );
+
+ if( db->mallocFailed ){
+ sqlite3ExprListDelete(db, pArglist);
+ sqlite3SelectDelete(db, pQuery);
+ }else{
+ pNew->pSelect = pQuery;
+ pNew->pCols = pArglist;
+ pNew->zName = sqlite3NameFromToken(pParse->db, pName);
+ pNew->eM10d = eM10d;
+ }
+ return pNew;
+}
+
+/*
+** Clear information from a Cte object, but do not deallocate storage
+** for the object itself.
+*/
+static void cteClear(sqlite3 *db, Cte *pCte){
+ assert( pCte!=0 );
+ sqlite3ExprListDelete(db, pCte->pCols);
+ sqlite3SelectDelete(db, pCte->pSelect);
+ sqlite3DbFree(db, pCte->zName);
+}
+
+/*
+** Free the contents of the CTE object passed as the second argument.
+*/
+SQLITE_PRIVATE void sqlite3CteDelete(sqlite3 *db, Cte *pCte){
+ assert( pCte!=0 );
+ cteClear(db, pCte);
+ sqlite3DbFree(db, pCte);
+}
+
+/*
** This routine is invoked once per CTE by the parser while parsing a
-** WITH clause.
+** WITH clause. The CTE described by teh third argument is added to
+** the WITH clause of the second argument. If the second argument is
+** NULL, then a new WITH argument is created.
*/
SQLITE_PRIVATE With *sqlite3WithAdd(
Parse *pParse, /* Parsing context */
With *pWith, /* Existing WITH clause, or NULL */
- Token *pName, /* Name of the common-table */
- ExprList *pArglist, /* Optional column name list for the table */
- Select *pQuery /* Query used to initialize the table */
+ Cte *pCte /* CTE to add to the WITH clause */
){
sqlite3 *db = pParse->db;
With *pNew;
char *zName;
+ if( pCte==0 ){
+ return pWith;
+ }
+
/* Check that the CTE name is unique within this WITH clause. If
** not, store an error in the Parse structure. */
- zName = sqlite3NameFromToken(pParse->db, pName);
+ zName = pCte->zName;
if( zName && pWith ){
int i;
for(i=0; i<pWith->nCte; i++){
@@ -116003,16 +116829,11 @@ SQLITE_PRIVATE With *sqlite3WithAdd(
assert( (pNew!=0 && zName!=0) || db->mallocFailed );
if( db->mallocFailed ){
- sqlite3ExprListDelete(db, pArglist);
- sqlite3SelectDelete(db, pQuery);
- sqlite3DbFree(db, zName);
+ sqlite3CteDelete(db, pCte);
pNew = pWith;
}else{
- pNew->a[pNew->nCte].pSelect = pQuery;
- pNew->a[pNew->nCte].pCols = pArglist;
- pNew->a[pNew->nCte].zName = zName;
- pNew->a[pNew->nCte].zCteErr = 0;
- pNew->nCte++;
+ pNew->a[pNew->nCte++] = *pCte;
+ sqlite3DbFree(db, pCte);
}
return pNew;
@@ -116025,10 +116846,7 @@ SQLITE_PRIVATE void sqlite3WithDelete(sqlite3 *db, With *pWith){
if( pWith ){
int i;
for(i=0; i<pWith->nCte; i++){
- struct Cte *pCte = &pWith->a[i];
- sqlite3ExprListDelete(db, pCte->pCols);
- sqlite3SelectDelete(db, pCte->pSelect);
- sqlite3DbFree(db, pCte->zName);
+ cteClear(db, &pWith->a[i]);
}
sqlite3DbFree(db, pWith);
}
@@ -116607,7 +117425,7 @@ SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){
**
*/
SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){
- struct SrcList_item *pItem = pSrc->a;
+ SrcItem *pItem = pSrc->a;
Table *pTab;
assert( pItem && pSrc->nSrc>=1 );
pTab = sqlite3LocateTableItem(pParse, 0, pItem);
@@ -116615,9 +117433,9 @@ SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){
pItem->pTab = pTab;
if( pTab ){
pTab->nTabRef++;
- }
- if( sqlite3IndexedByLookup(pParse, pItem) ){
- pTab = 0;
+ if( pItem->fg.isIndexedBy && sqlite3IndexedByLookup(pParse, pItem) ){
+ pTab = 0;
+ }
}
return pTab;
}
@@ -116785,9 +117603,15 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere(
/* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree
** and the SELECT subtree. */
pSrc->a[0].pTab = 0;
- pSelectSrc = sqlite3SrcListDup(pParse->db, pSrc, 0);
+ pSelectSrc = sqlite3SrcListDup(db, pSrc, 0);
pSrc->a[0].pTab = pTab;
- pSrc->a[0].pIBIndex = 0;
+ if( pSrc->a[0].fg.isIndexedBy ){
+ pSrc->a[0].u2.pIBIndex = 0;
+ pSrc->a[0].fg.isIndexedBy = 0;
+ sqlite3DbFree(db, pSrc->a[0].u1.zIndexedBy);
+ }else if( pSrc->a[0].fg.isCte ){
+ pSrc->a[0].u2.pCteUse->nUse++;
+ }
/* generate the SELECT expression tree. */
pSelect = sqlite3SelectNew(pParse, pEList, pSelectSrc, pWhere, 0 ,0,
@@ -116965,6 +117789,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
if( (db->flags & SQLITE_CountRows)!=0
&& !pParse->nested
&& !pParse->pTriggerTab
+ && !pParse->bReturning
){
memCnt = ++pParse->nMem;
sqlite3VdbeAddOp2(v, OP_Integer, 0, memCnt);
@@ -117186,7 +118011,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
** invoke the callback function.
*/
if( memCnt ){
- sqlite3VdbeAddOp2(v, OP_ResultRow, memCnt, 1);
+ sqlite3VdbeAddOp2(v, OP_ChngCntRow, memCnt, 1);
sqlite3VdbeSetNumCols(v, 1);
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows deleted", SQLITE_STATIC);
}
@@ -118234,7 +119059,8 @@ static int patternCompare(
/* Skip over multiple "*" characters in the pattern. If there
** are also "?" characters, skip those as well, but consume a
** single character of the input string for each "?" skipped */
- while( (c=Utf8Read(zPattern)) == matchAll || c == matchOne ){
+ while( (c=Utf8Read(zPattern)) == matchAll
+ || (c == matchOne && matchOne!=0) ){
if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
return SQLITE_NOWILDCARDMATCH;
}
@@ -119405,7 +120231,9 @@ SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive)
SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
FuncDef *pDef;
int nExpr;
- if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
+ assert( pExpr!=0 );
+ assert( pExpr->op==TK_FUNCTION );
+ if( !pExpr->x.pList ){
return 0;
}
assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
@@ -119444,6 +120272,203 @@ SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocas
return 1;
}
+/* Mathematical Constants */
+#ifndef M_PI
+# define M_PI 3.141592653589793238462643383279502884
+#endif
+#ifndef M_LN10
+# define M_LN10 2.302585092994045684017991454684364208
+#endif
+#ifndef M_LN2
+# define M_LN2 0.693147180559945309417232121458176568
+#endif
+
+
+/* Extra math functions that require linking with -lm
+*/
+#ifdef SQLITE_ENABLE_MATH_FUNCTIONS
+/*
+** Implementation SQL functions:
+**
+** ceil(X)
+** ceiling(X)
+** floor(X)
+**
+** The sqlite3_user_data() pointer is a pointer to the libm implementation
+** of the underlying C function.
+*/
+static void ceilingFunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ assert( argc==1 );
+ switch( sqlite3_value_numeric_type(argv[0]) ){
+ case SQLITE_INTEGER: {
+ sqlite3_result_int64(context, sqlite3_value_int64(argv[0]));
+ break;
+ }
+ case SQLITE_FLOAT: {
+ double (*x)(double) = (double(*)(double))sqlite3_user_data(context);
+ sqlite3_result_double(context, x(sqlite3_value_double(argv[0])));
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+}
+
+/*
+** On some systems, ceil() and floor() are intrinsic function. You are
+** unable to take a pointer to these functions. Hence, we here wrap them
+** in our own actual functions.
+*/
+static double xCeil(double x){ return ceil(x); }
+static double xFloor(double x){ return floor(x); }
+
+/*
+** Implementation of SQL functions:
+**
+** ln(X) - natural logarithm
+** log(X) - log X base 10
+** log10(X) - log X base 10
+** log(B,X) - log X base B
+*/
+static void logFunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ double x, b, ans;
+ assert( argc==1 || argc==2 );
+ switch( sqlite3_value_numeric_type(argv[0]) ){
+ case SQLITE_INTEGER:
+ case SQLITE_FLOAT:
+ x = sqlite3_value_double(argv[0]);
+ if( x<=0.0 ) return;
+ break;
+ default:
+ return;
+ }
+ if( argc==2 ){
+ switch( sqlite3_value_numeric_type(argv[0]) ){
+ case SQLITE_INTEGER:
+ case SQLITE_FLOAT:
+ b = log(x);
+ if( b<=0.0 ) return;
+ x = sqlite3_value_double(argv[1]);
+ if( x<=0.0 ) return;
+ break;
+ default:
+ return;
+ }
+ ans = log(x)/b;
+ }else{
+ ans = log(x);
+ switch( SQLITE_PTR_TO_INT(sqlite3_user_data(context)) ){
+ case 1:
+ /* Convert from natural logarithm to log base 10 */
+ ans *= 1.0/M_LN10;
+ break;
+ case 2:
+ /* Convert from natural logarithm to log base 2 */
+ ans *= 1.0/M_LN2;
+ break;
+ default:
+ break;
+ }
+ }
+ sqlite3_result_double(context, ans);
+}
+
+/*
+** Functions to converts degrees to radians and radians to degrees.
+*/
+static double degToRad(double x){ return x*(M_PI/180.0); }
+static double radToDeg(double x){ return x*(180.0/M_PI); }
+
+/*
+** Implementation of 1-argument SQL math functions:
+**
+** exp(X) - Compute e to the X-th power
+*/
+static void math1Func(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ int type0;
+ double v0, ans;
+ double (*x)(double);
+ assert( argc==1 );
+ type0 = sqlite3_value_numeric_type(argv[0]);
+ if( type0!=SQLITE_INTEGER && type0!=SQLITE_FLOAT ) return;
+ v0 = sqlite3_value_double(argv[0]);
+ x = (double(*)(double))sqlite3_user_data(context);
+ ans = x(v0);
+ sqlite3_result_double(context, ans);
+}
+
+/*
+** Implementation of 2-argument SQL math functions:
+**
+** power(X,Y) - Compute X to the Y-th power
+*/
+static void math2Func(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ int type0, type1;
+ double v0, v1, ans;
+ double (*x)(double,double);
+ assert( argc==2 );
+ type0 = sqlite3_value_numeric_type(argv[0]);
+ if( type0!=SQLITE_INTEGER && type0!=SQLITE_FLOAT ) return;
+ type1 = sqlite3_value_numeric_type(argv[1]);
+ if( type1!=SQLITE_INTEGER && type1!=SQLITE_FLOAT ) return;
+ v0 = sqlite3_value_double(argv[0]);
+ v1 = sqlite3_value_double(argv[1]);
+ x = (double(*)(double,double))sqlite3_user_data(context);
+ ans = x(v0, v1);
+ sqlite3_result_double(context, ans);
+}
+
+/*
+** Implementation of 2-argument SQL math functions:
+**
+** power(X,Y) - Compute X to the Y-th power
+*/
+static void piFunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ assert( argc==0 );
+ sqlite3_result_double(context, M_PI);
+}
+
+#endif /* SQLITE_ENABLE_MATH_FUNCTIONS */
+
+/*
+** Implementation of sign(X) function.
+*/
+static void signFunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ int type0;
+ double x;
+ UNUSED_PARAMETER(argc);
+ assert( argc==1 );
+ type0 = sqlite3_value_numeric_type(argv[0]);
+ if( type0!=SQLITE_INTEGER && type0!=SQLITE_FLOAT ) return;
+ x = sqlite3_value_double(argv[0]);
+ sqlite3_result_int(context, x<0.0 ? -1 : x>0.0 ? +1 : 0);
+}
+
/*
** All of the FuncDef structures in the aBuiltinFunc[] array above
** to the global function hash table. This occurs at start-time (as
@@ -119562,6 +120587,43 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){
#endif
FUNCTION(coalesce, 1, 0, 0, 0 ),
FUNCTION(coalesce, 0, 0, 0, 0 ),
+#ifdef SQLITE_ENABLE_MATH_FUNCTIONS
+ MFUNCTION(ceil, 1, xCeil, ceilingFunc ),
+ MFUNCTION(ceiling, 1, xCeil, ceilingFunc ),
+ MFUNCTION(floor, 1, xFloor, ceilingFunc ),
+#if SQLITE_HAVE_C99_MATH_FUNCS
+ MFUNCTION(trunc, 1, trunc, ceilingFunc ),
+#endif
+ FUNCTION(ln, 1, 0, 0, logFunc ),
+ FUNCTION(log, 1, 1, 0, logFunc ),
+ FUNCTION(log10, 1, 1, 0, logFunc ),
+ FUNCTION(log2, 1, 2, 0, logFunc ),
+ FUNCTION(log, 2, 0, 0, logFunc ),
+ MFUNCTION(exp, 1, exp, math1Func ),
+ MFUNCTION(pow, 2, pow, math2Func ),
+ MFUNCTION(power, 2, pow, math2Func ),
+ MFUNCTION(mod, 2, fmod, math2Func ),
+ MFUNCTION(acos, 1, acos, math1Func ),
+ MFUNCTION(asin, 1, asin, math1Func ),
+ MFUNCTION(atan, 1, atan, math1Func ),
+ MFUNCTION(atan2, 2, atan2, math2Func ),
+ MFUNCTION(cos, 1, cos, math1Func ),
+ MFUNCTION(sin, 1, sin, math1Func ),
+ MFUNCTION(tan, 1, tan, math1Func ),
+ MFUNCTION(cosh, 1, cosh, math1Func ),
+ MFUNCTION(sinh, 1, sinh, math1Func ),
+ MFUNCTION(tanh, 1, tanh, math1Func ),
+#if SQLITE_HAVE_C99_MATH_FUNCS
+ MFUNCTION(acosh, 1, acosh, math1Func ),
+ MFUNCTION(asinh, 1, asinh, math1Func ),
+ MFUNCTION(atanh, 1, atanh, math1Func ),
+#endif
+ MFUNCTION(sqrt, 1, sqrt, math1Func ),
+ MFUNCTION(radians, 1, degToRad, math1Func ),
+ MFUNCTION(degrees, 1, radToDeg, math1Func ),
+ FUNCTION(pi, 0, 0, 0, piFunc ),
+#endif /* SQLITE_ENABLE_MATH_FUNCTIONS */
+ FUNCTION(sign, 1, 0, 0, signFunc ),
INLINE_FUNC(coalesce, -1, INLINEFUNC_coalesce, 0 ),
INLINE_FUNC(iif, 3, INLINEFUNC_iif, 0 ),
};
@@ -120617,7 +121679,7 @@ SQLITE_PRIVATE void sqlite3FkCheck(
** child table as a SrcList for sqlite3WhereBegin() */
pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
if( pSrc ){
- struct SrcList_item *pItem = pSrc->a;
+ SrcItem *pItem = pSrc->a;
pItem->pTab = pFKey->pFrom;
pItem->zName = pFKey->pFrom->zName;
pItem->pTab->nTabRef++;
@@ -120705,7 +121767,9 @@ SQLITE_PRIVATE u32 sqlite3FkOldmask(
**
** For an UPDATE, this function returns 2 if:
**
-** * There are any FKs for which pTab is the child and the parent table, or
+** * There are any FKs for which pTab is the child and the parent table
+** and any FK processing at all is required (even of a different FK), or
+**
** * the UPDATE modifies one or more parent keys for which the action is
** not "NO ACTION" (i.e. is CASCADE, SET DEFAULT or SET NULL).
**
@@ -120717,13 +121781,14 @@ SQLITE_PRIVATE int sqlite3FkRequired(
int *aChange, /* Non-NULL for UPDATE operations */
int chngRowid /* True for UPDATE that affects rowid */
){
- int eRet = 0;
+ int eRet = 1; /* Value to return if bHaveFK is true */
+ int bHaveFK = 0; /* If FK processing is required */
if( pParse->db->flags&SQLITE_ForeignKeys ){
if( !aChange ){
/* A DELETE operation. Foreign key processing is required if the
** table in question is either the child or parent table for any
** foreign key constraint. */
- eRet = (sqlite3FkReferences(pTab) || pTab->pFKey);
+ bHaveFK = (sqlite3FkReferences(pTab) || pTab->pFKey);
}else{
/* This is an UPDATE. Foreign key processing is only required if the
** operation modifies one or more child or parent key columns. */
@@ -120731,9 +121796,9 @@ SQLITE_PRIVATE int sqlite3FkRequired(
/* Check if any child key columns are being modified. */
for(p=pTab->pFKey; p; p=p->pNextFrom){
- if( 0==sqlite3_stricmp(pTab->zName, p->zTo) ) return 2;
if( fkChildIsModified(pTab, p, aChange, chngRowid) ){
- eRet = 1;
+ if( 0==sqlite3_stricmp(pTab->zName, p->zTo) ) eRet = 2;
+ bHaveFK = 1;
}
}
@@ -120741,12 +121806,12 @@ SQLITE_PRIVATE int sqlite3FkRequired(
for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
if( fkParentIsModified(pTab, p, aChange, chngRowid) ){
if( p->aAction[1]!=OE_None ) return 2;
- eRet = 1;
+ bHaveFK = 1;
}
}
}
}
- return eRet;
+ return bHaveFK ? eRet : 0;
}
/*
@@ -121415,7 +122480,9 @@ static int autoIncBegin(
while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; }
if( pInfo==0 ){
pInfo = sqlite3DbMallocRawNN(pParse->db, sizeof(*pInfo));
- if( pInfo==0 ) return 0;
+ sqlite3ParserAddCleanup(pToplevel, sqlite3DbFree, pInfo);
+ testcase( pParse->earlyCleanup );
+ if( pParse->db->mallocFailed ) return 0;
pInfo->pNext = pToplevel->pAinc;
pToplevel->pAinc = pInfo;
pInfo->pTab = pTab;
@@ -121973,19 +123040,24 @@ SQLITE_PRIVATE void sqlite3Insert(
}
}
#endif
- }
- /* Make sure the number of columns in the source data matches the number
- ** of columns to be inserted into the table.
- */
- for(i=0; i<pTab->nCol; i++){
- if( pTab->aCol[i].colFlags & COLFLAG_NOINSERT ) nHidden++;
- }
- if( pColumn==0 && nColumn && nColumn!=(pTab->nCol-nHidden) ){
- sqlite3ErrorMsg(pParse,
- "table %S has %d columns but %d values were supplied",
- pTabList, 0, pTab->nCol-nHidden, nColumn);
- goto insert_cleanup;
+ /* Make sure the number of columns in the source data matches the number
+ ** of columns to be inserted into the table.
+ */
+ assert( TF_HasHidden==COLFLAG_HIDDEN );
+ assert( TF_HasGenerated==COLFLAG_GENERATED );
+ assert( COLFLAG_NOINSERT==(COLFLAG_GENERATED|COLFLAG_HIDDEN) );
+ if( (pTab->tabFlags & (TF_HasGenerated|TF_HasHidden))!=0 ){
+ for(i=0; i<pTab->nCol; i++){
+ if( pTab->aCol[i].colFlags & COLFLAG_NOINSERT ) nHidden++;
+ }
+ }
+ if( nColumn!=(pTab->nCol-nHidden) ){
+ sqlite3ErrorMsg(pParse,
+ "table %S has %d columns but %d values were supplied",
+ pTabList, 0, pTab->nCol-nHidden, nColumn);
+ goto insert_cleanup;
+ }
}
if( pColumn!=0 && nColumn!=pColumn->nId ){
sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId);
@@ -121997,6 +123069,7 @@ SQLITE_PRIVATE void sqlite3Insert(
if( (db->flags & SQLITE_CountRows)!=0
&& !pParse->nested
&& !pParse->pTriggerTab
+ && !pParse->bReturning
){
regRowCount = ++pParse->nMem;
sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
@@ -122020,6 +123093,7 @@ SQLITE_PRIVATE void sqlite3Insert(
}
#ifndef SQLITE_OMIT_UPSERT
if( pUpsert ){
+ Upsert *pNx;
if( IsVirtual(pTab) ){
sqlite3ErrorMsg(pParse, "UPSERT not implemented for virtual table \"%s\"",
pTab->zName);
@@ -122033,13 +123107,17 @@ SQLITE_PRIVATE void sqlite3Insert(
goto insert_cleanup;
}
pTabList->a[0].iCursor = iDataCur;
- pUpsert->pUpsertSrc = pTabList;
- pUpsert->regData = regData;
- pUpsert->iDataCur = iDataCur;
- pUpsert->iIdxCur = iIdxCur;
- if( pUpsert->pUpsertTarget ){
- sqlite3UpsertAnalyzeTarget(pParse, pTabList, pUpsert);
- }
+ pNx = pUpsert;
+ do{
+ pNx->pUpsertSrc = pTabList;
+ pNx->regData = regData;
+ pNx->iDataCur = iDataCur;
+ pNx->iIdxCur = iIdxCur;
+ if( pNx->pUpsertTarget ){
+ sqlite3UpsertAnalyzeTarget(pParse, pTabList, pNx);
+ }
+ pNx = pNx->pNextUpsert;
+ }while( pNx!=0 );
}
#endif
@@ -122180,11 +123258,6 @@ SQLITE_PRIVATE void sqlite3Insert(
sqlite3VdbeAddOp1(v, OP_MustBeInt, regCols); VdbeCoverage(v);
}
- /* Cannot have triggers on a virtual table. If it were possible,
- ** this block would have to account for hidden column.
- */
- assert( !IsVirtual(pTab) );
-
/* Copy the new data already generated. */
assert( pTab->nNVCol>0 );
sqlite3VdbeAddOp3(v, OP_Copy, regRowid+1, regCols+1, pTab->nNVCol-1);
@@ -122339,7 +123412,9 @@ SQLITE_PRIVATE void sqlite3Insert(
sqlite3VdbeJumpHere(v, addrInsTop);
}
+#ifndef SQLITE_OMIT_XFER_OPT
insert_end:
+#endif /* SQLITE_OMIT_XFER_OPT */
/* Update the sqlite_sequence table by storing the content of the
** maximum rowid counter values recorded while inserting into
** autoincrement tables.
@@ -122354,7 +123429,7 @@ insert_end:
** invoke the callback function.
*/
if( regRowCount ){
- sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
+ sqlite3VdbeAddOp2(v, OP_ChngCntRow, regRowCount, 1);
sqlite3VdbeSetNumCols(v, 1);
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows inserted", SQLITE_STATIC);
}
@@ -122445,6 +123520,70 @@ SQLITE_PRIVATE int sqlite3ExprReferencesUpdatedColumn(
}
/*
+** The sqlite3GenerateConstraintChecks() routine usually wants to visit
+** the indexes of a table in the order provided in the Table->pIndex list.
+** However, sometimes (rarely - when there is an upsert) it wants to visit
+** the indexes in a different order. The following data structures accomplish
+** this.
+**
+** The IndexIterator object is used to walk through all of the indexes
+** of a table in either Index.pNext order, or in some other order established
+** by an array of IndexListTerm objects.
+*/
+typedef struct IndexListTerm IndexListTerm;
+typedef struct IndexIterator IndexIterator;
+struct IndexIterator {
+ int eType; /* 0 for Index.pNext list. 1 for an array of IndexListTerm */
+ int i; /* Index of the current item from the list */
+ union {
+ struct { /* Use this object for eType==0: A Index.pNext list */
+ Index *pIdx; /* The current Index */
+ } lx;
+ struct { /* Use this object for eType==1; Array of IndexListTerm */
+ int nIdx; /* Size of the array */
+ IndexListTerm *aIdx; /* Array of IndexListTerms */
+ } ax;
+ } u;
+};
+
+/* When IndexIterator.eType==1, then each index is an array of instances
+** of the following object
+*/
+struct IndexListTerm {
+ Index *p; /* The index */
+ int ix; /* Which entry in the original Table.pIndex list is this index*/
+};
+
+/* Return the first index on the list */
+static Index *indexIteratorFirst(IndexIterator *pIter, int *pIx){
+ assert( pIter->i==0 );
+ if( pIter->eType ){
+ *pIx = pIter->u.ax.aIdx[0].ix;
+ return pIter->u.ax.aIdx[0].p;
+ }else{
+ *pIx = 0;
+ return pIter->u.lx.pIdx;
+ }
+}
+
+/* Return the next index from the list. Return NULL when out of indexes */
+static Index *indexIteratorNext(IndexIterator *pIter, int *pIx){
+ if( pIter->eType ){
+ int i = ++pIter->i;
+ if( i>=pIter->u.ax.nIdx ){
+ *pIx = i;
+ return 0;
+ }
+ *pIx = pIter->u.ax.aIdx[i].ix;
+ return pIter->u.ax.aIdx[i].p;
+ }else{
+ ++(*pIx);
+ pIter->u.lx.pIdx = pIter->u.lx.pIdx->pNext;
+ return pIter->u.lx.pIdx;
+ }
+}
+
+/*
** Generate code to do constraint checks prior to an INSERT or an UPDATE
** on table pTab.
**
@@ -122552,7 +123691,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
){
Vdbe *v; /* VDBE under constrution */
Index *pIdx; /* Pointer to one of the indices */
- Index *pPk = 0; /* The PRIMARY KEY index */
+ Index *pPk = 0; /* The PRIMARY KEY index for WITHOUT ROWID tables */
sqlite3 *db; /* Database connection */
int i; /* loop counter */
int ix; /* Index loop counter */
@@ -122560,11 +123699,11 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
int onError; /* Conflict resolution strategy */
int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */
int nPkField; /* Number of fields in PRIMARY KEY. 1 for ROWID tables */
- Index *pUpIdx = 0; /* Index to which to apply the upsert */
- u8 isUpdate; /* True if this is an UPDATE operation */
+ Upsert *pUpsertClause = 0; /* The specific ON CONFLICT clause for pIdx */
+ u8 isUpdate; /* True if this is an UPDATE operation */
u8 bAffinityDone = 0; /* True if the OP_Affinity operation has been run */
- int upsertBypass = 0; /* Address of Goto to bypass upsert subroutine */
- int upsertJump = 0; /* Address of Goto that jumps into upsert subroutine */
+ int upsertIpkReturn = 0; /* Address of Goto at end of IPK uniqueness check */
+ int upsertIpkDelay = 0; /* Address of Goto to bypass initial IPK check */
int ipkTop = 0; /* Top of the IPK uniqueness check */
int ipkBottom = 0; /* OP_Goto at the end of the IPK uniqueness check */
/* Variables associated with retesting uniqueness constraints after
@@ -122574,6 +123713,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
int lblRecheckOk = 0; /* Each recheck jumps to this label if it passes */
Trigger *pTrigger; /* List of DELETE triggers on the table pTab */
int nReplaceTrig = 0; /* Number of replace triggers coded */
+ IndexIterator sIdxIter; /* Index iterator */
isUpdate = regOldData!=0;
db = pParse->db;
@@ -122771,19 +123911,63 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
** list of indexes attached to a table puts all OE_Replace indexes last
** in the list. See sqlite3CreateIndex() for where that happens.
*/
-
+ sIdxIter.eType = 0;
+ sIdxIter.i = 0;
+ sIdxIter.u.ax.aIdx = 0; /* Silence harmless compiler warning */
+ sIdxIter.u.lx.pIdx = pTab->pIndex;
if( pUpsert ){
if( pUpsert->pUpsertTarget==0 ){
- /* An ON CONFLICT DO NOTHING clause, without a constraint-target.
- ** Make all unique constraint resolution be OE_Ignore */
- assert( pUpsert->pUpsertSet==0 );
- overrideError = OE_Ignore;
- pUpsert = 0;
- }else if( (pUpIdx = pUpsert->pUpsertIdx)!=0 ){
- /* If the constraint-target uniqueness check must be run first.
- ** Jump to that uniqueness check now */
- upsertJump = sqlite3VdbeAddOp0(v, OP_Goto);
- VdbeComment((v, "UPSERT constraint goes first"));
+ /* There is just on ON CONFLICT clause and it has no constraint-target */
+ assert( pUpsert->pNextUpsert==0 );
+ if( pUpsert->isDoUpdate==0 ){
+ /* A single ON CONFLICT DO NOTHING clause, without a constraint-target.
+ ** Make all unique constraint resolution be OE_Ignore */
+ overrideError = OE_Ignore;
+ pUpsert = 0;
+ }else{
+ /* A single ON CONFLICT DO UPDATE. Make all resolutions OE_Update */
+ overrideError = OE_Update;
+ }
+ }else if( pTab->pIndex!=0 ){
+ /* Otherwise, we'll need to run the IndexListTerm array version of the
+ ** iterator to ensure that all of the ON CONFLICT conditions are
+ ** checked first and in order. */
+ int nIdx, jj;
+ u64 nByte;
+ Upsert *pTerm;
+ u8 *bUsed;
+ for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){
+ assert( aRegIdx[nIdx]>0 );
+ }
+ sIdxIter.eType = 1;
+ sIdxIter.u.ax.nIdx = nIdx;
+ nByte = (sizeof(IndexListTerm)+1)*nIdx + nIdx;
+ sIdxIter.u.ax.aIdx = sqlite3DbMallocZero(db, nByte);
+ if( sIdxIter.u.ax.aIdx==0 ) return; /* OOM */
+ bUsed = (u8*)&sIdxIter.u.ax.aIdx[nIdx];
+ pUpsert->pToFree = sIdxIter.u.ax.aIdx;
+ for(i=0, pTerm=pUpsert; pTerm; pTerm=pTerm->pNextUpsert){
+ if( pTerm->pUpsertTarget==0 ) break;
+ if( pTerm->pUpsertIdx==0 ) continue; /* Skip ON CONFLICT for the IPK */
+ jj = 0;
+ pIdx = pTab->pIndex;
+ while( ALWAYS(pIdx!=0) && pIdx!=pTerm->pUpsertIdx ){
+ pIdx = pIdx->pNext;
+ jj++;
+ }
+ if( bUsed[jj] ) continue; /* Duplicate ON CONFLICT clause ignored */
+ bUsed[jj] = 1;
+ sIdxIter.u.ax.aIdx[i].p = pIdx;
+ sIdxIter.u.ax.aIdx[i].ix = jj;
+ i++;
+ }
+ for(jj=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, jj++){
+ if( bUsed[jj] ) continue;
+ sIdxIter.u.ax.aIdx[i].p = pIdx;
+ sIdxIter.u.ax.aIdx[i].ix = jj;
+ i++;
+ }
+ assert( i==nIdx );
}
}
@@ -122846,11 +124030,20 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
}
/* figure out whether or not upsert applies in this case */
- if( pUpsert && pUpsert->pUpsertIdx==0 ){
- if( pUpsert->pUpsertSet==0 ){
- onError = OE_Ignore; /* DO NOTHING is the same as INSERT OR IGNORE */
- }else{
- onError = OE_Update; /* DO UPDATE */
+ if( pUpsert ){
+ pUpsertClause = sqlite3UpsertOfIndex(pUpsert,0);
+ if( pUpsertClause!=0 ){
+ if( pUpsertClause->isDoUpdate==0 ){
+ onError = OE_Ignore; /* DO NOTHING is the same as INSERT OR IGNORE */
+ }else{
+ onError = OE_Update; /* DO UPDATE */
+ }
+ }
+ if( pUpsertClause!=pUpsert ){
+ /* The first ON CONFLICT clause has a conflict target other than
+ ** the IPK. We have to jump ahead to that first ON CONFLICT clause
+ ** and then come back here and deal with the IPK afterwards */
+ upsertIpkDelay = sqlite3VdbeAddOp0(v, OP_Goto);
}
}
@@ -122860,7 +124053,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
** the UNIQUE constraints have run.
*/
if( onError==OE_Replace /* IPK rule is REPLACE */
- && onError!=overrideError /* Rules for other contraints are different */
+ && onError!=overrideError /* Rules for other constraints are different */
&& pTab->pIndex /* There exist other constraints */
){
ipkTop = sqlite3VdbeAddOp0(v, OP_Goto)+1;
@@ -122957,7 +124150,9 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
}
}
sqlite3VdbeResolveLabel(v, addrRowidOk);
- if( ipkTop ){
+ if( pUpsert && pUpsertClause!=pUpsert ){
+ upsertIpkReturn = sqlite3VdbeAddOp0(v, OP_Goto);
+ }else if( ipkTop ){
ipkBottom = sqlite3VdbeAddOp0(v, OP_Goto);
sqlite3VdbeJumpHere(v, ipkTop-1);
}
@@ -122970,7 +124165,10 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
** This loop also handles the case of the PRIMARY KEY index for a
** WITHOUT ROWID table.
*/
- for(ix=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, ix++){
+ for(pIdx = indexIteratorFirst(&sIdxIter, &ix);
+ pIdx;
+ pIdx = indexIteratorNext(&sIdxIter, &ix)
+ ){
int regIdx; /* Range of registers hold conent for pIdx */
int regR; /* Range of registers holding conflicting PK */
int iThisCur; /* Cursor for this UNIQUE index */
@@ -122978,15 +124176,14 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
int addrConflictCk; /* First opcode in the conflict check logic */
if( aRegIdx[ix]==0 ) continue; /* Skip indices that do not change */
- if( pUpIdx==pIdx ){
- addrUniqueOk = upsertJump+1;
- upsertBypass = sqlite3VdbeGoto(v, 0);
- VdbeComment((v, "Skip upsert subroutine"));
- sqlite3VdbeJumpHere(v, upsertJump);
- }else{
- addrUniqueOk = sqlite3VdbeMakeLabel(pParse);
+ if( pUpsert ){
+ pUpsertClause = sqlite3UpsertOfIndex(pUpsert, pIdx);
+ if( upsertIpkDelay && pUpsertClause==pUpsert ){
+ sqlite3VdbeJumpHere(v, upsertIpkDelay);
+ }
}
- if( bAffinityDone==0 && (pUpIdx==0 || pUpIdx==pIdx) ){
+ addrUniqueOk = sqlite3VdbeMakeLabel(pParse);
+ if( bAffinityDone==0 ){
sqlite3TableAffinity(v, pTab, regNewData+1);
bAffinityDone = 1;
}
@@ -123057,8 +124254,8 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
}
/* Figure out if the upsert clause applies to this index */
- if( pUpIdx==pIdx ){
- if( pUpsert->pUpsertSet==0 ){
+ if( pUpsertClause ){
+ if( pUpsertClause->isDoUpdate==0 ){
onError = OE_Ignore; /* DO NOTHING is the same as INSERT OR IGNORE */
}else{
onError = OE_Update; /* DO UPDATE */
@@ -123096,7 +124293,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
regIdx, pIdx->nKeyCol); VdbeCoverage(v);
/* Generate code to handle collisions */
- regR = (pIdx==pPk) ? regIdx : sqlite3GetTempRange(pParse, nPkField);
+ regR = pIdx==pPk ? regIdx : sqlite3GetTempRange(pParse, nPkField);
if( isUpdate || onError==OE_Replace ){
if( HasRowid(pTab) ){
sqlite3VdbeAddOp2(v, OP_IdxRowid, iThisCur, regR);
@@ -123248,13 +124445,16 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
break;
}
}
- if( pUpIdx==pIdx ){
- sqlite3VdbeGoto(v, upsertJump+1);
- sqlite3VdbeJumpHere(v, upsertBypass);
- }else{
- sqlite3VdbeResolveLabel(v, addrUniqueOk);
- }
+ sqlite3VdbeResolveLabel(v, addrUniqueOk);
if( regR!=regIdx ) sqlite3ReleaseTempRange(pParse, regR, nPkField);
+ if( pUpsertClause
+ && upsertIpkReturn
+ && sqlite3UpsertNextIsIPK(pUpsertClause)
+ ){
+ sqlite3VdbeGoto(v, upsertIpkDelay+1);
+ sqlite3VdbeJumpHere(v, upsertIpkReturn);
+ upsertIpkReturn = 0;
+ }
}
/* If the IPK constraint is a REPLACE, run it last */
@@ -123321,6 +124521,32 @@ SQLITE_PRIVATE void sqlite3SetMakeRecordP5(Vdbe *v, Table *pTab){
#endif
/*
+** Table pTab is a WITHOUT ROWID table that is being written to. The cursor
+** number is iCur, and register regData contains the new record for the
+** PK index. This function adds code to invoke the pre-update hook,
+** if one is registered.
+*/
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
+static void codeWithoutRowidPreupdate(
+ Parse *pParse, /* Parse context */
+ Table *pTab, /* Table being updated */
+ int iCur, /* Cursor number for table */
+ int regData /* Data containing new record */
+){
+ Vdbe *v = pParse->pVdbe;
+ int r = sqlite3GetTempReg(pParse);
+ assert( !HasRowid(pTab) );
+ assert( 0==(pParse->db->mDbFlags & DBFLAG_Vacuum) );
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, r);
+ sqlite3VdbeAddOp4(v, OP_Insert, iCur, regData, r, (char*)pTab, P4_TABLE);
+ sqlite3VdbeChangeP5(v, OPFLAG_ISNOOP);
+ sqlite3ReleaseTempReg(pParse, r);
+}
+#else
+# define codeWithoutRowidPreupdate(a,b,c,d)
+#endif
+
+/*
** This routine generates code to finish the INSERT or UPDATE operation
** that was started by a prior call to sqlite3GenerateConstraintChecks.
** A consecutive range of registers starting at regNewData contains the
@@ -123368,17 +124594,9 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion(
assert( pParse->nested==0 );
pik_flags |= OPFLAG_NCHANGE;
pik_flags |= (update_flags & OPFLAG_SAVEPOSITION);
-#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
if( update_flags==0 ){
- int r = sqlite3GetTempReg(pParse);
- sqlite3VdbeAddOp2(v, OP_Integer, 0, r);
- sqlite3VdbeAddOp4(v, OP_Insert,
- iIdxCur+i, aRegIdx[i], r, (char*)pTab, P4_TABLE
- );
- sqlite3VdbeChangeP5(v, OPFLAG_ISNOOP);
- sqlite3ReleaseTempReg(pParse, r);
+ codeWithoutRowidPreupdate(pParse, pTab, iIdxCur+i, aRegIdx[i]);
}
-#endif
}
sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iIdxCur+i, aRegIdx[i],
aRegIdx[i]+1,
@@ -123576,7 +124794,7 @@ static int xferOptimization(
ExprList *pEList; /* The result set of the SELECT */
Table *pSrc; /* The table in the FROM clause of SELECT */
Index *pSrcIdx, *pDestIdx; /* Source and destination indices */
- struct SrcList_item *pItem; /* An element of pSelect->pSrc */
+ SrcItem *pItem; /* An element of pSelect->pSrc */
int i; /* Loop counter */
int iDbSrc; /* The database of pSrc */
int iSrc, iDest; /* Cursors from source and destination */
@@ -123793,6 +125011,7 @@ static int xferOptimization(
iDest = pParse->nTab++;
regAutoinc = autoIncBegin(pParse, iDbDest, pDest);
regData = sqlite3GetTempReg(pParse);
+ sqlite3VdbeAddOp2(v, OP_Null, 0, regData);
regRowid = sqlite3GetTempReg(pParse);
sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite);
assert( HasRowid(pDest) || destHasUniqueIdx );
@@ -123828,11 +125047,13 @@ static int xferOptimization(
emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); VdbeCoverage(v);
if( pDest->iPKey>=0 ){
addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
- sqlite3VdbeVerifyAbortable(v, onError);
- addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid);
- VdbeCoverage(v);
- sqlite3RowidConstraint(pParse, onError, pDest);
- sqlite3VdbeJumpHere(v, addr2);
+ if( (db->mDbFlags & DBFLAG_Vacuum)==0 ){
+ sqlite3VdbeVerifyAbortable(v, onError);
+ addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid);
+ VdbeCoverage(v);
+ sqlite3RowidConstraint(pParse, onError, pDest);
+ sqlite3VdbeJumpHere(v, addr2);
+ }
autoIncStep(pParse, regAutoinc, regRowid);
}else if( pDest->pIndex==0 && !(db->mDbFlags & DBFLAG_VacuumInto) ){
addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid);
@@ -123840,16 +125061,28 @@ static int xferOptimization(
addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
assert( (pDest->tabFlags & TF_Autoincrement)==0 );
}
+
if( db->mDbFlags & DBFLAG_Vacuum ){
sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest);
- insFlags = OPFLAG_APPEND|OPFLAG_USESEEKRESULT;
+ insFlags = OPFLAG_APPEND|OPFLAG_USESEEKRESULT|OPFLAG_PREFORMAT;
}else{
- insFlags = OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND;
+ insFlags = OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND|OPFLAG_PREFORMAT;
+ }
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
+ if( (db->mDbFlags & DBFLAG_Vacuum)==0 ){
+ sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);
+ insFlags &= ~OPFLAG_PREFORMAT;
+ }else
+#endif
+ {
+ sqlite3VdbeAddOp3(v, OP_RowCell, iDest, iSrc, regRowid);
+ }
+ sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid);
+ if( (db->mDbFlags & DBFLAG_Vacuum)==0 ){
+ sqlite3VdbeChangeP4(v, -1, (char*)pDest, P4_TABLE);
}
- sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);
- sqlite3VdbeAddOp4(v, OP_Insert, iDest, regData, regRowid,
- (char*)pDest, P4_TABLE);
sqlite3VdbeChangeP5(v, insFlags);
+
sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); VdbeCoverage(v);
sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
@@ -123891,13 +125124,22 @@ static int xferOptimization(
if( sqlite3_stricmp(sqlite3StrBINARY, zColl) ) break;
}
if( i==pSrcIdx->nColumn ){
- idxInsFlags = OPFLAG_USESEEKRESULT;
+ idxInsFlags = OPFLAG_USESEEKRESULT|OPFLAG_PREFORMAT;
sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest);
+ sqlite3VdbeAddOp2(v, OP_RowCell, iDest, iSrc);
}
}else if( !HasRowid(pSrc) && pDestIdx->idxType==SQLITE_IDXTYPE_PRIMARYKEY ){
idxInsFlags |= OPFLAG_NCHANGE;
}
- sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);
+ if( idxInsFlags!=(OPFLAG_USESEEKRESULT|OPFLAG_PREFORMAT) ){
+ sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);
+ if( (db->mDbFlags & DBFLAG_Vacuum)==0
+ && !HasRowid(pDest)
+ && IsPrimaryKeyIndex(pDestIdx)
+ ){
+ codeWithoutRowidPreupdate(pParse, pDest, iDest, regData);
+ }
+ }
sqlite3VdbeAddOp2(v, OP_IdxInsert, iDest, regData);
sqlite3VdbeChangeP5(v, idxInsFlags|OPFLAG_APPEND);
sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1); VdbeCoverage(v);
@@ -128213,7 +129455,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
** Checkpoint the database.
*/
case PragTyp_WAL_CHECKPOINT: {
- int iBt = (pId2->z?iDb:SQLITE_MAX_ATTACHED);
+ int iBt = (pId2->z?iDb:SQLITE_MAX_DB);
int eMode = SQLITE_CHECKPOINT_PASSIVE;
if( zRight ){
if( sqlite3StrICmp(zRight, "full")==0 ){
@@ -128861,7 +130103,7 @@ SQLITE_PRIVATE Module *sqlite3PragmaVtabRegister(sqlite3 *db, const char *zName)
*/
static void corruptSchema(
InitData *pData, /* Initialization context */
- const char *zObj, /* Object being parsed at the point of error */
+ char **azObj, /* Type and name of object being parsed */
const char *zExtra /* Error information */
){
sqlite3 *db = pData->db;
@@ -128869,14 +130111,18 @@ static void corruptSchema(
pData->rc = SQLITE_NOMEM_BKPT;
}else if( pData->pzErrMsg[0]!=0 ){
/* A error message has already been generated. Do not overwrite it */
- }else if( pData->mInitFlags & INITFLAG_AlterTable ){
- *pData->pzErrMsg = sqlite3DbStrDup(db, zExtra);
+ }else if( pData->mInitFlags & (INITFLAG_AlterRename|INITFLAG_AlterDrop) ){
+ *pData->pzErrMsg = sqlite3MPrintf(db,
+ "error in %s %s after %s: %s", azObj[0], azObj[1],
+ (pData->mInitFlags & INITFLAG_AlterRename) ? "rename" : "drop column",
+ zExtra
+ );
pData->rc = SQLITE_ERROR;
}else if( db->flags & SQLITE_WriteSchema ){
pData->rc = SQLITE_CORRUPT_BKPT;
}else{
char *z;
- if( zObj==0 ) zObj = "?";
+ const char *zObj = azObj[1] ? azObj[1] : "?";
z = sqlite3MPrintf(db, "malformed database schema (%s)", zObj);
if( zExtra && zExtra[0] ) z = sqlite3MPrintf(db, "%z - %s", z, zExtra);
*pData->pzErrMsg = z;
@@ -128934,19 +130180,26 @@ SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char
db->mDbFlags |= DBFLAG_EncodingFixed;
pData->nInitRow++;
if( db->mallocFailed ){
- corruptSchema(pData, argv[1], 0);
+ corruptSchema(pData, argv, 0);
return 1;
}
assert( iDb>=0 && iDb<db->nDb );
if( argv==0 ) return 0; /* Might happen if EMPTY_RESULT_CALLBACKS are on */
if( argv[3]==0 ){
- corruptSchema(pData, argv[1], 0);
- }else if( sqlite3_strnicmp(argv[4],"create ",7)==0 ){
+ corruptSchema(pData, argv, 0);
+ }else if( argv[4]
+ && 'c'==sqlite3UpperToLower[(unsigned char)argv[4][0]]
+ && 'r'==sqlite3UpperToLower[(unsigned char)argv[4][1]] ){
/* Call the parser to process a CREATE TABLE, INDEX or VIEW.
** But because db->init.busy is set to 1, no VDBE code is generated
** or executed. All the parser does is build the internal data
** structures that describe the table, index, or view.
+ **
+ ** No other valid SQL statement, other than the variable CREATE statements,
+ ** can begin with the letters "C" and "R". Thus, it is not possible run
+ ** any other kind of statement while parsing the schema, even a corrupt
+ ** schema.
*/
int rc;
u8 saved_iDb = db->init.iDb;
@@ -128959,7 +130212,7 @@ SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char
|| (db->init.newTnum>pData->mxPage && pData->mxPage>0)
){
if( sqlite3Config.bExtraSchemaChecks ){
- corruptSchema(pData, argv[1], "invalid rootpage");
+ corruptSchema(pData, argv, "invalid rootpage");
}
}
db->init.orphanTrigger = 0;
@@ -128978,13 +130231,13 @@ SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char
if( rc==SQLITE_NOMEM ){
sqlite3OomFault(db);
}else if( rc!=SQLITE_INTERRUPT && (rc&0xFF)!=SQLITE_LOCKED ){
- corruptSchema(pData, argv[1], sqlite3_errmsg(db));
+ corruptSchema(pData, argv, sqlite3_errmsg(db));
}
}
}
sqlite3_finalize(pStmt);
}else if( argv[1]==0 || (argv[4]!=0 && argv[4][0]!=0) ){
- corruptSchema(pData, argv[1], 0);
+ corruptSchema(pData, argv, 0);
}else{
/* If the SQL column is blank it means this is an index that
** was created to be the PRIMARY KEY or to fulfill a UNIQUE
@@ -128995,7 +130248,7 @@ SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char
Index *pIndex;
pIndex = sqlite3FindIndex(db, argv[1], db->aDb[iDb].zDbSName);
if( pIndex==0 ){
- corruptSchema(pData, argv[1], "orphan index");
+ corruptSchema(pData, argv, "orphan index");
}else
if( sqlite3GetUInt32(argv[3],&pIndex->tnum)==0
|| pIndex->tnum<2
@@ -129003,7 +130256,7 @@ SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char
|| sqlite3IndexHasDuplicateRootPage(pIndex)
){
if( sqlite3Config.bExtraSchemaChecks ){
- corruptSchema(pData, argv[1], "invalid rootpage");
+ corruptSchema(pData, argv, "invalid rootpage");
}
}
}
@@ -129384,27 +130637,20 @@ SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
}
/*
-** Deallocate a single AggInfo object
-*/
-static void agginfoFree(sqlite3 *db, AggInfo *p){
- sqlite3DbFree(db, p->aCol);
- sqlite3DbFree(db, p->aFunc);
- sqlite3DbFree(db, p);
-}
-
-/*
** Free all memory allocations in the pParse object
*/
SQLITE_PRIVATE void sqlite3ParserReset(Parse *pParse){
sqlite3 *db = pParse->db;
- AggInfo *pThis = pParse->pAggList;
- while( pThis ){
- AggInfo *pNext = pThis->pNext;
- agginfoFree(db, pThis);
- pThis = pNext;
+ while( pParse->pCleanup ){
+ ParseCleanup *pCleanup = pParse->pCleanup;
+ pParse->pCleanup = pCleanup->pNext;
+ pCleanup->xCleanup(db, pCleanup->pPtr);
+ sqlite3DbFreeNN(db, pCleanup);
}
sqlite3DbFree(db, pParse->aLabel);
- sqlite3ExprListDelete(db, pParse->pConstExpr);
+ if( pParse->pConstExpr ){
+ sqlite3ExprListDelete(db, pParse->pConstExpr);
+ }
if( db ){
assert( db->lookaside.bDisable >= pParse->disableLookaside );
db->lookaside.bDisable -= pParse->disableLookaside;
@@ -129414,6 +130660,55 @@ SQLITE_PRIVATE void sqlite3ParserReset(Parse *pParse){
}
/*
+** Add a new cleanup operation to a Parser. The cleanup should happen when
+** the parser object is destroyed. But, beware: the cleanup might happen
+** immediately.
+**
+** Use this mechanism for uncommon cleanups. There is a higher setup
+** cost for this mechansim (an extra malloc), so it should not be used
+** for common cleanups that happen on most calls. But for less
+** common cleanups, we save a single NULL-pointer comparison in
+** sqlite3ParserReset(), which reduces the total CPU cycle count.
+**
+** If a memory allocation error occurs, then the cleanup happens immediately.
+** When either SQLITE_DEBUG or SQLITE_COVERAGE_TEST are defined, the
+** pParse->earlyCleanup flag is set in that case. Calling code show verify
+** that test cases exist for which this happens, to guard against possible
+** use-after-free errors following an OOM. The preferred way to do this is
+** to immediately follow the call to this routine with:
+**
+** testcase( pParse->earlyCleanup );
+**
+** This routine returns a copy of its pPtr input (the third parameter)
+** except if an early cleanup occurs, in which case it returns NULL. So
+** another way to check for early cleanup is to check the return value.
+** Or, stop using the pPtr parameter with this call and use only its
+** return value thereafter. Something like this:
+**
+** pObj = sqlite3ParserAddCleanup(pParse, destructor, pObj);
+*/
+SQLITE_PRIVATE void *sqlite3ParserAddCleanup(
+ Parse *pParse, /* Destroy when this Parser finishes */
+ void (*xCleanup)(sqlite3*,void*), /* The cleanup routine */
+ void *pPtr /* Pointer to object to be cleaned up */
+){
+ ParseCleanup *pCleanup = sqlite3DbMallocRaw(pParse->db, sizeof(*pCleanup));
+ if( pCleanup ){
+ pCleanup->pNext = pParse->pCleanup;
+ pParse->pCleanup = pCleanup;
+ pCleanup->pPtr = pPtr;
+ pCleanup->xCleanup = xCleanup;
+ }else{
+ xCleanup(pParse->db, pPtr);
+ pPtr = 0;
+#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
+ pParse->earlyCleanup = 1;
+#endif
+ }
+ return pPtr;
+}
+
+/*
** Compile the UTF-8 encoded SQL statement zSql into a statement handle.
*/
static int sqlite3Prepare(
@@ -129511,12 +130806,6 @@ static int sqlite3Prepare(
}
assert( 0==sParse.nQueryLoop );
- if( sParse.rc==SQLITE_DONE ){
- sParse.rc = SQLITE_OK;
- }
- if( sParse.checkSchema ){
- schemaIsValid(&sParse);
- }
if( pzTail ){
*pzTail = sParse.zTail;
}
@@ -129527,20 +130816,28 @@ static int sqlite3Prepare(
if( db->mallocFailed ){
sParse.rc = SQLITE_NOMEM_BKPT;
}
- rc = sParse.rc;
- if( rc!=SQLITE_OK ){
- if( sParse.pVdbe ) sqlite3VdbeFinalize(sParse.pVdbe);
- assert(!(*ppStmt));
+ if( sParse.rc!=SQLITE_OK && sParse.rc!=SQLITE_DONE ){
+ if( sParse.checkSchema ){
+ schemaIsValid(&sParse);
+ }
+ if( sParse.pVdbe ){
+ sqlite3VdbeFinalize(sParse.pVdbe);
+ }
+ assert( 0==(*ppStmt) );
+ rc = sParse.rc;
+ if( zErrMsg ){
+ sqlite3ErrorWithMsg(db, rc, "%s", zErrMsg);
+ sqlite3DbFree(db, zErrMsg);
+ }else{
+ sqlite3Error(db, rc);
+ }
}else{
+ assert( zErrMsg==0 );
*ppStmt = (sqlite3_stmt*)sParse.pVdbe;
+ rc = SQLITE_OK;
+ sqlite3ErrorClear(db);
}
- if( zErrMsg ){
- sqlite3ErrorWithMsg(db, rc, "%s", zErrMsg);
- sqlite3DbFree(db, zErrMsg);
- }else{
- sqlite3Error(db, rc);
- }
/* Delete any TriggerPrg structures allocated while parsing this statement. */
while( sParse.pTriggerPrg ){
@@ -129886,12 +131183,16 @@ static void clearSelect(sqlite3 *db, Select *p, int bFree){
sqlite3ExprDelete(db, p->pHaving);
sqlite3ExprListDelete(db, p->pOrderBy);
sqlite3ExprDelete(db, p->pLimit);
+ if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith);
#ifndef SQLITE_OMIT_WINDOWFUNC
if( OK_IF_ALWAYS_TRUE(p->pWinDefn) ){
sqlite3WindowListDelete(db, p->pWinDefn);
}
+ while( p->pWin ){
+ assert( p->pWin->ppThis==&p->pWin );
+ sqlite3WindowUnlinkFromSelect(p->pWin);
+ }
#endif
- if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith);
if( bFree ) sqlite3DbFreeNN(db, p);
p = pPrior;
bFree = 1;
@@ -130063,7 +131364,7 @@ SQLITE_PRIVATE int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *p
** Return the index of a column in a table. Return -1 if the column
** is not contained in the table.
*/
-static int columnIndex(Table *pTab, const char *zCol){
+SQLITE_PRIVATE int sqlite3ColumnIndex(Table *pTab, const char *zCol){
int i;
u8 h = sqlite3StrIHash(zCol);
Column *pCol;
@@ -130095,7 +131396,7 @@ static int tableAndColumnIndex(
assert( (piTab==0)==(piCol==0) ); /* Both or neither are NULL */
for(i=0; i<N; i++){
- iCol = columnIndex(pSrc->a[i].pTab, zCol);
+ iCol = sqlite3ColumnIndex(pSrc->a[i].pTab, zCol);
if( iCol>=0
&& (bIgnoreHidden==0 || IsHiddenColumn(&pSrc->a[i].pTab->aCol[iCol])==0)
){
@@ -130148,7 +131449,7 @@ static void addWhereTerm(
ExprSetProperty(pEq, EP_FromJoin);
assert( !ExprHasProperty(pEq, EP_TokenOnly|EP_Reduced) );
ExprSetVVAProperty(pEq, EP_NoReduce);
- pEq->iRightJoinTable = (i16)pE2->iTable;
+ pEq->iRightJoinTable = pE2->iTable;
}
*ppWhere = sqlite3ExprAnd(pParse, *ppWhere, pEq);
}
@@ -130184,7 +131485,7 @@ SQLITE_PRIVATE void sqlite3SetJoinExpr(Expr *p, int iTable){
ExprSetProperty(p, EP_FromJoin);
assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) );
ExprSetVVAProperty(p, EP_NoReduce);
- p->iRightJoinTable = (i16)iTable;
+ p->iRightJoinTable = iTable;
if( p->op==TK_FUNCTION && p->x.pList ){
int i;
for(i=0; i<p->x.pList->nExpr; i++){
@@ -130208,6 +131509,9 @@ static void unsetJoinExpr(Expr *p, int iTable){
&& (iTable<0 || p->iRightJoinTable==iTable) ){
ExprClearProperty(p, EP_FromJoin);
}
+ if( p->op==TK_COLUMN && p->iTable==iTable ){
+ ExprClearProperty(p, EP_CanBeNull);
+ }
if( p->op==TK_FUNCTION && p->x.pList ){
int i;
for(i=0; i<p->x.pList->nExpr; i++){
@@ -130236,8 +131540,8 @@ static void unsetJoinExpr(Expr *p, int iTable){
static int sqliteProcessJoin(Parse *pParse, Select *p){
SrcList *pSrc; /* All tables in the FROM clause */
int i, j; /* Loop counters */
- struct SrcList_item *pLeft; /* Left table being joined */
- struct SrcList_item *pRight; /* Right table being joined */
+ SrcItem *pLeft; /* Left table being joined */
+ SrcItem *pRight; /* Right table being joined */
pSrc = p->pSrc;
pLeft = &pSrc->a[0];
@@ -130305,7 +131609,7 @@ static int sqliteProcessJoin(Parse *pParse, Select *p){
int iRightCol; /* Column number of matching column on the right */
zName = pList->a[j].zName;
- iRightCol = columnIndex(pRightTab, zName);
+ iRightCol = sqlite3ColumnIndex(pRightTab, zName);
if( iRightCol<0
|| !tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol, 0)
){
@@ -131184,7 +132488,7 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoFromExprList(
/*
** Name of the connection operator, used for error messages.
*/
-static const char *selectOpName(int id){
+SQLITE_PRIVATE const char *sqlite3SelectOpName(int id){
char *z;
switch( id ){
case TK_ALL: z = "UNION ALL"; break;
@@ -131887,6 +133191,7 @@ SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(
for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
const char *zType;
int n, m;
+ pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT);
p = a[i].pExpr;
zType = columnType(&sNC, p, 0, 0, 0);
/* pCol->szEst = ... // Column size est for SELECT tables never used */
@@ -132402,12 +133707,8 @@ static int multiSelect(
db = pParse->db;
pPrior = p->pPrior;
dest = *pDest;
- if( pPrior->pOrderBy || pPrior->pLimit ){
- sqlite3ErrorMsg(pParse,"%s clause should come after %s not before",
- pPrior->pOrderBy!=0 ? "ORDER BY" : "LIMIT", selectOpName(p->op));
- rc = 1;
- goto multi_select_end;
- }
+ assert( pPrior->pOrderBy==0 );
+ assert( pPrior->pLimit==0 );
v = sqlite3GetVdbe(pParse);
assert( v!=0 ); /* The VDBE already created by calling function */
@@ -132464,7 +133765,7 @@ static int multiSelect(
pPrior->iOffset = p->iOffset;
pPrior->pLimit = p->pLimit;
rc = sqlite3Select(pParse, pPrior, &dest);
- p->pLimit = 0;
+ pPrior->pLimit = 0;
if( rc ){
goto multi_select_end;
}
@@ -132485,8 +133786,8 @@ static int multiSelect(
pDelete = p->pPrior;
p->pPrior = pPrior;
p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
- if( pPrior->pLimit
- && sqlite3ExprIsInteger(pPrior->pLimit->pLeft, &nLimit)
+ if( p->pLimit
+ && sqlite3ExprIsInteger(p->pLimit->pLeft, &nLimit)
&& nLimit>0 && p->nSelectRow > sqlite3LogEst((u64)nLimit)
){
p->nSelectRow = sqlite3LogEst((u64)nLimit);
@@ -132550,7 +133851,7 @@ static int multiSelect(
p->pLimit = 0;
uniondest.eDest = op;
ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
- selectOpName(p->op)));
+ sqlite3SelectOpName(p->op)));
rc = sqlite3Select(pParse, p, &uniondest);
testcase( rc!=SQLITE_OK );
assert( p->pOrderBy==0 );
@@ -132626,7 +133927,7 @@ static int multiSelect(
p->pLimit = 0;
intersectdest.iSDParm = tab2;
ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
- selectOpName(p->op)));
+ sqlite3SelectOpName(p->op)));
rc = sqlite3Select(pParse, p, &intersectdest);
testcase( rc!=SQLITE_OK );
pDelete = p->pPrior;
@@ -132735,7 +134036,8 @@ SQLITE_PRIVATE void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p){
sqlite3ErrorMsg(pParse, "all VALUES must have the same number of terms");
}else{
sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s"
- " do not have the same number of result columns", selectOpName(p->op));
+ " do not have the same number of result columns",
+ sqlite3SelectOpName(p->op));
}
}
@@ -132832,10 +134134,8 @@ static int generateOutputSubroutine(
** if it is the RHS of a row-value IN operator.
*/
case SRT_Mem: {
- if( pParse->nErr==0 ){
- testcase( pIn->nSdst>1 );
- sqlite3ExprCodeMove(pParse, pIn->iSdst, pDest->iSDParm, pIn->nSdst);
- }
+ testcase( pIn->nSdst>1 );
+ sqlite3ExprCodeMove(pParse, pIn->iSdst, pDest->iSDParm, pIn->nSdst);
/* The LIMIT clause will jump out of the loop for us */
break;
}
@@ -133127,7 +134427,7 @@ static int multiSelectOrderBy(
sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA);
sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB);
- ExplainQueryPlan((pParse, 1, "MERGE (%s)", selectOpName(p->op)));
+ ExplainQueryPlan((pParse, 1, "MERGE (%s)", sqlite3SelectOpName(p->op)));
/* Generate a coroutine to evaluate the SELECT statement to the
** left of the compound operator - the "A" select.
@@ -133397,7 +134697,7 @@ static void substSelect(
int doPrior /* Do substitutes on p->pPrior too */
){
SrcList *pSrc;
- struct SrcList_item *pItem;
+ SrcItem *pItem;
int i;
if( !p ) return;
do{
@@ -133427,7 +134727,7 @@ static void substSelect(
** pSrcItem->colUsed mask.
*/
static int recomputeColumnsUsedExpr(Walker *pWalker, Expr *pExpr){
- struct SrcList_item *pItem;
+ SrcItem *pItem;
if( pExpr->op!=TK_COLUMN ) return WRC_Continue;
pItem = pWalker->u.pSrcItem;
if( pItem->iCursor!=pExpr->iTable ) return WRC_Continue;
@@ -133437,7 +134737,7 @@ static int recomputeColumnsUsedExpr(Walker *pWalker, Expr *pExpr){
}
static void recomputeColumnsUsed(
Select *pSelect, /* The complete SELECT statement */
- struct SrcList_item *pSrcItem /* Which FROM clause item to recompute */
+ SrcItem *pSrcItem /* Which FROM clause item to recompute */
){
Walker w;
if( NEVER(pSrcItem->pTab==0) ) return;
@@ -133452,6 +134752,89 @@ static void recomputeColumnsUsed(
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
/*
+** Assign new cursor numbers to each of the items in pSrc. For each
+** new cursor number assigned, set an entry in the aCsrMap[] array
+** to map the old cursor number to the new:
+**
+** aCsrMap[iOld] = iNew;
+**
+** The array is guaranteed by the caller to be large enough for all
+** existing cursor numbers in pSrc.
+**
+** If pSrc contains any sub-selects, call this routine recursively
+** on the FROM clause of each such sub-select, with iExcept set to -1.
+*/
+static void srclistRenumberCursors(
+ Parse *pParse, /* Parse context */
+ int *aCsrMap, /* Array to store cursor mappings in */
+ SrcList *pSrc, /* FROM clause to renumber */
+ int iExcept /* FROM clause item to skip */
+){
+ int i;
+ SrcItem *pItem;
+ for(i=0, pItem=pSrc->a; i<pSrc->nSrc; i++, pItem++){
+ if( i!=iExcept ){
+ Select *p;
+ pItem->iCursor = aCsrMap[pItem->iCursor] = pParse->nTab++;
+ for(p=pItem->pSelect; p; p=p->pPrior){
+ srclistRenumberCursors(pParse, aCsrMap, p->pSrc, -1);
+ }
+ }
+ }
+}
+
+/*
+** Expression walker callback used by renumberCursors() to update
+** Expr objects to match newly assigned cursor numbers.
+*/
+static int renumberCursorsCb(Walker *pWalker, Expr *pExpr){
+ int *aCsrMap = pWalker->u.aiCol;
+ int op = pExpr->op;
+ if( (op==TK_COLUMN || op==TK_IF_NULL_ROW) && aCsrMap[pExpr->iTable] ){
+ pExpr->iTable = aCsrMap[pExpr->iTable];
+ }
+ if( ExprHasProperty(pExpr, EP_FromJoin) && aCsrMap[pExpr->iRightJoinTable] ){
+ pExpr->iRightJoinTable = aCsrMap[pExpr->iRightJoinTable];
+ }
+ return WRC_Continue;
+}
+
+/*
+** Assign a new cursor number to each cursor in the FROM clause (Select.pSrc)
+** of the SELECT statement passed as the second argument, and to each
+** cursor in the FROM clause of any FROM clause sub-selects, recursively.
+** Except, do not assign a new cursor number to the iExcept'th element in
+** the FROM clause of (*p). Update all expressions and other references
+** to refer to the new cursor numbers.
+**
+** Argument aCsrMap is an array that may be used for temporary working
+** space. Two guarantees are made by the caller:
+**
+** * the array is larger than the largest cursor number used within the
+** select statement passed as an argument, and
+**
+** * the array entries for all cursor numbers that do *not* appear in
+** FROM clauses of the select statement as described above are
+** initialized to zero.
+*/
+static void renumberCursors(
+ Parse *pParse, /* Parse context */
+ Select *p, /* Select to renumber cursors within */
+ int iExcept, /* FROM clause item to skip */
+ int *aCsrMap /* Working space */
+){
+ Walker w;
+ srclistRenumberCursors(pParse, aCsrMap, p->pSrc, iExcept);
+ memset(&w, 0, sizeof(w));
+ w.u.aiCol = aCsrMap;
+ w.xExprCallback = renumberCursorsCb;
+ w.xSelectCallback = sqlite3SelectWalkNoop;
+ sqlite3WalkSelect(&w, p);
+}
+#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
+
+#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
+/*
** This routine attempts to flatten subqueries as a performance optimization.
** This routine returns 1 if it makes changes and 0 if no flattening occurs.
**
@@ -133544,9 +134927,9 @@ static void recomputeColumnsUsed(
** (17c) every term within the subquery compound must have a FROM clause
** (17d) the outer query may not be
** (17d1) aggregate, or
-** (17d2) DISTINCT, or
-** (17d3) a join.
-** (17e) the subquery may not contain window functions
+** (17d2) DISTINCT
+** (17e) the subquery may not contain window functions, and
+** (17f) the subquery must not be the RHS of a LEFT JOIN.
**
** The parent and sub-query may contain WHERE clauses. Subject to
** rules (11), (13) and (14), they may also contain ORDER BY,
@@ -133562,8 +134945,8 @@ static void recomputeColumnsUsed(
** syntax error and return a detailed message.
**
** (18) If the sub-query is a compound select, then all terms of the
-** ORDER BY clause of the parent must be simple references to
-** columns of the sub-query.
+** ORDER BY clause of the parent must be copies of a term returned
+** by the parent query.
**
** (19) If the subquery uses LIMIT then the outer query may not
** have a WHERE clause.
@@ -133579,9 +134962,8 @@ static void recomputeColumnsUsed(
**
** (22) The subquery may not be a recursive CTE.
**
-** (**) Subsumed into restriction (17d3). Was: If the outer query is
-** a recursive CTE, then the sub-query may not be a compound query.
-** This restriction is because transforming the
+** (23) If the outer query is a recursive CTE, then the sub-query may not be
+** a compound query. This restriction is because transforming the
** parent to a compound query confuses the code that handles
** recursive queries in multiSelect().
**
@@ -133623,9 +135005,10 @@ static int flattenSubquery(
int isLeftJoin = 0; /* True if pSub is the right side of a LEFT JOIN */
int i; /* Loop counter */
Expr *pWhere; /* The WHERE clause */
- struct SrcList_item *pSubitem; /* The subquery */
+ SrcItem *pSubitem; /* The subquery */
sqlite3 *db = pParse->db;
Walker w; /* Walker to persist agginfo data */
+ int *aCsrMap = 0;
/* Check to see if flattening is permitted. Return 0 if not.
*/
@@ -133721,13 +135104,14 @@ static int flattenSubquery(
if( pSub->pOrderBy ){
return 0; /* Restriction (20) */
}
- if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){
- return 0; /* (17d1), (17d2), or (17d3) */
+ if( isAgg || (p->selFlags & SF_Distinct)!=0 || isLeftJoin>0 ){
+ return 0; /* (17d1), (17d2), or (17f) */
}
for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
assert( pSub->pSrc!=0 );
+ assert( (pSub->selFlags & SF_Recursive)==0 );
assert( pSub->pEList->nExpr==pSub1->pEList->nExpr );
if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0 /* (17b) */
|| (pSub1->pPrior && pSub1->op!=TK_ALL) /* (17a) */
@@ -133748,15 +135132,15 @@ static int flattenSubquery(
if( p->pOrderBy->a[ii].u.x.iOrderByCol==0 ) return 0;
}
}
- }
- /* Ex-restriction (23):
- ** The only way that the recursive part of a CTE can contain a compound
- ** subquery is for the subquery to be one term of a join. But if the
- ** subquery is a join, then the flattening has already been stopped by
- ** restriction (17d3)
- */
- assert( (p->selFlags & SF_Recursive)==0 || pSub->pPrior==0 );
+ /* Restriction (23) */
+ if( (p->selFlags & SF_Recursive) ) return 0;
+
+ if( pSrc->nSrc>1 ){
+ if( pParse->nSelect>500 ) return 0;
+ aCsrMap = sqlite3DbMallocZero(db, pParse->nTab*sizeof(int));
+ }
+ }
/***** If we reach this point, flattening is permitted. *****/
SELECTTRACE(1,pParse,p,("flatten %u.%p from term %d\n",
@@ -133768,6 +135152,17 @@ static int flattenSubquery(
testcase( i==SQLITE_DENY );
pParse->zAuthContext = zSavedAuthContext;
+ /* Delete the transient structures associated with thesubquery */
+ pSub1 = pSubitem->pSelect;
+ sqlite3DbFree(db, pSubitem->zDatabase);
+ sqlite3DbFree(db, pSubitem->zName);
+ sqlite3DbFree(db, pSubitem->zAlias);
+ pSubitem->zDatabase = 0;
+ pSubitem->zName = 0;
+ pSubitem->zAlias = 0;
+ pSubitem->pSelect = 0;
+ assert( pSubitem->pOn==0 );
+
/* If the sub-query is a compound SELECT statement, then (by restrictions
** 17 and 18 above) it must be a UNION ALL and the parent query must
** be of the form:
@@ -133806,18 +135201,23 @@ static int flattenSubquery(
ExprList *pOrderBy = p->pOrderBy;
Expr *pLimit = p->pLimit;
Select *pPrior = p->pPrior;
+ Table *pItemTab = pSubitem->pTab;
+ pSubitem->pTab = 0;
p->pOrderBy = 0;
- p->pSrc = 0;
p->pPrior = 0;
p->pLimit = 0;
pNew = sqlite3SelectDup(db, p, 0);
p->pLimit = pLimit;
p->pOrderBy = pOrderBy;
- p->pSrc = pSrc;
p->op = TK_ALL;
+ pSubitem->pTab = pItemTab;
if( pNew==0 ){
p->pPrior = pPrior;
}else{
+ pNew->selId = ++pParse->nSelect;
+ if( aCsrMap && db->mallocFailed==0 ){
+ renumberCursors(pParse, pNew, iFrom, aCsrMap);
+ }
pNew->pPrior = pPrior;
if( pPrior ) pPrior->pNext = pNew;
pNew->pNext = p;
@@ -133825,24 +135225,13 @@ static int flattenSubquery(
SELECTTRACE(2,pParse,p,("compound-subquery flattener"
" creates %u as peer\n",pNew->selId));
}
- if( db->mallocFailed ) return 1;
+ assert( pSubitem->pSelect==0 );
+ }
+ sqlite3DbFree(db, aCsrMap);
+ if( db->mallocFailed ){
+ pSubitem->pSelect = pSub1;
+ return 1;
}
-
- /* Begin flattening the iFrom-th entry of the FROM clause
- ** in the outer query.
- */
- pSub = pSub1 = pSubitem->pSelect;
-
- /* Delete the transient table structure associated with the
- ** subquery
- */
- sqlite3DbFree(db, pSubitem->zDatabase);
- sqlite3DbFree(db, pSubitem->zName);
- sqlite3DbFree(db, pSubitem->zAlias);
- pSubitem->zDatabase = 0;
- pSubitem->zName = 0;
- pSubitem->zAlias = 0;
- pSubitem->pSelect = 0;
/* Defer deleting the Table object associated with the
** subquery until code generation is
@@ -133855,8 +135244,10 @@ static int flattenSubquery(
Table *pTabToDel = pSubitem->pTab;
if( pTabToDel->nTabRef==1 ){
Parse *pToplevel = sqlite3ParseToplevel(pParse);
- pTabToDel->pNextZombie = pToplevel->pZombieTab;
- pToplevel->pZombieTab = pTabToDel;
+ sqlite3ParserAddCleanup(pToplevel,
+ (void(*)(sqlite3*,void*))sqlite3DeleteTable,
+ pTabToDel);
+ testcase( pToplevel->earlyCleanup );
}else{
pTabToDel->nTabRef--;
}
@@ -133876,6 +135267,7 @@ static int flattenSubquery(
** those references with expressions that resolve to the subquery FROM
** elements we are now copying in.
*/
+ pSub = pSub1;
for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){
int nSubSrc;
u8 jointype = 0;
@@ -133884,14 +135276,8 @@ static int flattenSubquery(
nSubSrc = pSubSrc->nSrc; /* Number of terms in subquery FROM clause */
pSrc = pParent->pSrc; /* FROM clause of the outer query */
- if( pSrc ){
- assert( pParent==p ); /* First time through the loop */
- jointype = pSubitem->fg.jointype;
- }else{
- assert( pParent!=p ); /* 2nd and subsequent times through the loop */
- pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
- if( pSrc==0 ) break;
- pParent->pSrc = pSrc;
+ if( pParent==p ){
+ jointype = pSubitem->fg.jointype; /* First time through the loop */
}
/* The subquery uses a single slot of the FROM clause of the outer
@@ -134011,7 +135397,7 @@ static int flattenSubquery(
sqlite3SelectDelete(db, pSub1);
#if SELECTTRACE_ENABLED
- if( sqlite3_unsupported_selecttrace & 0x100 ){
+ if( sqlite3SelectTrace & 0x100 ){
SELECTTRACE(0x100,pParse,p,("After flattening:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
@@ -134206,6 +135592,35 @@ static int propagateConstants(
}
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
+# if !defined(SQLITE_OMIT_WINDOWFUNC)
+/*
+** This function is called to determine whether or not it is safe to
+** push WHERE clause expression pExpr down to FROM clause sub-query
+** pSubq, which contains at least one window function. Return 1
+** if it is safe and the expression should be pushed down, or 0
+** otherwise.
+**
+** It is only safe to push the expression down if it consists only
+** of constants and copies of expressions that appear in the PARTITION
+** BY clause of all window function used by the sub-query. It is safe
+** to filter out entire partitions, but not rows within partitions, as
+** this may change the results of the window functions.
+**
+** At the time this function is called it is guaranteed that
+**
+** * the sub-query uses only one distinct window frame, and
+** * that the window frame has a PARTITION BY clase.
+*/
+static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){
+ assert( pSubq->pWin->pPartition );
+ assert( (pSubq->selFlags & SF_MultiPart)==0 );
+ assert( pSubq->pPrior==0 );
+ return sqlite3ExprIsConstantOrGroupBy(pParse, pExpr, pSubq->pWin->pPartition);
+}
+# endif /* SQLITE_OMIT_WINDOWFUNC */
+#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
+
+#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
/*
** Make copies of relevant WHERE clause terms of the outer query into
** the WHERE clause of subquery. Example:
@@ -134252,9 +135667,24 @@ static int propagateConstants(
** But if the (b2=2) term were to be pushed down into the bb subquery,
** then the (1,1,NULL) row would be suppressed.
**
-** (6) The inner query features one or more window-functions (since
-** changes to the WHERE clause of the inner query could change the
-** window over which window functions are calculated).
+** (6) Window functions make things tricky as changes to the WHERE clause
+** of the inner query could change the window over which window
+** functions are calculated. Therefore, do not attempt the optimization
+** if:
+**
+** (6a) The inner query uses multiple incompatible window partitions.
+**
+** (6b) The inner query is a compound and uses window-functions.
+**
+** (6c) The WHERE clause does not consist entirely of constants and
+** copies of expressions found in the PARTITION BY clause of
+** all window-functions used by the sub-query. It is safe to
+** filter out entire partitions, as this does not change the
+** window over which any window-function is calculated.
+**
+** (7) The inner query is a Common Table Expression (CTE) that should
+** be materialized. (This restriction is implemented in the calling
+** routine.)
**
** Return 0 if no changes are made and non-zero if one or more WHERE clause
** terms are duplicated into the subquery.
@@ -134268,13 +135698,17 @@ static int pushDownWhereTerms(
){
Expr *pNew;
int nChng = 0;
- Select *pSel;
if( pWhere==0 ) return 0;
- if( pSubq->selFlags & SF_Recursive ) return 0; /* restriction (2) */
+ if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ) return 0;
#ifndef SQLITE_OMIT_WINDOWFUNC
- for(pSel=pSubq; pSel; pSel=pSel->pPrior){
- if( pSel->pWin ) return 0; /* restriction (6) */
+ if( pSubq->pPrior ){
+ Select *pSel;
+ for(pSel=pSubq; pSel; pSel=pSel->pPrior){
+ if( pSel->pWin ) return 0; /* restriction (6b) */
+ }
+ }else{
+ if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0;
}
#endif
@@ -134310,6 +135744,7 @@ static int pushDownWhereTerms(
}
if( sqlite3ExprIsTableConstant(pWhere, iCursor) ){
nChng++;
+ pSubq->selFlags |= SF_PushDown;
while( pSubq ){
SubstContext x;
pNew = sqlite3ExprDup(pParse->db, pWhere, 0);
@@ -134320,6 +135755,14 @@ static int pushDownWhereTerms(
x.isLeftJoin = 0;
x.pEList = pSubq->pEList;
pNew = substExpr(&x, pNew);
+#ifndef SQLITE_OMIT_WINDOWFUNC
+ if( pSubq->pWin && 0==pushDownWindowCheck(pParse, pSubq, pNew) ){
+ /* Restriction 6c has prevented push-down in this case */
+ sqlite3ExprDelete(pParse->db, pNew);
+ nChng--;
+ break;
+ }
+#endif
if( pSubq->selFlags & SF_Aggregate ){
pSubq->pHaving = sqlite3ExprAnd(pParse, pSubq->pHaving, pNew);
}else{
@@ -134358,7 +135801,11 @@ static u8 minMaxQuery(sqlite3 *db, Expr *pFunc, ExprList **ppMinMax){
assert( *ppMinMax==0 );
assert( pFunc->op==TK_AGG_FUNCTION );
assert( !IsWindowFunc(pFunc) );
- if( pEList==0 || pEList->nExpr!=1 || ExprHasProperty(pFunc, EP_WinFunc) ){
+ if( pEList==0
+ || pEList->nExpr!=1
+ || ExprHasProperty(pFunc, EP_WinFunc)
+ || OptimizationDisabled(db, SQLITE_MinMaxOpt)
+ ){
return eRet;
}
zFunc = pFunc->u.zToken;
@@ -134421,24 +135868,26 @@ static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){
** SQLITE_ERROR and leave an error in pParse. Otherwise, populate
** pFrom->pIndex and return SQLITE_OK.
*/
-SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, struct SrcList_item *pFrom){
- if( pFrom->pTab && pFrom->fg.isIndexedBy ){
- Table *pTab = pFrom->pTab;
- char *zIndexedBy = pFrom->u1.zIndexedBy;
- Index *pIdx;
- for(pIdx=pTab->pIndex;
- pIdx && sqlite3StrICmp(pIdx->zName, zIndexedBy);
- pIdx=pIdx->pNext
- );
- if( !pIdx ){
- sqlite3ErrorMsg(pParse, "no such index: %s", zIndexedBy, 0);
- pParse->checkSchema = 1;
- return SQLITE_ERROR;
- }
- pFrom->pIBIndex = pIdx;
+SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, SrcItem *pFrom){
+ Table *pTab = pFrom->pTab;
+ char *zIndexedBy = pFrom->u1.zIndexedBy;
+ Index *pIdx;
+ assert( pTab!=0 );
+ assert( pFrom->fg.isIndexedBy!=0 );
+
+ for(pIdx=pTab->pIndex;
+ pIdx && sqlite3StrICmp(pIdx->zName, zIndexedBy);
+ pIdx=pIdx->pNext
+ );
+ if( !pIdx ){
+ sqlite3ErrorMsg(pParse, "no such index: %s", zIndexedBy, 0);
+ pParse->checkSchema = 1;
+ return SQLITE_ERROR;
}
+ pFrom->u2.pIBIndex = pIdx;
return SQLITE_OK;
}
+
/*
** Detect compound SELECT statements that use an ORDER BY clause with
** an alternative collating sequence.
@@ -134525,7 +135974,7 @@ static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){
** arguments. If it does, leave an error message in pParse and return
** non-zero, since pFrom is not allowed to be a table-valued function.
*/
-static int cannotBeFunction(Parse *pParse, struct SrcList_item *pFrom){
+static int cannotBeFunction(Parse *pParse, SrcItem *pFrom){
if( pFrom->fg.isTabFunc ){
sqlite3ErrorMsg(pParse, "'%s' is not a function", pFrom->zName);
return 1;
@@ -134546,19 +135995,19 @@ static int cannotBeFunction(Parse *pParse, struct SrcList_item *pFrom){
*/
static struct Cte *searchWith(
With *pWith, /* Current innermost WITH clause */
- struct SrcList_item *pItem, /* FROM clause element to resolve */
+ SrcItem *pItem, /* FROM clause element to resolve */
With **ppContext /* OUT: WITH clause return value belongs to */
){
- const char *zName;
- if( pItem->zDatabase==0 && (zName = pItem->zName)!=0 ){
- With *p;
- for(p=pWith; p; p=p->pOuter){
- int i;
- for(i=0; i<p->nCte; i++){
- if( sqlite3StrICmp(zName, p->a[i].zName)==0 ){
- *ppContext = p;
- return &p->a[i];
- }
+ const char *zName = pItem->zName;
+ With *p;
+ assert( pItem->zDatabase==0 );
+ assert( zName!=0 );
+ for(p=pWith; p; p=p->pOuter){
+ int i;
+ for(i=0; i<p->nCte; i++){
+ if( sqlite3StrICmp(zName, p->a[i].zName)==0 ){
+ *ppContext = p;
+ return &p->a[i];
}
}
}
@@ -134576,46 +136025,54 @@ static struct Cte *searchWith(
** statement with which it is associated.
*/
SQLITE_PRIVATE void sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){
- assert( bFree==0 || (pParse->pWith==0 && pParse->pWithToFree==0) );
if( pWith ){
assert( pParse->pWith!=pWith );
pWith->pOuter = pParse->pWith;
pParse->pWith = pWith;
- if( bFree ) pParse->pWithToFree = pWith;
+ if( bFree ){
+ sqlite3ParserAddCleanup(pParse,
+ (void(*)(sqlite3*,void*))sqlite3WithDelete,
+ pWith);
+ testcase( pParse->earlyCleanup );
+ }
}
}
/*
** This function checks if argument pFrom refers to a CTE declared by
-** a WITH clause on the stack currently maintained by the parser. And,
-** if currently processing a CTE expression, if it is a recursive
-** reference to the current CTE.
+** a WITH clause on the stack currently maintained by the parser (on the
+** pParse->pWith linked list). And if currently processing a CTE
+** CTE expression, through routine checks to see if the reference is
+** a recursive reference to the CTE.
**
-** If pFrom falls into either of the two categories above, pFrom->pTab
-** and other fields are populated accordingly. The caller should check
-** (pFrom->pTab!=0) to determine whether or not a successful match
-** was found.
+** If pFrom matches a CTE according to either of these two above, pFrom->pTab
+** and other fields are populated accordingly.
**
-** Whether or not a match is found, SQLITE_OK is returned if no error
-** occurs. If an error does occur, an error message is stored in the
-** parser and some error code other than SQLITE_OK returned.
+** Return 0 if no match is found.
+** Return 1 if a match is found.
+** Return 2 if an error condition is detected.
*/
-static int withExpand(
- Walker *pWalker,
- struct SrcList_item *pFrom
+static int resolveFromTermToCte(
+ Parse *pParse, /* The parsing context */
+ Walker *pWalker, /* Current tree walker */
+ SrcItem *pFrom /* The FROM clause term to check */
){
- Parse *pParse = pWalker->pParse;
- sqlite3 *db = pParse->db;
- struct Cte *pCte; /* Matched CTE (or NULL if no match) */
- With *pWith; /* WITH clause that pCte belongs to */
+ Cte *pCte; /* Matched CTE (or NULL if no match) */
+ With *pWith; /* The matching WITH */
assert( pFrom->pTab==0 );
- if( pParse->nErr ){
- return SQLITE_ERROR;
+ if( pParse->pWith==0 ){
+ /* There are no WITH clauses in the stack. No match is possible */
+ return 0;
+ }
+ if( pFrom->zDatabase!=0 ){
+ /* The FROM term contains a schema qualifier (ex: main.t1) and so
+ ** it cannot possibly be a CTE reference. */
+ return 0;
}
-
pCte = searchWith(pParse->pWith, pFrom, &pWith);
if( pCte ){
+ sqlite3 *db = pParse->db;
Table *pTab;
ExprList *pEList;
Select *pSel;
@@ -134624,6 +136081,7 @@ static int withExpand(
int bMayRecursive; /* True if compound joined by UNION [ALL] */
With *pSavedWith; /* Initial value of pParse->pWith */
int iRecTab = -1; /* Cursor for recursive table */
+ CteUse *pCteUse;
/* If pCte->zCteErr is non-NULL at this point, then this is an illegal
** recursive reference to CTE pCte. Leave an error in pParse and return
@@ -134631,21 +136089,39 @@ static int withExpand(
** In this case, proceed. */
if( pCte->zCteErr ){
sqlite3ErrorMsg(pParse, pCte->zCteErr, pCte->zName);
- return SQLITE_ERROR;
+ return 2;
}
- if( cannotBeFunction(pParse, pFrom) ) return SQLITE_ERROR;
+ if( cannotBeFunction(pParse, pFrom) ) return 2;
assert( pFrom->pTab==0 );
- pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
- if( pTab==0 ) return WRC_Abort;
+ pTab = sqlite3DbMallocZero(db, sizeof(Table));
+ if( pTab==0 ) return 2;
+ pCteUse = pCte->pUse;
+ if( pCteUse==0 ){
+ pCte->pUse = pCteUse = sqlite3DbMallocZero(db, sizeof(pCteUse[0]));
+ if( pCteUse==0
+ || sqlite3ParserAddCleanup(pParse,sqlite3DbFree,pCteUse)==0
+ ){
+ sqlite3DbFree(db, pTab);
+ return 2;
+ }
+ pCteUse->eM10d = pCte->eM10d;
+ }
+ pFrom->pTab = pTab;
pTab->nTabRef = 1;
pTab->zName = sqlite3DbStrDup(db, pCte->zName);
pTab->iPKey = -1;
pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid;
pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0);
- if( db->mallocFailed ) return SQLITE_NOMEM_BKPT;
+ if( db->mallocFailed ) return 2;
assert( pFrom->pSelect );
+ pFrom->fg.isCte = 1;
+ pFrom->u2.pCteUse = pCteUse;
+ pCteUse->nUse++;
+ if( pCteUse->nUse>=2 && pCteUse->eM10d==M10d_Any ){
+ pCteUse->eM10d = M10d_Yes;
+ }
/* Check if this is a recursive CTE. */
pRecTerm = pSel = pFrom->pSelect;
@@ -134655,7 +136131,7 @@ static int withExpand(
SrcList *pSrc = pRecTerm->pSrc;
assert( pRecTerm->pPrior!=0 );
for(i=0; i<pSrc->nSrc; i++){
- struct SrcList_item *pItem = &pSrc->a[i];
+ SrcItem *pItem = &pSrc->a[i];
if( pItem->zDatabase==0
&& pItem->zName!=0
&& 0==sqlite3StrICmp(pItem->zName, pCte->zName)
@@ -134667,7 +136143,7 @@ static int withExpand(
sqlite3ErrorMsg(pParse,
"multiple references to recursive table: %s", pCte->zName
);
- return SQLITE_ERROR;
+ return 2;
}
pRecTerm->selFlags |= SF_Recursive;
if( iRecTab<0 ) iRecTab = pParse->nTab++;
@@ -134703,7 +136179,7 @@ static int withExpand(
pCte->zName, pEList->nExpr, pCte->pCols->nExpr
);
pParse->pWith = pSavedWith;
- return SQLITE_ERROR;
+ return 2;
}
pEList = pCte->pCols;
}
@@ -134719,9 +136195,9 @@ static int withExpand(
}
pCte->zCteErr = 0;
pParse->pWith = pSavedWith;
+ return 1; /* Success */
}
-
- return SQLITE_OK;
+ return 0; /* No match */
}
#endif
@@ -134755,7 +136231,7 @@ static void selectPopWith(Walker *pWalker, Select *p){
** SQLITE_OK is returned. Otherwise, if an OOM error is encountered,
** SQLITE_NOMEM.
*/
-SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse *pParse, struct SrcList_item *pFrom){
+SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse *pParse, SrcItem *pFrom){
Select *pSel = pFrom->pSelect;
Table *pTab;
@@ -134803,10 +136279,10 @@ SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse *pParse, struct SrcList_item *pFr
*/
static int selectExpander(Walker *pWalker, Select *p){
Parse *pParse = pWalker->pParse;
- int i, j, k;
+ int i, j, k, rc;
SrcList *pTabList;
ExprList *pEList;
- struct SrcList_item *pFrom;
+ SrcItem *pFrom;
sqlite3 *db = pParse->db;
Expr *pE, *pRight, *pExpr;
u16 selFlags = p->selFlags;
@@ -134842,10 +136318,6 @@ static int selectExpander(Walker *pWalker, Select *p){
assert( pFrom->fg.isRecursive==0 || pFrom->pTab!=0 );
if( pFrom->pTab ) continue;
assert( pFrom->fg.isRecursive==0 );
-#ifndef SQLITE_OMIT_CTE
- if( withExpand(pWalker, pFrom) ) return WRC_Abort;
- if( pFrom->pTab ) {} else
-#endif
if( pFrom->zName==0 ){
#ifndef SQLITE_OMIT_SUBQUERY
Select *pSel = pFrom->pSelect;
@@ -134855,6 +136327,12 @@ static int selectExpander(Walker *pWalker, Select *p){
if( sqlite3WalkSelect(pWalker, pSel) ) return WRC_Abort;
if( sqlite3ExpandSubquery(pParse, pFrom) ) return WRC_Abort;
#endif
+#ifndef SQLITE_OMIT_CTE
+ }else if( (rc = resolveFromTermToCte(pParse, pWalker, pFrom))!=0 ){
+ if( rc>1 ) return WRC_Abort;
+ pTab = pFrom->pTab;
+ assert( pTab!=0 );
+#endif
}else{
/* An ordinary table or view name in the FROM clause */
assert( pFrom->pTab==0 );
@@ -134876,7 +136354,10 @@ static int selectExpander(Walker *pWalker, Select *p){
u8 eCodeOrig = pWalker->eCode;
if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
assert( pFrom->pSelect==0 );
- if( pTab->pSelect && (db->flags & SQLITE_EnableView)==0 ){
+ if( pTab->pSelect
+ && (db->flags & SQLITE_EnableView)==0
+ && pTab->pSchema!=db->aDb[1].pSchema
+ ){
sqlite3ErrorMsg(pParse, "access to view \"%s\" prohibited",
pTab->zName);
}
@@ -134902,7 +136383,7 @@ static int selectExpander(Walker *pWalker, Select *p){
}
/* Locate the index named by the INDEXED BY clause, if any. */
- if( sqlite3IndexedByLookup(pParse, pFrom) ){
+ if( pFrom->fg.isIndexedBy && sqlite3IndexedByLookup(pParse, pFrom) ){
return WRC_Abort;
}
}
@@ -135145,7 +136626,7 @@ static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
Parse *pParse;
int i;
SrcList *pTabList;
- struct SrcList_item *pFrom;
+ SrcItem *pFrom;
assert( p->selFlags & SF_Resolved );
if( p->selFlags & SF_HasTypeInfo ) return;
@@ -135416,7 +136897,9 @@ static void explainSimpleCount(
static int havingToWhereExprCb(Walker *pWalker, Expr *pExpr){
if( pExpr->op!=TK_AND ){
Select *pS = pWalker->u.pSelect;
- if( sqlite3ExprIsConstantOrGroupBy(pWalker->pParse, pExpr, pS->pGroupBy) ){
+ if( sqlite3ExprIsConstantOrGroupBy(pWalker->pParse, pExpr, pS->pGroupBy)
+ && ExprAlwaysFalse(pExpr)==0
+ ){
sqlite3 *db = pWalker->pParse->db;
Expr *pNew = sqlite3Expr(db, TK_INTEGER, "1");
if( pNew ){
@@ -135455,7 +136938,7 @@ static void havingToWhere(Parse *pParse, Select *p){
sWalker.u.pSelect = p;
sqlite3WalkExpr(&sWalker, p->pHaving);
#if SELECTTRACE_ENABLED
- if( sWalker.eCode && (sqlite3_unsupported_selecttrace & 0x100)!=0 ){
+ if( sWalker.eCode && (sqlite3SelectTrace & 0x100)!=0 ){
SELECTTRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
@@ -135467,11 +136950,13 @@ static void havingToWhere(Parse *pParse, Select *p){
** If it is, then return the SrcList_item for the prior view. If it is not,
** then return 0.
*/
-static struct SrcList_item *isSelfJoinView(
+static SrcItem *isSelfJoinView(
SrcList *pTabList, /* Search for self-joins in this FROM clause */
- struct SrcList_item *pThis /* Search for prior reference to this subquery */
+ SrcItem *pThis /* Search for prior reference to this subquery */
){
- struct SrcList_item *pItem;
+ SrcItem *pItem;
+ assert( pThis->pSelect!=0 );
+ if( pThis->pSelect->selFlags & SF_PushDown ) return 0;
for(pItem = pTabList->a; pItem<pThis; pItem++){
Select *pS1;
if( pItem->pSelect==0 ) continue;
@@ -135487,9 +136972,7 @@ static struct SrcList_item *isSelfJoinView(
** names in the same FROM clause. */
continue;
}
- if( sqlite3ExprCompare(0, pThis->pSelect->pWhere, pS1->pWhere, -1)
- || sqlite3ExprCompare(0, pThis->pSelect->pHaving, pS1->pHaving, -1)
- ){
+ if( pItem->pSelect->selFlags & SF_PushDown ){
/* The view was modified by some other optimization such as
** pushDownWhereTerms() */
continue;
@@ -135499,6 +136982,15 @@ static struct SrcList_item *isSelfJoinView(
return 0;
}
+/*
+** Deallocate a single AggInfo object
+*/
+static void agginfoFree(sqlite3 *db, AggInfo *p){
+ sqlite3DbFree(db, p->aCol);
+ sqlite3DbFree(db, p->aFunc);
+ sqlite3DbFreeNN(db, p);
+}
+
#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION
/*
** Attempt to transform a query of the form
@@ -135577,7 +137069,7 @@ static int countOfViewOptimization(Parse *pParse, Select *p){
p->selFlags &= ~SF_Aggregate;
#if SELECTTRACE_ENABLED
- if( sqlite3_unsupported_selecttrace & 0x400 ){
+ if( sqlite3SelectTrace & 0x400 ){
SELECTTRACE(0x400,pParse,p,("After count-of-view optimization:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
@@ -135630,7 +137122,7 @@ SQLITE_PRIVATE int sqlite3Select(
if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
#if SELECTTRACE_ENABLED
SELECTTRACE(1,pParse,p, ("begin processing:\n", pParse->addrExplain));
- if( sqlite3_unsupported_selecttrace & 0x100 ){
+ if( sqlite3SelectTrace & 0x100 ){
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -135644,8 +137136,19 @@ SQLITE_PRIVATE int sqlite3Select(
pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard ||
pDest->eDest==SRT_DistQueue || pDest->eDest==SRT_DistFifo );
/* All of these destinations are also able to ignore the ORDER BY clause */
- sqlite3ExprListDelete(db, p->pOrderBy);
- p->pOrderBy = 0;
+ if( p->pOrderBy ){
+#if SELECTTRACE_ENABLED
+ SELECTTRACE(1,pParse,p, ("dropping superfluous ORDER BY:\n"));
+ if( sqlite3SelectTrace & 0x100 ){
+ sqlite3TreeViewExprList(0, p->pOrderBy, 0, "ORDERBY");
+ }
+#endif
+ sqlite3ParserAddCleanup(pParse,
+ (void(*)(sqlite3*,void*))sqlite3ExprListDelete,
+ p->pOrderBy);
+ testcase( pParse->earlyCleanup );
+ p->pOrderBy = 0;
+ }
p->selFlags &= ~SF_Distinct;
p->selFlags |= SF_NoopOrderBy;
}
@@ -135655,7 +137158,7 @@ SQLITE_PRIVATE int sqlite3Select(
}
assert( p->pEList!=0 );
#if SELECTTRACE_ENABLED
- if( sqlite3_unsupported_selecttrace & 0x104 ){
+ if( sqlite3SelectTrace & 0x104 ){
SELECTTRACE(0x104,pParse,p, ("after name resolution:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
@@ -135666,9 +137169,9 @@ SQLITE_PRIVATE int sqlite3Select(
** In this case, it is an error if the target object (pSrc->a[0]) name
** or alias is duplicated within FROM clause (pSrc->a[1..n]). */
if( p->selFlags & SF_UpdateFrom ){
- struct SrcList_item *p0 = &p->pSrc->a[0];
+ SrcItem *p0 = &p->pSrc->a[0];
for(i=1; i<p->pSrc->nSrc; i++){
- struct SrcList_item *p1 = &p->pSrc->a[i];
+ SrcItem *p1 = &p->pSrc->a[i];
if( p0->pTab==p1->pTab && 0==sqlite3_stricmp(p0->zAlias, p1->zAlias) ){
sqlite3ErrorMsg(pParse,
"target object/alias may not appear in FROM clause: %s",
@@ -135690,7 +137193,7 @@ SQLITE_PRIVATE int sqlite3Select(
goto select_end;
}
#if SELECTTRACE_ENABLED
- if( p->pWin && (sqlite3_unsupported_selecttrace & 0x108)!=0 ){
+ if( p->pWin && (sqlite3SelectTrace & 0x108)!=0 ){
SELECTTRACE(0x104,pParse,p, ("after window rewrite:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
@@ -135706,7 +137209,7 @@ SQLITE_PRIVATE int sqlite3Select(
*/
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
- struct SrcList_item *pItem = &pTabList->a[i];
+ SrcItem *pItem = &pTabList->a[i];
Select *pSub = pItem->pSelect;
Table *pTab = pItem->pTab;
@@ -135797,7 +137300,7 @@ SQLITE_PRIVATE int sqlite3Select(
rc = multiSelect(pParse, p, pDest);
#if SELECTTRACE_ENABLED
SELECTTRACE(0x1,pParse,p,("end compound-select processing\n"));
- if( (sqlite3_unsupported_selecttrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
+ if( (sqlite3SelectTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -135816,7 +137319,7 @@ SQLITE_PRIVATE int sqlite3Select(
&& propagateConstants(pParse, p)
){
#if SELECTTRACE_ENABLED
- if( sqlite3_unsupported_selecttrace & 0x100 ){
+ if( sqlite3SelectTrace & 0x100 ){
SELECTTRACE(0x100,pParse,p,("After constant propagation:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
@@ -135840,7 +137343,8 @@ SQLITE_PRIVATE int sqlite3Select(
** (2) Generate code for all sub-queries
*/
for(i=0; i<pTabList->nSrc; i++){
- struct SrcList_item *pItem = &pTabList->a[i];
+ SrcItem *pItem = &pTabList->a[i];
+ SrcItem *pPrior;
SelectDest dest;
Select *pSub;
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
@@ -135900,16 +137404,18 @@ SQLITE_PRIVATE int sqlite3Select(
** inside the subquery. This can help the subquery to run more efficiently.
*/
if( OptimizationEnabled(db, SQLITE_PushDown)
+ && (pItem->fg.isCte==0 || pItem->u2.pCteUse->eM10d!=M10d_Yes)
&& pushDownWhereTerms(pParse, pSub, p->pWhere, pItem->iCursor,
(pItem->fg.jointype & JT_OUTER)!=0)
){
#if SELECTTRACE_ENABLED
- if( sqlite3_unsupported_selecttrace & 0x100 ){
+ if( sqlite3SelectTrace & 0x100 ){
SELECTTRACE(0x100,pParse,p,
("After WHERE-clause push-down into subquery %d:\n", pSub->selId));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
+ assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 );
}else{
SELECTTRACE(0x100,pParse,p,("Push-down not possible\n"));
}
@@ -135919,16 +137425,18 @@ SQLITE_PRIVATE int sqlite3Select(
/* Generate code to implement the subquery
**
- ** The subquery is implemented as a co-routine if the subquery is
- ** guaranteed to be the outer loop (so that it does not need to be
- ** computed more than once)
+ ** The subquery is implemented as a co-routine if:
+ ** (1) the subquery is guaranteed to be the outer loop (so that
+ ** it does not need to be computed more than once), and
+ ** (2) the subquery is not a CTE that should be materialized
**
- ** TODO: Are there other reasons beside (1) to use a co-routine
+ ** TODO: Are there other reasons beside (1) and (2) to use a co-routine
** implementation?
*/
if( i==0
&& (pTabList->nSrc==1
|| (pTabList->a[1].fg.jointype&(JT_LEFT|JT_CROSS))!=0) /* (1) */
+ && (pItem->fg.isCte==0 || pItem->u2.pCteUse->eM10d!=M10d_Yes) /* (2) */
){
/* Implement a co-routine that will return a single row of the result
** set on each invocation.
@@ -135948,16 +137456,30 @@ SQLITE_PRIVATE int sqlite3Select(
sqlite3VdbeEndCoroutine(v, pItem->regReturn);
sqlite3VdbeJumpHere(v, addrTop-1);
sqlite3ClearTempRegCache(pParse);
- }else{
- /* Generate a subroutine that will fill an ephemeral table with
- ** the content of this subquery. pItem->addrFillSub will point
- ** to the address of the generated subroutine. pItem->regReturn
- ** is a register allocated to hold the subroutine return address
- */
+ }else if( pItem->fg.isCte && pItem->u2.pCteUse->addrM9e>0 ){
+ /* This is a CTE for which materialization code has already been
+ ** generated. Invoke the subroutine to compute the materialization,
+ ** the make the pItem->iCursor be a copy of the ephemerial table that
+ ** holds the result of the materialization. */
+ CteUse *pCteUse = pItem->u2.pCteUse;
+ sqlite3VdbeAddOp2(v, OP_Gosub, pCteUse->regRtn, pCteUse->addrM9e);
+ if( pItem->iCursor!=pCteUse->iCur ){
+ sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pCteUse->iCur);
+ }
+ pSub->nSelectRow = pCteUse->nRowEst;
+ }else if( (pPrior = isSelfJoinView(pTabList, pItem))!=0 ){
+ /* This view has already been materialized by a prior entry in
+ ** this same FROM clause. Reuse it. */
+ if( pPrior->addrFillSub ){
+ sqlite3VdbeAddOp2(v, OP_Gosub, pPrior->regReturn, pPrior->addrFillSub);
+ }
+ sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pPrior->iCursor);
+ pSub->nSelectRow = pPrior->pSelect->nSelectRow;
+ }else{
+ /* Generate a subroutine that will materialize the view. */
int topAddr;
int onceAddr = 0;
int retAddr;
- struct SrcList_item *pPrior;
testcase( pItem->addrFillSub==0 ); /* Ticket c52b09c7f38903b1311 */
pItem->regReturn = ++pParse->nMem;
@@ -135972,22 +137494,22 @@ SQLITE_PRIVATE int sqlite3Select(
}else{
VdbeNoopComment((v, "materialize \"%s\"", pItem->pTab->zName));
}
- pPrior = isSelfJoinView(pTabList, pItem);
- if( pPrior ){
- sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pPrior->iCursor);
- assert( pPrior->pSelect!=0 );
- pSub->nSelectRow = pPrior->pSelect->nSelectRow;
- }else{
- sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
- ExplainQueryPlan((pParse, 1, "MATERIALIZE %u", pSub->selId));
- sqlite3Select(pParse, pSub, &dest);
- }
+ sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
+ ExplainQueryPlan((pParse, 1, "MATERIALIZE %u", pSub->selId));
+ sqlite3Select(pParse, pSub, &dest);
pItem->pTab->nRowLogEst = pSub->nSelectRow;
if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr);
retAddr = sqlite3VdbeAddOp1(v, OP_Return, pItem->regReturn);
VdbeComment((v, "end %s", pItem->pTab->zName));
sqlite3VdbeChangeP1(v, topAddr, retAddr);
sqlite3ClearTempRegCache(pParse);
+ if( pItem->fg.isCte ){
+ CteUse *pCteUse = pItem->u2.pCteUse;
+ pCteUse->addrM9e = pItem->addrFillSub;
+ pCteUse->regRtn = pItem->regReturn;
+ pCteUse->iCur = pItem->iCursor;
+ pCteUse->nRowEst = pSub->nSelectRow;
+ }
}
if( db->mallocFailed ) goto select_end;
pParse->nHeight -= sqlite3SelectExprHeight(p);
@@ -136004,7 +137526,7 @@ SQLITE_PRIVATE int sqlite3Select(
sDistinct.isTnct = (p->selFlags & SF_Distinct)!=0;
#if SELECTTRACE_ENABLED
- if( sqlite3_unsupported_selecttrace & 0x400 ){
+ if( sqlite3SelectTrace & 0x400 ){
SELECTTRACE(0x400,pParse,p,("After all FROM-clause analysis:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
@@ -136040,7 +137562,7 @@ SQLITE_PRIVATE int sqlite3Select(
assert( sDistinct.isTnct );
#if SELECTTRACE_ENABLED
- if( sqlite3_unsupported_selecttrace & 0x400 ){
+ if( sqlite3SelectTrace & 0x400 ){
SELECTTRACE(0x400,pParse,p,("Transform DISTINCT into GROUP BY:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
@@ -136132,6 +137654,7 @@ SQLITE_PRIVATE int sqlite3Select(
sSort.pOrderBy = 0;
}
}
+ SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
/* If sorting index that was created by a prior OP_OpenEphemeral
** instruction ended up not being needed, then change the OP_OpenEphemeral
@@ -136170,6 +137693,7 @@ SQLITE_PRIVATE int sqlite3Select(
/* End the database scan loop.
*/
+ SELECTTRACE(1,pParse,p,("WhereEnd\n"));
sqlite3WhereEnd(pWInfo);
}
}else{
@@ -136240,11 +137764,14 @@ SQLITE_PRIVATE int sqlite3Select(
** SELECT statement.
*/
pAggInfo = sqlite3DbMallocZero(db, sizeof(*pAggInfo) );
- if( pAggInfo==0 ){
+ if( pAggInfo ){
+ sqlite3ParserAddCleanup(pParse,
+ (void(*)(sqlite3*,void*))agginfoFree, pAggInfo);
+ testcase( pParse->earlyCleanup );
+ }
+ if( db->mallocFailed ){
goto select_end;
}
- pAggInfo->pNext = pParse->pAggList;
- pParse->pAggList = pAggInfo;
pAggInfo->selId = p->selId;
memset(&sNC, 0, sizeof(sNC));
sNC.pParse = pParse;
@@ -136288,10 +137815,14 @@ SQLITE_PRIVATE int sqlite3Select(
pAggInfo->mxReg = pParse->nMem;
if( db->mallocFailed ) goto select_end;
#if SELECTTRACE_ENABLED
- if( sqlite3_unsupported_selecttrace & 0x400 ){
+ if( sqlite3SelectTrace & 0x400 ){
int ii;
SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", pAggInfo));
sqlite3TreeViewSelect(0, p, 0);
+ if( minMaxFlag ){
+ sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag);
+ sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY");
+ }
for(ii=0; ii<pAggInfo->nColumn; ii++){
sqlite3DebugPrintf("agg-column[%d] iMem=%d\n",
ii, pAggInfo->aCol[ii].iMem);
@@ -136359,6 +137890,7 @@ SQLITE_PRIVATE int sqlite3Select(
WHERE_GROUPBY | (orderByGrp ? WHERE_SORTBYGROUP : 0), 0
);
if( pWInfo==0 ) goto select_end;
+ SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
if( sqlite3WhereIsOrdered(pWInfo)==pGroupBy->nExpr ){
/* The optimizer is able to deliver rows in group by order so
** we do not have to sort. The OP_OpenEphemeral table will be
@@ -136407,6 +137939,7 @@ SQLITE_PRIVATE int sqlite3Select(
sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord);
sqlite3ReleaseTempReg(pParse, regRecord);
sqlite3ReleaseTempRange(pParse, regBase, nCol);
+ SELECTTRACE(1,pParse,p,("WhereEnd\n"));
sqlite3WhereEnd(pWInfo);
pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++;
sortOut = sqlite3GetTempReg(pParse);
@@ -136481,9 +138014,10 @@ SQLITE_PRIVATE int sqlite3Select(
/* End of the loop
*/
if( groupBySort ){
- sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx, addrTopOfLoop);
+ sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx,addrTopOfLoop);
VdbeCoverage(v);
}else{
+ SELECTTRACE(1,pParse,p,("WhereEnd\n"));
sqlite3WhereEnd(pWInfo);
sqlite3VdbeChangeToNoop(v, addrSortingIdx);
}
@@ -136593,7 +138127,6 @@ SQLITE_PRIVATE int sqlite3Select(
explainSimpleCount(pParse, pTab, pBest);
}else{
int regAcc = 0; /* "populate accumulators" flag */
- int addrSkip;
/* If there are accumulator registers but no min() or max() functions
** without FILTER clauses, allocate register regAcc. Register regAcc
@@ -136640,12 +138173,13 @@ SQLITE_PRIVATE int sqlite3Select(
if( pWInfo==0 ){
goto select_end;
}
+ SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
updateAccumulator(pParse, regAcc, pAggInfo);
if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc);
- addrSkip = sqlite3WhereOrderByLimitOptLabel(pWInfo);
- if( addrSkip!=sqlite3WhereContinueLabel(pWInfo) ){
- sqlite3VdbeGoto(v, addrSkip);
+ if( minMaxFlag ){
+ sqlite3WhereMinMaxOptEarlyOut(v, pWInfo);
}
+ SELECTTRACE(1,pParse,p,("WhereEnd\n"));
sqlite3WhereEnd(pWInfo);
finalizeAggFunctions(pParse, pAggInfo);
}
@@ -136690,15 +138224,13 @@ select_end:
if( pAggInfo && !db->mallocFailed ){
for(i=0; i<pAggInfo->nColumn; i++){
Expr *pExpr = pAggInfo->aCol[i].pCExpr;
- assert( pExpr!=0 || db->mallocFailed );
- if( pExpr==0 ) continue;
+ assert( pExpr!=0 );
assert( pExpr->pAggInfo==pAggInfo );
assert( pExpr->iAgg==i );
}
for(i=0; i<pAggInfo->nFunc; i++){
Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
- assert( pExpr!=0 || db->mallocFailed );
- if( pExpr==0 ) continue;
+ assert( pExpr!=0 );
assert( pExpr->pAggInfo==pAggInfo );
assert( pExpr->iAgg==i );
}
@@ -136707,7 +138239,7 @@ select_end:
#if SELECTTRACE_ENABLED
SELECTTRACE(0x1,pParse,p,("end processing\n"));
- if( (sqlite3_unsupported_selecttrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
+ if( (sqlite3SelectTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -136968,28 +138500,39 @@ SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3 *db, TriggerStep *pTriggerS
** pTab as well as the triggers lised in pTab->pTrigger.
*/
SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *pParse, Table *pTab){
- Schema * const pTmpSchema = pParse->db->aDb[1].pSchema;
- Trigger *pList = 0; /* List of triggers to return */
+ Schema *pTmpSchema; /* Schema of the pTab table */
+ Trigger *pList; /* List of triggers to return */
+ HashElem *p; /* Loop variable for TEMP triggers */
if( pParse->disableTriggers ){
return 0;
}
-
+ pTmpSchema = pParse->db->aDb[1].pSchema;
+ p = sqliteHashFirst(&pTmpSchema->trigHash);
+ if( p==0 ){
+ return pTab->pTrigger;
+ }
+ pList = pTab->pTrigger;
if( pTmpSchema!=pTab->pSchema ){
- HashElem *p;
- assert( sqlite3SchemaMutexHeld(pParse->db, 0, pTmpSchema) );
- for(p=sqliteHashFirst(&pTmpSchema->trigHash); p; p=sqliteHashNext(p)){
+ while( p ){
Trigger *pTrig = (Trigger *)sqliteHashData(p);
if( pTrig->pTabSchema==pTab->pSchema
&& 0==sqlite3StrICmp(pTrig->table, pTab->zName)
){
- pTrig->pNext = (pList ? pList : pTab->pTrigger);
+ pTrig->pNext = pList;
+ pList = pTrig;
+ }else if( pTrig->op==TK_RETURNING ){
+ assert( pParse->bReturning );
+ assert( &(pParse->u1.pReturning->retTrig) == pTrig );
+ pTrig->table = pTab->zName;
+ pTrig->pTabSchema = pTab->pSchema;
+ pTrig->pNext = pList;
pList = pTrig;
}
+ p = sqliteHashNext(p);
}
}
-
- return (pList ? pList : pTab->pTrigger);
+ return pList;
}
/*
@@ -137265,7 +138808,7 @@ SQLITE_PRIVATE void sqlite3FinishTrigger(
sqlite3DbFree(db, z);
sqlite3ChangeCookie(pParse, iDb);
sqlite3VdbeAddParseSchemaOp(v, iDb,
- sqlite3MPrintf(db, "type='trigger' AND name='%q'", zName));
+ sqlite3MPrintf(db, "type='trigger' AND name='%q'", zName), 0);
}
if( db->init.busy ){
@@ -137478,7 +139021,7 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(
** Recursively delete a Trigger structure
*/
SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3 *db, Trigger *pTrigger){
- if( pTrigger==0 ) return;
+ if( pTrigger==0 || pTrigger->bReturning ) return;
sqlite3DeleteTriggerStep(db, pTrigger->step_list);
sqlite3DbFree(db, pTrigger->zName);
sqlite3DbFree(db, pTrigger->table);
@@ -137643,15 +139186,53 @@ SQLITE_PRIVATE Trigger *sqlite3TriggersExist(
Trigger *pList = 0;
Trigger *p;
- if( (pParse->db->flags & SQLITE_EnableTrigger)!=0 ){
- pList = sqlite3TriggerList(pParse, pTab);
- }
- assert( pList==0 || IsVirtual(pTab)==0 );
- for(p=pList; p; p=p->pNext){
- if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){
- mask |= p->tr_tm;
+ pList = sqlite3TriggerList(pParse, pTab);
+ assert( pList==0 || IsVirtual(pTab)==0
+ || (pList->bReturning && pList->pNext==0) );
+ if( pList!=0 ){
+ p = pList;
+ if( (pParse->db->flags & SQLITE_EnableTrigger)==0
+ && pTab->pTrigger!=0
+ ){
+ /* The SQLITE_DBCONFIG_ENABLE_TRIGGER setting is off. That means that
+ ** only TEMP triggers are allowed. Truncate the pList so that it
+ ** includes only TEMP triggers */
+ if( pList==pTab->pTrigger ){
+ pList = 0;
+ goto exit_triggers_exist;
+ }
+ while( ALWAYS(p->pNext) && p->pNext!=pTab->pTrigger ) p = p->pNext;
+ p->pNext = 0;
+ p = pList;
}
+ do{
+ if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){
+ mask |= p->tr_tm;
+ }else if( p->op==TK_RETURNING ){
+ /* The first time a RETURNING trigger is seen, the "op" value tells
+ ** us what time of trigger it should be. */
+ assert( sqlite3IsToplevel(pParse) );
+ p->op = op;
+ if( IsVirtual(pTab) ){
+ if( op!=TK_INSERT ){
+ sqlite3ErrorMsg(pParse,
+ "%s RETURNING is not available on virtual tables",
+ op==TK_DELETE ? "DELETE" : "UPDATE");
+ }
+ p->tr_tm = TRIGGER_BEFORE;
+ }else{
+ p->tr_tm = TRIGGER_AFTER;
+ }
+ mask |= p->tr_tm;
+ }else if( p->bReturning && p->op==TK_INSERT && op==TK_UPDATE
+ && sqlite3IsToplevel(pParse) ){
+ /* Also fire a RETURNING trigger for an UPSERT */
+ mask |= p->tr_tm;
+ }
+ p = p->pNext;
+ }while( p );
}
+exit_triggers_exist:
if( pMask ){
*pMask = mask;
}
@@ -137694,6 +139275,111 @@ SQLITE_PRIVATE SrcList *sqlite3TriggerStepSrc(
return pSrc;
}
+/* The input list pList is the list of result set terms from a RETURNING
+** clause. The table that we are returning from is pTab.
+**
+** This routine makes a copy of the pList, and at the same time expands
+** any "*" wildcards to be the complete set of columns from pTab.
+*/
+static ExprList *sqlite3ExpandReturning(
+ Parse *pParse, /* Parsing context */
+ ExprList *pList, /* The arguments to RETURNING */
+ Table *pTab /* The table being updated */
+){
+ ExprList *pNew = 0;
+ sqlite3 *db = pParse->db;
+ int i;
+
+ for(i=0; i<pList->nExpr; i++){
+ Expr *pOldExpr = pList->a[i].pExpr;
+ if( ALWAYS(pOldExpr!=0) && pOldExpr->op==TK_ASTERISK ){
+ int jj;
+ for(jj=0; jj<pTab->nCol; jj++){
+ Expr *pNewExpr;
+ if( IsHiddenColumn(pTab->aCol+jj) ) continue;
+ pNewExpr = sqlite3Expr(db, TK_ID, pTab->aCol[jj].zName);
+ pNew = sqlite3ExprListAppend(pParse, pNew, pNewExpr);
+ if( !db->mallocFailed ){
+ struct ExprList_item *pItem = &pNew->a[pNew->nExpr-1];
+ pItem->zEName = sqlite3DbStrDup(db, pTab->aCol[jj].zName);
+ pItem->eEName = ENAME_NAME;
+ }
+ }
+ }else{
+ Expr *pNewExpr = sqlite3ExprDup(db, pOldExpr, 0);
+ pNew = sqlite3ExprListAppend(pParse, pNew, pNewExpr);
+ if( !db->mallocFailed && ALWAYS(pList->a[i].zEName!=0) ){
+ struct ExprList_item *pItem = &pNew->a[pNew->nExpr-1];
+ pItem->zEName = sqlite3DbStrDup(db, pList->a[i].zEName);
+ pItem->eEName = pList->a[i].eEName;
+ }
+ }
+ }
+ if( !db->mallocFailed ){
+ Vdbe *v = pParse->pVdbe;
+ assert( v!=0 );
+ sqlite3VdbeSetNumCols(v, pNew->nExpr);
+ for(i=0; i<pNew->nExpr; i++){
+ sqlite3VdbeSetColName(v, i, COLNAME_NAME, pNew->a[i].zEName,
+ SQLITE_TRANSIENT);
+ }
+ }
+ return pNew;
+}
+
+/*
+** Generate code for the RETURNING trigger. Unlike other triggers
+** that invoke a subprogram in the bytecode, the code for RETURNING
+** is generated in-line.
+*/
+static void codeReturningTrigger(
+ Parse *pParse, /* Parse context */
+ Trigger *pTrigger, /* The trigger step that defines the RETURNING */
+ Table *pTab, /* The table to code triggers from */
+ int regIn /* The first in an array of registers */
+){
+ Vdbe *v = pParse->pVdbe;
+ ExprList *pNew;
+ Returning *pReturning;
+
+ assert( v!=0 );
+ assert( pParse->bReturning );
+ pReturning = pParse->u1.pReturning;
+ assert( pTrigger == &(pReturning->retTrig) );
+ pNew = sqlite3ExpandReturning(pParse, pReturning->pReturnEL, pTab);
+ if( pNew ){
+ NameContext sNC;
+ memset(&sNC, 0, sizeof(sNC));
+ if( pReturning->nRetCol==0 ){
+ pReturning->nRetCol = pNew->nExpr;
+ pReturning->iRetCur = pParse->nTab++;
+ }
+ sNC.pParse = pParse;
+ sNC.uNC.iBaseReg = regIn;
+ sNC.ncFlags = NC_UBaseReg;
+ pParse->eTriggerOp = pTrigger->op;
+ pParse->pTriggerTab = pTab;
+ if( sqlite3ResolveExprListNames(&sNC, pNew)==SQLITE_OK ){
+ int i;
+ int nCol = pNew->nExpr;
+ int reg = pParse->nMem+1;
+ pParse->nMem += nCol+2;
+ pReturning->iRetReg = reg;
+ for(i=0; i<nCol; i++){
+ sqlite3ExprCodeFactorable(pParse, pNew->a[i].pExpr, reg+i);
+ }
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, reg, i, reg+i);
+ sqlite3VdbeAddOp2(v, OP_NewRowid, pReturning->iRetCur, reg+i+1);
+ sqlite3VdbeAddOp3(v, OP_Insert, pReturning->iRetCur, reg+i, reg+i+1);
+ }
+ sqlite3ExprListDelete(pParse->db, pNew);
+ pParse->eTriggerOp = 0;
+ pParse->pTriggerTab = 0;
+ }
+}
+
+
+
/*
** Generate VDBE code for the statements inside the body of a single
** trigger.
@@ -137743,6 +139429,7 @@ static int codeTriggerProgram(
sqlite3ExprDup(db, pStep->pWhere, 0),
pParse->eOrconf, 0, 0, 0
);
+ sqlite3VdbeAddOp0(v, OP_ResetCount);
break;
}
case TK_INSERT: {
@@ -137753,6 +139440,7 @@ static int codeTriggerProgram(
pParse->eOrconf,
sqlite3UpsertDup(db, pStep->pUpsert)
);
+ sqlite3VdbeAddOp0(v, OP_ResetCount);
break;
}
case TK_DELETE: {
@@ -137760,6 +139448,7 @@ static int codeTriggerProgram(
sqlite3TriggerStepSrc(pParse, pStep),
sqlite3ExprDup(db, pStep->pWhere, 0), 0, 0
);
+ sqlite3VdbeAddOp0(v, OP_ResetCount);
break;
}
default: assert( pStep->op==TK_SELECT ); {
@@ -137771,9 +139460,6 @@ static int codeTriggerProgram(
break;
}
}
- if( pStep->op!=TK_SELECT ){
- sqlite3VdbeAddOp0(v, OP_ResetCount);
- }
}
return 0;
@@ -137920,7 +139606,6 @@ static TriggerPrg *codeRowTrigger(
sqlite3VdbeDelete(v);
}
- assert( !pSubParse->pAinc && !pSubParse->pZombieTab );
assert( !pSubParse->pTriggerPrg && !pSubParse->nMaxArg );
sqlite3ParserReset(pSubParse);
sqlite3StackFree(db, pSubParse);
@@ -138022,7 +139707,7 @@ SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(
** ... ...
** reg+N OLD.* value of right-most column of pTab
** reg+N+1 NEW.rowid
-** reg+N+2 OLD.* value of left-most column of pTab
+** reg+N+2 NEW.* value of left-most column of pTab
** ... ...
** reg+N+N+1 NEW.* value of right-most column of pTab
**
@@ -138067,12 +139752,20 @@ SQLITE_PRIVATE void sqlite3CodeRowTrigger(
assert( p->pSchema==p->pTabSchema
|| p->pSchema==pParse->db->aDb[1].pSchema );
- /* Determine whether we should code this trigger */
- if( p->op==op
+ /* Determine whether we should code this trigger. One of two choices:
+ ** 1. The trigger is an exact match to the current DML statement
+ ** 2. This is a RETURNING trigger for INSERT but we are currently
+ ** doing the UPDATE part of an UPSERT.
+ */
+ if( (p->op==op || (p->bReturning && p->op==TK_INSERT && op==TK_UPDATE))
&& p->tr_tm==tr_tm
&& checkColumnOverlap(p->pColumns, pChanges)
){
- sqlite3CodeRowTriggerDirect(pParse, p, pTab, reg, orconf, ignoreJump);
+ if( !p->bReturning ){
+ sqlite3CodeRowTriggerDirect(pParse, p, pTab, reg, orconf, ignoreJump);
+ }else if( sqlite3IsToplevel(pParse) ){
+ codeReturningTrigger(pParse, p, pTab, reg);
+ }
}
}
}
@@ -138117,13 +139810,18 @@ SQLITE_PRIVATE u32 sqlite3TriggerColmask(
assert( isNew==1 || isNew==0 );
for(p=pTrigger; p; p=p->pNext){
- if( p->op==op && (tr_tm&p->tr_tm)
+ if( p->op==op
+ && (tr_tm&p->tr_tm)
&& checkColumnOverlap(p->pColumns,pChanges)
){
- TriggerPrg *pPrg;
- pPrg = getRowTrigger(pParse, p, pTab, orconf);
- if( pPrg ){
- mask |= pPrg->aColmask[isNew];
+ if( p->bReturning ){
+ mask = 0xffffffff;
+ }else{
+ TriggerPrg *pPrg;
+ pPrg = getRowTrigger(pParse, p, pTab, orconf);
+ if( pPrg ){
+ mask |= pPrg->aColmask[isNew];
+ }
}
}
}
@@ -138780,6 +140478,7 @@ SQLITE_PRIVATE void sqlite3Update(
if( (db->flags&SQLITE_CountRows)!=0
&& !pParse->pTriggerTab
&& !pParse->nested
+ && !pParse->bReturning
&& pUpsert==0
){
regRowCount = ++pParse->nMem;
@@ -139243,7 +140942,7 @@ SQLITE_PRIVATE void sqlite3Update(
** that information.
*/
if( regRowCount ){
- sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
+ sqlite3VdbeAddOp2(v, OP_ChngCntRow, regRowCount, 1);
sqlite3VdbeSetNumCols(v, 1);
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows updated", SQLITE_STATIC);
}
@@ -139478,15 +141177,22 @@ static void updateVirtualTable(
/*
** Free a list of Upsert objects
*/
-SQLITE_PRIVATE void sqlite3UpsertDelete(sqlite3 *db, Upsert *p){
- if( p ){
+static void SQLITE_NOINLINE upsertDelete(sqlite3 *db, Upsert *p){
+ do{
+ Upsert *pNext = p->pNextUpsert;
sqlite3ExprListDelete(db, p->pUpsertTarget);
sqlite3ExprDelete(db, p->pUpsertTargetWhere);
sqlite3ExprListDelete(db, p->pUpsertSet);
sqlite3ExprDelete(db, p->pUpsertWhere);
+ sqlite3DbFree(db, p->pToFree);
sqlite3DbFree(db, p);
- }
+ p = pNext;
+ }while( p );
}
+SQLITE_PRIVATE void sqlite3UpsertDelete(sqlite3 *db, Upsert *p){
+ if( p ) upsertDelete(db, p);
+}
+
/*
** Duplicate an Upsert object.
@@ -139497,7 +141203,8 @@ SQLITE_PRIVATE Upsert *sqlite3UpsertDup(sqlite3 *db, Upsert *p){
sqlite3ExprListDup(db, p->pUpsertTarget, 0),
sqlite3ExprDup(db, p->pUpsertTargetWhere, 0),
sqlite3ExprListDup(db, p->pUpsertSet, 0),
- sqlite3ExprDup(db, p->pUpsertWhere, 0)
+ sqlite3ExprDup(db, p->pUpsertWhere, 0),
+ sqlite3UpsertDup(db, p->pNextUpsert)
);
}
@@ -139509,22 +141216,25 @@ SQLITE_PRIVATE Upsert *sqlite3UpsertNew(
ExprList *pTarget, /* Target argument to ON CONFLICT, or NULL */
Expr *pTargetWhere, /* Optional WHERE clause on the target */
ExprList *pSet, /* UPDATE columns, or NULL for a DO NOTHING */
- Expr *pWhere /* WHERE clause for the ON CONFLICT UPDATE */
+ Expr *pWhere, /* WHERE clause for the ON CONFLICT UPDATE */
+ Upsert *pNext /* Next ON CONFLICT clause in the list */
){
Upsert *pNew;
- pNew = sqlite3DbMallocRaw(db, sizeof(Upsert));
+ pNew = sqlite3DbMallocZero(db, sizeof(Upsert));
if( pNew==0 ){
sqlite3ExprListDelete(db, pTarget);
sqlite3ExprDelete(db, pTargetWhere);
sqlite3ExprListDelete(db, pSet);
sqlite3ExprDelete(db, pWhere);
+ sqlite3UpsertDelete(db, pNext);
return 0;
}else{
pNew->pUpsertTarget = pTarget;
pNew->pUpsertTargetWhere = pTargetWhere;
pNew->pUpsertSet = pSet;
pNew->pUpsertWhere = pWhere;
- pNew->pUpsertIdx = 0;
+ pNew->isDoUpdate = pSet!=0;
+ pNew->pNextUpsert = pNext;
}
return pNew;
}
@@ -139549,6 +141259,7 @@ SQLITE_PRIVATE int sqlite3UpsertAnalyzeTarget(
Expr *pTerm; /* One term of the conflict-target clause */
NameContext sNC; /* Context for resolving symbolic names */
Expr sCol[2]; /* Index column converted into an Expr */
+ int nClause = 0; /* Counter of ON CONFLICT clauses */
assert( pTabList->nSrc==1 );
assert( pTabList->a[0].pTab!=0 );
@@ -139562,87 +141273,131 @@ SQLITE_PRIVATE int sqlite3UpsertAnalyzeTarget(
memset(&sNC, 0, sizeof(sNC));
sNC.pParse = pParse;
sNC.pSrcList = pTabList;
- rc = sqlite3ResolveExprListNames(&sNC, pUpsert->pUpsertTarget);
- if( rc ) return rc;
- rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertTargetWhere);
- if( rc ) return rc;
+ for(; pUpsert && pUpsert->pUpsertTarget;
+ pUpsert=pUpsert->pNextUpsert, nClause++){
+ rc = sqlite3ResolveExprListNames(&sNC, pUpsert->pUpsertTarget);
+ if( rc ) return rc;
+ rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertTargetWhere);
+ if( rc ) return rc;
- /* Check to see if the conflict target matches the rowid. */
- pTab = pTabList->a[0].pTab;
- pTarget = pUpsert->pUpsertTarget;
- iCursor = pTabList->a[0].iCursor;
- if( HasRowid(pTab)
- && pTarget->nExpr==1
- && (pTerm = pTarget->a[0].pExpr)->op==TK_COLUMN
- && pTerm->iColumn==XN_ROWID
- ){
- /* The conflict-target is the rowid of the primary table */
- assert( pUpsert->pUpsertIdx==0 );
- return SQLITE_OK;
- }
+ /* Check to see if the conflict target matches the rowid. */
+ pTab = pTabList->a[0].pTab;
+ pTarget = pUpsert->pUpsertTarget;
+ iCursor = pTabList->a[0].iCursor;
+ if( HasRowid(pTab)
+ && pTarget->nExpr==1
+ && (pTerm = pTarget->a[0].pExpr)->op==TK_COLUMN
+ && pTerm->iColumn==XN_ROWID
+ ){
+ /* The conflict-target is the rowid of the primary table */
+ assert( pUpsert->pUpsertIdx==0 );
+ continue;
+ }
- /* Initialize sCol[0..1] to be an expression parse tree for a
- ** single column of an index. The sCol[0] node will be the TK_COLLATE
- ** operator and sCol[1] will be the TK_COLUMN operator. Code below
- ** will populate the specific collation and column number values
- ** prior to comparing against the conflict-target expression.
- */
- memset(sCol, 0, sizeof(sCol));
- sCol[0].op = TK_COLLATE;
- sCol[0].pLeft = &sCol[1];
- sCol[1].op = TK_COLUMN;
- sCol[1].iTable = pTabList->a[0].iCursor;
+ /* Initialize sCol[0..1] to be an expression parse tree for a
+ ** single column of an index. The sCol[0] node will be the TK_COLLATE
+ ** operator and sCol[1] will be the TK_COLUMN operator. Code below
+ ** will populate the specific collation and column number values
+ ** prior to comparing against the conflict-target expression.
+ */
+ memset(sCol, 0, sizeof(sCol));
+ sCol[0].op = TK_COLLATE;
+ sCol[0].pLeft = &sCol[1];
+ sCol[1].op = TK_COLUMN;
+ sCol[1].iTable = pTabList->a[0].iCursor;
- /* Check for matches against other indexes */
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- int ii, jj, nn;
- if( !IsUniqueIndex(pIdx) ) continue;
- if( pTarget->nExpr!=pIdx->nKeyCol ) continue;
- if( pIdx->pPartIdxWhere ){
- if( pUpsert->pUpsertTargetWhere==0 ) continue;
- if( sqlite3ExprCompare(pParse, pUpsert->pUpsertTargetWhere,
- pIdx->pPartIdxWhere, iCursor)!=0 ){
- continue;
+ /* Check for matches against other indexes */
+ for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
+ int ii, jj, nn;
+ if( !IsUniqueIndex(pIdx) ) continue;
+ if( pTarget->nExpr!=pIdx->nKeyCol ) continue;
+ if( pIdx->pPartIdxWhere ){
+ if( pUpsert->pUpsertTargetWhere==0 ) continue;
+ if( sqlite3ExprCompare(pParse, pUpsert->pUpsertTargetWhere,
+ pIdx->pPartIdxWhere, iCursor)!=0 ){
+ continue;
+ }
}
- }
- nn = pIdx->nKeyCol;
- for(ii=0; ii<nn; ii++){
- Expr *pExpr;
- sCol[0].u.zToken = (char*)pIdx->azColl[ii];
- if( pIdx->aiColumn[ii]==XN_EXPR ){
- assert( pIdx->aColExpr!=0 );
- assert( pIdx->aColExpr->nExpr>ii );
- pExpr = pIdx->aColExpr->a[ii].pExpr;
- if( pExpr->op!=TK_COLLATE ){
- sCol[0].pLeft = pExpr;
+ nn = pIdx->nKeyCol;
+ for(ii=0; ii<nn; ii++){
+ Expr *pExpr;
+ sCol[0].u.zToken = (char*)pIdx->azColl[ii];
+ if( pIdx->aiColumn[ii]==XN_EXPR ){
+ assert( pIdx->aColExpr!=0 );
+ assert( pIdx->aColExpr->nExpr>ii );
+ pExpr = pIdx->aColExpr->a[ii].pExpr;
+ if( pExpr->op!=TK_COLLATE ){
+ sCol[0].pLeft = pExpr;
+ pExpr = &sCol[0];
+ }
+ }else{
+ sCol[0].pLeft = &sCol[1];
+ sCol[1].iColumn = pIdx->aiColumn[ii];
pExpr = &sCol[0];
}
- }else{
- sCol[0].pLeft = &sCol[1];
- sCol[1].iColumn = pIdx->aiColumn[ii];
- pExpr = &sCol[0];
- }
- for(jj=0; jj<nn; jj++){
- if( sqlite3ExprCompare(pParse, pTarget->a[jj].pExpr, pExpr,iCursor)<2 ){
- break; /* Column ii of the index matches column jj of target */
+ for(jj=0; jj<nn; jj++){
+ if( sqlite3ExprCompare(pParse,pTarget->a[jj].pExpr,pExpr,iCursor)<2 ){
+ break; /* Column ii of the index matches column jj of target */
+ }
+ }
+ if( jj>=nn ){
+ /* The target contains no match for column jj of the index */
+ break;
}
}
- if( jj>=nn ){
- /* The target contains no match for column jj of the index */
- break;
+ if( ii<nn ){
+ /* Column ii of the index did not match any term of the conflict target.
+ ** Continue the search with the next index. */
+ continue;
}
+ pUpsert->pUpsertIdx = pIdx;
+ break;
}
- if( ii<nn ){
- /* Column ii of the index did not match any term of the conflict target.
- ** Continue the search with the next index. */
- continue;
+ if( pUpsert->pUpsertIdx==0 ){
+ char zWhich[16];
+ if( nClause==0 && pUpsert->pNextUpsert==0 ){
+ zWhich[0] = 0;
+ }else{
+ sqlite3_snprintf(sizeof(zWhich),zWhich,"%r ", nClause+1);
+ }
+ sqlite3ErrorMsg(pParse, "%sON CONFLICT clause does not match any "
+ "PRIMARY KEY or UNIQUE constraint", zWhich);
+ return SQLITE_ERROR;
}
- pUpsert->pUpsertIdx = pIdx;
- return SQLITE_OK;
}
- sqlite3ErrorMsg(pParse, "ON CONFLICT clause does not match any "
- "PRIMARY KEY or UNIQUE constraint");
- return SQLITE_ERROR;
+ return SQLITE_OK;
+}
+
+/*
+** Return true if pUpsert is the last ON CONFLICT clause with a
+** conflict target, or if pUpsert is followed by another ON CONFLICT
+** clause that targets the INTEGER PRIMARY KEY.
+*/
+SQLITE_PRIVATE int sqlite3UpsertNextIsIPK(Upsert *pUpsert){
+ Upsert *pNext;
+ if( NEVER(pUpsert==0) ) return 0;
+ pNext = pUpsert->pNextUpsert;
+ if( pNext==0 ) return 1;
+ if( pNext->pUpsertTarget==0 ) return 1;
+ if( pNext->pUpsertIdx==0 ) return 1;
+ return 0;
+}
+
+/*
+** Given the list of ON CONFLICT clauses described by pUpsert, and
+** a particular index pIdx, return a pointer to the particular ON CONFLICT
+** clause that applies to the index. Or, if the index is not subject to
+** any ON CONFLICT clause, return NULL.
+*/
+SQLITE_PRIVATE Upsert *sqlite3UpsertOfIndex(Upsert *pUpsert, Index *pIdx){
+ while(
+ pUpsert
+ && pUpsert->pUpsertTarget!=0
+ && pUpsert->pUpsertIdx!=pIdx
+ ){
+ pUpsert = pUpsert->pNextUpsert;
+ }
+ return pUpsert;
}
/*
@@ -139666,11 +141421,13 @@ SQLITE_PRIVATE void sqlite3UpsertDoUpdate(
SrcList *pSrc; /* FROM clause for the UPDATE */
int iDataCur;
int i;
+ Upsert *pTop = pUpsert;
assert( v!=0 );
assert( pUpsert!=0 );
- VdbeNoopComment((v, "Begin DO UPDATE of UPSERT"));
iDataCur = pUpsert->iDataCur;
+ pUpsert = sqlite3UpsertOfIndex(pTop, pIdx);
+ VdbeNoopComment((v, "Begin DO UPDATE of UPSERT"));
if( pIdx && iCur!=iDataCur ){
if( HasRowid(pTab) ){
int regRowid = sqlite3GetTempReg(pParse);
@@ -139700,19 +141457,17 @@ SQLITE_PRIVATE void sqlite3UpsertDoUpdate(
sqlite3VdbeJumpHere(v, i);
}
}
- /* pUpsert does not own pUpsertSrc - the outer INSERT statement does. So
- ** we have to make a copy before passing it down into sqlite3Update() */
- pSrc = sqlite3SrcListDup(db, pUpsert->pUpsertSrc, 0);
+ /* pUpsert does not own pTop->pUpsertSrc - the outer INSERT statement does.
+ ** So we have to make a copy before passing it down into sqlite3Update() */
+ pSrc = sqlite3SrcListDup(db, pTop->pUpsertSrc, 0);
/* excluded.* columns of type REAL need to be converted to a hard real */
for(i=0; i<pTab->nCol; i++){
if( pTab->aCol[i].affinity==SQLITE_AFF_REAL ){
- sqlite3VdbeAddOp1(v, OP_RealAffinity, pUpsert->regData+i);
+ sqlite3VdbeAddOp1(v, OP_RealAffinity, pTop->regData+i);
}
}
- sqlite3Update(pParse, pSrc, pUpsert->pUpsertSet,
- pUpsert->pUpsertWhere, OE_Abort, 0, 0, pUpsert);
- pUpsert->pUpsertSet = 0; /* Will have been deleted by sqlite3Update() */
- pUpsert->pUpsertWhere = 0; /* Will have been deleted by sqlite3Update() */
+ sqlite3Update(pParse, pSrc, sqlite3ExprListDup(db,pUpsert->pUpsertSet,0),
+ sqlite3ExprDup(db,pUpsert->pUpsertWhere,0), OE_Abort, 0, 0, pUpsert);
VdbeNoopComment((v, "End DO UPDATE of UPSERT"));
}
@@ -140618,7 +142373,7 @@ SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){
sqlite3VdbeAddOp0(v, OP_Expire);
zWhere = sqlite3MPrintf(db, "name=%Q AND sql=%Q", pTab->zName, zStmt);
- sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
+ sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere, 0);
sqlite3DbFree(db, zStmt);
iReg = ++pParse->nMem;
@@ -140789,6 +142544,7 @@ static int vtabCallConstructor(
zType[i-1] = '\0';
}
pTab->aCol[iCol].colFlags |= COLFLAG_HIDDEN;
+ pTab->tabFlags |= TF_HasHidden;
oooHidden = TF_OOOHidden;
}else{
pTab->tabFlags |= oooHidden;
@@ -140957,7 +142713,7 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
Table *pNew = sParse.pNewTable;
Index *pIdx;
pTab->aCol = pNew->aCol;
- pTab->nCol = pNew->nCol;
+ pTab->nNVCol = pTab->nCol = pNew->nCol;
pTab->tabFlags |= pNew->tabFlags & (TF_WithoutRowid|TF_NoVisibleRowid);
pNew->nCol = 0;
pNew->aCol = 0;
@@ -141489,19 +143245,6 @@ SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){
#ifndef SQLITE_WHEREINT_H
#define SQLITE_WHEREINT_H
-/*
-** Trace output macros
-*/
-#if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
-/***/ extern int sqlite3WhereTrace;
-#endif
-#if defined(SQLITE_DEBUG) \
- && (defined(SQLITE_TEST) || defined(SQLITE_ENABLE_WHERETRACE))
-# define WHERETRACE(K,X) if(sqlite3WhereTrace&(K)) sqlite3DebugPrintf X
-# define WHERETRACE_ENABLED 1
-#else
-# define WHERETRACE(K,X)
-#endif
/* Forward references
*/
@@ -141755,11 +143498,7 @@ struct WhereTerm {
#define TERM_ORINFO 0x0010 /* Need to free the WhereTerm.u.pOrInfo object */
#define TERM_ANDINFO 0x0020 /* Need to free the WhereTerm.u.pAndInfo obj */
#define TERM_OR_OK 0x0040 /* Used during OR-clause processing */
-#ifdef SQLITE_ENABLE_STAT4
-# define TERM_VNULL 0x0080 /* Manufactured x>NULL or x<=NULL term */
-#else
-# define TERM_VNULL 0x0000 /* Disabled if not using stat4 */
-#endif
+#define TERM_VNULL 0x0080 /* Manufactured x>NULL or x<=NULL term */
#define TERM_LIKEOPT 0x0100 /* Virtual terms from the LIKE optimization */
#define TERM_LIKECOND 0x0200 /* Conditionally this LIKE operator term */
#define TERM_LIKE 0x0400 /* The original LIKE operator */
@@ -142029,7 +143768,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereExprUsage(WhereMaskSet*, Expr*);
SQLITE_PRIVATE Bitmask sqlite3WhereExprUsageNN(WhereMaskSet*, Expr*);
SQLITE_PRIVATE Bitmask sqlite3WhereExprListUsage(WhereMaskSet*, ExprList*);
SQLITE_PRIVATE void sqlite3WhereExprAnalyze(SrcList*, WhereClause*);
-SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, struct SrcList_item*, WhereClause*);
+SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, SrcItem*, WhereClause*);
@@ -142207,7 +143946,7 @@ SQLITE_PRIVATE int sqlite3WhereExplainOneScan(
if( sqlite3ParseToplevel(pParse)->explain==2 )
#endif
{
- struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
+ SrcItem *pItem = &pTabList->a[pLevel->iFrom];
Vdbe *v = pParse->pVdbe; /* VM being constructed */
sqlite3 *db = pParse->db; /* Database handle */
int isSearch; /* True for a SEARCH. False for SCAN. */
@@ -143000,7 +144739,7 @@ static int codeCursorHintFixExpr(Walker *pWalker, Expr *pExpr){
** Insert an OP_CursorHint instruction if it is appropriate to do so.
*/
static void codeCursorHint(
- struct SrcList_item *pTabItem, /* FROM clause item */
+ SrcItem *pTabItem, /* FROM clause item */
WhereInfo *pWInfo, /* The where clause */
WhereLevel *pLevel, /* Which loop to provide hints for */
WhereTerm *pEndRange /* Hint this end-of-scan boundary term if not NULL */
@@ -143375,7 +145114,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
WhereClause *pWC; /* Decomposition of the entire WHERE clause */
WhereTerm *pTerm; /* A WHERE clause term */
sqlite3 *db; /* Database connection */
- struct SrcList_item *pTabItem; /* FROM clause term being coded */
+ SrcItem *pTabItem; /* FROM clause term being coded */
int addrBrk; /* Jump here to break out of the loop */
int addrHalt; /* addrBrk for the outermost loop */
int addrCont; /* Jump here to continue with next cycle */
@@ -143821,6 +145560,12 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
SWAP(u8, nBtm, nTop);
}
+ if( iLevel>0 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)!=0 ){
+ /* In case OP_SeekScan is used, ensure that the index cursor does not
+ ** point to a valid row for the first iteration of this loop. */
+ sqlite3VdbeAddOp1(v, OP_NullRow, iIdxCur);
+ }
+
/* Generate code to evaluate all constraint terms using == or IN
** and store the values of those terms in an array of registers
** starting at regBase.
@@ -144157,7 +145902,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
*/
if( pWInfo->nLevel>1 ){
int nNotReady; /* The number of notReady tables */
- struct SrcList_item *origSrc; /* Original list of tables */
+ SrcItem *origSrc; /* Original list of tables */
nNotReady = pWInfo->nLevel - iLevel - 1;
pOrTab = sqlite3StackAllocRaw(db,
sizeof(*pOrTab)+ nNotReady*sizeof(pOrTab->a[0]));
@@ -145577,6 +147322,276 @@ static int exprMightBeIndexed(
}
/*
+** Expression callback for exprUsesSrclist().
+*/
+static int exprUsesSrclistCb(Walker *p, Expr *pExpr){
+ if( pExpr->op==TK_COLUMN ){
+ SrcList *pSrc = p->u.pSrcList;
+ int iCsr = pExpr->iTable;
+ int ii;
+ for(ii=0; ii<pSrc->nSrc; ii++){
+ if( pSrc->a[ii].iCursor==iCsr ){
+ return p->eCode ? WRC_Abort : WRC_Continue;
+ }
+ }
+ return p->eCode ? WRC_Continue : WRC_Abort;
+ }
+ return WRC_Continue;
+}
+
+/*
+** Select callback for exprUsesSrclist().
+*/
+static int exprUsesSrclistSelectCb(Walker *NotUsed1, Select *NotUsed2){
+ UNUSED_PARAMETER(NotUsed1);
+ UNUSED_PARAMETER(NotUsed2);
+ return WRC_Abort;
+}
+
+/*
+** This function always returns true if expression pExpr contains
+** a sub-select.
+**
+** If there is no sub-select in pExpr, then return true if pExpr
+** contains a TK_COLUMN node for a table that is (bUses==1)
+** or is not (bUses==0) in pSrc.
+**
+** Said another way:
+**
+** bUses Return Meaning
+** -------- ------ ------------------------------------------------
+**
+** bUses==1 true pExpr contains either a sub-select or a
+** TK_COLUMN referencing pSrc.
+**
+** bUses==1 false pExpr contains no sub-selects and all TK_COLUMN
+** nodes reference tables not found in pSrc
+**
+** bUses==0 true pExpr contains either a sub-select or a TK_COLUMN
+** that references a table not in pSrc.
+**
+** bUses==0 false pExpr contains no sub-selects and all TK_COLUMN
+** nodes reference pSrc
+*/
+static int exprUsesSrclist(SrcList *pSrc, Expr *pExpr, int bUses){
+ Walker sWalker;
+ memset(&sWalker, 0, sizeof(Walker));
+ sWalker.eCode = bUses;
+ sWalker.u.pSrcList = pSrc;
+ sWalker.xExprCallback = exprUsesSrclistCb;
+ sWalker.xSelectCallback = exprUsesSrclistSelectCb;
+ return (sqlite3WalkExpr(&sWalker, pExpr)==WRC_Abort);
+}
+
+/*
+** Context object used by exprExistsToInIter() as it iterates through an
+** expression tree.
+*/
+struct ExistsToInCtx {
+ SrcList *pSrc; /* The tables in an EXISTS(SELECT ... FROM <here> ...) */
+ Expr *pInLhs; /* OUT: Use this as the LHS of the IN operator */
+ Expr *pEq; /* OUT: The == term that include pInLhs */
+ Expr **ppAnd; /* OUT: The AND operator that includes pEq as a child */
+ Expr **ppParent; /* The AND operator currently being examined */
+};
+
+/*
+** Iterate through all AND connected nodes in the expression tree
+** headed by (*ppExpr), populating the structure passed as the first
+** argument with the values required by exprAnalyzeExistsFindEq().
+**
+** This function returns non-zero if the expression tree does not meet
+** the two conditions described by the header comment for
+** exprAnalyzeExistsFindEq(), or zero if it does.
+*/
+static int exprExistsToInIter(struct ExistsToInCtx *p, Expr **ppExpr){
+ Expr *pExpr = *ppExpr;
+ switch( pExpr->op ){
+ case TK_AND:
+ p->ppParent = ppExpr;
+ if( exprExistsToInIter(p, &pExpr->pLeft) ) return 1;
+ p->ppParent = ppExpr;
+ if( exprExistsToInIter(p, &pExpr->pRight) ) return 1;
+ break;
+ case TK_EQ: {
+ int bLeft = exprUsesSrclist(p->pSrc, pExpr->pLeft, 0);
+ int bRight = exprUsesSrclist(p->pSrc, pExpr->pRight, 0);
+ if( bLeft || bRight ){
+ if( (bLeft && bRight) || p->pInLhs ) return 1;
+ p->pInLhs = bLeft ? pExpr->pLeft : pExpr->pRight;
+ if( exprUsesSrclist(p->pSrc, p->pInLhs, 1) ) return 1;
+ p->pEq = pExpr;
+ p->ppAnd = p->ppParent;
+ }
+ break;
+ }
+ default:
+ if( exprUsesSrclist(p->pSrc, pExpr, 0) ){
+ return 1;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+/*
+** This function is used by exprAnalyzeExists() when creating virtual IN(...)
+** terms equivalent to user-supplied EXIST(...) clauses. It splits the WHERE
+** clause of the Select object passed as the first argument into one or more
+** expressions joined by AND operators, and then tests if the following are
+** true:
+**
+** 1. Exactly one of the AND separated terms refers to the outer
+** query, and it is an == (TK_EQ) expression.
+**
+** 2. Only one side of the == expression refers to the outer query, and
+** it does not refer to any columns from the inner query.
+**
+** If both these conditions are true, then a pointer to the side of the ==
+** expression that refers to the outer query is returned. The caller will
+** use this expression as the LHS of the IN(...) virtual term. Or, if one
+** or both of the above conditions are not true, NULL is returned.
+**
+** If non-NULL is returned and ppEq is non-NULL, *ppEq is set to point
+** to the == expression node before returning. If pppAnd is non-NULL and
+** the == node is not the root of the WHERE clause, then *pppAnd is set
+** to point to the pointer to the AND node that is the parent of the ==
+** node within the WHERE expression tree.
+*/
+static Expr *exprAnalyzeExistsFindEq(
+ Select *pSel, /* The SELECT of the EXISTS */
+ Expr **ppEq, /* OUT: == node from WHERE clause */
+ Expr ***pppAnd /* OUT: Pointer to parent of ==, if any */
+){
+ struct ExistsToInCtx ctx;
+ memset(&ctx, 0, sizeof(ctx));
+ ctx.pSrc = pSel->pSrc;
+ if( exprExistsToInIter(&ctx, &pSel->pWhere) ){
+ return 0;
+ }
+ if( ppEq ) *ppEq = ctx.pEq;
+ if( pppAnd ) *pppAnd = ctx.ppAnd;
+ return ctx.pInLhs;
+}
+
+/*
+** Term idxTerm of the WHERE clause passed as the second argument is an
+** EXISTS expression with a correlated SELECT statement on the RHS.
+** This function analyzes the SELECT statement, and if possible adds an
+** equivalent "? IN(SELECT...)" virtual term to the WHERE clause.
+**
+** For an EXISTS term such as the following:
+**
+** EXISTS (SELECT ... FROM <srclist> WHERE <e1> = <e2> AND <e3>)
+**
+** The virtual IN() term added is:
+**
+** <e1> IN (SELECT <e2> FROM <srclist> WHERE <e3>)
+**
+** The virtual term is only added if the following conditions are met:
+**
+** 1. The sub-select must not be an aggregate or use window functions,
+**
+** 2. The sub-select must not be a compound SELECT,
+**
+** 3. Expression <e1> must refer to at least one column from the outer
+** query, and must not refer to any column from the inner query
+** (i.e. from <srclist>).
+**
+** 4. <e2> and <e3> must not refer to any values from the outer query.
+** In other words, once <e1> has been removed, the inner query
+** must not be correlated.
+**
+*/
+static void exprAnalyzeExists(
+ SrcList *pSrc, /* the FROM clause */
+ WhereClause *pWC, /* the WHERE clause */
+ int idxTerm /* Index of the term to be analyzed */
+){
+ Parse *pParse = pWC->pWInfo->pParse;
+ WhereTerm *pTerm = &pWC->a[idxTerm];
+ Expr *pExpr = pTerm->pExpr;
+ Select *pSel = pExpr->x.pSelect;
+ Expr *pDup = 0;
+ Expr *pEq = 0;
+ Expr *pRet = 0;
+ Expr *pInLhs = 0;
+ Expr **ppAnd = 0;
+ int idxNew;
+ sqlite3 *db = pParse->db;
+
+ assert( pExpr->op==TK_EXISTS );
+ assert( (pExpr->flags & EP_VarSelect) && (pExpr->flags & EP_xIsSelect) );
+
+ if( pSel->selFlags & SF_Aggregate ) return;
+#ifndef SQLITE_OMIT_WINDOWFUNC
+ if( pSel->pWin ) return;
+#endif
+ if( pSel->pPrior ) return;
+ if( pSel->pWhere==0 ) return;
+ if( 0==exprAnalyzeExistsFindEq(pSel, 0, 0) ) return;
+
+ pDup = sqlite3ExprDup(db, pExpr, 0);
+ if( db->mallocFailed ){
+ sqlite3ExprDelete(db, pDup);
+ return;
+ }
+ pSel = pDup->x.pSelect;
+ sqlite3ExprListDelete(db, pSel->pEList);
+ pSel->pEList = 0;
+
+ pInLhs = exprAnalyzeExistsFindEq(pSel, &pEq, &ppAnd);
+ assert( pInLhs && pEq );
+ assert( pEq==pSel->pWhere || ppAnd );
+ if( pInLhs==pEq->pLeft ){
+ pRet = pEq->pRight;
+ }else{
+ CollSeq *p = sqlite3ExprCompareCollSeq(pParse, pEq);
+ pInLhs = sqlite3ExprAddCollateString(pParse, pInLhs, p?p->zName:"BINARY");
+ pRet = pEq->pLeft;
+ }
+
+ assert( pDup->pLeft==0 );
+ pDup->op = TK_IN;
+ pDup->pLeft = pInLhs;
+ pDup->flags &= ~EP_VarSelect;
+ if( pRet->op==TK_VECTOR ){
+ pSel->pEList = pRet->x.pList;
+ pRet->x.pList = 0;
+ sqlite3ExprDelete(db, pRet);
+ }else{
+ pSel->pEList = sqlite3ExprListAppend(pParse, 0, pRet);
+ }
+ pEq->pLeft = 0;
+ pEq->pRight = 0;
+ if( ppAnd ){
+ Expr *pAnd = *ppAnd;
+ Expr *pOther = (pAnd->pLeft==pEq) ? pAnd->pRight : pAnd->pLeft;
+ pAnd->pLeft = pAnd->pRight = 0;
+ sqlite3ExprDelete(db, pAnd);
+ *ppAnd = pOther;
+ }else{
+ assert( pSel->pWhere==pEq );
+ pSel->pWhere = 0;
+ }
+ sqlite3ExprDelete(db, pEq);
+
+#ifdef WHERETRACE_ENABLED /* 0x20 */
+ if( sqlite3WhereTrace & 0x20 ){
+ sqlite3DebugPrintf("Convert EXISTS:\n");
+ sqlite3TreeViewExpr(0, pExpr, 0);
+ sqlite3DebugPrintf("into IN:\n");
+ sqlite3TreeViewExpr(0, pDup, 0);
+ }
+#endif
+ idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
+ exprAnalyze(pSrc, pWC, idxNew);
+ markTermAsChild(pWC, idxNew, idxTerm);
+ pWC->a[idxTerm].wtFlags |= TERM_COPIED;
+}
+
+/*
** The input to this routine is an WhereTerm structure with only the
** "pExpr" field filled in. The job of this routine is to analyze the
** subexpression and populate all the other fields of the WhereTerm
@@ -145709,6 +147724,12 @@ static void exprAnalyze(
pNew->prereqRight = prereqLeft | extraRight;
pNew->prereqAll = prereqAll;
pNew->eOperator = (operatorMask(pDup->op) + eExtraOp) & opMask;
+ }else if( op==TK_ISNULL && 0==sqlite3ExprCanBeNull(pLeft) ){
+ pExpr->op = TK_TRUEFALSE;
+ pExpr->u.zToken = "false";
+ ExprSetProperty(pExpr, EP_IsFalse);
+ pTerm->prereqAll = 0;
+ pTerm->eOperator = 0;
}
}
@@ -145761,6 +147782,52 @@ static void exprAnalyze(
}
#endif /* SQLITE_OMIT_OR_OPTIMIZATION */
+ else if( pExpr->op==TK_EXISTS ){
+ /* Perhaps treat an EXISTS operator as an IN operator */
+ if( (pExpr->flags & EP_VarSelect)!=0
+ && OptimizationEnabled(db, SQLITE_ExistsToIN)
+ ){
+ exprAnalyzeExists(pSrc, pWC, idxTerm);
+ }
+ }
+
+ /* The form "x IS NOT NULL" can sometimes be evaluated more efficiently
+ ** as "x>NULL" if x is not an INTEGER PRIMARY KEY. So construct a
+ ** virtual term of that form.
+ **
+ ** The virtual term must be tagged with TERM_VNULL.
+ */
+ else if( pExpr->op==TK_NOTNULL ){
+ if( pExpr->pLeft->op==TK_COLUMN
+ && pExpr->pLeft->iColumn>=0
+ && !ExprHasProperty(pExpr, EP_FromJoin)
+ ){
+ Expr *pNewExpr;
+ Expr *pLeft = pExpr->pLeft;
+ int idxNew;
+ WhereTerm *pNewTerm;
+
+ pNewExpr = sqlite3PExpr(pParse, TK_GT,
+ sqlite3ExprDup(db, pLeft, 0),
+ sqlite3ExprAlloc(db, TK_NULL, 0, 0));
+
+ idxNew = whereClauseInsert(pWC, pNewExpr,
+ TERM_VIRTUAL|TERM_DYNAMIC|TERM_VNULL);
+ if( idxNew ){
+ pNewTerm = &pWC->a[idxNew];
+ pNewTerm->prereqRight = 0;
+ pNewTerm->leftCursor = pLeft->iTable;
+ pNewTerm->u.x.leftColumn = pLeft->iColumn;
+ pNewTerm->eOperator = WO_GT;
+ markTermAsChild(pWC, idxNew, idxTerm);
+ pTerm = &pWC->a[idxTerm];
+ pTerm->wtFlags |= TERM_COPIED;
+ pNewTerm->prereqAll = pTerm->prereqAll;
+ }
+ }
+ }
+
+
#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
/* Add constraints to reduce the search space on a LIKE or GLOB
** operator.
@@ -145775,7 +147842,8 @@ static void exprAnalyze(
** bound is made all lowercase so that the bounds also work when comparing
** BLOBs.
*/
- if( pWC->op==TK_AND
+ else if( pExpr->op==TK_FUNCTION
+ && pWC->op==TK_AND
&& isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
){
Expr *pLeft; /* LHS of LIKE/GLOB operator */
@@ -145845,52 +147913,6 @@ static void exprAnalyze(
}
#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
-#ifndef SQLITE_OMIT_VIRTUALTABLE
- /* Add a WO_AUX auxiliary term to the constraint set if the
- ** current expression is of the form "column OP expr" where OP
- ** is an operator that gets passed into virtual tables but which is
- ** not normally optimized for ordinary tables. In other words, OP
- ** is one of MATCH, LIKE, GLOB, REGEXP, !=, IS, IS NOT, or NOT NULL.
- ** This information is used by the xBestIndex methods of
- ** virtual tables. The native query optimizer does not attempt
- ** to do anything with MATCH functions.
- */
- if( pWC->op==TK_AND ){
- Expr *pRight = 0, *pLeft = 0;
- int res = isAuxiliaryVtabOperator(db, pExpr, &eOp2, &pLeft, &pRight);
- while( res-- > 0 ){
- int idxNew;
- WhereTerm *pNewTerm;
- Bitmask prereqColumn, prereqExpr;
-
- prereqExpr = sqlite3WhereExprUsage(pMaskSet, pRight);
- prereqColumn = sqlite3WhereExprUsage(pMaskSet, pLeft);
- if( (prereqExpr & prereqColumn)==0 ){
- Expr *pNewExpr;
- pNewExpr = sqlite3PExpr(pParse, TK_MATCH,
- 0, sqlite3ExprDup(db, pRight, 0));
- if( ExprHasProperty(pExpr, EP_FromJoin) && pNewExpr ){
- ExprSetProperty(pNewExpr, EP_FromJoin);
- pNewExpr->iRightJoinTable = pExpr->iRightJoinTable;
- }
- idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
- testcase( idxNew==0 );
- pNewTerm = &pWC->a[idxNew];
- pNewTerm->prereqRight = prereqExpr;
- pNewTerm->leftCursor = pLeft->iTable;
- pNewTerm->u.x.leftColumn = pLeft->iColumn;
- pNewTerm->eOperator = WO_AUX;
- pNewTerm->eMatchOp = eOp2;
- markTermAsChild(pWC, idxNew, idxTerm);
- pTerm = &pWC->a[idxTerm];
- pTerm->wtFlags |= TERM_COPIED;
- pNewTerm->prereqAll = pTerm->prereqAll;
- }
- SWAP(Expr*, pLeft, pRight);
- }
- }
-#endif /* SQLITE_OMIT_VIRTUALTABLE */
-
/* If there is a vector == or IS term - e.g. "(a, b) == (?, ?)" - create
** new terms for each component comparison - "a = ?" and "b = ?". The
** new terms completely replace the original vector comparison, which is
@@ -145898,12 +147920,12 @@ static void exprAnalyze(
**
** This is only required if at least one side of the comparison operation
** is not a sub-select. */
- if( pWC->op==TK_AND
- && (pExpr->op==TK_EQ || pExpr->op==TK_IS)
- && (nLeft = sqlite3ExprVectorSize(pExpr->pLeft))>1
- && sqlite3ExprVectorSize(pExpr->pRight)==nLeft
- && ( (pExpr->pLeft->flags & EP_xIsSelect)==0
- || (pExpr->pRight->flags & EP_xIsSelect)==0)
+ if( (pExpr->op==TK_EQ || pExpr->op==TK_IS)
+ && (nLeft = sqlite3ExprVectorSize(pExpr->pLeft))>1
+ && sqlite3ExprVectorSize(pExpr->pRight)==nLeft
+ && ( (pExpr->pLeft->flags & EP_xIsSelect)==0
+ || (pExpr->pRight->flags & EP_xIsSelect)==0)
+ && pWC->op==TK_AND
){
int i;
for(i=0; i<nLeft; i++){
@@ -145931,12 +147953,14 @@ static void exprAnalyze(
** This only works if the RHS is a simple SELECT (not a compound) that does
** not use window functions.
*/
- if( pWC->op==TK_AND && pExpr->op==TK_IN && pTerm->u.x.iField==0
+ else if( pExpr->op==TK_IN
+ && pTerm->u.x.iField==0
&& pExpr->pLeft->op==TK_VECTOR
&& pExpr->x.pSelect->pPrior==0
#ifndef SQLITE_OMIT_WINDOWFUNC
&& pExpr->x.pSelect->pWin==0
#endif
+ && pWC->op==TK_AND
){
int i;
for(i=0; i<sqlite3ExprVectorSize(pExpr->pLeft); i++){
@@ -145948,44 +147972,51 @@ static void exprAnalyze(
}
}
-#ifdef SQLITE_ENABLE_STAT4
- /* When sqlite_stat4 histogram data is available an operator of the
- ** form "x IS NOT NULL" can sometimes be evaluated more efficiently
- ** as "x>NULL" if x is not an INTEGER PRIMARY KEY. So construct a
- ** virtual term of that form.
- **
- ** Note that the virtual term must be tagged with TERM_VNULL.
+#ifndef SQLITE_OMIT_VIRTUALTABLE
+ /* Add a WO_AUX auxiliary term to the constraint set if the
+ ** current expression is of the form "column OP expr" where OP
+ ** is an operator that gets passed into virtual tables but which is
+ ** not normally optimized for ordinary tables. In other words, OP
+ ** is one of MATCH, LIKE, GLOB, REGEXP, !=, IS, IS NOT, or NOT NULL.
+ ** This information is used by the xBestIndex methods of
+ ** virtual tables. The native query optimizer does not attempt
+ ** to do anything with MATCH functions.
*/
- if( pExpr->op==TK_NOTNULL
- && pExpr->pLeft->op==TK_COLUMN
- && pExpr->pLeft->iColumn>=0
- && !ExprHasProperty(pExpr, EP_FromJoin)
- && OptimizationEnabled(db, SQLITE_Stat4)
- ){
- Expr *pNewExpr;
- Expr *pLeft = pExpr->pLeft;
- int idxNew;
- WhereTerm *pNewTerm;
-
- pNewExpr = sqlite3PExpr(pParse, TK_GT,
- sqlite3ExprDup(db, pLeft, 0),
- sqlite3ExprAlloc(db, TK_NULL, 0, 0));
-
- idxNew = whereClauseInsert(pWC, pNewExpr,
- TERM_VIRTUAL|TERM_DYNAMIC|TERM_VNULL);
- if( idxNew ){
- pNewTerm = &pWC->a[idxNew];
- pNewTerm->prereqRight = 0;
- pNewTerm->leftCursor = pLeft->iTable;
- pNewTerm->u.x.leftColumn = pLeft->iColumn;
- pNewTerm->eOperator = WO_GT;
- markTermAsChild(pWC, idxNew, idxTerm);
- pTerm = &pWC->a[idxTerm];
- pTerm->wtFlags |= TERM_COPIED;
- pNewTerm->prereqAll = pTerm->prereqAll;
+ else if( pWC->op==TK_AND ){
+ Expr *pRight = 0, *pLeft = 0;
+ int res = isAuxiliaryVtabOperator(db, pExpr, &eOp2, &pLeft, &pRight);
+ while( res-- > 0 ){
+ int idxNew;
+ WhereTerm *pNewTerm;
+ Bitmask prereqColumn, prereqExpr;
+
+ prereqExpr = sqlite3WhereExprUsage(pMaskSet, pRight);
+ prereqColumn = sqlite3WhereExprUsage(pMaskSet, pLeft);
+ if( (prereqExpr & prereqColumn)==0 ){
+ Expr *pNewExpr;
+ pNewExpr = sqlite3PExpr(pParse, TK_MATCH,
+ 0, sqlite3ExprDup(db, pRight, 0));
+ if( ExprHasProperty(pExpr, EP_FromJoin) && pNewExpr ){
+ ExprSetProperty(pNewExpr, EP_FromJoin);
+ pNewExpr->iRightJoinTable = pExpr->iRightJoinTable;
+ }
+ idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
+ testcase( idxNew==0 );
+ pNewTerm = &pWC->a[idxNew];
+ pNewTerm->prereqRight = prereqExpr;
+ pNewTerm->leftCursor = pLeft->iTable;
+ pNewTerm->u.x.leftColumn = pLeft->iColumn;
+ pNewTerm->eOperator = WO_AUX;
+ pNewTerm->eMatchOp = eOp2;
+ markTermAsChild(pWC, idxNew, idxTerm);
+ pTerm = &pWC->a[idxTerm];
+ pTerm->wtFlags |= TERM_COPIED;
+ pNewTerm->prereqAll = pTerm->prereqAll;
+ }
+ SWAP(Expr*, pLeft, pRight);
}
}
-#endif /* SQLITE_ENABLE_STAT4 */
+#endif /* SQLITE_OMIT_VIRTUALTABLE */
/* Prevent ON clause terms of a LEFT JOIN from being used to drive
** an index for tables to the left of the join.
@@ -146145,7 +148176,7 @@ SQLITE_PRIVATE void sqlite3WhereExprAnalyze(
*/
SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(
Parse *pParse, /* Parsing context */
- struct SrcList_item *pItem, /* The FROM clause term to process */
+ SrcItem *pItem, /* The FROM clause term to process */
WhereClause *pWC /* Xfer function arguments to here */
){
Table *pTab;
@@ -146222,12 +148253,6 @@ struct HiddenIndexInfo {
/* Forward declaration of methods */
static int whereLoopResize(sqlite3*, WhereLoop*, int);
-/* Test variable that can be set to enable WHERE tracing */
-#if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
-/***/ int sqlite3WhereTrace = 0;
-#endif
-
-
/*
** Return the estimated number of output rows from a WHERE clause
*/
@@ -146291,6 +148316,32 @@ SQLITE_PRIVATE int sqlite3WhereOrderByLimitOptLabel(WhereInfo *pWInfo){
}
/*
+** While generating code for the min/max optimization, after handling
+** the aggregate-step call to min() or max(), check to see if any
+** additional looping is required. If the output order is such that
+** we are certain that the correct answer has already been found, then
+** code an OP_Goto to by pass subsequent processing.
+**
+** Any extra OP_Goto that is coded here is an optimization. The
+** correct answer should be obtained regardless. This OP_Goto just
+** makes the answer appear faster.
+*/
+SQLITE_PRIVATE void sqlite3WhereMinMaxOptEarlyOut(Vdbe *v, WhereInfo *pWInfo){
+ WhereLevel *pInner;
+ int i;
+ if( !pWInfo->bOrderedInnerLoop ) return;
+ if( pWInfo->nOBSat==0 ) return;
+ for(i=pWInfo->nLevel-1; i>=0; i--){
+ pInner = &pWInfo->a[i];
+ if( (pInner->pWLoop->wsFlags & WHERE_COLUMN_IN)!=0 ){
+ sqlite3VdbeGoto(v, pInner->addrNxt);
+ return;
+ }
+ }
+ sqlite3VdbeGoto(v, pWInfo->iBreak);
+}
+
+/*
** Return the VDBE address or label to jump to in order to continue
** immediately with the next row of a WHERE clause.
*/
@@ -146859,7 +148910,7 @@ static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){
*/
static int termCanDriveIndex(
WhereTerm *pTerm, /* WHERE clause term to check */
- struct SrcList_item *pSrc, /* Table we are trying to access */
+ SrcItem *pSrc, /* Table we are trying to access */
Bitmask notReady /* Tables in outer loops of the join */
){
char aff;
@@ -146893,7 +148944,7 @@ static int termCanDriveIndex(
static void constructAutomaticIndex(
Parse *pParse, /* The parsing context */
WhereClause *pWC, /* The WHERE clause */
- struct SrcList_item *pSrc, /* The FROM clause term to get the next index */
+ SrcItem *pSrc, /* The FROM clause term to get the next index */
Bitmask notReady, /* Mask of cursors that are not available */
WhereLevel *pLevel /* Write new index here */
){
@@ -146917,7 +148968,7 @@ static void constructAutomaticIndex(
u8 sentWarning = 0; /* True if a warnning has been issued */
Expr *pPartial = 0; /* Partial Index Expression */
int iContinue = 0; /* Jump here to skip excluded rows */
- struct SrcList_item *pTabItem; /* FROM clause term being indexed */
+ SrcItem *pTabItem; /* FROM clause term being indexed */
int addrCounter = 0; /* Address where integer counter is initialized */
int regBase; /* Array of registers where record is assembled */
@@ -147101,7 +149152,7 @@ static sqlite3_index_info *allocateIndexInfo(
Parse *pParse, /* The parsing context */
WhereClause *pWC, /* The WHERE clause being analyzed */
Bitmask mUnusable, /* Ignore terms with these prereqs */
- struct SrcList_item *pSrc, /* The FROM clause term that is the vtab */
+ SrcItem *pSrc, /* The FROM clause term that is the vtab */
ExprList *pOrderBy, /* The ORDER BY clause */
u16 *pmNoOmit /* Mask of terms not to omit */
){
@@ -147999,7 +150050,7 @@ SQLITE_PRIVATE void sqlite3WhereClausePrint(WhereClause *pWC){
SQLITE_PRIVATE void sqlite3WhereLoopPrint(WhereLoop *p, WhereClause *pWC){
WhereInfo *pWInfo = pWC->pWInfo;
int nb = 1+(pWInfo->pTabList->nSrc+3)/4;
- struct SrcList_item *pItem = pWInfo->pTabList->a + p->iTab;
+ SrcItem *pItem = pWInfo->pTabList->a + p->iTab;
Table *pTab = pItem->pTab;
Bitmask mAll = (((Bitmask)1)<<(nb*4)) - 1;
sqlite3DebugPrintf("%c%2d.%0*llx.%0*llx", p->cId,
@@ -148610,7 +150661,7 @@ static int whereRangeVectorLen(
*/
static int whereLoopAddBtreeIndex(
WhereLoopBuilder *pBuilder, /* The WhereLoop factory */
- struct SrcList_item *pSrc, /* FROM clause term being analyzed */
+ SrcItem *pSrc, /* FROM clause term being analyzed */
Index *pProbe, /* An index on pSrc */
LogEst nInMul /* log(Number of iterations due to IN) */
){
@@ -148796,7 +150847,7 @@ static int whereLoopAddBtreeIndex(
pBtm = pTerm;
pTop = 0;
if( pTerm->wtFlags & TERM_LIKEOPT ){
- /* Range contraints that come from the LIKE optimization are
+ /* Range constraints that come from the LIKE optimization are
** always used in pairs. */
pTop = &pTerm[1];
assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm );
@@ -149101,7 +151152,7 @@ static int whereLoopAddBtree(
LogEst aiRowEstPk[2]; /* The aiRowLogEst[] value for the sPk index */
i16 aiColumnPk = -1; /* The aColumn[] value for the sPk index */
SrcList *pTabList; /* The FROM clause */
- struct SrcList_item *pSrc; /* The FROM clause btree term to add */
+ SrcItem *pSrc; /* The FROM clause btree term to add */
WhereLoop *pNew; /* Template WhereLoop object */
int rc = SQLITE_OK; /* Return code */
int iSortIdx = 1; /* Index number */
@@ -149119,9 +151170,9 @@ static int whereLoopAddBtree(
pWC = pBuilder->pWC;
assert( !IsVirtual(pSrc->pTab) );
- if( pSrc->pIBIndex ){
+ if( pSrc->fg.isIndexedBy ){
/* An INDEXED BY clause specifies a particular index to use */
- pProbe = pSrc->pIBIndex;
+ pProbe = pSrc->u2.pIBIndex;
}else if( !HasRowid(pTab) ){
pProbe = pTab->pIndex;
}else{
@@ -149157,7 +151208,7 @@ static int whereLoopAddBtree(
if( !pBuilder->pOrSet /* Not part of an OR optimization */
&& (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)==0
&& (pWInfo->pParse->db->flags & SQLITE_AutoIndex)!=0
- && pSrc->pIBIndex==0 /* Has no INDEXED BY clause */
+ && !pSrc->fg.isIndexedBy /* Has no INDEXED BY clause */
&& !pSrc->fg.notIndexed /* Has no NOT INDEXED clause */
&& HasRowid(pTab) /* Not WITHOUT ROWID table. (FIXME: Why not?) */
&& !pSrc->fg.isCorrelated /* Not a correlated subquery */
@@ -149207,7 +151258,7 @@ static int whereLoopAddBtree(
/* Loop over all indices. If there was an INDEXED BY clause, then only
** consider index pProbe. */
for(; rc==SQLITE_OK && pProbe;
- pProbe=(pSrc->pIBIndex ? 0 : pProbe->pNext), iSortIdx++
+ pProbe=(pSrc->fg.isIndexedBy ? 0 : pProbe->pNext), iSortIdx++
){
int isLeft = (pSrc->fg.jointype & JT_OUTER)!=0;
if( pProbe->pPartIdxWhere!=0
@@ -149382,7 +151433,7 @@ static int whereLoopAddVirtualOne(
int rc = SQLITE_OK;
WhereLoop *pNew = pBuilder->pNew;
Parse *pParse = pBuilder->pWInfo->pParse;
- struct SrcList_item *pSrc = &pBuilder->pWInfo->pTabList->a[pNew->iTab];
+ SrcItem *pSrc = &pBuilder->pWInfo->pTabList->a[pNew->iTab];
int nConstraint = pIdxInfo->nConstraint;
assert( (mUsable & mPrereq)==mPrereq );
@@ -149574,7 +151625,7 @@ static int whereLoopAddVirtual(
WhereInfo *pWInfo; /* WHERE analysis context */
Parse *pParse; /* The parsing context */
WhereClause *pWC; /* The WHERE clause */
- struct SrcList_item *pSrc; /* The FROM clause term to search */
+ SrcItem *pSrc; /* The FROM clause term to search */
sqlite3_index_info *p; /* Object to pass to xBestIndex() */
int nConstraint; /* Number of constraints in p */
int bIn; /* True if plan uses IN(...) operator */
@@ -149702,7 +151753,7 @@ static int whereLoopAddOr(
WhereClause tempWC;
WhereLoopBuilder sSubBuild;
WhereOrSet sSum, sCur;
- struct SrcList_item *pItem;
+ SrcItem *pItem;
pWC = pBuilder->pWC;
pWCEnd = pWC->a + pWC->nTerm;
@@ -149818,8 +151869,8 @@ static int whereLoopAddAll(WhereLoopBuilder *pBuilder){
Bitmask mPrior = 0;
int iTab;
SrcList *pTabList = pWInfo->pTabList;
- struct SrcList_item *pItem;
- struct SrcList_item *pEnd = &pTabList->a[pWInfo->nLevel];
+ SrcItem *pItem;
+ SrcItem *pEnd = &pTabList->a[pWInfo->nLevel];
sqlite3 *db = pWInfo->pParse->db;
int rc = SQLITE_OK;
WhereLoop *pNew;
@@ -149842,7 +151893,7 @@ static int whereLoopAddAll(WhereLoopBuilder *pBuilder){
}
#ifndef SQLITE_OMIT_VIRTUALTABLE
if( IsVirtual(pItem->pTab) ){
- struct SrcList_item *p;
+ SrcItem *p;
for(p=&pItem[1]; p<pEnd; p++){
if( mUnusable || (p->fg.jointype & (JT_LEFT|JT_CROSS)) ){
mUnusable |= sqlite3WhereGetMask(&pWInfo->sMaskSet, p->iCursor);
@@ -150697,7 +152748,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
*/
static int whereShortCut(WhereLoopBuilder *pBuilder){
WhereInfo *pWInfo;
- struct SrcList_item *pItem;
+ SrcItem *pItem;
WhereClause *pWC;
WhereTerm *pTerm;
WhereLoop *pLoop;
@@ -151156,7 +153207,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
if( pWInfo->pOrderBy==0 && (db->flags & SQLITE_ReverseOrder)!=0 ){
pWInfo->revMask = ALLBITS;
}
- if( pParse->nErr || NEVER(db->mallocFailed) ){
+ if( pParse->nErr || db->mallocFailed ){
goto whereBeginError;
}
#ifdef WHERETRACE_ENABLED
@@ -151227,7 +153278,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
}
for(i=pWInfo->nLevel-1; i>=1; i--){
WhereTerm *pTerm, *pEnd;
- struct SrcList_item *pItem;
+ SrcItem *pItem;
pLoop = pWInfo->a[i].pWLoop;
pItem = &pWInfo->pTabList->a[pLoop->iTab];
if( (pItem->fg.jointype & JT_LEFT)==0 ) continue;
@@ -151317,7 +153368,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
for(ii=0, pLevel=pWInfo->a; ii<nTabList; ii++, pLevel++){
Table *pTab; /* Table to open */
int iDb; /* Index of database containing table/index */
- struct SrcList_item *pTabItem;
+ SrcItem *pTabItem;
pTabItem = &pTabList->a[pLevel->iFrom];
pTab = pTabItem->pTab;
@@ -151654,7 +153705,7 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
int k, last;
VdbeOp *pOp, *pLastOp;
Index *pIdx = 0;
- struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom];
+ SrcItem *pTabItem = &pTabList->a[pLevel->iFrom];
Table *pTab = pTabItem->pTab;
assert( pTab!=0 );
pLoop = pLevel->pWLoop;
@@ -151730,7 +153781,7 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
#endif
pOp = sqlite3VdbeGetOp(v, k);
pLastOp = pOp + (last - k);
- assert( pOp<pLastOp );
+ assert( pOp<pLastOp || (pParse->nErr>0 && pOp==pLastOp) );
do{
if( pOp->p1!=pLevel->iTabCur ){
/* no-op */
@@ -153098,15 +155149,19 @@ SQLITE_PRIVATE void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){
** SELECT, or (b) the windows already linked use a compatible window frame.
*/
SQLITE_PRIVATE void sqlite3WindowLink(Select *pSel, Window *pWin){
- if( pSel!=0
- && (0==pSel->pWin || 0==sqlite3WindowCompare(0, pSel->pWin, pWin, 0))
- ){
- pWin->pNextWin = pSel->pWin;
- if( pSel->pWin ){
- pSel->pWin->ppThis = &pWin->pNextWin;
+ if( pSel ){
+ if( 0==pSel->pWin || 0==sqlite3WindowCompare(0, pSel->pWin, pWin, 0) ){
+ pWin->pNextWin = pSel->pWin;
+ if( pSel->pWin ){
+ pSel->pWin->ppThis = &pWin->pNextWin;
+ }
+ pSel->pWin = pWin;
+ pWin->ppThis = &pSel->pWin;
+ }else{
+ if( sqlite3ExprListCompare(pWin->pPartition, pSel->pWin->pPartition,-1) ){
+ pSel->selFlags |= SF_MultiPart;
+ }
}
- pSel->pWin = pWin;
- pWin->ppThis = &pSel->pWin;
}
}
@@ -153855,6 +155910,7 @@ static void windowCodeRangeTest(
int regString = ++pParse->nMem; /* Reg. for constant value '' */
int arith = OP_Add; /* OP_Add or OP_Subtract */
int addrGe; /* Jump destination */
+ CollSeq *pColl;
assert( op==OP_Ge || op==OP_Gt || op==OP_Le );
assert( pOrderBy && pOrderBy->nExpr==1 );
@@ -153945,6 +156001,8 @@ static void windowCodeRangeTest(
** control skips over this test if the BIGNULL flag is set and either
** reg1 or reg2 contain a NULL value. */
sqlite3VdbeAddOp3(v, op, reg2, lbl, reg1); VdbeCoverage(v);
+ pColl = sqlite3ExprNNCollSeq(pParse, pOrderBy->a[0].pExpr);
+ sqlite3VdbeAppendP4(v, (void*)pColl, P4_COLLSEQ);
sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
assert( op==OP_Ge || op==OP_Gt || op==OP_Lt || op==OP_Le );
@@ -154951,11 +157009,21 @@ static void updateDeleteLimitError(
static void parserDoubleLinkSelect(Parse *pParse, Select *p){
assert( p!=0 );
if( p->pPrior ){
- Select *pNext = 0, *pLoop;
- int mxSelect, cnt = 0;
- for(pLoop=p; pLoop; pNext=pLoop, pLoop=pLoop->pPrior, cnt++){
+ Select *pNext = 0, *pLoop = p;
+ int mxSelect, cnt = 1;
+ while(1){
pLoop->pNext = pNext;
pLoop->selFlags |= SF_Compound;
+ pNext = pLoop;
+ pLoop = pLoop->pPrior;
+ if( pLoop==0 ) break;
+ cnt++;
+ if( pLoop->pOrderBy || pLoop->pLimit ){
+ sqlite3ErrorMsg(pParse,"%s clause should come after %s not before",
+ pLoop->pOrderBy!=0 ? "ORDER BY" : "LIMIT",
+ sqlite3SelectOpName(pNext->op));
+ break;
+ }
}
if( (p->selFlags & SF_MultiValue)==0 &&
(mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 &&
@@ -154966,6 +157034,19 @@ static void updateDeleteLimitError(
}
}
+ /* Attach a With object describing the WITH clause to a Select
+ ** object describing the query for which the WITH clause is a prefix.
+ */
+ static Select *attachWithToSelect(Parse *pParse, Select *pSelect, With *pWith){
+ if( pSelect ){
+ pSelect->pWith = pWith;
+ parserDoubleLinkSelect(pParse, pSelect);
+ }else{
+ sqlite3WithDelete(pParse->db, pWith);
+ }
+ return pSelect;
+ }
+
/* Construct a new Expr object from a single identifier. Use the
** new Expr to populate pOut. Set the span of pOut to be the identifier
@@ -155141,90 +157222,92 @@ static void updateDeleteLimitError(
#define TK_TIES 94
#define TK_GENERATED 95
#define TK_ALWAYS 96
-#define TK_REINDEX 97
-#define TK_RENAME 98
-#define TK_CTIME_KW 99
-#define TK_ANY 100
-#define TK_BITAND 101
-#define TK_BITOR 102
-#define TK_LSHIFT 103
-#define TK_RSHIFT 104
-#define TK_PLUS 105
-#define TK_MINUS 106
-#define TK_STAR 107
-#define TK_SLASH 108
-#define TK_REM 109
-#define TK_CONCAT 110
-#define TK_COLLATE 111
-#define TK_BITNOT 112
-#define TK_ON 113
-#define TK_INDEXED 114
-#define TK_STRING 115
-#define TK_JOIN_KW 116
-#define TK_CONSTRAINT 117
-#define TK_DEFAULT 118
-#define TK_NULL 119
-#define TK_PRIMARY 120
-#define TK_UNIQUE 121
-#define TK_CHECK 122
-#define TK_REFERENCES 123
-#define TK_AUTOINCR 124
-#define TK_INSERT 125
-#define TK_DELETE 126
-#define TK_UPDATE 127
-#define TK_SET 128
-#define TK_DEFERRABLE 129
-#define TK_FOREIGN 130
-#define TK_DROP 131
-#define TK_UNION 132
-#define TK_ALL 133
-#define TK_EXCEPT 134
-#define TK_INTERSECT 135
-#define TK_SELECT 136
-#define TK_VALUES 137
-#define TK_DISTINCT 138
-#define TK_DOT 139
-#define TK_FROM 140
-#define TK_JOIN 141
-#define TK_USING 142
-#define TK_ORDER 143
-#define TK_GROUP 144
-#define TK_HAVING 145
-#define TK_LIMIT 146
-#define TK_WHERE 147
-#define TK_INTO 148
-#define TK_NOTHING 149
-#define TK_FLOAT 150
-#define TK_BLOB 151
-#define TK_INTEGER 152
-#define TK_VARIABLE 153
-#define TK_CASE 154
-#define TK_WHEN 155
-#define TK_THEN 156
-#define TK_ELSE 157
-#define TK_INDEX 158
-#define TK_ALTER 159
-#define TK_ADD 160
-#define TK_WINDOW 161
-#define TK_OVER 162
-#define TK_FILTER 163
-#define TK_COLUMN 164
-#define TK_AGG_FUNCTION 165
-#define TK_AGG_COLUMN 166
-#define TK_TRUEFALSE 167
-#define TK_ISNOT 168
-#define TK_FUNCTION 169
-#define TK_UMINUS 170
-#define TK_UPLUS 171
-#define TK_TRUTH 172
-#define TK_REGISTER 173
-#define TK_VECTOR 174
-#define TK_SELECT_COLUMN 175
-#define TK_IF_NULL_ROW 176
-#define TK_ASTERISK 177
-#define TK_SPAN 178
-#define TK_SPACE 179
-#define TK_ILLEGAL 180
+#define TK_MATERIALIZED 97
+#define TK_REINDEX 98
+#define TK_RENAME 99
+#define TK_CTIME_KW 100
+#define TK_ANY 101
+#define TK_BITAND 102
+#define TK_BITOR 103
+#define TK_LSHIFT 104
+#define TK_RSHIFT 105
+#define TK_PLUS 106
+#define TK_MINUS 107
+#define TK_STAR 108
+#define TK_SLASH 109
+#define TK_REM 110
+#define TK_CONCAT 111
+#define TK_COLLATE 112
+#define TK_BITNOT 113
+#define TK_ON 114
+#define TK_INDEXED 115
+#define TK_STRING 116
+#define TK_JOIN_KW 117
+#define TK_CONSTRAINT 118
+#define TK_DEFAULT 119
+#define TK_NULL 120
+#define TK_PRIMARY 121
+#define TK_UNIQUE 122
+#define TK_CHECK 123
+#define TK_REFERENCES 124
+#define TK_AUTOINCR 125
+#define TK_INSERT 126
+#define TK_DELETE 127
+#define TK_UPDATE 128
+#define TK_SET 129
+#define TK_DEFERRABLE 130
+#define TK_FOREIGN 131
+#define TK_DROP 132
+#define TK_UNION 133
+#define TK_ALL 134
+#define TK_EXCEPT 135
+#define TK_INTERSECT 136
+#define TK_SELECT 137
+#define TK_VALUES 138
+#define TK_DISTINCT 139
+#define TK_DOT 140
+#define TK_FROM 141
+#define TK_JOIN 142
+#define TK_USING 143
+#define TK_ORDER 144
+#define TK_GROUP 145
+#define TK_HAVING 146
+#define TK_LIMIT 147
+#define TK_WHERE 148
+#define TK_RETURNING 149
+#define TK_INTO 150
+#define TK_NOTHING 151
+#define TK_FLOAT 152
+#define TK_BLOB 153
+#define TK_INTEGER 154
+#define TK_VARIABLE 155
+#define TK_CASE 156
+#define TK_WHEN 157
+#define TK_THEN 158
+#define TK_ELSE 159
+#define TK_INDEX 160
+#define TK_ALTER 161
+#define TK_ADD 162
+#define TK_WINDOW 163
+#define TK_OVER 164
+#define TK_FILTER 165
+#define TK_COLUMN 166
+#define TK_AGG_FUNCTION 167
+#define TK_AGG_COLUMN 168
+#define TK_TRUEFALSE 169
+#define TK_ISNOT 170
+#define TK_FUNCTION 171
+#define TK_UMINUS 172
+#define TK_UPLUS 173
+#define TK_TRUTH 174
+#define TK_REGISTER 175
+#define TK_VECTOR 176
+#define TK_SELECT_COLUMN 177
+#define TK_IF_NULL_ROW 178
+#define TK_ASTERISK 179
+#define TK_SPAN 180
+#define TK_SPACE 181
+#define TK_ILLEGAL 182
#endif
/**************** End token definitions ***************************************/
@@ -155284,28 +157367,29 @@ static void updateDeleteLimitError(
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
-#define YYNOCODE 310
+#define YYNOCODE 316
#define YYACTIONTYPE unsigned short int
-#define YYWILDCARD 100
+#define YYWILDCARD 101
#define sqlite3ParserTOKENTYPE Token
typedef union {
int yyinit;
sqlite3ParserTOKENTYPE yy0;
- SrcList* yy47;
- u8 yy58;
- struct FrameBound yy77;
- With* yy131;
- int yy192;
- Expr* yy202;
- struct {int value; int mask;} yy207;
- struct TrigEvent yy230;
- ExprList* yy242;
- Window* yy303;
- Upsert* yy318;
- const char* yy436;
- TriggerStep* yy447;
- Select* yy539;
- IdList* yy600;
+ Window* yy19;
+ struct TrigEvent yy50;
+ int yy60;
+ struct FrameBound yy113;
+ Upsert* yy178;
+ With* yy195;
+ IdList* yy288;
+ SrcList* yy291;
+ Select* yy307;
+ ExprList* yy338;
+ TriggerStep* yy483;
+ const char* yy528;
+ u8 yy570;
+ Expr* yy602;
+ Cte* yy607;
+ struct {int value; int mask;} yy615;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
@@ -155321,18 +157405,18 @@ typedef union {
#define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse;
#define sqlite3ParserCTX_STORE yypParser->pParse=pParse;
#define YYFALLBACK 1
-#define YYNSTATE 553
-#define YYNRULE 385
-#define YYNRULE_WITH_ACTION 325
-#define YYNTOKEN 181
-#define YY_MAX_SHIFT 552
-#define YY_MIN_SHIFTREDUCE 803
-#define YY_MAX_SHIFTREDUCE 1187
-#define YY_ERROR_ACTION 1188
-#define YY_ACCEPT_ACTION 1189
-#define YY_NO_ACTION 1190
-#define YY_MIN_REDUCE 1191
-#define YY_MAX_REDUCE 1575
+#define YYNSTATE 570
+#define YYNRULE 398
+#define YYNRULE_WITH_ACTION 337
+#define YYNTOKEN 183
+#define YY_MAX_SHIFT 569
+#define YY_MIN_SHIFTREDUCE 825
+#define YY_MAX_SHIFTREDUCE 1222
+#define YY_ERROR_ACTION 1223
+#define YY_ACCEPT_ACTION 1224
+#define YY_NO_ACTION 1225
+#define YY_MIN_REDUCE 1226
+#define YY_MAX_REDUCE 1623
/************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
@@ -155399,586 +157483,600 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (1962)
+#define YY_ACTTAB_COUNT (2020)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 546, 1222, 546, 451, 1260, 546, 1239, 546, 114, 111,
- /* 10 */ 211, 546, 1537, 546, 1260, 523, 114, 111, 211, 392,
- /* 20 */ 1232, 344, 42, 42, 42, 42, 1225, 42, 42, 71,
- /* 30 */ 71, 937, 1224, 71, 71, 71, 71, 1462, 1493, 938,
- /* 40 */ 820, 453, 6, 121, 122, 112, 1165, 1165, 1006, 1009,
- /* 50 */ 999, 999, 119, 119, 120, 120, 120, 120, 1543, 392,
- /* 60 */ 1358, 1517, 552, 2, 1193, 194, 528, 436, 143, 291,
- /* 70 */ 528, 136, 528, 371, 261, 504, 272, 385, 1273, 527,
- /* 80 */ 503, 493, 164, 121, 122, 112, 1165, 1165, 1006, 1009,
- /* 90 */ 999, 999, 119, 119, 120, 120, 120, 120, 1358, 442,
- /* 100 */ 1514, 118, 118, 118, 118, 117, 117, 116, 116, 116,
- /* 110 */ 115, 424, 266, 266, 266, 266, 1498, 358, 1500, 435,
- /* 120 */ 357, 1498, 517, 524, 1485, 543, 1114, 543, 1114, 392,
- /* 130 */ 405, 241, 208, 114, 111, 211, 98, 290, 537, 221,
- /* 140 */ 1029, 118, 118, 118, 118, 117, 117, 116, 116, 116,
- /* 150 */ 115, 424, 1142, 121, 122, 112, 1165, 1165, 1006, 1009,
- /* 160 */ 999, 999, 119, 119, 120, 120, 120, 120, 406, 428,
- /* 170 */ 117, 117, 116, 116, 116, 115, 424, 1418, 468, 123,
- /* 180 */ 118, 118, 118, 118, 117, 117, 116, 116, 116, 115,
- /* 190 */ 424, 116, 116, 116, 115, 424, 540, 540, 540, 392,
- /* 200 */ 505, 120, 120, 120, 120, 113, 1051, 1142, 1143, 1144,
- /* 210 */ 1051, 118, 118, 118, 118, 117, 117, 116, 116, 116,
- /* 220 */ 115, 424, 1461, 121, 122, 112, 1165, 1165, 1006, 1009,
- /* 230 */ 999, 999, 119, 119, 120, 120, 120, 120, 392, 444,
- /* 240 */ 316, 83, 463, 81, 359, 382, 1142, 80, 118, 118,
- /* 250 */ 118, 118, 117, 117, 116, 116, 116, 115, 424, 179,
- /* 260 */ 434, 424, 121, 122, 112, 1165, 1165, 1006, 1009, 999,
- /* 270 */ 999, 119, 119, 120, 120, 120, 120, 434, 433, 266,
- /* 280 */ 266, 118, 118, 118, 118, 117, 117, 116, 116, 116,
- /* 290 */ 115, 424, 543, 1109, 903, 506, 1142, 114, 111, 211,
- /* 300 */ 1431, 1142, 1143, 1144, 206, 491, 1109, 392, 449, 1109,
- /* 310 */ 545, 330, 120, 120, 120, 120, 298, 1431, 1433, 17,
- /* 320 */ 118, 118, 118, 118, 117, 117, 116, 116, 116, 115,
- /* 330 */ 424, 121, 122, 112, 1165, 1165, 1006, 1009, 999, 999,
- /* 340 */ 119, 119, 120, 120, 120, 120, 392, 1358, 434, 1142,
- /* 350 */ 482, 1142, 1143, 1144, 996, 996, 1007, 1010, 445, 118,
- /* 360 */ 118, 118, 118, 117, 117, 116, 116, 116, 115, 424,
- /* 370 */ 121, 122, 112, 1165, 1165, 1006, 1009, 999, 999, 119,
- /* 380 */ 119, 120, 120, 120, 120, 1054, 1054, 465, 1431, 118,
- /* 390 */ 118, 118, 118, 117, 117, 116, 116, 116, 115, 424,
- /* 400 */ 1142, 451, 546, 1426, 1142, 1143, 1144, 233, 966, 1142,
- /* 410 */ 481, 478, 477, 171, 360, 392, 164, 407, 414, 842,
- /* 420 */ 476, 164, 185, 334, 71, 71, 1243, 1000, 118, 118,
- /* 430 */ 118, 118, 117, 117, 116, 116, 116, 115, 424, 121,
- /* 440 */ 122, 112, 1165, 1165, 1006, 1009, 999, 999, 119, 119,
- /* 450 */ 120, 120, 120, 120, 392, 1142, 1143, 1144, 835, 12,
- /* 460 */ 314, 509, 163, 356, 1142, 1143, 1144, 114, 111, 211,
- /* 470 */ 508, 290, 537, 546, 276, 180, 290, 537, 121, 122,
- /* 480 */ 112, 1165, 1165, 1006, 1009, 999, 999, 119, 119, 120,
- /* 490 */ 120, 120, 120, 345, 484, 71, 71, 118, 118, 118,
- /* 500 */ 118, 117, 117, 116, 116, 116, 115, 424, 1142, 209,
- /* 510 */ 411, 523, 1142, 1109, 1571, 378, 252, 269, 342, 487,
- /* 520 */ 337, 486, 238, 392, 513, 364, 1109, 1127, 333, 1109,
- /* 530 */ 191, 409, 286, 32, 457, 443, 118, 118, 118, 118,
- /* 540 */ 117, 117, 116, 116, 116, 115, 424, 121, 122, 112,
- /* 550 */ 1165, 1165, 1006, 1009, 999, 999, 119, 119, 120, 120,
- /* 560 */ 120, 120, 392, 1142, 1143, 1144, 987, 1142, 1143, 1144,
- /* 570 */ 1142, 233, 492, 1492, 481, 478, 477, 6, 163, 546,
- /* 580 */ 512, 546, 115, 424, 476, 5, 121, 122, 112, 1165,
- /* 590 */ 1165, 1006, 1009, 999, 999, 119, 119, 120, 120, 120,
- /* 600 */ 120, 13, 13, 13, 13, 118, 118, 118, 118, 117,
- /* 610 */ 117, 116, 116, 116, 115, 424, 403, 502, 408, 546,
- /* 620 */ 1486, 544, 1142, 892, 892, 1142, 1143, 1144, 1473, 1142,
- /* 630 */ 275, 392, 808, 809, 810, 971, 422, 422, 422, 16,
- /* 640 */ 16, 55, 55, 1242, 118, 118, 118, 118, 117, 117,
- /* 650 */ 116, 116, 116, 115, 424, 121, 122, 112, 1165, 1165,
- /* 660 */ 1006, 1009, 999, 999, 119, 119, 120, 120, 120, 120,
- /* 670 */ 392, 1189, 1, 1, 552, 2, 1193, 1142, 1143, 1144,
- /* 680 */ 194, 291, 898, 136, 1142, 1143, 1144, 897, 521, 1492,
- /* 690 */ 1273, 3, 380, 6, 121, 122, 112, 1165, 1165, 1006,
- /* 700 */ 1009, 999, 999, 119, 119, 120, 120, 120, 120, 858,
- /* 710 */ 546, 924, 546, 118, 118, 118, 118, 117, 117, 116,
- /* 720 */ 116, 116, 115, 424, 266, 266, 1092, 1569, 1142, 551,
- /* 730 */ 1569, 1193, 13, 13, 13, 13, 291, 543, 136, 392,
- /* 740 */ 485, 421, 420, 966, 344, 1273, 468, 410, 859, 279,
- /* 750 */ 140, 221, 118, 118, 118, 118, 117, 117, 116, 116,
- /* 760 */ 116, 115, 424, 121, 122, 112, 1165, 1165, 1006, 1009,
- /* 770 */ 999, 999, 119, 119, 120, 120, 120, 120, 546, 266,
- /* 780 */ 266, 428, 392, 1142, 1143, 1144, 1172, 830, 1172, 468,
- /* 790 */ 431, 145, 543, 1146, 401, 314, 439, 302, 838, 1490,
- /* 800 */ 71, 71, 412, 6, 1090, 473, 221, 100, 112, 1165,
- /* 810 */ 1165, 1006, 1009, 999, 999, 119, 119, 120, 120, 120,
- /* 820 */ 120, 118, 118, 118, 118, 117, 117, 116, 116, 116,
- /* 830 */ 115, 424, 237, 1425, 546, 451, 428, 287, 986, 546,
- /* 840 */ 236, 235, 234, 830, 97, 529, 429, 1265, 1265, 1146,
- /* 850 */ 494, 307, 430, 838, 977, 546, 71, 71, 976, 1241,
- /* 860 */ 546, 51, 51, 300, 118, 118, 118, 118, 117, 117,
- /* 870 */ 116, 116, 116, 115, 424, 194, 103, 70, 70, 266,
- /* 880 */ 266, 546, 71, 71, 266, 266, 30, 391, 344, 976,
- /* 890 */ 976, 978, 543, 528, 1109, 328, 392, 543, 495, 397,
- /* 900 */ 1470, 195, 530, 13, 13, 1358, 240, 1109, 277, 280,
- /* 910 */ 1109, 280, 304, 457, 306, 333, 392, 31, 188, 419,
- /* 920 */ 121, 122, 112, 1165, 1165, 1006, 1009, 999, 999, 119,
- /* 930 */ 119, 120, 120, 120, 120, 142, 392, 365, 457, 986,
- /* 940 */ 121, 122, 112, 1165, 1165, 1006, 1009, 999, 999, 119,
- /* 950 */ 119, 120, 120, 120, 120, 977, 323, 1142, 326, 976,
- /* 960 */ 121, 110, 112, 1165, 1165, 1006, 1009, 999, 999, 119,
- /* 970 */ 119, 120, 120, 120, 120, 464, 377, 1185, 118, 118,
- /* 980 */ 118, 118, 117, 117, 116, 116, 116, 115, 424, 1142,
- /* 990 */ 976, 976, 978, 305, 9, 366, 244, 362, 118, 118,
- /* 1000 */ 118, 118, 117, 117, 116, 116, 116, 115, 424, 313,
- /* 1010 */ 546, 344, 1142, 1143, 1144, 299, 290, 537, 118, 118,
- /* 1020 */ 118, 118, 117, 117, 116, 116, 116, 115, 424, 1263,
- /* 1030 */ 1263, 1163, 13, 13, 278, 421, 420, 468, 392, 923,
- /* 1040 */ 260, 260, 289, 1169, 1142, 1143, 1144, 189, 1171, 266,
- /* 1050 */ 266, 468, 390, 543, 1186, 546, 1170, 263, 144, 489,
- /* 1060 */ 922, 546, 543, 122, 112, 1165, 1165, 1006, 1009, 999,
- /* 1070 */ 999, 119, 119, 120, 120, 120, 120, 71, 71, 1142,
- /* 1080 */ 1172, 1272, 1172, 13, 13, 898, 1070, 1163, 546, 468,
- /* 1090 */ 897, 107, 538, 1491, 4, 1268, 1109, 6, 525, 1049,
- /* 1100 */ 12, 1071, 1092, 1570, 312, 455, 1570, 520, 541, 1109,
- /* 1110 */ 56, 56, 1109, 1489, 423, 1358, 1072, 6, 345, 285,
- /* 1120 */ 118, 118, 118, 118, 117, 117, 116, 116, 116, 115,
- /* 1130 */ 424, 425, 1271, 321, 1142, 1143, 1144, 878, 266, 266,
- /* 1140 */ 1277, 107, 538, 535, 4, 1488, 293, 879, 1211, 6,
- /* 1150 */ 210, 543, 543, 164, 294, 496, 416, 204, 541, 267,
- /* 1160 */ 267, 1214, 398, 511, 499, 204, 266, 266, 396, 531,
- /* 1170 */ 8, 986, 543, 519, 546, 922, 458, 105, 105, 543,
- /* 1180 */ 1090, 425, 266, 266, 106, 417, 425, 548, 547, 266,
- /* 1190 */ 266, 976, 518, 535, 1373, 543, 15, 15, 266, 266,
- /* 1200 */ 456, 1120, 543, 266, 266, 1070, 1372, 515, 290, 537,
- /* 1210 */ 546, 543, 514, 97, 444, 316, 543, 546, 922, 125,
- /* 1220 */ 1071, 986, 976, 976, 978, 979, 27, 105, 105, 401,
- /* 1230 */ 343, 1511, 44, 44, 106, 1072, 425, 548, 547, 57,
- /* 1240 */ 57, 976, 343, 1511, 107, 538, 546, 4, 462, 401,
- /* 1250 */ 214, 1120, 459, 297, 377, 1091, 534, 1309, 546, 539,
- /* 1260 */ 398, 541, 290, 537, 104, 244, 102, 526, 58, 58,
- /* 1270 */ 546, 199, 976, 976, 978, 979, 27, 1516, 1131, 427,
- /* 1280 */ 59, 59, 270, 237, 425, 138, 95, 375, 375, 374,
- /* 1290 */ 255, 372, 60, 60, 817, 1180, 535, 546, 273, 546,
- /* 1300 */ 1163, 1308, 389, 388, 546, 438, 546, 215, 210, 296,
- /* 1310 */ 515, 849, 546, 265, 208, 516, 1476, 295, 274, 61,
- /* 1320 */ 61, 62, 62, 308, 986, 109, 45, 45, 46, 46,
- /* 1330 */ 105, 105, 1186, 922, 47, 47, 341, 106, 546, 425,
- /* 1340 */ 548, 547, 1542, 546, 976, 867, 340, 217, 546, 937,
- /* 1350 */ 397, 107, 538, 218, 4, 156, 1163, 938, 158, 546,
- /* 1360 */ 49, 49, 1162, 546, 268, 50, 50, 546, 541, 1450,
- /* 1370 */ 63, 63, 546, 1449, 216, 976, 976, 978, 979, 27,
- /* 1380 */ 446, 64, 64, 546, 460, 65, 65, 546, 318, 14,
- /* 1390 */ 14, 425, 1305, 546, 66, 66, 1087, 546, 141, 379,
- /* 1400 */ 38, 546, 963, 535, 322, 127, 127, 546, 393, 67,
- /* 1410 */ 67, 546, 325, 290, 537, 52, 52, 515, 546, 68,
- /* 1420 */ 68, 845, 514, 69, 69, 399, 165, 857, 856, 53,
- /* 1430 */ 53, 986, 311, 151, 151, 97, 432, 105, 105, 327,
- /* 1440 */ 152, 152, 526, 1048, 106, 1048, 425, 548, 547, 1131,
- /* 1450 */ 427, 976, 1032, 270, 968, 239, 329, 243, 375, 375,
- /* 1460 */ 374, 255, 372, 940, 941, 817, 1296, 546, 220, 546,
- /* 1470 */ 107, 538, 546, 4, 546, 1256, 199, 845, 215, 1036,
- /* 1480 */ 296, 1530, 976, 976, 978, 979, 27, 541, 295, 76,
- /* 1490 */ 76, 54, 54, 980, 72, 72, 128, 128, 864, 865,
- /* 1500 */ 107, 538, 546, 4, 1047, 546, 1047, 533, 469, 546,
- /* 1510 */ 425, 546, 450, 1240, 546, 243, 546, 541, 217, 546,
- /* 1520 */ 452, 197, 535, 243, 73, 73, 156, 129, 129, 158,
- /* 1530 */ 336, 130, 130, 126, 126, 1036, 150, 150, 149, 149,
- /* 1540 */ 425, 134, 134, 317, 474, 216, 97, 239, 331, 980,
- /* 1550 */ 986, 97, 535, 346, 347, 546, 105, 105, 902, 931,
- /* 1560 */ 546, 895, 243, 106, 109, 425, 548, 547, 546, 1505,
- /* 1570 */ 976, 828, 99, 538, 139, 4, 546, 133, 133, 393,
- /* 1580 */ 986, 1317, 131, 131, 290, 537, 105, 105, 1357, 541,
- /* 1590 */ 132, 132, 1292, 106, 1303, 425, 548, 547, 75, 75,
- /* 1600 */ 976, 976, 976, 978, 979, 27, 546, 432, 896, 1289,
- /* 1610 */ 532, 109, 425, 1363, 546, 1221, 1213, 1202, 258, 546,
- /* 1620 */ 349, 546, 1201, 11, 535, 1203, 1524, 351, 77, 77,
- /* 1630 */ 376, 976, 976, 978, 979, 27, 74, 74, 353, 213,
- /* 1640 */ 301, 43, 43, 48, 48, 437, 310, 201, 303, 1350,
- /* 1650 */ 315, 355, 986, 454, 479, 1239, 339, 192, 105, 105,
- /* 1660 */ 1422, 1421, 193, 536, 205, 106, 1527, 425, 548, 547,
- /* 1670 */ 1180, 167, 976, 270, 247, 1469, 1467, 1177, 375, 375,
- /* 1680 */ 374, 255, 372, 200, 369, 817, 400, 83, 79, 82,
- /* 1690 */ 1427, 448, 177, 95, 1342, 161, 169, 1339, 215, 440,
- /* 1700 */ 296, 172, 173, 976, 976, 978, 979, 27, 295, 174,
- /* 1710 */ 175, 441, 472, 223, 1347, 383, 35, 381, 36, 461,
- /* 1720 */ 88, 1353, 181, 447, 384, 1416, 227, 467, 259, 229,
- /* 1730 */ 186, 488, 470, 324, 1250, 230, 231, 320, 217, 1204,
- /* 1740 */ 1438, 1259, 386, 1258, 413, 90, 156, 849, 1541, 158,
- /* 1750 */ 206, 415, 1540, 507, 1300, 1257, 94, 348, 1229, 1301,
- /* 1760 */ 387, 1510, 1228, 338, 1227, 216, 350, 1539, 498, 283,
- /* 1770 */ 284, 1249, 501, 1299, 352, 245, 246, 418, 1298, 354,
- /* 1780 */ 1496, 1495, 124, 10, 526, 363, 101, 1324, 253, 96,
- /* 1790 */ 510, 1210, 34, 549, 1137, 254, 256, 257, 166, 393,
- /* 1800 */ 550, 1199, 1282, 361, 290, 537, 1281, 196, 367, 368,
- /* 1810 */ 1194, 153, 1454, 137, 281, 1323, 1455, 804, 154, 426,
- /* 1820 */ 198, 155, 1453, 1452, 292, 212, 202, 432, 1402, 203,
- /* 1830 */ 271, 135, 288, 78, 1046, 1044, 960, 168, 157, 881,
- /* 1840 */ 170, 219, 309, 222, 1060, 176, 964, 159, 402, 84,
- /* 1850 */ 178, 404, 85, 86, 87, 160, 1063, 224, 394, 395,
- /* 1860 */ 225, 1059, 146, 18, 226, 319, 243, 1174, 466, 228,
- /* 1870 */ 1052, 182, 183, 37, 819, 471, 340, 232, 332, 483,
- /* 1880 */ 184, 89, 162, 19, 20, 475, 91, 480, 847, 335,
- /* 1890 */ 147, 860, 282, 92, 490, 93, 1125, 148, 1012, 1095,
- /* 1900 */ 39, 497, 1096, 40, 500, 262, 207, 264, 930, 187,
- /* 1910 */ 925, 109, 1111, 1115, 1113, 7, 1099, 242, 33, 1119,
- /* 1920 */ 21, 522, 22, 23, 24, 1118, 25, 190, 97, 26,
- /* 1930 */ 1027, 1013, 1011, 1015, 1069, 1016, 1068, 249, 248, 28,
- /* 1940 */ 41, 891, 981, 829, 108, 29, 250, 542, 251, 370,
- /* 1950 */ 373, 1133, 1132, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
- /* 1960 */ 1532, 1531,
+ /* 0 */ 563, 1295, 563, 1274, 168, 361, 115, 112, 218, 373,
+ /* 10 */ 563, 1295, 374, 563, 488, 563, 115, 112, 218, 406,
+ /* 20 */ 1300, 1300, 41, 41, 41, 41, 514, 1504, 520, 1298,
+ /* 30 */ 1298, 959, 41, 41, 1257, 71, 71, 51, 51, 960,
+ /* 40 */ 557, 557, 557, 122, 123, 113, 1200, 1200, 1035, 1038,
+ /* 50 */ 1028, 1028, 120, 120, 121, 121, 121, 121, 414, 406,
+ /* 60 */ 273, 273, 273, 273, 115, 112, 218, 115, 112, 218,
+ /* 70 */ 197, 268, 545, 560, 515, 560, 1260, 563, 385, 248,
+ /* 80 */ 215, 521, 399, 122, 123, 113, 1200, 1200, 1035, 1038,
+ /* 90 */ 1028, 1028, 120, 120, 121, 121, 121, 121, 540, 13,
+ /* 100 */ 13, 1259, 119, 119, 119, 119, 118, 118, 117, 117,
+ /* 110 */ 117, 116, 441, 1176, 419, 1531, 446, 137, 512, 1539,
+ /* 120 */ 1545, 372, 1547, 6, 371, 1176, 1148, 1584, 1148, 406,
+ /* 130 */ 1545, 534, 115, 112, 218, 1267, 99, 441, 121, 121,
+ /* 140 */ 121, 121, 119, 119, 119, 119, 118, 118, 117, 117,
+ /* 150 */ 117, 116, 441, 122, 123, 113, 1200, 1200, 1035, 1038,
+ /* 160 */ 1028, 1028, 120, 120, 121, 121, 121, 121, 197, 1176,
+ /* 170 */ 1177, 1178, 241, 304, 554, 501, 498, 497, 473, 124,
+ /* 180 */ 394, 1176, 1177, 1178, 1176, 496, 119, 119, 119, 119,
+ /* 190 */ 118, 118, 117, 117, 117, 116, 441, 139, 540, 406,
+ /* 200 */ 121, 121, 121, 121, 114, 117, 117, 117, 116, 441,
+ /* 210 */ 541, 1532, 119, 119, 119, 119, 118, 118, 117, 117,
+ /* 220 */ 117, 116, 441, 122, 123, 113, 1200, 1200, 1035, 1038,
+ /* 230 */ 1028, 1028, 120, 120, 121, 121, 121, 121, 406, 320,
+ /* 240 */ 1176, 1177, 1178, 81, 342, 1590, 396, 80, 119, 119,
+ /* 250 */ 119, 119, 118, 118, 117, 117, 117, 116, 441, 1176,
+ /* 260 */ 211, 450, 122, 123, 113, 1200, 1200, 1035, 1038, 1028,
+ /* 270 */ 1028, 120, 120, 121, 121, 121, 121, 251, 450, 449,
+ /* 280 */ 273, 273, 119, 119, 119, 119, 118, 118, 117, 117,
+ /* 290 */ 117, 116, 441, 560, 1224, 1, 1, 569, 2, 1228,
+ /* 300 */ 317, 1176, 319, 1561, 305, 337, 140, 340, 406, 430,
+ /* 310 */ 469, 1533, 1197, 1308, 348, 1176, 1177, 1178, 168, 462,
+ /* 320 */ 330, 119, 119, 119, 119, 118, 118, 117, 117, 117,
+ /* 330 */ 116, 441, 122, 123, 113, 1200, 1200, 1035, 1038, 1028,
+ /* 340 */ 1028, 120, 120, 121, 121, 121, 121, 273, 273, 563,
+ /* 350 */ 83, 450, 416, 1564, 569, 2, 1228, 1176, 1177, 1178,
+ /* 360 */ 560, 305, 471, 140, 944, 995, 860, 563, 467, 1197,
+ /* 370 */ 1308, 13, 13, 137, 229, 118, 118, 117, 117, 117,
+ /* 380 */ 116, 441, 96, 318, 946, 504, 424, 361, 562, 71,
+ /* 390 */ 71, 119, 119, 119, 119, 118, 118, 117, 117, 117,
+ /* 400 */ 116, 441, 427, 205, 273, 273, 445, 1015, 259, 276,
+ /* 410 */ 356, 507, 351, 506, 246, 406, 959, 560, 328, 344,
+ /* 420 */ 347, 315, 860, 1006, 960, 126, 545, 1005, 313, 304,
+ /* 430 */ 554, 229, 538, 1539, 148, 544, 281, 6, 203, 122,
+ /* 440 */ 123, 113, 1200, 1200, 1035, 1038, 1028, 1028, 120, 120,
+ /* 450 */ 121, 121, 121, 121, 563, 217, 563, 12, 406, 1005,
+ /* 460 */ 1005, 1007, 502, 445, 119, 119, 119, 119, 118, 118,
+ /* 470 */ 117, 117, 117, 116, 441, 452, 71, 71, 70, 70,
+ /* 480 */ 944, 137, 122, 123, 113, 1200, 1200, 1035, 1038, 1028,
+ /* 490 */ 1028, 120, 120, 121, 121, 121, 121, 1530, 119, 119,
+ /* 500 */ 119, 119, 118, 118, 117, 117, 117, 116, 441, 403,
+ /* 510 */ 402, 241, 1176, 545, 501, 498, 497, 1468, 1143, 451,
+ /* 520 */ 267, 267, 513, 1540, 496, 142, 1176, 6, 406, 530,
+ /* 530 */ 194, 1143, 864, 560, 1143, 461, 182, 304, 554, 32,
+ /* 540 */ 379, 119, 119, 119, 119, 118, 118, 117, 117, 117,
+ /* 550 */ 116, 441, 122, 123, 113, 1200, 1200, 1035, 1038, 1028,
+ /* 560 */ 1028, 120, 120, 121, 121, 121, 121, 406, 1176, 1177,
+ /* 570 */ 1178, 857, 568, 1176, 1228, 925, 1176, 454, 361, 305,
+ /* 580 */ 189, 140, 1176, 1177, 1178, 519, 529, 404, 1308, 183,
+ /* 590 */ 1015, 122, 123, 113, 1200, 1200, 1035, 1038, 1028, 1028,
+ /* 600 */ 120, 120, 121, 121, 121, 121, 1006, 16, 16, 370,
+ /* 610 */ 1005, 119, 119, 119, 119, 118, 118, 117, 117, 117,
+ /* 620 */ 116, 441, 273, 273, 1537, 150, 1176, 98, 6, 1176,
+ /* 630 */ 1177, 1178, 1176, 1177, 1178, 560, 380, 406, 376, 438,
+ /* 640 */ 437, 1161, 1005, 1005, 1007, 1025, 1025, 1036, 1039, 229,
+ /* 650 */ 119, 119, 119, 119, 118, 118, 117, 117, 117, 116,
+ /* 660 */ 441, 122, 123, 113, 1200, 1200, 1035, 1038, 1028, 1028,
+ /* 670 */ 120, 120, 121, 121, 121, 121, 406, 1143, 1619, 392,
+ /* 680 */ 1016, 445, 1176, 1177, 1178, 1207, 525, 1207, 1530, 995,
+ /* 690 */ 1143, 304, 554, 1143, 5, 563, 543, 3, 361, 216,
+ /* 700 */ 122, 123, 113, 1200, 1200, 1035, 1038, 1028, 1028, 120,
+ /* 710 */ 120, 121, 121, 121, 121, 143, 563, 13, 13, 1029,
+ /* 720 */ 119, 119, 119, 119, 118, 118, 117, 117, 117, 116,
+ /* 730 */ 441, 1176, 426, 563, 1176, 563, 274, 274, 13, 13,
+ /* 740 */ 1078, 1176, 328, 457, 316, 147, 406, 211, 361, 560,
+ /* 750 */ 1000, 213, 511, 293, 477, 55, 55, 71, 71, 119,
+ /* 760 */ 119, 119, 119, 118, 118, 117, 117, 117, 116, 441,
+ /* 770 */ 122, 123, 113, 1200, 1200, 1035, 1038, 1028, 1028, 120,
+ /* 780 */ 120, 121, 121, 121, 121, 406, 455, 1176, 1177, 1178,
+ /* 790 */ 1176, 1177, 1178, 471, 526, 149, 404, 1176, 1177, 1178,
+ /* 800 */ 105, 270, 103, 563, 944, 563, 116, 441, 1530, 122,
+ /* 810 */ 123, 113, 1200, 1200, 1035, 1038, 1028, 1028, 120, 120,
+ /* 820 */ 121, 121, 121, 121, 945, 13, 13, 13, 13, 119,
+ /* 830 */ 119, 119, 119, 118, 118, 117, 117, 117, 116, 441,
+ /* 840 */ 191, 563, 192, 563, 416, 439, 439, 439, 1083, 1083,
+ /* 850 */ 485, 561, 285, 914, 914, 406, 462, 330, 1530, 830,
+ /* 860 */ 831, 832, 206, 71, 71, 71, 71, 286, 119, 119,
+ /* 870 */ 119, 119, 118, 118, 117, 117, 117, 116, 441, 122,
+ /* 880 */ 123, 113, 1200, 1200, 1035, 1038, 1028, 1028, 120, 120,
+ /* 890 */ 121, 121, 121, 121, 563, 217, 563, 1122, 1617, 406,
+ /* 900 */ 300, 1617, 301, 416, 1278, 1473, 244, 243, 242, 1249,
+ /* 910 */ 412, 556, 412, 282, 842, 279, 71, 71, 71, 71,
+ /* 920 */ 944, 1415, 1473, 1475, 101, 113, 1200, 1200, 1035, 1038,
+ /* 930 */ 1028, 1028, 120, 120, 121, 121, 121, 121, 119, 119,
+ /* 940 */ 119, 119, 118, 118, 117, 117, 117, 116, 441, 273,
+ /* 950 */ 273, 1099, 563, 436, 1143, 440, 563, 1122, 1618, 357,
+ /* 960 */ 1558, 1618, 560, 546, 488, 197, 1100, 1143, 378, 290,
+ /* 970 */ 1143, 1306, 284, 460, 71, 71, 1120, 405, 13, 13,
+ /* 980 */ 145, 1101, 119, 119, 119, 119, 118, 118, 117, 117,
+ /* 990 */ 117, 116, 441, 542, 104, 1473, 509, 273, 273, 294,
+ /* 1000 */ 1514, 294, 900, 273, 273, 273, 273, 563, 1503, 563,
+ /* 1010 */ 560, 545, 901, 464, 406, 1058, 560, 852, 560, 198,
+ /* 1020 */ 547, 1080, 920, 404, 1400, 1080, 146, 919, 38, 56,
+ /* 1030 */ 56, 15, 15, 563, 406, 12, 1120, 471, 122, 123,
+ /* 1040 */ 113, 1200, 1200, 1035, 1038, 1028, 1028, 120, 120, 121,
+ /* 1050 */ 121, 121, 121, 1460, 406, 43, 43, 483, 122, 123,
+ /* 1060 */ 113, 1200, 1200, 1035, 1038, 1028, 1028, 120, 120, 121,
+ /* 1070 */ 121, 121, 121, 563, 852, 9, 471, 251, 122, 111,
+ /* 1080 */ 113, 1200, 1200, 1035, 1038, 1028, 1028, 120, 120, 121,
+ /* 1090 */ 121, 121, 121, 563, 421, 57, 57, 119, 119, 119,
+ /* 1100 */ 119, 118, 118, 117, 117, 117, 116, 441, 1176, 493,
+ /* 1110 */ 563, 289, 1197, 478, 1516, 44, 44, 119, 119, 119,
+ /* 1120 */ 119, 118, 118, 117, 117, 117, 116, 441, 880, 563,
+ /* 1130 */ 536, 563, 58, 58, 488, 1414, 245, 119, 119, 119,
+ /* 1140 */ 119, 118, 118, 117, 117, 117, 116, 441, 563, 535,
+ /* 1150 */ 291, 59, 59, 60, 60, 438, 437, 406, 1154, 505,
+ /* 1160 */ 304, 554, 477, 1204, 1176, 1177, 1178, 881, 1206, 1197,
+ /* 1170 */ 61, 61, 1246, 357, 1558, 1538, 1205, 563, 1467, 6,
+ /* 1180 */ 1176, 488, 123, 113, 1200, 1200, 1035, 1038, 1028, 1028,
+ /* 1190 */ 120, 120, 121, 121, 121, 121, 1400, 1143, 410, 62,
+ /* 1200 */ 62, 1207, 1099, 1207, 411, 447, 273, 273, 537, 1154,
+ /* 1210 */ 1143, 108, 555, 1143, 4, 391, 1220, 1100, 1512, 560,
+ /* 1220 */ 347, 516, 428, 548, 308, 1307, 1536, 1077, 558, 1077,
+ /* 1230 */ 6, 488, 1101, 1400, 488, 309, 1176, 1177, 1178, 563,
+ /* 1240 */ 119, 119, 119, 119, 118, 118, 117, 117, 117, 116,
+ /* 1250 */ 441, 442, 278, 551, 563, 273, 273, 273, 273, 563,
+ /* 1260 */ 327, 45, 45, 552, 563, 528, 422, 563, 560, 1400,
+ /* 1270 */ 560, 108, 555, 137, 4, 1303, 46, 46, 335, 563,
+ /* 1280 */ 482, 47, 47, 477, 479, 307, 49, 49, 558, 50,
+ /* 1290 */ 50, 563, 1015, 563, 1221, 563, 1400, 563, 106, 106,
+ /* 1300 */ 8, 63, 63, 423, 563, 107, 312, 442, 565, 564,
+ /* 1310 */ 563, 442, 1005, 64, 64, 65, 65, 14, 14, 66,
+ /* 1320 */ 66, 391, 1121, 552, 1312, 1180, 128, 128, 563, 304,
+ /* 1330 */ 554, 563, 67, 67, 563, 359, 560, 532, 563, 484,
+ /* 1340 */ 563, 1196, 531, 222, 1005, 1005, 1007, 1008, 27, 522,
+ /* 1350 */ 52, 52, 1015, 68, 68, 563, 69, 69, 106, 106,
+ /* 1360 */ 53, 53, 156, 156, 563, 107, 434, 442, 565, 564,
+ /* 1370 */ 272, 215, 1005, 425, 563, 359, 563, 157, 157, 563,
+ /* 1380 */ 1535, 292, 1180, 98, 6, 1344, 76, 76, 1215, 475,
+ /* 1390 */ 413, 169, 226, 563, 245, 563, 54, 54, 72, 72,
+ /* 1400 */ 1221, 129, 129, 1343, 1005, 1005, 1007, 1008, 27, 1563,
+ /* 1410 */ 1165, 444, 456, 433, 277, 73, 73, 130, 130, 389,
+ /* 1420 */ 389, 388, 262, 386, 1165, 444, 839, 1519, 277, 108,
+ /* 1430 */ 555, 321, 4, 389, 389, 388, 262, 386, 563, 223,
+ /* 1440 */ 839, 311, 468, 84, 202, 523, 558, 1492, 303, 310,
+ /* 1450 */ 563, 110, 404, 223, 563, 311, 206, 30, 404, 277,
+ /* 1460 */ 131, 131, 411, 310, 389, 389, 388, 262, 386, 442,
+ /* 1470 */ 920, 839, 127, 127, 563, 919, 155, 155, 1491, 225,
+ /* 1480 */ 563, 552, 871, 563, 223, 476, 311, 161, 31, 563,
+ /* 1490 */ 135, 563, 480, 225, 310, 532, 154, 154, 332, 17,
+ /* 1500 */ 533, 161, 136, 136, 135, 134, 134, 224, 228, 355,
+ /* 1510 */ 1015, 132, 132, 133, 133, 1589, 106, 106, 889, 354,
+ /* 1520 */ 563, 224, 563, 107, 225, 442, 565, 564, 1117, 275,
+ /* 1530 */ 1005, 393, 161, 518, 563, 135, 108, 555, 417, 4,
+ /* 1540 */ 1340, 407, 75, 75, 77, 77, 304, 554, 867, 563,
+ /* 1550 */ 336, 563, 224, 558, 463, 407, 74, 74, 465, 1065,
+ /* 1560 */ 304, 554, 1005, 1005, 1007, 1008, 27, 962, 963, 543,
+ /* 1570 */ 448, 42, 42, 48, 48, 326, 442, 325, 98, 997,
+ /* 1580 */ 470, 287, 250, 250, 448, 1009, 407, 472, 552, 339,
+ /* 1590 */ 250, 304, 554, 879, 878, 331, 108, 555, 98, 4,
+ /* 1600 */ 1277, 494, 532, 345, 247, 867, 98, 531, 341, 886,
+ /* 1610 */ 887, 1126, 1076, 558, 1076, 448, 1065, 1015, 1061, 953,
+ /* 1620 */ 343, 247, 250, 106, 106, 1291, 917, 1276, 850, 110,
+ /* 1630 */ 107, 144, 442, 565, 564, 918, 442, 1005, 110, 1275,
+ /* 1640 */ 350, 360, 1009, 1331, 1352, 299, 1399, 1577, 552, 1327,
+ /* 1650 */ 1552, 550, 1338, 549, 1405, 1256, 1248, 1237, 1236, 1238,
+ /* 1660 */ 1571, 489, 265, 200, 1324, 363, 365, 367, 11, 1005,
+ /* 1670 */ 1005, 1007, 1008, 27, 390, 221, 1386, 1015, 280, 1391,
+ /* 1680 */ 1381, 208, 323, 106, 106, 924, 1374, 453, 283, 324,
+ /* 1690 */ 107, 474, 442, 565, 564, 1390, 499, 1005, 212, 288,
+ /* 1700 */ 1274, 397, 353, 108, 555, 195, 4, 1464, 369, 1463,
+ /* 1710 */ 1574, 1215, 1212, 329, 553, 171, 207, 383, 1511, 196,
+ /* 1720 */ 558, 254, 1509, 415, 100, 555, 83, 4, 204, 1005,
+ /* 1730 */ 1005, 1007, 1008, 27, 219, 79, 82, 1469, 180, 166,
+ /* 1740 */ 173, 558, 458, 442, 175, 176, 177, 178, 35, 1387,
+ /* 1750 */ 492, 459, 231, 1395, 96, 552, 1393, 1392, 395, 184,
+ /* 1760 */ 481, 466, 36, 235, 442, 89, 398, 266, 487, 1480,
+ /* 1770 */ 1458, 237, 188, 338, 508, 429, 552, 490, 400, 238,
+ /* 1780 */ 334, 1239, 239, 1294, 1015, 1293, 1292, 1285, 91, 871,
+ /* 1790 */ 106, 106, 213, 431, 1588, 432, 524, 107, 517, 442,
+ /* 1800 */ 565, 564, 401, 1264, 1005, 1015, 1263, 1587, 352, 1262,
+ /* 1810 */ 1557, 106, 106, 1586, 1284, 297, 298, 358, 107, 1335,
+ /* 1820 */ 442, 565, 564, 95, 362, 1005, 253, 252, 435, 125,
+ /* 1830 */ 543, 10, 1444, 1543, 377, 1542, 1005, 1005, 1007, 1008,
+ /* 1840 */ 27, 302, 102, 97, 527, 1336, 260, 1317, 364, 1245,
+ /* 1850 */ 1334, 34, 566, 1171, 366, 381, 375, 1005, 1005, 1007,
+ /* 1860 */ 1008, 27, 1333, 1359, 368, 1316, 199, 382, 261, 263,
+ /* 1870 */ 264, 1358, 158, 1496, 141, 1497, 1495, 567, 1234, 1229,
+ /* 1880 */ 1494, 295, 159, 209, 210, 78, 826, 443, 201, 306,
+ /* 1890 */ 220, 1075, 138, 1073, 160, 314, 162, 172, 1196, 174,
+ /* 1900 */ 903, 227, 230, 322, 1089, 179, 163, 164, 418, 85,
+ /* 1910 */ 420, 181, 170, 408, 409, 86, 87, 165, 88, 1092,
+ /* 1920 */ 232, 233, 1088, 151, 18, 234, 1081, 250, 333, 185,
+ /* 1930 */ 1209, 486, 236, 186, 37, 841, 491, 354, 240, 346,
+ /* 1940 */ 503, 187, 90, 167, 19, 495, 20, 869, 500, 349,
+ /* 1950 */ 92, 882, 296, 152, 93, 510, 1127, 1159, 153, 1041,
+ /* 1960 */ 214, 1128, 39, 94, 269, 271, 952, 190, 947, 110,
+ /* 1970 */ 1149, 1145, 1153, 249, 1133, 1147, 7, 33, 21, 193,
+ /* 1980 */ 22, 23, 24, 25, 1152, 539, 98, 1056, 26, 1042,
+ /* 1990 */ 1040, 1044, 1098, 1045, 1097, 256, 255, 28, 40, 387,
+ /* 2000 */ 1010, 851, 109, 29, 1167, 559, 384, 257, 913, 258,
+ /* 2010 */ 1166, 1579, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1578,
};
static const YYCODETYPE yy_lookahead[] = {
- /* 0 */ 189, 211, 189, 189, 218, 189, 220, 189, 267, 268,
- /* 10 */ 269, 189, 210, 189, 228, 189, 267, 268, 269, 19,
- /* 20 */ 218, 189, 211, 212, 211, 212, 211, 211, 212, 211,
- /* 30 */ 212, 31, 211, 211, 212, 211, 212, 288, 300, 39,
- /* 40 */ 21, 189, 304, 43, 44, 45, 46, 47, 48, 49,
- /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 225, 19,
- /* 60 */ 189, 183, 184, 185, 186, 189, 248, 263, 236, 191,
- /* 70 */ 248, 193, 248, 197, 208, 257, 262, 201, 200, 257,
- /* 80 */ 200, 257, 81, 43, 44, 45, 46, 47, 48, 49,
- /* 90 */ 50, 51, 52, 53, 54, 55, 56, 57, 189, 80,
- /* 100 */ 189, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- /* 110 */ 110, 111, 234, 235, 234, 235, 305, 306, 305, 118,
- /* 120 */ 307, 305, 306, 297, 298, 247, 86, 247, 88, 19,
- /* 130 */ 259, 251, 252, 267, 268, 269, 26, 136, 137, 261,
- /* 140 */ 121, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- /* 150 */ 110, 111, 59, 43, 44, 45, 46, 47, 48, 49,
- /* 160 */ 50, 51, 52, 53, 54, 55, 56, 57, 259, 291,
- /* 170 */ 105, 106, 107, 108, 109, 110, 111, 158, 189, 69,
- /* 180 */ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- /* 190 */ 111, 107, 108, 109, 110, 111, 205, 206, 207, 19,
- /* 200 */ 19, 54, 55, 56, 57, 58, 29, 114, 115, 116,
- /* 210 */ 33, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- /* 220 */ 110, 111, 233, 43, 44, 45, 46, 47, 48, 49,
- /* 230 */ 50, 51, 52, 53, 54, 55, 56, 57, 19, 126,
- /* 240 */ 127, 148, 65, 24, 214, 200, 59, 67, 101, 102,
- /* 250 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 22,
- /* 260 */ 189, 111, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 270 */ 51, 52, 53, 54, 55, 56, 57, 206, 207, 234,
- /* 280 */ 235, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- /* 290 */ 110, 111, 247, 76, 107, 114, 59, 267, 268, 269,
- /* 300 */ 189, 114, 115, 116, 162, 163, 89, 19, 263, 92,
- /* 310 */ 189, 23, 54, 55, 56, 57, 189, 206, 207, 22,
- /* 320 */ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- /* 330 */ 111, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- /* 340 */ 52, 53, 54, 55, 56, 57, 19, 189, 277, 59,
- /* 350 */ 23, 114, 115, 116, 46, 47, 48, 49, 61, 101,
- /* 360 */ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- /* 370 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- /* 380 */ 53, 54, 55, 56, 57, 125, 126, 127, 277, 101,
- /* 390 */ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- /* 400 */ 59, 189, 189, 276, 114, 115, 116, 117, 73, 59,
- /* 410 */ 120, 121, 122, 72, 214, 19, 81, 259, 19, 23,
- /* 420 */ 130, 81, 72, 24, 211, 212, 221, 119, 101, 102,
- /* 430 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 43,
+ /* 0 */ 191, 220, 191, 222, 191, 191, 271, 272, 273, 216,
+ /* 10 */ 191, 230, 216, 191, 191, 191, 271, 272, 273, 19,
+ /* 20 */ 232, 233, 213, 214, 213, 214, 202, 292, 202, 232,
+ /* 30 */ 233, 31, 213, 214, 213, 213, 214, 213, 214, 39,
+ /* 40 */ 207, 208, 209, 43, 44, 45, 46, 47, 48, 49,
+ /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 235, 19,
+ /* 60 */ 236, 237, 236, 237, 271, 272, 273, 271, 272, 273,
+ /* 70 */ 191, 210, 250, 249, 250, 249, 213, 191, 199, 253,
+ /* 80 */ 254, 259, 203, 43, 44, 45, 46, 47, 48, 49,
+ /* 90 */ 50, 51, 52, 53, 54, 55, 56, 57, 191, 213,
+ /* 100 */ 214, 213, 102, 103, 104, 105, 106, 107, 108, 109,
+ /* 110 */ 110, 111, 112, 59, 228, 301, 293, 81, 305, 306,
+ /* 120 */ 311, 312, 311, 310, 313, 59, 86, 212, 88, 19,
+ /* 130 */ 311, 312, 271, 272, 273, 220, 26, 112, 54, 55,
+ /* 140 */ 56, 57, 102, 103, 104, 105, 106, 107, 108, 109,
+ /* 150 */ 110, 111, 112, 43, 44, 45, 46, 47, 48, 49,
+ /* 160 */ 50, 51, 52, 53, 54, 55, 56, 57, 191, 115,
+ /* 170 */ 116, 117, 118, 137, 138, 121, 122, 123, 191, 69,
+ /* 180 */ 203, 115, 116, 117, 59, 131, 102, 103, 104, 105,
+ /* 190 */ 106, 107, 108, 109, 110, 111, 112, 72, 191, 19,
+ /* 200 */ 54, 55, 56, 57, 58, 108, 109, 110, 111, 112,
+ /* 210 */ 303, 304, 102, 103, 104, 105, 106, 107, 108, 109,
+ /* 220 */ 110, 111, 112, 43, 44, 45, 46, 47, 48, 49,
+ /* 230 */ 50, 51, 52, 53, 54, 55, 56, 57, 19, 16,
+ /* 240 */ 115, 116, 117, 24, 16, 227, 202, 67, 102, 103,
+ /* 250 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 59,
+ /* 260 */ 26, 191, 43, 44, 45, 46, 47, 48, 49, 50,
+ /* 270 */ 51, 52, 53, 54, 55, 56, 57, 24, 208, 209,
+ /* 280 */ 236, 237, 102, 103, 104, 105, 106, 107, 108, 109,
+ /* 290 */ 110, 111, 112, 249, 183, 184, 185, 186, 187, 188,
+ /* 300 */ 77, 59, 79, 191, 193, 77, 195, 79, 19, 19,
+ /* 310 */ 266, 304, 59, 202, 24, 115, 116, 117, 191, 127,
+ /* 320 */ 128, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ /* 330 */ 111, 112, 43, 44, 45, 46, 47, 48, 49, 50,
+ /* 340 */ 51, 52, 53, 54, 55, 56, 57, 236, 237, 191,
+ /* 350 */ 150, 281, 191, 185, 186, 187, 188, 115, 116, 117,
+ /* 360 */ 249, 193, 191, 195, 26, 73, 59, 191, 114, 116,
+ /* 370 */ 202, 213, 214, 81, 263, 106, 107, 108, 109, 110,
+ /* 380 */ 111, 112, 148, 160, 142, 95, 228, 191, 191, 213,
+ /* 390 */ 214, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ /* 400 */ 111, 112, 112, 149, 236, 237, 295, 100, 118, 119,
+ /* 410 */ 120, 121, 122, 123, 124, 19, 31, 249, 126, 23,
+ /* 420 */ 130, 260, 115, 116, 39, 22, 250, 120, 191, 137,
+ /* 430 */ 138, 263, 305, 306, 238, 259, 265, 310, 149, 43,
/* 440 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 450 */ 54, 55, 56, 57, 19, 114, 115, 116, 23, 208,
- /* 460 */ 125, 248, 189, 189, 114, 115, 116, 267, 268, 269,
- /* 470 */ 189, 136, 137, 189, 262, 22, 136, 137, 43, 44,
- /* 480 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- /* 490 */ 55, 56, 57, 189, 95, 211, 212, 101, 102, 103,
- /* 500 */ 104, 105, 106, 107, 108, 109, 110, 111, 59, 189,
- /* 510 */ 111, 189, 59, 76, 294, 295, 117, 118, 119, 120,
- /* 520 */ 121, 122, 123, 19, 87, 189, 89, 23, 129, 92,
- /* 530 */ 279, 227, 248, 22, 189, 284, 101, 102, 103, 104,
- /* 540 */ 105, 106, 107, 108, 109, 110, 111, 43, 44, 45,
- /* 550 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- /* 560 */ 56, 57, 19, 114, 115, 116, 23, 114, 115, 116,
- /* 570 */ 59, 117, 299, 300, 120, 121, 122, 304, 189, 189,
- /* 580 */ 143, 189, 110, 111, 130, 22, 43, 44, 45, 46,
- /* 590 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 600 */ 57, 211, 212, 211, 212, 101, 102, 103, 104, 105,
- /* 610 */ 106, 107, 108, 109, 110, 111, 226, 189, 226, 189,
- /* 620 */ 298, 132, 59, 134, 135, 114, 115, 116, 189, 59,
- /* 630 */ 285, 19, 7, 8, 9, 23, 205, 206, 207, 211,
- /* 640 */ 212, 211, 212, 221, 101, 102, 103, 104, 105, 106,
- /* 650 */ 107, 108, 109, 110, 111, 43, 44, 45, 46, 47,
- /* 660 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- /* 670 */ 19, 181, 182, 183, 184, 185, 186, 114, 115, 116,
- /* 680 */ 189, 191, 133, 193, 114, 115, 116, 138, 299, 300,
- /* 690 */ 200, 22, 201, 304, 43, 44, 45, 46, 47, 48,
- /* 700 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 35,
- /* 710 */ 189, 141, 189, 101, 102, 103, 104, 105, 106, 107,
- /* 720 */ 108, 109, 110, 111, 234, 235, 22, 23, 59, 184,
- /* 730 */ 26, 186, 211, 212, 211, 212, 191, 247, 193, 19,
- /* 740 */ 66, 105, 106, 73, 189, 200, 189, 226, 74, 226,
- /* 750 */ 22, 261, 101, 102, 103, 104, 105, 106, 107, 108,
- /* 760 */ 109, 110, 111, 43, 44, 45, 46, 47, 48, 49,
- /* 770 */ 50, 51, 52, 53, 54, 55, 56, 57, 189, 234,
- /* 780 */ 235, 291, 19, 114, 115, 116, 150, 59, 152, 189,
- /* 790 */ 233, 236, 247, 59, 189, 125, 126, 127, 59, 300,
- /* 800 */ 211, 212, 128, 304, 100, 19, 261, 156, 45, 46,
- /* 810 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 820 */ 57, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- /* 830 */ 110, 111, 46, 233, 189, 189, 291, 248, 99, 189,
- /* 840 */ 125, 126, 127, 115, 26, 200, 289, 230, 231, 115,
- /* 850 */ 200, 16, 189, 114, 115, 189, 211, 212, 119, 221,
- /* 860 */ 189, 211, 212, 258, 101, 102, 103, 104, 105, 106,
- /* 870 */ 107, 108, 109, 110, 111, 189, 156, 211, 212, 234,
- /* 880 */ 235, 189, 211, 212, 234, 235, 22, 201, 189, 150,
- /* 890 */ 151, 152, 247, 248, 76, 16, 19, 247, 248, 113,
- /* 900 */ 189, 24, 257, 211, 212, 189, 26, 89, 262, 223,
- /* 910 */ 92, 225, 77, 189, 79, 129, 19, 53, 226, 248,
- /* 920 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- /* 930 */ 53, 54, 55, 56, 57, 236, 19, 271, 189, 99,
- /* 940 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- /* 950 */ 53, 54, 55, 56, 57, 115, 77, 59, 79, 119,
- /* 960 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- /* 970 */ 53, 54, 55, 56, 57, 259, 22, 23, 101, 102,
- /* 980 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 59,
- /* 990 */ 150, 151, 152, 158, 22, 244, 24, 246, 101, 102,
- /* 1000 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 285,
- /* 1010 */ 189, 189, 114, 115, 116, 200, 136, 137, 101, 102,
- /* 1020 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 230,
- /* 1030 */ 231, 59, 211, 212, 285, 105, 106, 189, 19, 141,
- /* 1040 */ 234, 235, 239, 113, 114, 115, 116, 226, 118, 234,
- /* 1050 */ 235, 189, 249, 247, 100, 189, 126, 23, 236, 107,
- /* 1060 */ 26, 189, 247, 44, 45, 46, 47, 48, 49, 50,
- /* 1070 */ 51, 52, 53, 54, 55, 56, 57, 211, 212, 59,
- /* 1080 */ 150, 233, 152, 211, 212, 133, 12, 115, 189, 189,
- /* 1090 */ 138, 19, 20, 300, 22, 233, 76, 304, 226, 11,
- /* 1100 */ 208, 27, 22, 23, 200, 19, 26, 87, 36, 89,
- /* 1110 */ 211, 212, 92, 300, 248, 189, 42, 304, 189, 250,
- /* 1120 */ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- /* 1130 */ 111, 59, 200, 233, 114, 115, 116, 63, 234, 235,
- /* 1140 */ 235, 19, 20, 71, 22, 300, 189, 73, 200, 304,
- /* 1150 */ 116, 247, 247, 81, 189, 200, 227, 26, 36, 234,
- /* 1160 */ 235, 203, 204, 143, 200, 26, 234, 235, 194, 200,
- /* 1170 */ 48, 99, 247, 66, 189, 141, 284, 105, 106, 247,
- /* 1180 */ 100, 59, 234, 235, 112, 259, 114, 115, 116, 234,
- /* 1190 */ 235, 119, 85, 71, 266, 247, 211, 212, 234, 235,
- /* 1200 */ 114, 94, 247, 234, 235, 12, 266, 85, 136, 137,
- /* 1210 */ 189, 247, 90, 26, 126, 127, 247, 189, 26, 22,
- /* 1220 */ 27, 99, 150, 151, 152, 153, 154, 105, 106, 189,
- /* 1230 */ 302, 303, 211, 212, 112, 42, 114, 115, 116, 211,
- /* 1240 */ 212, 119, 302, 303, 19, 20, 189, 22, 274, 189,
- /* 1250 */ 15, 144, 278, 189, 22, 23, 63, 189, 189, 203,
- /* 1260 */ 204, 36, 136, 137, 155, 24, 157, 143, 211, 212,
- /* 1270 */ 189, 140, 150, 151, 152, 153, 154, 0, 1, 2,
- /* 1280 */ 211, 212, 5, 46, 59, 161, 147, 10, 11, 12,
- /* 1290 */ 13, 14, 211, 212, 17, 60, 71, 189, 258, 189,
- /* 1300 */ 59, 189, 105, 106, 189, 189, 189, 30, 116, 32,
- /* 1310 */ 85, 124, 189, 251, 252, 90, 189, 40, 258, 211,
- /* 1320 */ 212, 211, 212, 189, 99, 26, 211, 212, 211, 212,
- /* 1330 */ 105, 106, 100, 141, 211, 212, 119, 112, 189, 114,
- /* 1340 */ 115, 116, 23, 189, 119, 26, 129, 70, 189, 31,
- /* 1350 */ 113, 19, 20, 24, 22, 78, 115, 39, 81, 189,
- /* 1360 */ 211, 212, 26, 189, 22, 211, 212, 189, 36, 189,
- /* 1370 */ 211, 212, 189, 189, 97, 150, 151, 152, 153, 154,
- /* 1380 */ 127, 211, 212, 189, 189, 211, 212, 189, 189, 211,
- /* 1390 */ 212, 59, 189, 189, 211, 212, 23, 189, 22, 26,
- /* 1400 */ 24, 189, 149, 71, 189, 211, 212, 189, 131, 211,
- /* 1410 */ 212, 189, 189, 136, 137, 211, 212, 85, 189, 211,
- /* 1420 */ 212, 59, 90, 211, 212, 292, 293, 118, 119, 211,
- /* 1430 */ 212, 99, 23, 211, 212, 26, 159, 105, 106, 189,
- /* 1440 */ 211, 212, 143, 150, 112, 152, 114, 115, 116, 1,
- /* 1450 */ 2, 119, 23, 5, 23, 26, 189, 26, 10, 11,
- /* 1460 */ 12, 13, 14, 83, 84, 17, 253, 189, 139, 189,
- /* 1470 */ 19, 20, 189, 22, 189, 189, 140, 115, 30, 59,
- /* 1480 */ 32, 139, 150, 151, 152, 153, 154, 36, 40, 211,
- /* 1490 */ 212, 211, 212, 59, 211, 212, 211, 212, 7, 8,
- /* 1500 */ 19, 20, 189, 22, 150, 189, 152, 231, 281, 189,
- /* 1510 */ 59, 189, 23, 189, 189, 26, 189, 36, 70, 189,
- /* 1520 */ 23, 237, 71, 26, 211, 212, 78, 211, 212, 81,
- /* 1530 */ 189, 211, 212, 211, 212, 115, 211, 212, 211, 212,
- /* 1540 */ 59, 211, 212, 23, 23, 97, 26, 26, 23, 115,
- /* 1550 */ 99, 26, 71, 189, 189, 189, 105, 106, 107, 23,
- /* 1560 */ 189, 23, 26, 112, 26, 114, 115, 116, 189, 309,
- /* 1570 */ 119, 23, 19, 20, 26, 22, 189, 211, 212, 131,
- /* 1580 */ 99, 189, 211, 212, 136, 137, 105, 106, 189, 36,
- /* 1590 */ 211, 212, 189, 112, 189, 114, 115, 116, 211, 212,
- /* 1600 */ 119, 150, 151, 152, 153, 154, 189, 159, 23, 250,
- /* 1610 */ 189, 26, 59, 189, 189, 189, 189, 189, 280, 189,
- /* 1620 */ 250, 189, 189, 238, 71, 189, 189, 250, 211, 212,
- /* 1630 */ 187, 150, 151, 152, 153, 154, 211, 212, 250, 290,
- /* 1640 */ 240, 211, 212, 211, 212, 254, 286, 209, 254, 241,
- /* 1650 */ 240, 254, 99, 286, 215, 220, 214, 244, 105, 106,
- /* 1660 */ 214, 214, 244, 273, 224, 112, 192, 114, 115, 116,
- /* 1670 */ 60, 290, 119, 5, 139, 196, 196, 38, 10, 11,
- /* 1680 */ 12, 13, 14, 238, 240, 17, 196, 148, 287, 287,
- /* 1690 */ 276, 113, 22, 147, 241, 43, 229, 241, 30, 18,
- /* 1700 */ 32, 232, 232, 150, 151, 152, 153, 154, 40, 232,
- /* 1710 */ 232, 196, 18, 195, 265, 265, 264, 241, 264, 196,
- /* 1720 */ 155, 229, 229, 241, 241, 241, 195, 62, 196, 195,
- /* 1730 */ 22, 113, 216, 196, 222, 195, 195, 282, 70, 196,
- /* 1740 */ 283, 213, 216, 213, 64, 22, 78, 124, 219, 81,
- /* 1750 */ 162, 111, 219, 142, 256, 213, 113, 255, 213, 256,
- /* 1760 */ 216, 303, 215, 213, 213, 97, 255, 213, 216, 275,
- /* 1770 */ 275, 222, 216, 256, 255, 196, 91, 82, 256, 255,
- /* 1780 */ 308, 308, 146, 22, 143, 196, 155, 260, 25, 145,
- /* 1790 */ 144, 199, 26, 198, 13, 190, 190, 6, 293, 131,
- /* 1800 */ 188, 188, 245, 244, 136, 137, 245, 243, 242, 241,
- /* 1810 */ 188, 202, 208, 217, 217, 260, 208, 4, 202, 3,
- /* 1820 */ 22, 202, 208, 208, 160, 15, 209, 159, 270, 209,
- /* 1830 */ 98, 16, 272, 208, 23, 23, 137, 148, 128, 20,
- /* 1840 */ 140, 24, 16, 142, 1, 140, 149, 128, 61, 53,
- /* 1850 */ 148, 37, 53, 53, 53, 128, 114, 34, 296, 296,
- /* 1860 */ 139, 1, 5, 22, 113, 158, 26, 75, 41, 139,
- /* 1870 */ 68, 68, 113, 24, 20, 19, 129, 123, 23, 96,
- /* 1880 */ 22, 22, 37, 22, 22, 67, 22, 67, 59, 24,
- /* 1890 */ 23, 28, 67, 147, 22, 26, 23, 23, 23, 23,
- /* 1900 */ 22, 24, 23, 22, 24, 23, 139, 23, 114, 22,
- /* 1910 */ 141, 26, 88, 75, 86, 44, 23, 34, 22, 75,
- /* 1920 */ 34, 24, 34, 34, 34, 93, 34, 26, 26, 34,
- /* 1930 */ 23, 23, 23, 23, 23, 11, 23, 22, 26, 22,
- /* 1940 */ 22, 133, 23, 23, 22, 22, 139, 26, 139, 23,
- /* 1950 */ 15, 1, 1, 310, 310, 310, 310, 310, 310, 310,
- /* 1960 */ 139, 139, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 1970 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 1980 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 1990 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2000 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2010 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2020 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2030 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2040 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2050 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2060 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2070 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2080 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2090 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2100 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2110 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2120 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2130 */ 310, 310, 310, 310, 310, 310, 310, 310, 310, 310,
- /* 2140 */ 310, 310, 310,
+ /* 450 */ 54, 55, 56, 57, 191, 117, 191, 210, 19, 152,
+ /* 460 */ 153, 154, 23, 295, 102, 103, 104, 105, 106, 107,
+ /* 470 */ 108, 109, 110, 111, 112, 266, 213, 214, 213, 214,
+ /* 480 */ 142, 81, 43, 44, 45, 46, 47, 48, 49, 50,
+ /* 490 */ 51, 52, 53, 54, 55, 56, 57, 301, 102, 103,
+ /* 500 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 106,
+ /* 510 */ 107, 118, 59, 250, 121, 122, 123, 280, 76, 119,
+ /* 520 */ 236, 237, 259, 306, 131, 72, 59, 310, 19, 87,
+ /* 530 */ 283, 89, 23, 249, 92, 288, 22, 137, 138, 22,
+ /* 540 */ 275, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ /* 550 */ 111, 112, 43, 44, 45, 46, 47, 48, 49, 50,
+ /* 560 */ 51, 52, 53, 54, 55, 56, 57, 19, 115, 116,
+ /* 570 */ 117, 23, 186, 59, 188, 108, 59, 241, 191, 193,
+ /* 580 */ 26, 195, 115, 116, 117, 191, 144, 251, 202, 22,
+ /* 590 */ 100, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ /* 600 */ 52, 53, 54, 55, 56, 57, 116, 213, 214, 191,
+ /* 610 */ 120, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ /* 620 */ 111, 112, 236, 237, 306, 238, 59, 26, 310, 115,
+ /* 630 */ 116, 117, 115, 116, 117, 249, 246, 19, 248, 106,
+ /* 640 */ 107, 23, 152, 153, 154, 46, 47, 48, 49, 263,
+ /* 650 */ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ /* 660 */ 112, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ /* 670 */ 52, 53, 54, 55, 56, 57, 19, 76, 298, 299,
+ /* 680 */ 23, 295, 115, 116, 117, 152, 191, 154, 301, 73,
+ /* 690 */ 89, 137, 138, 92, 22, 191, 144, 22, 191, 191,
+ /* 700 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 710 */ 53, 54, 55, 56, 57, 163, 191, 213, 214, 120,
+ /* 720 */ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ /* 730 */ 112, 59, 228, 191, 59, 191, 236, 237, 213, 214,
+ /* 740 */ 11, 59, 126, 127, 128, 238, 19, 26, 191, 249,
+ /* 750 */ 23, 164, 165, 228, 191, 213, 214, 213, 214, 102,
+ /* 760 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ /* 770 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 780 */ 53, 54, 55, 56, 57, 19, 241, 115, 116, 117,
+ /* 790 */ 115, 116, 117, 191, 250, 238, 251, 115, 116, 117,
+ /* 800 */ 157, 23, 159, 191, 26, 191, 111, 112, 301, 43,
+ /* 810 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ /* 820 */ 54, 55, 56, 57, 142, 213, 214, 213, 214, 102,
+ /* 830 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ /* 840 */ 228, 191, 228, 191, 191, 207, 208, 209, 126, 127,
+ /* 850 */ 128, 133, 289, 135, 136, 19, 127, 128, 301, 7,
+ /* 860 */ 8, 9, 141, 213, 214, 213, 214, 265, 102, 103,
+ /* 870 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 43,
+ /* 880 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ /* 890 */ 54, 55, 56, 57, 191, 117, 191, 22, 23, 19,
+ /* 900 */ 250, 26, 250, 191, 223, 191, 126, 127, 128, 205,
+ /* 910 */ 206, 205, 206, 260, 21, 202, 213, 214, 213, 214,
+ /* 920 */ 142, 270, 208, 209, 158, 45, 46, 47, 48, 49,
+ /* 930 */ 50, 51, 52, 53, 54, 55, 56, 57, 102, 103,
+ /* 940 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 236,
+ /* 950 */ 237, 12, 191, 250, 76, 250, 191, 22, 23, 308,
+ /* 960 */ 309, 26, 249, 202, 191, 191, 27, 89, 191, 202,
+ /* 970 */ 92, 202, 260, 80, 213, 214, 101, 203, 213, 214,
+ /* 980 */ 22, 42, 102, 103, 104, 105, 106, 107, 108, 109,
+ /* 990 */ 110, 111, 112, 228, 158, 281, 108, 236, 237, 225,
+ /* 1000 */ 191, 227, 63, 236, 237, 236, 237, 191, 235, 191,
+ /* 1010 */ 249, 250, 73, 241, 19, 122, 249, 59, 249, 24,
+ /* 1020 */ 259, 29, 134, 251, 191, 33, 22, 139, 24, 213,
+ /* 1030 */ 214, 213, 214, 191, 19, 210, 101, 191, 43, 44,
+ /* 1040 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ /* 1050 */ 55, 56, 57, 160, 19, 213, 214, 65, 43, 44,
+ /* 1060 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ /* 1070 */ 55, 56, 57, 191, 116, 22, 191, 24, 43, 44,
+ /* 1080 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ /* 1090 */ 55, 56, 57, 191, 261, 213, 214, 102, 103, 104,
+ /* 1100 */ 105, 106, 107, 108, 109, 110, 111, 112, 59, 19,
+ /* 1110 */ 191, 265, 59, 288, 191, 213, 214, 102, 103, 104,
+ /* 1120 */ 105, 106, 107, 108, 109, 110, 111, 112, 35, 191,
+ /* 1130 */ 66, 191, 213, 214, 191, 270, 46, 102, 103, 104,
+ /* 1140 */ 105, 106, 107, 108, 109, 110, 111, 112, 191, 85,
+ /* 1150 */ 265, 213, 214, 213, 214, 106, 107, 19, 94, 66,
+ /* 1160 */ 137, 138, 191, 114, 115, 116, 117, 74, 119, 116,
+ /* 1170 */ 213, 214, 202, 308, 309, 306, 127, 191, 235, 310,
+ /* 1180 */ 59, 191, 44, 45, 46, 47, 48, 49, 50, 51,
+ /* 1190 */ 52, 53, 54, 55, 56, 57, 191, 76, 196, 213,
+ /* 1200 */ 214, 152, 12, 154, 114, 191, 236, 237, 87, 145,
+ /* 1210 */ 89, 19, 20, 92, 22, 22, 23, 27, 191, 249,
+ /* 1220 */ 130, 202, 129, 202, 191, 235, 306, 152, 36, 154,
+ /* 1230 */ 310, 191, 42, 191, 191, 191, 115, 116, 117, 191,
+ /* 1240 */ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ /* 1250 */ 112, 59, 99, 63, 191, 236, 237, 236, 237, 191,
+ /* 1260 */ 289, 213, 214, 71, 191, 144, 261, 191, 249, 191,
+ /* 1270 */ 249, 19, 20, 81, 22, 235, 213, 214, 235, 191,
+ /* 1280 */ 278, 213, 214, 191, 282, 132, 213, 214, 36, 213,
+ /* 1290 */ 214, 191, 100, 191, 101, 191, 191, 191, 106, 107,
+ /* 1300 */ 48, 213, 214, 261, 191, 113, 191, 115, 116, 117,
+ /* 1310 */ 191, 59, 120, 213, 214, 213, 214, 213, 214, 213,
+ /* 1320 */ 214, 22, 23, 71, 237, 59, 213, 214, 191, 137,
+ /* 1330 */ 138, 191, 213, 214, 191, 191, 249, 85, 191, 261,
+ /* 1340 */ 191, 26, 90, 15, 152, 153, 154, 155, 156, 19,
+ /* 1350 */ 213, 214, 100, 213, 214, 191, 213, 214, 106, 107,
+ /* 1360 */ 213, 214, 213, 214, 191, 113, 261, 115, 116, 117,
+ /* 1370 */ 253, 254, 120, 229, 191, 191, 191, 213, 214, 191,
+ /* 1380 */ 306, 289, 116, 26, 310, 191, 213, 214, 60, 19,
+ /* 1390 */ 296, 297, 24, 191, 46, 191, 213, 214, 213, 214,
+ /* 1400 */ 101, 213, 214, 191, 152, 153, 154, 155, 156, 0,
+ /* 1410 */ 1, 2, 191, 229, 5, 213, 214, 213, 214, 10,
+ /* 1420 */ 11, 12, 13, 14, 1, 2, 17, 191, 5, 19,
+ /* 1430 */ 20, 191, 22, 10, 11, 12, 13, 14, 191, 30,
+ /* 1440 */ 17, 32, 241, 148, 149, 115, 36, 191, 241, 40,
+ /* 1450 */ 191, 26, 251, 30, 191, 32, 141, 22, 251, 5,
+ /* 1460 */ 213, 214, 114, 40, 10, 11, 12, 13, 14, 59,
+ /* 1470 */ 134, 17, 213, 214, 191, 139, 213, 214, 191, 70,
+ /* 1480 */ 191, 71, 125, 191, 30, 115, 32, 78, 53, 191,
+ /* 1490 */ 81, 191, 191, 70, 40, 85, 213, 214, 191, 22,
+ /* 1500 */ 90, 78, 213, 214, 81, 213, 214, 98, 140, 120,
+ /* 1510 */ 100, 213, 214, 213, 214, 23, 106, 107, 26, 130,
+ /* 1520 */ 191, 98, 191, 113, 70, 115, 116, 117, 23, 22,
+ /* 1530 */ 120, 26, 78, 19, 191, 81, 19, 20, 61, 22,
+ /* 1540 */ 191, 132, 213, 214, 213, 214, 137, 138, 59, 191,
+ /* 1550 */ 191, 191, 98, 36, 128, 132, 213, 214, 128, 59,
+ /* 1560 */ 137, 138, 152, 153, 154, 155, 156, 83, 84, 144,
+ /* 1570 */ 161, 213, 214, 213, 214, 23, 59, 151, 26, 23,
+ /* 1580 */ 23, 151, 26, 26, 161, 59, 132, 23, 71, 191,
+ /* 1590 */ 26, 137, 138, 119, 120, 23, 19, 20, 26, 22,
+ /* 1600 */ 223, 23, 85, 23, 26, 116, 26, 90, 191, 7,
+ /* 1610 */ 8, 97, 152, 36, 154, 161, 116, 100, 23, 23,
+ /* 1620 */ 191, 26, 26, 106, 107, 191, 23, 223, 23, 26,
+ /* 1630 */ 113, 26, 115, 116, 117, 23, 59, 120, 26, 191,
+ /* 1640 */ 191, 191, 116, 255, 191, 252, 191, 140, 71, 191,
+ /* 1650 */ 315, 233, 191, 191, 191, 191, 191, 191, 191, 191,
+ /* 1660 */ 191, 285, 284, 239, 252, 252, 252, 252, 240, 152,
+ /* 1670 */ 153, 154, 155, 156, 189, 294, 268, 100, 242, 268,
+ /* 1680 */ 264, 211, 290, 106, 107, 108, 264, 256, 256, 243,
+ /* 1690 */ 113, 290, 115, 116, 117, 268, 217, 120, 226, 243,
+ /* 1700 */ 222, 268, 216, 19, 20, 246, 22, 216, 256, 216,
+ /* 1710 */ 194, 60, 38, 242, 277, 294, 240, 242, 198, 246,
+ /* 1720 */ 36, 140, 198, 198, 19, 20, 150, 22, 149, 152,
+ /* 1730 */ 153, 154, 155, 156, 294, 291, 291, 280, 22, 43,
+ /* 1740 */ 231, 36, 18, 59, 234, 234, 234, 234, 267, 269,
+ /* 1750 */ 18, 198, 197, 231, 148, 71, 269, 269, 243, 231,
+ /* 1760 */ 198, 243, 267, 197, 59, 157, 243, 198, 62, 287,
+ /* 1770 */ 243, 197, 22, 198, 114, 64, 71, 218, 218, 197,
+ /* 1780 */ 286, 198, 197, 215, 100, 215, 215, 224, 22, 125,
+ /* 1790 */ 106, 107, 164, 24, 221, 112, 143, 113, 302, 115,
+ /* 1800 */ 116, 117, 218, 215, 120, 100, 217, 221, 215, 215,
+ /* 1810 */ 309, 106, 107, 215, 224, 279, 279, 218, 113, 258,
+ /* 1820 */ 115, 116, 117, 114, 257, 120, 91, 198, 82, 147,
+ /* 1830 */ 144, 22, 274, 314, 198, 314, 152, 153, 154, 155,
+ /* 1840 */ 156, 276, 157, 146, 145, 258, 25, 247, 257, 201,
+ /* 1850 */ 258, 26, 200, 13, 257, 244, 246, 152, 153, 154,
+ /* 1860 */ 155, 156, 258, 262, 257, 247, 245, 243, 192, 192,
+ /* 1870 */ 6, 262, 204, 210, 219, 210, 210, 190, 190, 190,
+ /* 1880 */ 210, 219, 204, 211, 211, 210, 4, 3, 22, 162,
+ /* 1890 */ 15, 23, 16, 23, 204, 138, 129, 150, 26, 141,
+ /* 1900 */ 20, 24, 143, 16, 1, 141, 129, 129, 61, 53,
+ /* 1910 */ 37, 150, 297, 300, 300, 53, 53, 129, 53, 115,
+ /* 1920 */ 34, 140, 1, 5, 22, 114, 68, 26, 160, 68,
+ /* 1930 */ 75, 41, 140, 114, 24, 20, 19, 130, 124, 23,
+ /* 1940 */ 96, 22, 22, 37, 22, 67, 22, 59, 67, 24,
+ /* 1950 */ 22, 28, 67, 23, 148, 22, 97, 23, 23, 23,
+ /* 1960 */ 140, 23, 22, 26, 23, 23, 115, 22, 142, 26,
+ /* 1970 */ 75, 88, 75, 34, 23, 86, 44, 22, 34, 26,
+ /* 1980 */ 34, 34, 34, 34, 93, 24, 26, 23, 34, 23,
+ /* 1990 */ 23, 23, 23, 11, 23, 22, 26, 22, 22, 15,
+ /* 2000 */ 23, 23, 22, 22, 1, 26, 23, 140, 134, 140,
+ /* 2010 */ 1, 140, 316, 316, 316, 316, 316, 316, 316, 140,
+ /* 2020 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2030 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2040 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2050 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2060 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2070 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2080 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2090 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2100 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2110 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2120 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2130 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2140 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2150 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2160 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2170 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2180 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2190 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 316,
+ /* 2200 */ 316, 316, 316,
};
-#define YY_SHIFT_COUNT (552)
+#define YY_SHIFT_COUNT (569)
#define YY_SHIFT_MIN (0)
-#define YY_SHIFT_MAX (1951)
+#define YY_SHIFT_MAX (2009)
static const unsigned short int yy_shift_ofst[] = {
- /* 0 */ 1448, 1277, 1668, 1072, 1072, 340, 1122, 1225, 1332, 1481,
- /* 10 */ 1481, 1481, 335, 0, 0, 180, 897, 1481, 1481, 1481,
- /* 20 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
- /* 30 */ 930, 930, 1020, 1020, 290, 1, 340, 340, 340, 340,
- /* 40 */ 340, 340, 40, 110, 219, 288, 327, 396, 435, 504,
- /* 50 */ 543, 612, 651, 720, 877, 897, 897, 897, 897, 897,
- /* 60 */ 897, 897, 897, 897, 897, 897, 897, 897, 897, 897,
- /* 70 */ 897, 897, 897, 917, 897, 1019, 763, 763, 1451, 1481,
- /* 80 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
- /* 90 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
- /* 100 */ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
- /* 110 */ 1481, 1481, 1553, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
- /* 120 */ 1481, 1481, 1481, 1481, 1481, 1481, 147, 258, 258, 258,
- /* 130 */ 258, 258, 79, 65, 84, 449, 19, 786, 449, 636,
- /* 140 */ 636, 449, 880, 880, 880, 880, 113, 142, 142, 472,
- /* 150 */ 150, 1962, 1962, 399, 399, 399, 93, 237, 341, 237,
- /* 160 */ 237, 1074, 1074, 437, 350, 704, 1080, 449, 449, 449,
- /* 170 */ 449, 449, 449, 449, 449, 449, 449, 449, 449, 449,
- /* 180 */ 449, 449, 449, 449, 449, 449, 449, 449, 818, 818,
- /* 190 */ 449, 1088, 217, 217, 734, 734, 1124, 1126, 1962, 1962,
- /* 200 */ 1962, 739, 840, 840, 453, 454, 511, 187, 563, 570,
- /* 210 */ 898, 669, 449, 449, 449, 449, 449, 449, 449, 449,
- /* 220 */ 449, 670, 449, 449, 449, 449, 449, 449, 449, 449,
- /* 230 */ 449, 449, 449, 449, 674, 674, 674, 449, 449, 449,
- /* 240 */ 449, 1034, 449, 449, 449, 972, 1107, 449, 449, 1193,
- /* 250 */ 449, 449, 449, 449, 449, 449, 449, 449, 260, 177,
- /* 260 */ 489, 1241, 1241, 1241, 1241, 1192, 489, 489, 952, 1197,
- /* 270 */ 625, 1235, 1131, 181, 181, 1086, 1139, 1131, 1086, 1187,
- /* 280 */ 1319, 1237, 1318, 1318, 1318, 181, 1299, 1299, 1109, 1336,
- /* 290 */ 549, 1376, 1610, 1535, 1535, 1639, 1639, 1535, 1539, 1578,
- /* 300 */ 1670, 1546, 1652, 1546, 1681, 1681, 1681, 1681, 1535, 1694,
- /* 310 */ 1546, 1546, 1578, 1670, 1652, 1546, 1652, 1546, 1535, 1694,
- /* 320 */ 1565, 1665, 1535, 1694, 1708, 1535, 1694, 1535, 1694, 1708,
- /* 330 */ 1618, 1618, 1618, 1680, 1723, 1723, 1708, 1618, 1623, 1618,
- /* 340 */ 1680, 1618, 1618, 1588, 1708, 1640, 1640, 1708, 1611, 1643,
- /* 350 */ 1611, 1643, 1611, 1643, 1611, 1643, 1535, 1685, 1685, 1695,
- /* 360 */ 1695, 1636, 1641, 1761, 1535, 1631, 1636, 1644, 1646, 1546,
- /* 370 */ 1763, 1766, 1781, 1781, 1791, 1791, 1791, 1962, 1962, 1962,
- /* 380 */ 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962,
- /* 390 */ 1962, 1962, 308, 835, 954, 1232, 879, 715, 728, 1373,
- /* 400 */ 864, 1329, 1253, 1409, 297, 1431, 1489, 1497, 1520, 1521,
- /* 410 */ 1525, 1362, 1309, 1491, 1217, 1420, 1429, 1536, 1380, 1538,
- /* 420 */ 1293, 1354, 1548, 1585, 1434, 1342, 1813, 1816, 1798, 1664,
- /* 430 */ 1810, 1732, 1815, 1811, 1812, 1699, 1689, 1710, 1817, 1700,
- /* 440 */ 1819, 1701, 1826, 1843, 1705, 1697, 1719, 1787, 1814, 1702,
- /* 450 */ 1796, 1799, 1800, 1801, 1727, 1742, 1823, 1721, 1860, 1857,
- /* 460 */ 1841, 1751, 1707, 1802, 1840, 1803, 1792, 1827, 1730, 1759,
- /* 470 */ 1849, 1854, 1856, 1747, 1754, 1858, 1818, 1859, 1861, 1855,
- /* 480 */ 1862, 1820, 1829, 1865, 1783, 1863, 1864, 1825, 1845, 1867,
- /* 490 */ 1746, 1872, 1873, 1874, 1875, 1869, 1876, 1878, 1877, 1879,
- /* 500 */ 1881, 1880, 1767, 1882, 1884, 1794, 1883, 1887, 1769, 1885,
- /* 510 */ 1886, 1888, 1889, 1890, 1824, 1838, 1828, 1871, 1844, 1832,
- /* 520 */ 1892, 1893, 1896, 1897, 1901, 1902, 1895, 1907, 1885, 1908,
- /* 530 */ 1909, 1910, 1911, 1912, 1913, 1915, 1924, 1917, 1918, 1919,
- /* 540 */ 1920, 1922, 1923, 1921, 1808, 1807, 1809, 1821, 1822, 1926,
- /* 550 */ 1935, 1950, 1951,
+ /* 0 */ 1423, 1409, 1454, 1192, 1192, 36, 1252, 1410, 1517, 1684,
+ /* 10 */ 1684, 1684, 292, 0, 0, 180, 1015, 1684, 1684, 1684,
+ /* 20 */ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+ /* 30 */ 1049, 1049, 1121, 1121, 54, 400, 36, 36, 36, 36,
+ /* 40 */ 36, 40, 110, 219, 289, 396, 439, 509, 548, 618,
+ /* 50 */ 657, 727, 766, 836, 995, 1015, 1015, 1015, 1015, 1015,
+ /* 60 */ 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
+ /* 70 */ 1015, 1015, 1015, 1035, 1015, 1138, 880, 880, 1577, 1684,
+ /* 80 */ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+ /* 90 */ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+ /* 100 */ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+ /* 110 */ 1684, 1684, 1684, 1705, 1684, 1684, 1684, 1684, 1684, 1684,
+ /* 120 */ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 146, 84, 84,
+ /* 130 */ 84, 84, 84, 362, 269, 125, 97, 453, 66, 66,
+ /* 140 */ 893, 1090, 66, 66, 533, 533, 66, 554, 554, 554,
+ /* 150 */ 554, 192, 587, 587, 695, 25, 2020, 2020, 290, 290,
+ /* 160 */ 290, 200, 514, 514, 514, 514, 939, 939, 442, 875,
+ /* 170 */ 935, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ /* 180 */ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ /* 190 */ 66, 601, 601, 66, 729, 878, 878, 1266, 1266, 552,
+ /* 200 */ 1023, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 307, 490,
+ /* 210 */ 490, 567, 393, 517, 467, 672, 242, 682, 675, 66,
+ /* 220 */ 66, 66, 66, 66, 66, 66, 66, 66, 66, 616,
+ /* 230 */ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ /* 240 */ 66, 66, 1093, 1093, 1093, 66, 66, 66, 778, 66,
+ /* 250 */ 66, 66, 1053, 1064, 66, 66, 1190, 66, 66, 66,
+ /* 260 */ 66, 66, 66, 66, 66, 722, 992, 718, 253, 253,
+ /* 270 */ 253, 253, 338, 718, 718, 888, 403, 852, 1328, 254,
+ /* 280 */ 1295, 721, 1330, 1295, 1330, 1370, 234, 254, 254, 234,
+ /* 290 */ 254, 721, 1370, 1357, 1492, 1348, 385, 385, 385, 1330,
+ /* 300 */ 1425, 1425, 643, 1315, 1336, 1004, 1651, 1651, 1581, 1581,
+ /* 310 */ 1674, 1674, 1581, 1576, 1579, 1716, 1696, 1724, 1724, 1724,
+ /* 320 */ 1724, 1581, 1732, 1606, 1579, 1579, 1606, 1716, 1696, 1606,
+ /* 330 */ 1696, 1606, 1581, 1732, 1608, 1706, 1581, 1732, 1750, 1581,
+ /* 340 */ 1732, 1581, 1732, 1750, 1660, 1660, 1660, 1711, 1766, 1766,
+ /* 350 */ 1750, 1660, 1664, 1660, 1711, 1660, 1660, 1628, 1769, 1683,
+ /* 360 */ 1683, 1750, 1653, 1709, 1653, 1709, 1653, 1709, 1653, 1709,
+ /* 370 */ 1581, 1735, 1735, 1746, 1746, 1682, 1686, 1809, 1581, 1685,
+ /* 380 */ 1682, 1697, 1699, 1606, 1821, 1825, 1840, 1840, 1864, 1864,
+ /* 390 */ 1864, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
+ /* 400 */ 2020, 2020, 2020, 2020, 2020, 2020, 599, 223, 1193, 1299,
+ /* 410 */ 228, 780, 958, 1505, 1153, 1435, 1368, 1426, 1430, 1552,
+ /* 420 */ 1477, 1556, 1557, 1564, 1572, 1578, 1580, 1489, 1474, 1602,
+ /* 430 */ 1389, 1514, 1500, 1595, 1596, 1484, 1603, 1075, 1460, 1605,
+ /* 440 */ 1612, 1526, 1507, 1882, 1884, 1866, 1727, 1875, 1876, 1868,
+ /* 450 */ 1870, 1757, 1747, 1767, 1872, 1872, 1877, 1758, 1880, 1759,
+ /* 460 */ 1887, 1903, 1764, 1777, 1872, 1778, 1847, 1873, 1872, 1761,
+ /* 470 */ 1856, 1862, 1863, 1865, 1788, 1804, 1886, 1781, 1921, 1918,
+ /* 480 */ 1902, 1811, 1768, 1858, 1901, 1861, 1855, 1890, 1792, 1819,
+ /* 490 */ 1910, 1915, 1917, 1807, 1814, 1919, 1878, 1920, 1922, 1916,
+ /* 500 */ 1924, 1881, 1888, 1925, 1844, 1923, 1928, 1885, 1906, 1930,
+ /* 510 */ 1806, 1933, 1934, 1935, 1936, 1937, 1938, 1940, 1859, 1820,
+ /* 520 */ 1941, 1942, 1851, 1939, 1945, 1826, 1943, 1944, 1946, 1947,
+ /* 530 */ 1948, 1883, 1895, 1889, 1932, 1897, 1891, 1949, 1951, 1955,
+ /* 540 */ 1961, 1953, 1960, 1954, 1964, 1943, 1966, 1967, 1968, 1969,
+ /* 550 */ 1970, 1971, 1973, 1982, 1975, 1976, 1977, 1978, 1980, 1981,
+ /* 560 */ 1979, 1874, 1867, 1869, 1871, 1879, 1983, 1984, 2003, 2009,
};
-#define YY_REDUCE_COUNT (391)
-#define YY_REDUCE_MIN (-262)
-#define YY_REDUCE_MAX (1625)
+#define YY_REDUCE_COUNT (405)
+#define YY_REDUCE_MIN (-265)
+#define YY_REDUCE_MAX (1690)
static const short yy_reduce_ofst[] = {
- /* 0 */ 490, -122, 545, 645, 650, -120, -189, -187, -184, -182,
- /* 10 */ -178, -176, 45, 30, 200, -251, -134, 390, 392, 521,
- /* 20 */ 523, 213, 692, 821, 284, 589, 872, 666, 671, 866,
- /* 30 */ 71, 111, 273, 389, 686, 815, 904, 932, 948, 955,
- /* 40 */ 964, 969, -259, -259, -259, -259, -259, -259, -259, -259,
- /* 50 */ -259, -259, -259, -259, -259, -259, -259, -259, -259, -259,
- /* 60 */ -259, -259, -259, -259, -259, -259, -259, -259, -259, -259,
- /* 70 */ -259, -259, -259, -259, -259, -259, -259, -259, 428, 430,
- /* 80 */ 899, 985, 1021, 1028, 1057, 1069, 1081, 1108, 1110, 1115,
- /* 90 */ 1117, 1123, 1149, 1154, 1159, 1170, 1174, 1178, 1183, 1194,
- /* 100 */ 1198, 1204, 1208, 1212, 1218, 1222, 1229, 1278, 1280, 1283,
- /* 110 */ 1285, 1313, 1316, 1320, 1322, 1325, 1327, 1330, 1366, 1371,
- /* 120 */ 1379, 1387, 1417, 1425, 1430, 1432, -259, -259, -259, -259,
- /* 130 */ -259, -259, -259, -259, -259, 557, 974, -214, -174, -9,
- /* 140 */ 431, -124, 806, 925, 806, 925, 251, 928, 940, -259,
- /* 150 */ -259, -259, -259, -198, -198, -198, 127, -186, -168, 212,
- /* 160 */ 646, 617, 799, -262, 555, 220, 220, 491, 605, 1040,
- /* 170 */ 1060, 699, -11, 600, 848, 862, 345, -129, 724, -91,
- /* 180 */ 158, 749, 716, 900, 304, 822, 929, 926, 499, 793,
- /* 190 */ 322, 892, 813, 845, 958, 1056, 751, 905, 1133, 1062,
- /* 200 */ 803, -210, -185, -179, -148, -167, -89, 121, 274, 281,
- /* 210 */ 320, 336, 439, 663, 711, 957, 965, 1064, 1068, 1112,
- /* 220 */ 1116, -196, 1127, 1134, 1180, 1184, 1195, 1199, 1203, 1215,
- /* 230 */ 1223, 1250, 1267, 1286, 205, 422, 638, 1324, 1341, 1364,
- /* 240 */ 1365, 1213, 1392, 1399, 1403, 869, 1260, 1405, 1421, 1276,
- /* 250 */ 1424, 121, 1426, 1427, 1428, 1433, 1436, 1437, 1227, 1338,
- /* 260 */ 1284, 1359, 1370, 1377, 1388, 1213, 1284, 1284, 1385, 1438,
- /* 270 */ 1443, 1349, 1400, 1391, 1394, 1360, 1408, 1410, 1367, 1439,
- /* 280 */ 1440, 1435, 1442, 1446, 1447, 1397, 1413, 1418, 1390, 1444,
- /* 290 */ 1445, 1474, 1381, 1479, 1480, 1401, 1402, 1490, 1414, 1449,
- /* 300 */ 1452, 1453, 1467, 1456, 1469, 1470, 1477, 1478, 1515, 1518,
- /* 310 */ 1476, 1482, 1450, 1454, 1492, 1483, 1493, 1484, 1523, 1531,
- /* 320 */ 1457, 1455, 1532, 1534, 1516, 1537, 1540, 1543, 1541, 1526,
- /* 330 */ 1528, 1530, 1542, 1512, 1529, 1533, 1544, 1545, 1547, 1550,
- /* 340 */ 1549, 1551, 1554, 1458, 1552, 1494, 1495, 1556, 1498, 1502,
- /* 350 */ 1503, 1511, 1517, 1519, 1522, 1524, 1579, 1472, 1473, 1527,
- /* 360 */ 1555, 1557, 1559, 1558, 1589, 1560, 1561, 1564, 1566, 1568,
- /* 370 */ 1592, 1595, 1605, 1606, 1612, 1613, 1622, 1562, 1563, 1505,
- /* 380 */ 1609, 1604, 1608, 1614, 1615, 1616, 1596, 1597, 1617, 1620,
- /* 390 */ 1625, 1619,
+ /* 0 */ 111, 168, 386, 761, -176, -174, -191, -189, -181, -178,
+ /* 10 */ 176, 263, 44, -207, -204, -265, -139, -114, 158, 504,
+ /* 20 */ 525, 544, 612, 614, 650, 652, 765, 265, 703, 705,
+ /* 30 */ 70, 714, -187, 127, 774, 713, 767, 769, 970, 1019,
+ /* 40 */ 1021, -255, -255, -255, -255, -255, -255, -255, -255, -255,
+ /* 50 */ -255, -255, -255, -255, -255, -255, -255, -255, -255, -255,
+ /* 60 */ -255, -255, -255, -255, -255, -255, -255, -255, -255, -255,
+ /* 70 */ -255, -255, -255, -255, -255, -255, -255, -255, 394, 542,
+ /* 80 */ 816, 818, 842, 882, 902, 919, 938, 940, 957, 986,
+ /* 90 */ 1048, 1063, 1068, 1073, 1076, 1088, 1100, 1102, 1104, 1106,
+ /* 100 */ 1113, 1119, 1137, 1140, 1143, 1147, 1149, 1164, 1173, 1183,
+ /* 110 */ 1185, 1188, 1202, 1204, 1247, 1259, 1263, 1283, 1289, 1292,
+ /* 120 */ 1298, 1300, 1329, 1331, 1343, 1358, 1360, -255, -255, -255,
+ /* 130 */ -255, -255, -255, -255, -255, 196, -255, 387, -177, 507,
+ /* 140 */ 1002, -219, 557, -93, -167, 638, -121, 284, 500, 284,
+ /* 150 */ 500, 247, 651, 865, -255, -255, -255, -255, -85, -85,
+ /* 160 */ -85, 237, 171, 602, 846, 885, -212, -203, 217, 380,
+ /* 170 */ 380, -23, 161, 653, 712, 773, 943, 990, 1040, 563,
+ /* 180 */ 833, 971, 1005, 1042, 1092, 1078, 1043, 1144, 1184, -186,
+ /* 190 */ 1105, 318, 869, 7, 825, 920, 1074, 704, 706, 390,
+ /* 200 */ 1087, 1094, 336, 545, 772, 1201, 1117, 1207, -179, -137,
+ /* 210 */ -112, -13, 18, 112, 197, 418, 495, 508, 777, 809,
+ /* 220 */ 923, 1014, 1027, 1033, 1044, 1115, 1194, 1212, 1221, 209,
+ /* 230 */ 1236, 1240, 1256, 1287, 1301, 1307, 1349, 1359, 1398, 1417,
+ /* 240 */ 1429, 1434, 681, 1377, 1404, 1448, 1449, 1450, 1388, 1453,
+ /* 250 */ 1455, 1458, 1393, 1335, 1461, 1462, 1418, 1463, 197, 1464,
+ /* 260 */ 1465, 1466, 1467, 1468, 1469, 1376, 1378, 1424, 1412, 1413,
+ /* 270 */ 1414, 1415, 1388, 1424, 1424, 1428, 1470, 1485, 1381, 1408,
+ /* 280 */ 1416, 1436, 1431, 1422, 1432, 1392, 1446, 1411, 1427, 1456,
+ /* 290 */ 1433, 1471, 1401, 1479, 1472, 1478, 1486, 1491, 1493, 1452,
+ /* 300 */ 1459, 1473, 1437, 1475, 1476, 1516, 1421, 1440, 1520, 1524,
+ /* 310 */ 1444, 1445, 1525, 1457, 1480, 1481, 1509, 1510, 1511, 1512,
+ /* 320 */ 1513, 1553, 1555, 1515, 1487, 1488, 1518, 1495, 1522, 1523,
+ /* 330 */ 1528, 1527, 1562, 1566, 1482, 1494, 1569, 1574, 1559, 1575,
+ /* 340 */ 1582, 1583, 1585, 1560, 1568, 1570, 1571, 1563, 1573, 1586,
+ /* 350 */ 1584, 1588, 1589, 1593, 1590, 1594, 1598, 1501, 1496, 1536,
+ /* 360 */ 1537, 1599, 1561, 1567, 1587, 1591, 1592, 1597, 1604, 1607,
+ /* 370 */ 1629, 1519, 1521, 1601, 1609, 1600, 1610, 1558, 1636, 1565,
+ /* 380 */ 1618, 1621, 1611, 1624, 1648, 1652, 1676, 1677, 1687, 1688,
+ /* 390 */ 1689, 1613, 1614, 1615, 1668, 1663, 1665, 1666, 1670, 1678,
+ /* 400 */ 1655, 1662, 1672, 1673, 1675, 1690,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 1575, 1575, 1575, 1411, 1188, 1297, 1188, 1188, 1188, 1411,
- /* 10 */ 1411, 1411, 1188, 1327, 1327, 1464, 1219, 1188, 1188, 1188,
- /* 20 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1410, 1188, 1188,
- /* 30 */ 1188, 1188, 1494, 1494, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 40 */ 1188, 1188, 1188, 1336, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 50 */ 1412, 1413, 1188, 1188, 1188, 1463, 1465, 1428, 1346, 1345,
- /* 60 */ 1344, 1343, 1446, 1314, 1341, 1334, 1338, 1406, 1407, 1405,
- /* 70 */ 1409, 1413, 1412, 1188, 1337, 1377, 1391, 1376, 1188, 1188,
- /* 80 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 90 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 100 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 110 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 120 */ 1188, 1188, 1188, 1188, 1188, 1188, 1385, 1390, 1396, 1389,
- /* 130 */ 1386, 1379, 1378, 1380, 1381, 1188, 1209, 1261, 1188, 1188,
- /* 140 */ 1188, 1188, 1482, 1481, 1188, 1188, 1219, 1371, 1370, 1382,
- /* 150 */ 1383, 1393, 1392, 1471, 1529, 1528, 1429, 1188, 1188, 1188,
- /* 160 */ 1188, 1188, 1188, 1494, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 170 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 180 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1494, 1494,
- /* 190 */ 1188, 1219, 1494, 1494, 1215, 1215, 1321, 1188, 1477, 1297,
- /* 200 */ 1288, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 210 */ 1188, 1188, 1188, 1188, 1188, 1468, 1466, 1188, 1188, 1188,
- /* 220 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 230 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 240 */ 1188, 1188, 1188, 1188, 1188, 1293, 1188, 1188, 1188, 1188,
- /* 250 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1523, 1188, 1441,
- /* 260 */ 1275, 1293, 1293, 1293, 1293, 1295, 1276, 1274, 1287, 1220,
- /* 270 */ 1195, 1567, 1294, 1316, 1316, 1564, 1340, 1294, 1564, 1236,
- /* 280 */ 1545, 1231, 1327, 1327, 1327, 1316, 1321, 1321, 1408, 1294,
- /* 290 */ 1287, 1188, 1567, 1302, 1302, 1566, 1566, 1302, 1429, 1349,
- /* 300 */ 1355, 1340, 1264, 1340, 1270, 1270, 1270, 1270, 1302, 1206,
- /* 310 */ 1340, 1340, 1349, 1355, 1264, 1340, 1264, 1340, 1302, 1206,
- /* 320 */ 1445, 1561, 1302, 1206, 1419, 1302, 1206, 1302, 1206, 1419,
- /* 330 */ 1262, 1262, 1262, 1251, 1188, 1188, 1419, 1262, 1236, 1262,
- /* 340 */ 1251, 1262, 1262, 1512, 1419, 1423, 1423, 1419, 1320, 1315,
- /* 350 */ 1320, 1315, 1320, 1315, 1320, 1315, 1302, 1504, 1504, 1330,
- /* 360 */ 1330, 1335, 1321, 1414, 1302, 1188, 1335, 1333, 1331, 1340,
- /* 370 */ 1212, 1254, 1526, 1526, 1522, 1522, 1522, 1572, 1572, 1477,
- /* 380 */ 1538, 1219, 1219, 1219, 1219, 1538, 1238, 1238, 1220, 1220,
- /* 390 */ 1219, 1538, 1188, 1188, 1188, 1188, 1188, 1188, 1533, 1188,
- /* 400 */ 1430, 1306, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 410 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 420 */ 1188, 1188, 1188, 1188, 1188, 1360, 1188, 1191, 1474, 1188,
- /* 430 */ 1188, 1472, 1188, 1188, 1188, 1188, 1188, 1188, 1307, 1188,
- /* 440 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 450 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1563, 1188, 1188,
- /* 460 */ 1188, 1188, 1188, 1188, 1444, 1443, 1188, 1188, 1304, 1188,
- /* 470 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 480 */ 1188, 1188, 1234, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 490 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 500 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1332,
- /* 510 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 520 */ 1188, 1188, 1188, 1188, 1509, 1322, 1188, 1188, 1554, 1188,
- /* 530 */ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- /* 540 */ 1188, 1188, 1188, 1549, 1278, 1362, 1188, 1361, 1365, 1188,
- /* 550 */ 1200, 1188, 1188,
+ /* 0 */ 1623, 1623, 1623, 1453, 1223, 1332, 1223, 1223, 1223, 1453,
+ /* 10 */ 1453, 1453, 1223, 1362, 1362, 1506, 1254, 1223, 1223, 1223,
+ /* 20 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1452, 1223, 1223,
+ /* 30 */ 1223, 1223, 1541, 1541, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 40 */ 1223, 1223, 1371, 1223, 1378, 1223, 1223, 1223, 1223, 1223,
+ /* 50 */ 1454, 1455, 1223, 1223, 1223, 1505, 1507, 1470, 1385, 1384,
+ /* 60 */ 1383, 1382, 1488, 1349, 1376, 1369, 1373, 1448, 1449, 1447,
+ /* 70 */ 1451, 1455, 1454, 1223, 1372, 1419, 1433, 1418, 1223, 1223,
+ /* 80 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 90 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 100 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 110 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 120 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1427, 1432, 1438,
+ /* 130 */ 1431, 1428, 1421, 1420, 1422, 1223, 1423, 1223, 1223, 1223,
+ /* 140 */ 1244, 1296, 1223, 1223, 1223, 1223, 1223, 1525, 1524, 1223,
+ /* 150 */ 1223, 1254, 1413, 1412, 1424, 1425, 1435, 1434, 1513, 1576,
+ /* 160 */ 1575, 1471, 1223, 1223, 1223, 1223, 1223, 1223, 1541, 1223,
+ /* 170 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 180 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 190 */ 1223, 1541, 1541, 1223, 1254, 1541, 1541, 1250, 1250, 1356,
+ /* 200 */ 1223, 1520, 1323, 1323, 1323, 1323, 1332, 1323, 1223, 1223,
+ /* 210 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 220 */ 1223, 1223, 1223, 1510, 1508, 1223, 1223, 1223, 1223, 1223,
+ /* 230 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 240 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 250 */ 1223, 1223, 1328, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 260 */ 1223, 1223, 1223, 1223, 1570, 1223, 1483, 1310, 1328, 1328,
+ /* 270 */ 1328, 1328, 1330, 1311, 1309, 1322, 1255, 1230, 1615, 1388,
+ /* 280 */ 1377, 1329, 1351, 1377, 1351, 1612, 1375, 1388, 1388, 1375,
+ /* 290 */ 1388, 1329, 1612, 1271, 1592, 1266, 1362, 1362, 1362, 1351,
+ /* 300 */ 1356, 1356, 1450, 1329, 1322, 1223, 1615, 1615, 1337, 1337,
+ /* 310 */ 1614, 1614, 1337, 1471, 1599, 1397, 1299, 1305, 1305, 1305,
+ /* 320 */ 1305, 1337, 1241, 1375, 1599, 1599, 1375, 1397, 1299, 1375,
+ /* 330 */ 1299, 1375, 1337, 1241, 1487, 1609, 1337, 1241, 1461, 1337,
+ /* 340 */ 1241, 1337, 1241, 1461, 1297, 1297, 1297, 1286, 1223, 1223,
+ /* 350 */ 1461, 1297, 1271, 1297, 1286, 1297, 1297, 1559, 1223, 1465,
+ /* 360 */ 1465, 1461, 1355, 1350, 1355, 1350, 1355, 1350, 1355, 1350,
+ /* 370 */ 1337, 1551, 1551, 1365, 1365, 1370, 1356, 1456, 1337, 1223,
+ /* 380 */ 1370, 1368, 1366, 1375, 1247, 1289, 1573, 1573, 1569, 1569,
+ /* 390 */ 1569, 1620, 1620, 1520, 1585, 1254, 1254, 1254, 1254, 1585,
+ /* 400 */ 1273, 1273, 1255, 1255, 1254, 1585, 1223, 1223, 1223, 1223,
+ /* 410 */ 1223, 1223, 1580, 1223, 1515, 1472, 1341, 1223, 1223, 1223,
+ /* 420 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 430 */ 1223, 1526, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 440 */ 1223, 1223, 1402, 1223, 1226, 1517, 1223, 1223, 1223, 1223,
+ /* 450 */ 1223, 1223, 1223, 1223, 1379, 1380, 1342, 1223, 1223, 1223,
+ /* 460 */ 1223, 1223, 1223, 1223, 1394, 1223, 1223, 1223, 1389, 1223,
+ /* 470 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1611, 1223, 1223,
+ /* 480 */ 1223, 1223, 1223, 1223, 1486, 1485, 1223, 1223, 1339, 1223,
+ /* 490 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 500 */ 1223, 1223, 1269, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 510 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 520 */ 1223, 1223, 1223, 1223, 1223, 1223, 1367, 1223, 1223, 1223,
+ /* 530 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 540 */ 1223, 1556, 1357, 1223, 1223, 1602, 1223, 1223, 1223, 1223,
+ /* 550 */ 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+ /* 560 */ 1596, 1313, 1404, 1223, 1403, 1407, 1223, 1235, 1223, 1223,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -156095,6 +158193,7 @@ static const YYCODETYPE yyFallback[] = {
59, /* TIES => ID */
59, /* GENERATED => ID */
59, /* ALWAYS => ID */
+ 59, /* MATERIALIZED => ID */
59, /* REINDEX => ID */
59, /* RENAME => ID */
59, /* CTIME_KW => ID */
@@ -156146,6 +158245,7 @@ static const YYCODETYPE yyFallback[] = {
0, /* HAVING => nothing */
0, /* LIMIT => nothing */
0, /* WHERE => nothing */
+ 0, /* RETURNING => nothing */
0, /* INTO => nothing */
0, /* NOTHING => nothing */
0, /* FLOAT => nothing */
@@ -156364,219 +158464,225 @@ static const char *const yyTokenName[] = {
/* 94 */ "TIES",
/* 95 */ "GENERATED",
/* 96 */ "ALWAYS",
- /* 97 */ "REINDEX",
- /* 98 */ "RENAME",
- /* 99 */ "CTIME_KW",
- /* 100 */ "ANY",
- /* 101 */ "BITAND",
- /* 102 */ "BITOR",
- /* 103 */ "LSHIFT",
- /* 104 */ "RSHIFT",
- /* 105 */ "PLUS",
- /* 106 */ "MINUS",
- /* 107 */ "STAR",
- /* 108 */ "SLASH",
- /* 109 */ "REM",
- /* 110 */ "CONCAT",
- /* 111 */ "COLLATE",
- /* 112 */ "BITNOT",
- /* 113 */ "ON",
- /* 114 */ "INDEXED",
- /* 115 */ "STRING",
- /* 116 */ "JOIN_KW",
- /* 117 */ "CONSTRAINT",
- /* 118 */ "DEFAULT",
- /* 119 */ "NULL",
- /* 120 */ "PRIMARY",
- /* 121 */ "UNIQUE",
- /* 122 */ "CHECK",
- /* 123 */ "REFERENCES",
- /* 124 */ "AUTOINCR",
- /* 125 */ "INSERT",
- /* 126 */ "DELETE",
- /* 127 */ "UPDATE",
- /* 128 */ "SET",
- /* 129 */ "DEFERRABLE",
- /* 130 */ "FOREIGN",
- /* 131 */ "DROP",
- /* 132 */ "UNION",
- /* 133 */ "ALL",
- /* 134 */ "EXCEPT",
- /* 135 */ "INTERSECT",
- /* 136 */ "SELECT",
- /* 137 */ "VALUES",
- /* 138 */ "DISTINCT",
- /* 139 */ "DOT",
- /* 140 */ "FROM",
- /* 141 */ "JOIN",
- /* 142 */ "USING",
- /* 143 */ "ORDER",
- /* 144 */ "GROUP",
- /* 145 */ "HAVING",
- /* 146 */ "LIMIT",
- /* 147 */ "WHERE",
- /* 148 */ "INTO",
- /* 149 */ "NOTHING",
- /* 150 */ "FLOAT",
- /* 151 */ "BLOB",
- /* 152 */ "INTEGER",
- /* 153 */ "VARIABLE",
- /* 154 */ "CASE",
- /* 155 */ "WHEN",
- /* 156 */ "THEN",
- /* 157 */ "ELSE",
- /* 158 */ "INDEX",
- /* 159 */ "ALTER",
- /* 160 */ "ADD",
- /* 161 */ "WINDOW",
- /* 162 */ "OVER",
- /* 163 */ "FILTER",
- /* 164 */ "COLUMN",
- /* 165 */ "AGG_FUNCTION",
- /* 166 */ "AGG_COLUMN",
- /* 167 */ "TRUEFALSE",
- /* 168 */ "ISNOT",
- /* 169 */ "FUNCTION",
- /* 170 */ "UMINUS",
- /* 171 */ "UPLUS",
- /* 172 */ "TRUTH",
- /* 173 */ "REGISTER",
- /* 174 */ "VECTOR",
- /* 175 */ "SELECT_COLUMN",
- /* 176 */ "IF_NULL_ROW",
- /* 177 */ "ASTERISK",
- /* 178 */ "SPAN",
- /* 179 */ "SPACE",
- /* 180 */ "ILLEGAL",
- /* 181 */ "input",
- /* 182 */ "cmdlist",
- /* 183 */ "ecmd",
- /* 184 */ "cmdx",
- /* 185 */ "explain",
- /* 186 */ "cmd",
- /* 187 */ "transtype",
- /* 188 */ "trans_opt",
- /* 189 */ "nm",
- /* 190 */ "savepoint_opt",
- /* 191 */ "create_table",
- /* 192 */ "create_table_args",
- /* 193 */ "createkw",
- /* 194 */ "temp",
- /* 195 */ "ifnotexists",
- /* 196 */ "dbnm",
- /* 197 */ "columnlist",
- /* 198 */ "conslist_opt",
- /* 199 */ "table_options",
- /* 200 */ "select",
- /* 201 */ "columnname",
- /* 202 */ "carglist",
- /* 203 */ "typetoken",
- /* 204 */ "typename",
- /* 205 */ "signed",
- /* 206 */ "plus_num",
- /* 207 */ "minus_num",
- /* 208 */ "scanpt",
- /* 209 */ "scantok",
- /* 210 */ "ccons",
- /* 211 */ "term",
- /* 212 */ "expr",
- /* 213 */ "onconf",
- /* 214 */ "sortorder",
- /* 215 */ "autoinc",
- /* 216 */ "eidlist_opt",
- /* 217 */ "refargs",
- /* 218 */ "defer_subclause",
- /* 219 */ "generated",
- /* 220 */ "refarg",
- /* 221 */ "refact",
- /* 222 */ "init_deferred_pred_opt",
- /* 223 */ "conslist",
- /* 224 */ "tconscomma",
- /* 225 */ "tcons",
- /* 226 */ "sortlist",
- /* 227 */ "eidlist",
- /* 228 */ "defer_subclause_opt",
- /* 229 */ "orconf",
- /* 230 */ "resolvetype",
- /* 231 */ "raisetype",
- /* 232 */ "ifexists",
- /* 233 */ "fullname",
- /* 234 */ "selectnowith",
- /* 235 */ "oneselect",
- /* 236 */ "wqlist",
- /* 237 */ "multiselect_op",
- /* 238 */ "distinct",
- /* 239 */ "selcollist",
- /* 240 */ "from",
- /* 241 */ "where_opt",
- /* 242 */ "groupby_opt",
- /* 243 */ "having_opt",
- /* 244 */ "orderby_opt",
- /* 245 */ "limit_opt",
- /* 246 */ "window_clause",
- /* 247 */ "values",
- /* 248 */ "nexprlist",
- /* 249 */ "sclp",
- /* 250 */ "as",
- /* 251 */ "seltablist",
- /* 252 */ "stl_prefix",
- /* 253 */ "joinop",
- /* 254 */ "indexed_opt",
- /* 255 */ "on_opt",
- /* 256 */ "using_opt",
- /* 257 */ "exprlist",
- /* 258 */ "xfullname",
- /* 259 */ "idlist",
- /* 260 */ "nulls",
- /* 261 */ "with",
- /* 262 */ "setlist",
- /* 263 */ "insert_cmd",
- /* 264 */ "idlist_opt",
- /* 265 */ "upsert",
- /* 266 */ "filter_over",
- /* 267 */ "likeop",
- /* 268 */ "between_op",
- /* 269 */ "in_op",
- /* 270 */ "paren_exprlist",
- /* 271 */ "case_operand",
- /* 272 */ "case_exprlist",
- /* 273 */ "case_else",
- /* 274 */ "uniqueflag",
- /* 275 */ "collate",
- /* 276 */ "vinto",
- /* 277 */ "nmnum",
- /* 278 */ "trigger_decl",
- /* 279 */ "trigger_cmd_list",
- /* 280 */ "trigger_time",
- /* 281 */ "trigger_event",
- /* 282 */ "foreach_clause",
- /* 283 */ "when_clause",
- /* 284 */ "trigger_cmd",
- /* 285 */ "trnm",
- /* 286 */ "tridxby",
- /* 287 */ "database_kw_opt",
- /* 288 */ "key_opt",
- /* 289 */ "add_column_fullname",
- /* 290 */ "kwcolumn_opt",
- /* 291 */ "create_vtab",
- /* 292 */ "vtabarglist",
- /* 293 */ "vtabarg",
- /* 294 */ "vtabargtoken",
- /* 295 */ "lp",
- /* 296 */ "anylist",
- /* 297 */ "windowdefn_list",
- /* 298 */ "windowdefn",
- /* 299 */ "window",
- /* 300 */ "frame_opt",
- /* 301 */ "part_opt",
- /* 302 */ "filter_clause",
- /* 303 */ "over_clause",
- /* 304 */ "range_or_rows",
- /* 305 */ "frame_bound",
- /* 306 */ "frame_bound_s",
- /* 307 */ "frame_bound_e",
- /* 308 */ "frame_exclude_opt",
- /* 309 */ "frame_exclude",
+ /* 97 */ "MATERIALIZED",
+ /* 98 */ "REINDEX",
+ /* 99 */ "RENAME",
+ /* 100 */ "CTIME_KW",
+ /* 101 */ "ANY",
+ /* 102 */ "BITAND",
+ /* 103 */ "BITOR",
+ /* 104 */ "LSHIFT",
+ /* 105 */ "RSHIFT",
+ /* 106 */ "PLUS",
+ /* 107 */ "MINUS",
+ /* 108 */ "STAR",
+ /* 109 */ "SLASH",
+ /* 110 */ "REM",
+ /* 111 */ "CONCAT",
+ /* 112 */ "COLLATE",
+ /* 113 */ "BITNOT",
+ /* 114 */ "ON",
+ /* 115 */ "INDEXED",
+ /* 116 */ "STRING",
+ /* 117 */ "JOIN_KW",
+ /* 118 */ "CONSTRAINT",
+ /* 119 */ "DEFAULT",
+ /* 120 */ "NULL",
+ /* 121 */ "PRIMARY",
+ /* 122 */ "UNIQUE",
+ /* 123 */ "CHECK",
+ /* 124 */ "REFERENCES",
+ /* 125 */ "AUTOINCR",
+ /* 126 */ "INSERT",
+ /* 127 */ "DELETE",
+ /* 128 */ "UPDATE",
+ /* 129 */ "SET",
+ /* 130 */ "DEFERRABLE",
+ /* 131 */ "FOREIGN",
+ /* 132 */ "DROP",
+ /* 133 */ "UNION",
+ /* 134 */ "ALL",
+ /* 135 */ "EXCEPT",
+ /* 136 */ "INTERSECT",
+ /* 137 */ "SELECT",
+ /* 138 */ "VALUES",
+ /* 139 */ "DISTINCT",
+ /* 140 */ "DOT",
+ /* 141 */ "FROM",
+ /* 142 */ "JOIN",
+ /* 143 */ "USING",
+ /* 144 */ "ORDER",
+ /* 145 */ "GROUP",
+ /* 146 */ "HAVING",
+ /* 147 */ "LIMIT",
+ /* 148 */ "WHERE",
+ /* 149 */ "RETURNING",
+ /* 150 */ "INTO",
+ /* 151 */ "NOTHING",
+ /* 152 */ "FLOAT",
+ /* 153 */ "BLOB",
+ /* 154 */ "INTEGER",
+ /* 155 */ "VARIABLE",
+ /* 156 */ "CASE",
+ /* 157 */ "WHEN",
+ /* 158 */ "THEN",
+ /* 159 */ "ELSE",
+ /* 160 */ "INDEX",
+ /* 161 */ "ALTER",
+ /* 162 */ "ADD",
+ /* 163 */ "WINDOW",
+ /* 164 */ "OVER",
+ /* 165 */ "FILTER",
+ /* 166 */ "COLUMN",
+ /* 167 */ "AGG_FUNCTION",
+ /* 168 */ "AGG_COLUMN",
+ /* 169 */ "TRUEFALSE",
+ /* 170 */ "ISNOT",
+ /* 171 */ "FUNCTION",
+ /* 172 */ "UMINUS",
+ /* 173 */ "UPLUS",
+ /* 174 */ "TRUTH",
+ /* 175 */ "REGISTER",
+ /* 176 */ "VECTOR",
+ /* 177 */ "SELECT_COLUMN",
+ /* 178 */ "IF_NULL_ROW",
+ /* 179 */ "ASTERISK",
+ /* 180 */ "SPAN",
+ /* 181 */ "SPACE",
+ /* 182 */ "ILLEGAL",
+ /* 183 */ "input",
+ /* 184 */ "cmdlist",
+ /* 185 */ "ecmd",
+ /* 186 */ "cmdx",
+ /* 187 */ "explain",
+ /* 188 */ "cmd",
+ /* 189 */ "transtype",
+ /* 190 */ "trans_opt",
+ /* 191 */ "nm",
+ /* 192 */ "savepoint_opt",
+ /* 193 */ "create_table",
+ /* 194 */ "create_table_args",
+ /* 195 */ "createkw",
+ /* 196 */ "temp",
+ /* 197 */ "ifnotexists",
+ /* 198 */ "dbnm",
+ /* 199 */ "columnlist",
+ /* 200 */ "conslist_opt",
+ /* 201 */ "table_options",
+ /* 202 */ "select",
+ /* 203 */ "columnname",
+ /* 204 */ "carglist",
+ /* 205 */ "typetoken",
+ /* 206 */ "typename",
+ /* 207 */ "signed",
+ /* 208 */ "plus_num",
+ /* 209 */ "minus_num",
+ /* 210 */ "scanpt",
+ /* 211 */ "scantok",
+ /* 212 */ "ccons",
+ /* 213 */ "term",
+ /* 214 */ "expr",
+ /* 215 */ "onconf",
+ /* 216 */ "sortorder",
+ /* 217 */ "autoinc",
+ /* 218 */ "eidlist_opt",
+ /* 219 */ "refargs",
+ /* 220 */ "defer_subclause",
+ /* 221 */ "generated",
+ /* 222 */ "refarg",
+ /* 223 */ "refact",
+ /* 224 */ "init_deferred_pred_opt",
+ /* 225 */ "conslist",
+ /* 226 */ "tconscomma",
+ /* 227 */ "tcons",
+ /* 228 */ "sortlist",
+ /* 229 */ "eidlist",
+ /* 230 */ "defer_subclause_opt",
+ /* 231 */ "orconf",
+ /* 232 */ "resolvetype",
+ /* 233 */ "raisetype",
+ /* 234 */ "ifexists",
+ /* 235 */ "fullname",
+ /* 236 */ "selectnowith",
+ /* 237 */ "oneselect",
+ /* 238 */ "wqlist",
+ /* 239 */ "multiselect_op",
+ /* 240 */ "distinct",
+ /* 241 */ "selcollist",
+ /* 242 */ "from",
+ /* 243 */ "where_opt",
+ /* 244 */ "groupby_opt",
+ /* 245 */ "having_opt",
+ /* 246 */ "orderby_opt",
+ /* 247 */ "limit_opt",
+ /* 248 */ "window_clause",
+ /* 249 */ "values",
+ /* 250 */ "nexprlist",
+ /* 251 */ "sclp",
+ /* 252 */ "as",
+ /* 253 */ "seltablist",
+ /* 254 */ "stl_prefix",
+ /* 255 */ "joinop",
+ /* 256 */ "indexed_opt",
+ /* 257 */ "on_opt",
+ /* 258 */ "using_opt",
+ /* 259 */ "exprlist",
+ /* 260 */ "xfullname",
+ /* 261 */ "idlist",
+ /* 262 */ "nulls",
+ /* 263 */ "with",
+ /* 264 */ "where_opt_ret",
+ /* 265 */ "setlist",
+ /* 266 */ "insert_cmd",
+ /* 267 */ "idlist_opt",
+ /* 268 */ "upsert",
+ /* 269 */ "returning",
+ /* 270 */ "filter_over",
+ /* 271 */ "likeop",
+ /* 272 */ "between_op",
+ /* 273 */ "in_op",
+ /* 274 */ "paren_exprlist",
+ /* 275 */ "case_operand",
+ /* 276 */ "case_exprlist",
+ /* 277 */ "case_else",
+ /* 278 */ "uniqueflag",
+ /* 279 */ "collate",
+ /* 280 */ "vinto",
+ /* 281 */ "nmnum",
+ /* 282 */ "trigger_decl",
+ /* 283 */ "trigger_cmd_list",
+ /* 284 */ "trigger_time",
+ /* 285 */ "trigger_event",
+ /* 286 */ "foreach_clause",
+ /* 287 */ "when_clause",
+ /* 288 */ "trigger_cmd",
+ /* 289 */ "trnm",
+ /* 290 */ "tridxby",
+ /* 291 */ "database_kw_opt",
+ /* 292 */ "key_opt",
+ /* 293 */ "add_column_fullname",
+ /* 294 */ "kwcolumn_opt",
+ /* 295 */ "create_vtab",
+ /* 296 */ "vtabarglist",
+ /* 297 */ "vtabarg",
+ /* 298 */ "vtabargtoken",
+ /* 299 */ "lp",
+ /* 300 */ "anylist",
+ /* 301 */ "wqitem",
+ /* 302 */ "wqas",
+ /* 303 */ "windowdefn_list",
+ /* 304 */ "windowdefn",
+ /* 305 */ "window",
+ /* 306 */ "frame_opt",
+ /* 307 */ "part_opt",
+ /* 308 */ "filter_clause",
+ /* 309 */ "over_clause",
+ /* 310 */ "range_or_rows",
+ /* 311 */ "frame_bound",
+ /* 312 */ "frame_bound_s",
+ /* 313 */ "frame_bound_e",
+ /* 314 */ "frame_exclude_opt",
+ /* 315 */ "frame_exclude",
};
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
@@ -156732,243 +158838,256 @@ static const char *const yyRuleName[] = {
/* 145 */ "limit_opt ::= LIMIT expr",
/* 146 */ "limit_opt ::= LIMIT expr OFFSET expr",
/* 147 */ "limit_opt ::= LIMIT expr COMMA expr",
- /* 148 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt",
+ /* 148 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret",
/* 149 */ "where_opt ::=",
/* 150 */ "where_opt ::= WHERE expr",
- /* 151 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt",
- /* 152 */ "setlist ::= setlist COMMA nm EQ expr",
- /* 153 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
- /* 154 */ "setlist ::= nm EQ expr",
- /* 155 */ "setlist ::= LP idlist RP EQ expr",
- /* 156 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert",
- /* 157 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES",
- /* 158 */ "upsert ::=",
- /* 159 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt",
- /* 160 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING",
- /* 161 */ "upsert ::= ON CONFLICT DO NOTHING",
- /* 162 */ "insert_cmd ::= INSERT orconf",
- /* 163 */ "insert_cmd ::= REPLACE",
- /* 164 */ "idlist_opt ::=",
- /* 165 */ "idlist_opt ::= LP idlist RP",
- /* 166 */ "idlist ::= idlist COMMA nm",
- /* 167 */ "idlist ::= nm",
- /* 168 */ "expr ::= LP expr RP",
- /* 169 */ "expr ::= ID|INDEXED",
- /* 170 */ "expr ::= JOIN_KW",
- /* 171 */ "expr ::= nm DOT nm",
- /* 172 */ "expr ::= nm DOT nm DOT nm",
- /* 173 */ "term ::= NULL|FLOAT|BLOB",
- /* 174 */ "term ::= STRING",
- /* 175 */ "term ::= INTEGER",
- /* 176 */ "expr ::= VARIABLE",
- /* 177 */ "expr ::= expr COLLATE ID|STRING",
- /* 178 */ "expr ::= CAST LP expr AS typetoken RP",
- /* 179 */ "expr ::= ID|INDEXED LP distinct exprlist RP",
- /* 180 */ "expr ::= ID|INDEXED LP STAR RP",
- /* 181 */ "expr ::= ID|INDEXED LP distinct exprlist RP filter_over",
- /* 182 */ "expr ::= ID|INDEXED LP STAR RP filter_over",
- /* 183 */ "term ::= CTIME_KW",
- /* 184 */ "expr ::= LP nexprlist COMMA expr RP",
- /* 185 */ "expr ::= expr AND expr",
- /* 186 */ "expr ::= expr OR expr",
- /* 187 */ "expr ::= expr LT|GT|GE|LE expr",
- /* 188 */ "expr ::= expr EQ|NE expr",
- /* 189 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
- /* 190 */ "expr ::= expr PLUS|MINUS expr",
- /* 191 */ "expr ::= expr STAR|SLASH|REM expr",
- /* 192 */ "expr ::= expr CONCAT expr",
- /* 193 */ "likeop ::= NOT LIKE_KW|MATCH",
- /* 194 */ "expr ::= expr likeop expr",
- /* 195 */ "expr ::= expr likeop expr ESCAPE expr",
- /* 196 */ "expr ::= expr ISNULL|NOTNULL",
- /* 197 */ "expr ::= expr NOT NULL",
- /* 198 */ "expr ::= expr IS expr",
- /* 199 */ "expr ::= expr IS NOT expr",
- /* 200 */ "expr ::= NOT expr",
- /* 201 */ "expr ::= BITNOT expr",
- /* 202 */ "expr ::= PLUS|MINUS expr",
- /* 203 */ "between_op ::= BETWEEN",
- /* 204 */ "between_op ::= NOT BETWEEN",
- /* 205 */ "expr ::= expr between_op expr AND expr",
- /* 206 */ "in_op ::= IN",
- /* 207 */ "in_op ::= NOT IN",
- /* 208 */ "expr ::= expr in_op LP exprlist RP",
- /* 209 */ "expr ::= LP select RP",
- /* 210 */ "expr ::= expr in_op LP select RP",
- /* 211 */ "expr ::= expr in_op nm dbnm paren_exprlist",
- /* 212 */ "expr ::= EXISTS LP select RP",
- /* 213 */ "expr ::= CASE case_operand case_exprlist case_else END",
- /* 214 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 215 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 216 */ "case_else ::= ELSE expr",
- /* 217 */ "case_else ::=",
- /* 218 */ "case_operand ::= expr",
- /* 219 */ "case_operand ::=",
- /* 220 */ "exprlist ::=",
- /* 221 */ "nexprlist ::= nexprlist COMMA expr",
- /* 222 */ "nexprlist ::= expr",
- /* 223 */ "paren_exprlist ::=",
- /* 224 */ "paren_exprlist ::= LP exprlist RP",
- /* 225 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
- /* 226 */ "uniqueflag ::= UNIQUE",
- /* 227 */ "uniqueflag ::=",
- /* 228 */ "eidlist_opt ::=",
- /* 229 */ "eidlist_opt ::= LP eidlist RP",
- /* 230 */ "eidlist ::= eidlist COMMA nm collate sortorder",
- /* 231 */ "eidlist ::= nm collate sortorder",
- /* 232 */ "collate ::=",
- /* 233 */ "collate ::= COLLATE ID|STRING",
- /* 234 */ "cmd ::= DROP INDEX ifexists fullname",
- /* 235 */ "cmd ::= VACUUM vinto",
- /* 236 */ "cmd ::= VACUUM nm vinto",
- /* 237 */ "vinto ::= INTO expr",
- /* 238 */ "vinto ::=",
- /* 239 */ "cmd ::= PRAGMA nm dbnm",
- /* 240 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
- /* 241 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
- /* 242 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 243 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
- /* 244 */ "plus_num ::= PLUS INTEGER|FLOAT",
- /* 245 */ "minus_num ::= MINUS INTEGER|FLOAT",
- /* 246 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
- /* 247 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
- /* 248 */ "trigger_time ::= BEFORE|AFTER",
- /* 249 */ "trigger_time ::= INSTEAD OF",
- /* 250 */ "trigger_time ::=",
- /* 251 */ "trigger_event ::= DELETE|INSERT",
- /* 252 */ "trigger_event ::= UPDATE",
- /* 253 */ "trigger_event ::= UPDATE OF idlist",
- /* 254 */ "when_clause ::=",
- /* 255 */ "when_clause ::= WHEN expr",
- /* 256 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 257 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 258 */ "trnm ::= nm DOT nm",
- /* 259 */ "tridxby ::= INDEXED BY nm",
- /* 260 */ "tridxby ::= NOT INDEXED",
- /* 261 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt",
- /* 262 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt",
- /* 263 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt",
- /* 264 */ "trigger_cmd ::= scanpt select scanpt",
- /* 265 */ "expr ::= RAISE LP IGNORE RP",
- /* 266 */ "expr ::= RAISE LP raisetype COMMA nm RP",
- /* 267 */ "raisetype ::= ROLLBACK",
- /* 268 */ "raisetype ::= ABORT",
- /* 269 */ "raisetype ::= FAIL",
- /* 270 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 271 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
- /* 272 */ "cmd ::= DETACH database_kw_opt expr",
- /* 273 */ "key_opt ::=",
- /* 274 */ "key_opt ::= KEY expr",
- /* 275 */ "cmd ::= REINDEX",
- /* 276 */ "cmd ::= REINDEX nm dbnm",
- /* 277 */ "cmd ::= ANALYZE",
- /* 278 */ "cmd ::= ANALYZE nm dbnm",
- /* 279 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 280 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
- /* 281 */ "add_column_fullname ::= fullname",
- /* 282 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm",
- /* 283 */ "cmd ::= create_vtab",
- /* 284 */ "cmd ::= create_vtab LP vtabarglist RP",
- /* 285 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
- /* 286 */ "vtabarg ::=",
- /* 287 */ "vtabargtoken ::= ANY",
- /* 288 */ "vtabargtoken ::= lp anylist RP",
- /* 289 */ "lp ::= LP",
- /* 290 */ "with ::= WITH wqlist",
- /* 291 */ "with ::= WITH RECURSIVE wqlist",
- /* 292 */ "wqlist ::= nm eidlist_opt AS LP select RP",
- /* 293 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",
- /* 294 */ "windowdefn_list ::= windowdefn",
- /* 295 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
- /* 296 */ "windowdefn ::= nm AS LP window RP",
- /* 297 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt",
- /* 298 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt",
- /* 299 */ "window ::= ORDER BY sortlist frame_opt",
- /* 300 */ "window ::= nm ORDER BY sortlist frame_opt",
- /* 301 */ "window ::= frame_opt",
- /* 302 */ "window ::= nm frame_opt",
- /* 303 */ "frame_opt ::=",
- /* 304 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt",
- /* 305 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt",
- /* 306 */ "range_or_rows ::= RANGE|ROWS|GROUPS",
- /* 307 */ "frame_bound_s ::= frame_bound",
- /* 308 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
- /* 309 */ "frame_bound_e ::= frame_bound",
- /* 310 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
- /* 311 */ "frame_bound ::= expr PRECEDING|FOLLOWING",
- /* 312 */ "frame_bound ::= CURRENT ROW",
- /* 313 */ "frame_exclude_opt ::=",
- /* 314 */ "frame_exclude_opt ::= EXCLUDE frame_exclude",
- /* 315 */ "frame_exclude ::= NO OTHERS",
- /* 316 */ "frame_exclude ::= CURRENT ROW",
- /* 317 */ "frame_exclude ::= GROUP|TIES",
- /* 318 */ "window_clause ::= WINDOW windowdefn_list",
- /* 319 */ "filter_over ::= filter_clause over_clause",
- /* 320 */ "filter_over ::= over_clause",
- /* 321 */ "filter_over ::= filter_clause",
- /* 322 */ "over_clause ::= OVER LP window RP",
- /* 323 */ "over_clause ::= OVER nm",
- /* 324 */ "filter_clause ::= FILTER LP WHERE expr RP",
- /* 325 */ "input ::= cmdlist",
- /* 326 */ "cmdlist ::= cmdlist ecmd",
- /* 327 */ "cmdlist ::= ecmd",
- /* 328 */ "ecmd ::= SEMI",
- /* 329 */ "ecmd ::= cmdx SEMI",
- /* 330 */ "ecmd ::= explain cmdx SEMI",
- /* 331 */ "trans_opt ::=",
- /* 332 */ "trans_opt ::= TRANSACTION",
- /* 333 */ "trans_opt ::= TRANSACTION nm",
- /* 334 */ "savepoint_opt ::= SAVEPOINT",
- /* 335 */ "savepoint_opt ::=",
- /* 336 */ "cmd ::= create_table create_table_args",
- /* 337 */ "columnlist ::= columnlist COMMA columnname carglist",
- /* 338 */ "columnlist ::= columnname carglist",
- /* 339 */ "nm ::= ID|INDEXED",
- /* 340 */ "nm ::= STRING",
- /* 341 */ "nm ::= JOIN_KW",
- /* 342 */ "typetoken ::= typename",
- /* 343 */ "typename ::= ID|STRING",
- /* 344 */ "signed ::= plus_num",
- /* 345 */ "signed ::= minus_num",
- /* 346 */ "carglist ::= carglist ccons",
- /* 347 */ "carglist ::=",
- /* 348 */ "ccons ::= NULL onconf",
- /* 349 */ "ccons ::= GENERATED ALWAYS AS generated",
- /* 350 */ "ccons ::= AS generated",
- /* 351 */ "conslist_opt ::= COMMA conslist",
- /* 352 */ "conslist ::= conslist tconscomma tcons",
- /* 353 */ "conslist ::= tcons",
- /* 354 */ "tconscomma ::=",
- /* 355 */ "defer_subclause_opt ::= defer_subclause",
- /* 356 */ "resolvetype ::= raisetype",
- /* 357 */ "selectnowith ::= oneselect",
- /* 358 */ "oneselect ::= values",
- /* 359 */ "sclp ::= selcollist COMMA",
- /* 360 */ "as ::= ID|STRING",
- /* 361 */ "expr ::= term",
- /* 362 */ "likeop ::= LIKE_KW|MATCH",
- /* 363 */ "exprlist ::= nexprlist",
- /* 364 */ "nmnum ::= plus_num",
- /* 365 */ "nmnum ::= nm",
- /* 366 */ "nmnum ::= ON",
- /* 367 */ "nmnum ::= DELETE",
- /* 368 */ "nmnum ::= DEFAULT",
- /* 369 */ "plus_num ::= INTEGER|FLOAT",
- /* 370 */ "foreach_clause ::=",
- /* 371 */ "foreach_clause ::= FOR EACH ROW",
- /* 372 */ "trnm ::= nm",
- /* 373 */ "tridxby ::=",
- /* 374 */ "database_kw_opt ::= DATABASE",
- /* 375 */ "database_kw_opt ::=",
- /* 376 */ "kwcolumn_opt ::=",
- /* 377 */ "kwcolumn_opt ::= COLUMNKW",
- /* 378 */ "vtabarglist ::= vtabarg",
- /* 379 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
- /* 380 */ "vtabarg ::= vtabarg vtabargtoken",
- /* 381 */ "anylist ::=",
- /* 382 */ "anylist ::= anylist LP anylist RP",
- /* 383 */ "anylist ::= anylist ANY",
- /* 384 */ "with ::=",
+ /* 151 */ "where_opt_ret ::=",
+ /* 152 */ "where_opt_ret ::= WHERE expr",
+ /* 153 */ "where_opt_ret ::= RETURNING selcollist",
+ /* 154 */ "where_opt_ret ::= WHERE expr RETURNING selcollist",
+ /* 155 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret",
+ /* 156 */ "setlist ::= setlist COMMA nm EQ expr",
+ /* 157 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
+ /* 158 */ "setlist ::= nm EQ expr",
+ /* 159 */ "setlist ::= LP idlist RP EQ expr",
+ /* 160 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert",
+ /* 161 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning",
+ /* 162 */ "upsert ::=",
+ /* 163 */ "upsert ::= RETURNING selcollist",
+ /* 164 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert",
+ /* 165 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert",
+ /* 166 */ "upsert ::= ON CONFLICT DO NOTHING returning",
+ /* 167 */ "upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning",
+ /* 168 */ "returning ::= RETURNING selcollist",
+ /* 169 */ "insert_cmd ::= INSERT orconf",
+ /* 170 */ "insert_cmd ::= REPLACE",
+ /* 171 */ "idlist_opt ::=",
+ /* 172 */ "idlist_opt ::= LP idlist RP",
+ /* 173 */ "idlist ::= idlist COMMA nm",
+ /* 174 */ "idlist ::= nm",
+ /* 175 */ "expr ::= LP expr RP",
+ /* 176 */ "expr ::= ID|INDEXED",
+ /* 177 */ "expr ::= JOIN_KW",
+ /* 178 */ "expr ::= nm DOT nm",
+ /* 179 */ "expr ::= nm DOT nm DOT nm",
+ /* 180 */ "term ::= NULL|FLOAT|BLOB",
+ /* 181 */ "term ::= STRING",
+ /* 182 */ "term ::= INTEGER",
+ /* 183 */ "expr ::= VARIABLE",
+ /* 184 */ "expr ::= expr COLLATE ID|STRING",
+ /* 185 */ "expr ::= CAST LP expr AS typetoken RP",
+ /* 186 */ "expr ::= ID|INDEXED LP distinct exprlist RP",
+ /* 187 */ "expr ::= ID|INDEXED LP STAR RP",
+ /* 188 */ "expr ::= ID|INDEXED LP distinct exprlist RP filter_over",
+ /* 189 */ "expr ::= ID|INDEXED LP STAR RP filter_over",
+ /* 190 */ "term ::= CTIME_KW",
+ /* 191 */ "expr ::= LP nexprlist COMMA expr RP",
+ /* 192 */ "expr ::= expr AND expr",
+ /* 193 */ "expr ::= expr OR expr",
+ /* 194 */ "expr ::= expr LT|GT|GE|LE expr",
+ /* 195 */ "expr ::= expr EQ|NE expr",
+ /* 196 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
+ /* 197 */ "expr ::= expr PLUS|MINUS expr",
+ /* 198 */ "expr ::= expr STAR|SLASH|REM expr",
+ /* 199 */ "expr ::= expr CONCAT expr",
+ /* 200 */ "likeop ::= NOT LIKE_KW|MATCH",
+ /* 201 */ "expr ::= expr likeop expr",
+ /* 202 */ "expr ::= expr likeop expr ESCAPE expr",
+ /* 203 */ "expr ::= expr ISNULL|NOTNULL",
+ /* 204 */ "expr ::= expr NOT NULL",
+ /* 205 */ "expr ::= expr IS expr",
+ /* 206 */ "expr ::= expr IS NOT expr",
+ /* 207 */ "expr ::= NOT expr",
+ /* 208 */ "expr ::= BITNOT expr",
+ /* 209 */ "expr ::= PLUS|MINUS expr",
+ /* 210 */ "between_op ::= BETWEEN",
+ /* 211 */ "between_op ::= NOT BETWEEN",
+ /* 212 */ "expr ::= expr between_op expr AND expr",
+ /* 213 */ "in_op ::= IN",
+ /* 214 */ "in_op ::= NOT IN",
+ /* 215 */ "expr ::= expr in_op LP exprlist RP",
+ /* 216 */ "expr ::= LP select RP",
+ /* 217 */ "expr ::= expr in_op LP select RP",
+ /* 218 */ "expr ::= expr in_op nm dbnm paren_exprlist",
+ /* 219 */ "expr ::= EXISTS LP select RP",
+ /* 220 */ "expr ::= CASE case_operand case_exprlist case_else END",
+ /* 221 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 222 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 223 */ "case_else ::= ELSE expr",
+ /* 224 */ "case_else ::=",
+ /* 225 */ "case_operand ::= expr",
+ /* 226 */ "case_operand ::=",
+ /* 227 */ "exprlist ::=",
+ /* 228 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 229 */ "nexprlist ::= expr",
+ /* 230 */ "paren_exprlist ::=",
+ /* 231 */ "paren_exprlist ::= LP exprlist RP",
+ /* 232 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
+ /* 233 */ "uniqueflag ::= UNIQUE",
+ /* 234 */ "uniqueflag ::=",
+ /* 235 */ "eidlist_opt ::=",
+ /* 236 */ "eidlist_opt ::= LP eidlist RP",
+ /* 237 */ "eidlist ::= eidlist COMMA nm collate sortorder",
+ /* 238 */ "eidlist ::= nm collate sortorder",
+ /* 239 */ "collate ::=",
+ /* 240 */ "collate ::= COLLATE ID|STRING",
+ /* 241 */ "cmd ::= DROP INDEX ifexists fullname",
+ /* 242 */ "cmd ::= VACUUM vinto",
+ /* 243 */ "cmd ::= VACUUM nm vinto",
+ /* 244 */ "vinto ::= INTO expr",
+ /* 245 */ "vinto ::=",
+ /* 246 */ "cmd ::= PRAGMA nm dbnm",
+ /* 247 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
+ /* 248 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
+ /* 249 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 250 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
+ /* 251 */ "plus_num ::= PLUS INTEGER|FLOAT",
+ /* 252 */ "minus_num ::= MINUS INTEGER|FLOAT",
+ /* 253 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
+ /* 254 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
+ /* 255 */ "trigger_time ::= BEFORE|AFTER",
+ /* 256 */ "trigger_time ::= INSTEAD OF",
+ /* 257 */ "trigger_time ::=",
+ /* 258 */ "trigger_event ::= DELETE|INSERT",
+ /* 259 */ "trigger_event ::= UPDATE",
+ /* 260 */ "trigger_event ::= UPDATE OF idlist",
+ /* 261 */ "when_clause ::=",
+ /* 262 */ "when_clause ::= WHEN expr",
+ /* 263 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 264 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 265 */ "trnm ::= nm DOT nm",
+ /* 266 */ "tridxby ::= INDEXED BY nm",
+ /* 267 */ "tridxby ::= NOT INDEXED",
+ /* 268 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt",
+ /* 269 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt",
+ /* 270 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt",
+ /* 271 */ "trigger_cmd ::= scanpt select scanpt",
+ /* 272 */ "expr ::= RAISE LP IGNORE RP",
+ /* 273 */ "expr ::= RAISE LP raisetype COMMA nm RP",
+ /* 274 */ "raisetype ::= ROLLBACK",
+ /* 275 */ "raisetype ::= ABORT",
+ /* 276 */ "raisetype ::= FAIL",
+ /* 277 */ "cmd ::= DROP TRIGGER ifexists fullname",
+ /* 278 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
+ /* 279 */ "cmd ::= DETACH database_kw_opt expr",
+ /* 280 */ "key_opt ::=",
+ /* 281 */ "key_opt ::= KEY expr",
+ /* 282 */ "cmd ::= REINDEX",
+ /* 283 */ "cmd ::= REINDEX nm dbnm",
+ /* 284 */ "cmd ::= ANALYZE",
+ /* 285 */ "cmd ::= ANALYZE nm dbnm",
+ /* 286 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 287 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
+ /* 288 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm",
+ /* 289 */ "add_column_fullname ::= fullname",
+ /* 290 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm",
+ /* 291 */ "cmd ::= create_vtab",
+ /* 292 */ "cmd ::= create_vtab LP vtabarglist RP",
+ /* 293 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
+ /* 294 */ "vtabarg ::=",
+ /* 295 */ "vtabargtoken ::= ANY",
+ /* 296 */ "vtabargtoken ::= lp anylist RP",
+ /* 297 */ "lp ::= LP",
+ /* 298 */ "with ::= WITH wqlist",
+ /* 299 */ "with ::= WITH RECURSIVE wqlist",
+ /* 300 */ "wqas ::= AS",
+ /* 301 */ "wqas ::= AS MATERIALIZED",
+ /* 302 */ "wqas ::= AS NOT MATERIALIZED",
+ /* 303 */ "wqitem ::= nm eidlist_opt wqas LP select RP",
+ /* 304 */ "wqlist ::= wqitem",
+ /* 305 */ "wqlist ::= wqlist COMMA wqitem",
+ /* 306 */ "windowdefn_list ::= windowdefn",
+ /* 307 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
+ /* 308 */ "windowdefn ::= nm AS LP window RP",
+ /* 309 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 310 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 311 */ "window ::= ORDER BY sortlist frame_opt",
+ /* 312 */ "window ::= nm ORDER BY sortlist frame_opt",
+ /* 313 */ "window ::= frame_opt",
+ /* 314 */ "window ::= nm frame_opt",
+ /* 315 */ "frame_opt ::=",
+ /* 316 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt",
+ /* 317 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt",
+ /* 318 */ "range_or_rows ::= RANGE|ROWS|GROUPS",
+ /* 319 */ "frame_bound_s ::= frame_bound",
+ /* 320 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
+ /* 321 */ "frame_bound_e ::= frame_bound",
+ /* 322 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
+ /* 323 */ "frame_bound ::= expr PRECEDING|FOLLOWING",
+ /* 324 */ "frame_bound ::= CURRENT ROW",
+ /* 325 */ "frame_exclude_opt ::=",
+ /* 326 */ "frame_exclude_opt ::= EXCLUDE frame_exclude",
+ /* 327 */ "frame_exclude ::= NO OTHERS",
+ /* 328 */ "frame_exclude ::= CURRENT ROW",
+ /* 329 */ "frame_exclude ::= GROUP|TIES",
+ /* 330 */ "window_clause ::= WINDOW windowdefn_list",
+ /* 331 */ "filter_over ::= filter_clause over_clause",
+ /* 332 */ "filter_over ::= over_clause",
+ /* 333 */ "filter_over ::= filter_clause",
+ /* 334 */ "over_clause ::= OVER LP window RP",
+ /* 335 */ "over_clause ::= OVER nm",
+ /* 336 */ "filter_clause ::= FILTER LP WHERE expr RP",
+ /* 337 */ "input ::= cmdlist",
+ /* 338 */ "cmdlist ::= cmdlist ecmd",
+ /* 339 */ "cmdlist ::= ecmd",
+ /* 340 */ "ecmd ::= SEMI",
+ /* 341 */ "ecmd ::= cmdx SEMI",
+ /* 342 */ "ecmd ::= explain cmdx SEMI",
+ /* 343 */ "trans_opt ::=",
+ /* 344 */ "trans_opt ::= TRANSACTION",
+ /* 345 */ "trans_opt ::= TRANSACTION nm",
+ /* 346 */ "savepoint_opt ::= SAVEPOINT",
+ /* 347 */ "savepoint_opt ::=",
+ /* 348 */ "cmd ::= create_table create_table_args",
+ /* 349 */ "columnlist ::= columnlist COMMA columnname carglist",
+ /* 350 */ "columnlist ::= columnname carglist",
+ /* 351 */ "nm ::= ID|INDEXED",
+ /* 352 */ "nm ::= STRING",
+ /* 353 */ "nm ::= JOIN_KW",
+ /* 354 */ "typetoken ::= typename",
+ /* 355 */ "typename ::= ID|STRING",
+ /* 356 */ "signed ::= plus_num",
+ /* 357 */ "signed ::= minus_num",
+ /* 358 */ "carglist ::= carglist ccons",
+ /* 359 */ "carglist ::=",
+ /* 360 */ "ccons ::= NULL onconf",
+ /* 361 */ "ccons ::= GENERATED ALWAYS AS generated",
+ /* 362 */ "ccons ::= AS generated",
+ /* 363 */ "conslist_opt ::= COMMA conslist",
+ /* 364 */ "conslist ::= conslist tconscomma tcons",
+ /* 365 */ "conslist ::= tcons",
+ /* 366 */ "tconscomma ::=",
+ /* 367 */ "defer_subclause_opt ::= defer_subclause",
+ /* 368 */ "resolvetype ::= raisetype",
+ /* 369 */ "selectnowith ::= oneselect",
+ /* 370 */ "oneselect ::= values",
+ /* 371 */ "sclp ::= selcollist COMMA",
+ /* 372 */ "as ::= ID|STRING",
+ /* 373 */ "returning ::=",
+ /* 374 */ "expr ::= term",
+ /* 375 */ "likeop ::= LIKE_KW|MATCH",
+ /* 376 */ "exprlist ::= nexprlist",
+ /* 377 */ "nmnum ::= plus_num",
+ /* 378 */ "nmnum ::= nm",
+ /* 379 */ "nmnum ::= ON",
+ /* 380 */ "nmnum ::= DELETE",
+ /* 381 */ "nmnum ::= DEFAULT",
+ /* 382 */ "plus_num ::= INTEGER|FLOAT",
+ /* 383 */ "foreach_clause ::=",
+ /* 384 */ "foreach_clause ::= FOR EACH ROW",
+ /* 385 */ "trnm ::= nm",
+ /* 386 */ "tridxby ::=",
+ /* 387 */ "database_kw_opt ::= DATABASE",
+ /* 388 */ "database_kw_opt ::=",
+ /* 389 */ "kwcolumn_opt ::=",
+ /* 390 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 391 */ "vtabarglist ::= vtabarg",
+ /* 392 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
+ /* 393 */ "vtabarg ::= vtabarg vtabargtoken",
+ /* 394 */ "anylist ::=",
+ /* 395 */ "anylist ::= anylist LP anylist RP",
+ /* 396 */ "anylist ::= anylist ANY",
+ /* 397 */ "with ::=",
};
#endif /* NDEBUG */
@@ -157094,98 +159213,99 @@ static void yy_destructor(
** inside the C code.
*/
/********* Begin destructor definitions ***************************************/
- case 200: /* select */
- case 234: /* selectnowith */
- case 235: /* oneselect */
- case 247: /* values */
+ case 202: /* select */
+ case 236: /* selectnowith */
+ case 237: /* oneselect */
+ case 249: /* values */
{
-sqlite3SelectDelete(pParse->db, (yypminor->yy539));
-}
- break;
- case 211: /* term */
- case 212: /* expr */
- case 241: /* where_opt */
- case 243: /* having_opt */
- case 255: /* on_opt */
- case 271: /* case_operand */
- case 273: /* case_else */
- case 276: /* vinto */
- case 283: /* when_clause */
- case 288: /* key_opt */
- case 302: /* filter_clause */
+sqlite3SelectDelete(pParse->db, (yypminor->yy307));
+}
+ break;
+ case 213: /* term */
+ case 214: /* expr */
+ case 243: /* where_opt */
+ case 245: /* having_opt */
+ case 257: /* on_opt */
+ case 264: /* where_opt_ret */
+ case 275: /* case_operand */
+ case 277: /* case_else */
+ case 280: /* vinto */
+ case 287: /* when_clause */
+ case 292: /* key_opt */
+ case 308: /* filter_clause */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy202));
-}
- break;
- case 216: /* eidlist_opt */
- case 226: /* sortlist */
- case 227: /* eidlist */
- case 239: /* selcollist */
- case 242: /* groupby_opt */
- case 244: /* orderby_opt */
- case 248: /* nexprlist */
- case 249: /* sclp */
- case 257: /* exprlist */
- case 262: /* setlist */
- case 270: /* paren_exprlist */
- case 272: /* case_exprlist */
- case 301: /* part_opt */
+sqlite3ExprDelete(pParse->db, (yypminor->yy602));
+}
+ break;
+ case 218: /* eidlist_opt */
+ case 228: /* sortlist */
+ case 229: /* eidlist */
+ case 241: /* selcollist */
+ case 244: /* groupby_opt */
+ case 246: /* orderby_opt */
+ case 250: /* nexprlist */
+ case 251: /* sclp */
+ case 259: /* exprlist */
+ case 265: /* setlist */
+ case 274: /* paren_exprlist */
+ case 276: /* case_exprlist */
+ case 307: /* part_opt */
{
-sqlite3ExprListDelete(pParse->db, (yypminor->yy242));
+sqlite3ExprListDelete(pParse->db, (yypminor->yy338));
}
break;
- case 233: /* fullname */
- case 240: /* from */
- case 251: /* seltablist */
- case 252: /* stl_prefix */
- case 258: /* xfullname */
+ case 235: /* fullname */
+ case 242: /* from */
+ case 253: /* seltablist */
+ case 254: /* stl_prefix */
+ case 260: /* xfullname */
{
-sqlite3SrcListDelete(pParse->db, (yypminor->yy47));
+sqlite3SrcListDelete(pParse->db, (yypminor->yy291));
}
break;
- case 236: /* wqlist */
+ case 238: /* wqlist */
{
-sqlite3WithDelete(pParse->db, (yypminor->yy131));
+sqlite3WithDelete(pParse->db, (yypminor->yy195));
}
break;
- case 246: /* window_clause */
- case 297: /* windowdefn_list */
+ case 248: /* window_clause */
+ case 303: /* windowdefn_list */
{
-sqlite3WindowListDelete(pParse->db, (yypminor->yy303));
+sqlite3WindowListDelete(pParse->db, (yypminor->yy19));
}
break;
- case 256: /* using_opt */
- case 259: /* idlist */
- case 264: /* idlist_opt */
+ case 258: /* using_opt */
+ case 261: /* idlist */
+ case 267: /* idlist_opt */
{
-sqlite3IdListDelete(pParse->db, (yypminor->yy600));
+sqlite3IdListDelete(pParse->db, (yypminor->yy288));
}
break;
- case 266: /* filter_over */
- case 298: /* windowdefn */
- case 299: /* window */
- case 300: /* frame_opt */
- case 303: /* over_clause */
+ case 270: /* filter_over */
+ case 304: /* windowdefn */
+ case 305: /* window */
+ case 306: /* frame_opt */
+ case 309: /* over_clause */
{
-sqlite3WindowDelete(pParse->db, (yypminor->yy303));
+sqlite3WindowDelete(pParse->db, (yypminor->yy19));
}
break;
- case 279: /* trigger_cmd_list */
- case 284: /* trigger_cmd */
+ case 283: /* trigger_cmd_list */
+ case 288: /* trigger_cmd */
{
-sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy447));
+sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy483));
}
break;
- case 281: /* trigger_event */
+ case 285: /* trigger_event */
{
-sqlite3IdListDelete(pParse->db, (yypminor->yy230).b);
+sqlite3IdListDelete(pParse->db, (yypminor->yy50).b);
}
break;
- case 305: /* frame_bound */
- case 306: /* frame_bound_s */
- case 307: /* frame_bound_e */
+ case 311: /* frame_bound */
+ case 312: /* frame_bound_s */
+ case 313: /* frame_bound_e */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy77).pExpr);
+sqlite3ExprDelete(pParse->db, (yypminor->yy113).pExpr);
}
break;
/********* End destructor definitions *****************************************/
@@ -157476,391 +159596,404 @@ static void yy_shift(
/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
** of that rule */
static const YYCODETYPE yyRuleInfoLhs[] = {
- 185, /* (0) explain ::= EXPLAIN */
- 185, /* (1) explain ::= EXPLAIN QUERY PLAN */
- 184, /* (2) cmdx ::= cmd */
- 186, /* (3) cmd ::= BEGIN transtype trans_opt */
- 187, /* (4) transtype ::= */
- 187, /* (5) transtype ::= DEFERRED */
- 187, /* (6) transtype ::= IMMEDIATE */
- 187, /* (7) transtype ::= EXCLUSIVE */
- 186, /* (8) cmd ::= COMMIT|END trans_opt */
- 186, /* (9) cmd ::= ROLLBACK trans_opt */
- 186, /* (10) cmd ::= SAVEPOINT nm */
- 186, /* (11) cmd ::= RELEASE savepoint_opt nm */
- 186, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
- 191, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */
- 193, /* (14) createkw ::= CREATE */
- 195, /* (15) ifnotexists ::= */
- 195, /* (16) ifnotexists ::= IF NOT EXISTS */
- 194, /* (17) temp ::= TEMP */
- 194, /* (18) temp ::= */
- 192, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_options */
- 192, /* (20) create_table_args ::= AS select */
- 199, /* (21) table_options ::= */
- 199, /* (22) table_options ::= WITHOUT nm */
- 201, /* (23) columnname ::= nm typetoken */
- 203, /* (24) typetoken ::= */
- 203, /* (25) typetoken ::= typename LP signed RP */
- 203, /* (26) typetoken ::= typename LP signed COMMA signed RP */
- 204, /* (27) typename ::= typename ID|STRING */
- 208, /* (28) scanpt ::= */
- 209, /* (29) scantok ::= */
- 210, /* (30) ccons ::= CONSTRAINT nm */
- 210, /* (31) ccons ::= DEFAULT scantok term */
- 210, /* (32) ccons ::= DEFAULT LP expr RP */
- 210, /* (33) ccons ::= DEFAULT PLUS scantok term */
- 210, /* (34) ccons ::= DEFAULT MINUS scantok term */
- 210, /* (35) ccons ::= DEFAULT scantok ID|INDEXED */
- 210, /* (36) ccons ::= NOT NULL onconf */
- 210, /* (37) ccons ::= PRIMARY KEY sortorder onconf autoinc */
- 210, /* (38) ccons ::= UNIQUE onconf */
- 210, /* (39) ccons ::= CHECK LP expr RP */
- 210, /* (40) ccons ::= REFERENCES nm eidlist_opt refargs */
- 210, /* (41) ccons ::= defer_subclause */
- 210, /* (42) ccons ::= COLLATE ID|STRING */
- 219, /* (43) generated ::= LP expr RP */
- 219, /* (44) generated ::= LP expr RP ID */
- 215, /* (45) autoinc ::= */
- 215, /* (46) autoinc ::= AUTOINCR */
- 217, /* (47) refargs ::= */
- 217, /* (48) refargs ::= refargs refarg */
- 220, /* (49) refarg ::= MATCH nm */
- 220, /* (50) refarg ::= ON INSERT refact */
- 220, /* (51) refarg ::= ON DELETE refact */
- 220, /* (52) refarg ::= ON UPDATE refact */
- 221, /* (53) refact ::= SET NULL */
- 221, /* (54) refact ::= SET DEFAULT */
- 221, /* (55) refact ::= CASCADE */
- 221, /* (56) refact ::= RESTRICT */
- 221, /* (57) refact ::= NO ACTION */
- 218, /* (58) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
- 218, /* (59) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
- 222, /* (60) init_deferred_pred_opt ::= */
- 222, /* (61) init_deferred_pred_opt ::= INITIALLY DEFERRED */
- 222, /* (62) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
- 198, /* (63) conslist_opt ::= */
- 224, /* (64) tconscomma ::= COMMA */
- 225, /* (65) tcons ::= CONSTRAINT nm */
- 225, /* (66) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
- 225, /* (67) tcons ::= UNIQUE LP sortlist RP onconf */
- 225, /* (68) tcons ::= CHECK LP expr RP onconf */
- 225, /* (69) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
- 228, /* (70) defer_subclause_opt ::= */
- 213, /* (71) onconf ::= */
- 213, /* (72) onconf ::= ON CONFLICT resolvetype */
- 229, /* (73) orconf ::= */
- 229, /* (74) orconf ::= OR resolvetype */
- 230, /* (75) resolvetype ::= IGNORE */
- 230, /* (76) resolvetype ::= REPLACE */
- 186, /* (77) cmd ::= DROP TABLE ifexists fullname */
- 232, /* (78) ifexists ::= IF EXISTS */
- 232, /* (79) ifexists ::= */
- 186, /* (80) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
- 186, /* (81) cmd ::= DROP VIEW ifexists fullname */
- 186, /* (82) cmd ::= select */
- 200, /* (83) select ::= WITH wqlist selectnowith */
- 200, /* (84) select ::= WITH RECURSIVE wqlist selectnowith */
- 200, /* (85) select ::= selectnowith */
- 234, /* (86) selectnowith ::= selectnowith multiselect_op oneselect */
- 237, /* (87) multiselect_op ::= UNION */
- 237, /* (88) multiselect_op ::= UNION ALL */
- 237, /* (89) multiselect_op ::= EXCEPT|INTERSECT */
- 235, /* (90) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
- 235, /* (91) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
- 247, /* (92) values ::= VALUES LP nexprlist RP */
- 247, /* (93) values ::= values COMMA LP nexprlist RP */
- 238, /* (94) distinct ::= DISTINCT */
- 238, /* (95) distinct ::= ALL */
- 238, /* (96) distinct ::= */
- 249, /* (97) sclp ::= */
- 239, /* (98) selcollist ::= sclp scanpt expr scanpt as */
- 239, /* (99) selcollist ::= sclp scanpt STAR */
- 239, /* (100) selcollist ::= sclp scanpt nm DOT STAR */
- 250, /* (101) as ::= AS nm */
- 250, /* (102) as ::= */
- 240, /* (103) from ::= */
- 240, /* (104) from ::= FROM seltablist */
- 252, /* (105) stl_prefix ::= seltablist joinop */
- 252, /* (106) stl_prefix ::= */
- 251, /* (107) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
- 251, /* (108) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
- 251, /* (109) seltablist ::= stl_prefix LP select RP as on_opt using_opt */
- 251, /* (110) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
- 196, /* (111) dbnm ::= */
- 196, /* (112) dbnm ::= DOT nm */
- 233, /* (113) fullname ::= nm */
- 233, /* (114) fullname ::= nm DOT nm */
- 258, /* (115) xfullname ::= nm */
- 258, /* (116) xfullname ::= nm DOT nm */
- 258, /* (117) xfullname ::= nm DOT nm AS nm */
- 258, /* (118) xfullname ::= nm AS nm */
- 253, /* (119) joinop ::= COMMA|JOIN */
- 253, /* (120) joinop ::= JOIN_KW JOIN */
- 253, /* (121) joinop ::= JOIN_KW nm JOIN */
- 253, /* (122) joinop ::= JOIN_KW nm nm JOIN */
- 255, /* (123) on_opt ::= ON expr */
- 255, /* (124) on_opt ::= */
- 254, /* (125) indexed_opt ::= */
- 254, /* (126) indexed_opt ::= INDEXED BY nm */
- 254, /* (127) indexed_opt ::= NOT INDEXED */
- 256, /* (128) using_opt ::= USING LP idlist RP */
- 256, /* (129) using_opt ::= */
- 244, /* (130) orderby_opt ::= */
- 244, /* (131) orderby_opt ::= ORDER BY sortlist */
- 226, /* (132) sortlist ::= sortlist COMMA expr sortorder nulls */
- 226, /* (133) sortlist ::= expr sortorder nulls */
- 214, /* (134) sortorder ::= ASC */
- 214, /* (135) sortorder ::= DESC */
- 214, /* (136) sortorder ::= */
- 260, /* (137) nulls ::= NULLS FIRST */
- 260, /* (138) nulls ::= NULLS LAST */
- 260, /* (139) nulls ::= */
- 242, /* (140) groupby_opt ::= */
- 242, /* (141) groupby_opt ::= GROUP BY nexprlist */
- 243, /* (142) having_opt ::= */
- 243, /* (143) having_opt ::= HAVING expr */
- 245, /* (144) limit_opt ::= */
- 245, /* (145) limit_opt ::= LIMIT expr */
- 245, /* (146) limit_opt ::= LIMIT expr OFFSET expr */
- 245, /* (147) limit_opt ::= LIMIT expr COMMA expr */
- 186, /* (148) cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
- 241, /* (149) where_opt ::= */
- 241, /* (150) where_opt ::= WHERE expr */
- 186, /* (151) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt */
- 262, /* (152) setlist ::= setlist COMMA nm EQ expr */
- 262, /* (153) setlist ::= setlist COMMA LP idlist RP EQ expr */
- 262, /* (154) setlist ::= nm EQ expr */
- 262, /* (155) setlist ::= LP idlist RP EQ expr */
- 186, /* (156) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
- 186, /* (157) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
- 265, /* (158) upsert ::= */
- 265, /* (159) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
- 265, /* (160) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
- 265, /* (161) upsert ::= ON CONFLICT DO NOTHING */
- 263, /* (162) insert_cmd ::= INSERT orconf */
- 263, /* (163) insert_cmd ::= REPLACE */
- 264, /* (164) idlist_opt ::= */
- 264, /* (165) idlist_opt ::= LP idlist RP */
- 259, /* (166) idlist ::= idlist COMMA nm */
- 259, /* (167) idlist ::= nm */
- 212, /* (168) expr ::= LP expr RP */
- 212, /* (169) expr ::= ID|INDEXED */
- 212, /* (170) expr ::= JOIN_KW */
- 212, /* (171) expr ::= nm DOT nm */
- 212, /* (172) expr ::= nm DOT nm DOT nm */
- 211, /* (173) term ::= NULL|FLOAT|BLOB */
- 211, /* (174) term ::= STRING */
- 211, /* (175) term ::= INTEGER */
- 212, /* (176) expr ::= VARIABLE */
- 212, /* (177) expr ::= expr COLLATE ID|STRING */
- 212, /* (178) expr ::= CAST LP expr AS typetoken RP */
- 212, /* (179) expr ::= ID|INDEXED LP distinct exprlist RP */
- 212, /* (180) expr ::= ID|INDEXED LP STAR RP */
- 212, /* (181) expr ::= ID|INDEXED LP distinct exprlist RP filter_over */
- 212, /* (182) expr ::= ID|INDEXED LP STAR RP filter_over */
- 211, /* (183) term ::= CTIME_KW */
- 212, /* (184) expr ::= LP nexprlist COMMA expr RP */
- 212, /* (185) expr ::= expr AND expr */
- 212, /* (186) expr ::= expr OR expr */
- 212, /* (187) expr ::= expr LT|GT|GE|LE expr */
- 212, /* (188) expr ::= expr EQ|NE expr */
- 212, /* (189) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
- 212, /* (190) expr ::= expr PLUS|MINUS expr */
- 212, /* (191) expr ::= expr STAR|SLASH|REM expr */
- 212, /* (192) expr ::= expr CONCAT expr */
- 267, /* (193) likeop ::= NOT LIKE_KW|MATCH */
- 212, /* (194) expr ::= expr likeop expr */
- 212, /* (195) expr ::= expr likeop expr ESCAPE expr */
- 212, /* (196) expr ::= expr ISNULL|NOTNULL */
- 212, /* (197) expr ::= expr NOT NULL */
- 212, /* (198) expr ::= expr IS expr */
- 212, /* (199) expr ::= expr IS NOT expr */
- 212, /* (200) expr ::= NOT expr */
- 212, /* (201) expr ::= BITNOT expr */
- 212, /* (202) expr ::= PLUS|MINUS expr */
- 268, /* (203) between_op ::= BETWEEN */
- 268, /* (204) between_op ::= NOT BETWEEN */
- 212, /* (205) expr ::= expr between_op expr AND expr */
- 269, /* (206) in_op ::= IN */
- 269, /* (207) in_op ::= NOT IN */
- 212, /* (208) expr ::= expr in_op LP exprlist RP */
- 212, /* (209) expr ::= LP select RP */
- 212, /* (210) expr ::= expr in_op LP select RP */
- 212, /* (211) expr ::= expr in_op nm dbnm paren_exprlist */
- 212, /* (212) expr ::= EXISTS LP select RP */
- 212, /* (213) expr ::= CASE case_operand case_exprlist case_else END */
- 272, /* (214) case_exprlist ::= case_exprlist WHEN expr THEN expr */
- 272, /* (215) case_exprlist ::= WHEN expr THEN expr */
- 273, /* (216) case_else ::= ELSE expr */
- 273, /* (217) case_else ::= */
- 271, /* (218) case_operand ::= expr */
- 271, /* (219) case_operand ::= */
- 257, /* (220) exprlist ::= */
- 248, /* (221) nexprlist ::= nexprlist COMMA expr */
- 248, /* (222) nexprlist ::= expr */
- 270, /* (223) paren_exprlist ::= */
- 270, /* (224) paren_exprlist ::= LP exprlist RP */
- 186, /* (225) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
- 274, /* (226) uniqueflag ::= UNIQUE */
- 274, /* (227) uniqueflag ::= */
- 216, /* (228) eidlist_opt ::= */
- 216, /* (229) eidlist_opt ::= LP eidlist RP */
- 227, /* (230) eidlist ::= eidlist COMMA nm collate sortorder */
- 227, /* (231) eidlist ::= nm collate sortorder */
- 275, /* (232) collate ::= */
- 275, /* (233) collate ::= COLLATE ID|STRING */
- 186, /* (234) cmd ::= DROP INDEX ifexists fullname */
- 186, /* (235) cmd ::= VACUUM vinto */
- 186, /* (236) cmd ::= VACUUM nm vinto */
- 276, /* (237) vinto ::= INTO expr */
- 276, /* (238) vinto ::= */
- 186, /* (239) cmd ::= PRAGMA nm dbnm */
- 186, /* (240) cmd ::= PRAGMA nm dbnm EQ nmnum */
- 186, /* (241) cmd ::= PRAGMA nm dbnm LP nmnum RP */
- 186, /* (242) cmd ::= PRAGMA nm dbnm EQ minus_num */
- 186, /* (243) cmd ::= PRAGMA nm dbnm LP minus_num RP */
- 206, /* (244) plus_num ::= PLUS INTEGER|FLOAT */
- 207, /* (245) minus_num ::= MINUS INTEGER|FLOAT */
- 186, /* (246) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
- 278, /* (247) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
- 280, /* (248) trigger_time ::= BEFORE|AFTER */
- 280, /* (249) trigger_time ::= INSTEAD OF */
- 280, /* (250) trigger_time ::= */
- 281, /* (251) trigger_event ::= DELETE|INSERT */
- 281, /* (252) trigger_event ::= UPDATE */
- 281, /* (253) trigger_event ::= UPDATE OF idlist */
- 283, /* (254) when_clause ::= */
- 283, /* (255) when_clause ::= WHEN expr */
- 279, /* (256) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
- 279, /* (257) trigger_cmd_list ::= trigger_cmd SEMI */
- 285, /* (258) trnm ::= nm DOT nm */
- 286, /* (259) tridxby ::= INDEXED BY nm */
- 286, /* (260) tridxby ::= NOT INDEXED */
- 284, /* (261) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
- 284, /* (262) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
- 284, /* (263) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
- 284, /* (264) trigger_cmd ::= scanpt select scanpt */
- 212, /* (265) expr ::= RAISE LP IGNORE RP */
- 212, /* (266) expr ::= RAISE LP raisetype COMMA nm RP */
- 231, /* (267) raisetype ::= ROLLBACK */
- 231, /* (268) raisetype ::= ABORT */
- 231, /* (269) raisetype ::= FAIL */
- 186, /* (270) cmd ::= DROP TRIGGER ifexists fullname */
- 186, /* (271) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
- 186, /* (272) cmd ::= DETACH database_kw_opt expr */
- 288, /* (273) key_opt ::= */
- 288, /* (274) key_opt ::= KEY expr */
- 186, /* (275) cmd ::= REINDEX */
- 186, /* (276) cmd ::= REINDEX nm dbnm */
- 186, /* (277) cmd ::= ANALYZE */
- 186, /* (278) cmd ::= ANALYZE nm dbnm */
- 186, /* (279) cmd ::= ALTER TABLE fullname RENAME TO nm */
- 186, /* (280) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
- 289, /* (281) add_column_fullname ::= fullname */
- 186, /* (282) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
- 186, /* (283) cmd ::= create_vtab */
- 186, /* (284) cmd ::= create_vtab LP vtabarglist RP */
- 291, /* (285) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
- 293, /* (286) vtabarg ::= */
- 294, /* (287) vtabargtoken ::= ANY */
- 294, /* (288) vtabargtoken ::= lp anylist RP */
- 295, /* (289) lp ::= LP */
- 261, /* (290) with ::= WITH wqlist */
- 261, /* (291) with ::= WITH RECURSIVE wqlist */
- 236, /* (292) wqlist ::= nm eidlist_opt AS LP select RP */
- 236, /* (293) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
- 297, /* (294) windowdefn_list ::= windowdefn */
- 297, /* (295) windowdefn_list ::= windowdefn_list COMMA windowdefn */
- 298, /* (296) windowdefn ::= nm AS LP window RP */
- 299, /* (297) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
- 299, /* (298) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
- 299, /* (299) window ::= ORDER BY sortlist frame_opt */
- 299, /* (300) window ::= nm ORDER BY sortlist frame_opt */
- 299, /* (301) window ::= frame_opt */
- 299, /* (302) window ::= nm frame_opt */
- 300, /* (303) frame_opt ::= */
- 300, /* (304) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
- 300, /* (305) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
- 304, /* (306) range_or_rows ::= RANGE|ROWS|GROUPS */
- 306, /* (307) frame_bound_s ::= frame_bound */
- 306, /* (308) frame_bound_s ::= UNBOUNDED PRECEDING */
- 307, /* (309) frame_bound_e ::= frame_bound */
- 307, /* (310) frame_bound_e ::= UNBOUNDED FOLLOWING */
- 305, /* (311) frame_bound ::= expr PRECEDING|FOLLOWING */
- 305, /* (312) frame_bound ::= CURRENT ROW */
- 308, /* (313) frame_exclude_opt ::= */
- 308, /* (314) frame_exclude_opt ::= EXCLUDE frame_exclude */
- 309, /* (315) frame_exclude ::= NO OTHERS */
- 309, /* (316) frame_exclude ::= CURRENT ROW */
- 309, /* (317) frame_exclude ::= GROUP|TIES */
- 246, /* (318) window_clause ::= WINDOW windowdefn_list */
- 266, /* (319) filter_over ::= filter_clause over_clause */
- 266, /* (320) filter_over ::= over_clause */
- 266, /* (321) filter_over ::= filter_clause */
- 303, /* (322) over_clause ::= OVER LP window RP */
- 303, /* (323) over_clause ::= OVER nm */
- 302, /* (324) filter_clause ::= FILTER LP WHERE expr RP */
- 181, /* (325) input ::= cmdlist */
- 182, /* (326) cmdlist ::= cmdlist ecmd */
- 182, /* (327) cmdlist ::= ecmd */
- 183, /* (328) ecmd ::= SEMI */
- 183, /* (329) ecmd ::= cmdx SEMI */
- 183, /* (330) ecmd ::= explain cmdx SEMI */
- 188, /* (331) trans_opt ::= */
- 188, /* (332) trans_opt ::= TRANSACTION */
- 188, /* (333) trans_opt ::= TRANSACTION nm */
- 190, /* (334) savepoint_opt ::= SAVEPOINT */
- 190, /* (335) savepoint_opt ::= */
- 186, /* (336) cmd ::= create_table create_table_args */
- 197, /* (337) columnlist ::= columnlist COMMA columnname carglist */
- 197, /* (338) columnlist ::= columnname carglist */
- 189, /* (339) nm ::= ID|INDEXED */
- 189, /* (340) nm ::= STRING */
- 189, /* (341) nm ::= JOIN_KW */
- 203, /* (342) typetoken ::= typename */
- 204, /* (343) typename ::= ID|STRING */
- 205, /* (344) signed ::= plus_num */
- 205, /* (345) signed ::= minus_num */
- 202, /* (346) carglist ::= carglist ccons */
- 202, /* (347) carglist ::= */
- 210, /* (348) ccons ::= NULL onconf */
- 210, /* (349) ccons ::= GENERATED ALWAYS AS generated */
- 210, /* (350) ccons ::= AS generated */
- 198, /* (351) conslist_opt ::= COMMA conslist */
- 223, /* (352) conslist ::= conslist tconscomma tcons */
- 223, /* (353) conslist ::= tcons */
- 224, /* (354) tconscomma ::= */
- 228, /* (355) defer_subclause_opt ::= defer_subclause */
- 230, /* (356) resolvetype ::= raisetype */
- 234, /* (357) selectnowith ::= oneselect */
- 235, /* (358) oneselect ::= values */
- 249, /* (359) sclp ::= selcollist COMMA */
- 250, /* (360) as ::= ID|STRING */
- 212, /* (361) expr ::= term */
- 267, /* (362) likeop ::= LIKE_KW|MATCH */
- 257, /* (363) exprlist ::= nexprlist */
- 277, /* (364) nmnum ::= plus_num */
- 277, /* (365) nmnum ::= nm */
- 277, /* (366) nmnum ::= ON */
- 277, /* (367) nmnum ::= DELETE */
- 277, /* (368) nmnum ::= DEFAULT */
- 206, /* (369) plus_num ::= INTEGER|FLOAT */
- 282, /* (370) foreach_clause ::= */
- 282, /* (371) foreach_clause ::= FOR EACH ROW */
- 285, /* (372) trnm ::= nm */
- 286, /* (373) tridxby ::= */
- 287, /* (374) database_kw_opt ::= DATABASE */
- 287, /* (375) database_kw_opt ::= */
- 290, /* (376) kwcolumn_opt ::= */
- 290, /* (377) kwcolumn_opt ::= COLUMNKW */
- 292, /* (378) vtabarglist ::= vtabarg */
- 292, /* (379) vtabarglist ::= vtabarglist COMMA vtabarg */
- 293, /* (380) vtabarg ::= vtabarg vtabargtoken */
- 296, /* (381) anylist ::= */
- 296, /* (382) anylist ::= anylist LP anylist RP */
- 296, /* (383) anylist ::= anylist ANY */
- 261, /* (384) with ::= */
+ 187, /* (0) explain ::= EXPLAIN */
+ 187, /* (1) explain ::= EXPLAIN QUERY PLAN */
+ 186, /* (2) cmdx ::= cmd */
+ 188, /* (3) cmd ::= BEGIN transtype trans_opt */
+ 189, /* (4) transtype ::= */
+ 189, /* (5) transtype ::= DEFERRED */
+ 189, /* (6) transtype ::= IMMEDIATE */
+ 189, /* (7) transtype ::= EXCLUSIVE */
+ 188, /* (8) cmd ::= COMMIT|END trans_opt */
+ 188, /* (9) cmd ::= ROLLBACK trans_opt */
+ 188, /* (10) cmd ::= SAVEPOINT nm */
+ 188, /* (11) cmd ::= RELEASE savepoint_opt nm */
+ 188, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
+ 193, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */
+ 195, /* (14) createkw ::= CREATE */
+ 197, /* (15) ifnotexists ::= */
+ 197, /* (16) ifnotexists ::= IF NOT EXISTS */
+ 196, /* (17) temp ::= TEMP */
+ 196, /* (18) temp ::= */
+ 194, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_options */
+ 194, /* (20) create_table_args ::= AS select */
+ 201, /* (21) table_options ::= */
+ 201, /* (22) table_options ::= WITHOUT nm */
+ 203, /* (23) columnname ::= nm typetoken */
+ 205, /* (24) typetoken ::= */
+ 205, /* (25) typetoken ::= typename LP signed RP */
+ 205, /* (26) typetoken ::= typename LP signed COMMA signed RP */
+ 206, /* (27) typename ::= typename ID|STRING */
+ 210, /* (28) scanpt ::= */
+ 211, /* (29) scantok ::= */
+ 212, /* (30) ccons ::= CONSTRAINT nm */
+ 212, /* (31) ccons ::= DEFAULT scantok term */
+ 212, /* (32) ccons ::= DEFAULT LP expr RP */
+ 212, /* (33) ccons ::= DEFAULT PLUS scantok term */
+ 212, /* (34) ccons ::= DEFAULT MINUS scantok term */
+ 212, /* (35) ccons ::= DEFAULT scantok ID|INDEXED */
+ 212, /* (36) ccons ::= NOT NULL onconf */
+ 212, /* (37) ccons ::= PRIMARY KEY sortorder onconf autoinc */
+ 212, /* (38) ccons ::= UNIQUE onconf */
+ 212, /* (39) ccons ::= CHECK LP expr RP */
+ 212, /* (40) ccons ::= REFERENCES nm eidlist_opt refargs */
+ 212, /* (41) ccons ::= defer_subclause */
+ 212, /* (42) ccons ::= COLLATE ID|STRING */
+ 221, /* (43) generated ::= LP expr RP */
+ 221, /* (44) generated ::= LP expr RP ID */
+ 217, /* (45) autoinc ::= */
+ 217, /* (46) autoinc ::= AUTOINCR */
+ 219, /* (47) refargs ::= */
+ 219, /* (48) refargs ::= refargs refarg */
+ 222, /* (49) refarg ::= MATCH nm */
+ 222, /* (50) refarg ::= ON INSERT refact */
+ 222, /* (51) refarg ::= ON DELETE refact */
+ 222, /* (52) refarg ::= ON UPDATE refact */
+ 223, /* (53) refact ::= SET NULL */
+ 223, /* (54) refact ::= SET DEFAULT */
+ 223, /* (55) refact ::= CASCADE */
+ 223, /* (56) refact ::= RESTRICT */
+ 223, /* (57) refact ::= NO ACTION */
+ 220, /* (58) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
+ 220, /* (59) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
+ 224, /* (60) init_deferred_pred_opt ::= */
+ 224, /* (61) init_deferred_pred_opt ::= INITIALLY DEFERRED */
+ 224, /* (62) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
+ 200, /* (63) conslist_opt ::= */
+ 226, /* (64) tconscomma ::= COMMA */
+ 227, /* (65) tcons ::= CONSTRAINT nm */
+ 227, /* (66) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
+ 227, /* (67) tcons ::= UNIQUE LP sortlist RP onconf */
+ 227, /* (68) tcons ::= CHECK LP expr RP onconf */
+ 227, /* (69) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
+ 230, /* (70) defer_subclause_opt ::= */
+ 215, /* (71) onconf ::= */
+ 215, /* (72) onconf ::= ON CONFLICT resolvetype */
+ 231, /* (73) orconf ::= */
+ 231, /* (74) orconf ::= OR resolvetype */
+ 232, /* (75) resolvetype ::= IGNORE */
+ 232, /* (76) resolvetype ::= REPLACE */
+ 188, /* (77) cmd ::= DROP TABLE ifexists fullname */
+ 234, /* (78) ifexists ::= IF EXISTS */
+ 234, /* (79) ifexists ::= */
+ 188, /* (80) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
+ 188, /* (81) cmd ::= DROP VIEW ifexists fullname */
+ 188, /* (82) cmd ::= select */
+ 202, /* (83) select ::= WITH wqlist selectnowith */
+ 202, /* (84) select ::= WITH RECURSIVE wqlist selectnowith */
+ 202, /* (85) select ::= selectnowith */
+ 236, /* (86) selectnowith ::= selectnowith multiselect_op oneselect */
+ 239, /* (87) multiselect_op ::= UNION */
+ 239, /* (88) multiselect_op ::= UNION ALL */
+ 239, /* (89) multiselect_op ::= EXCEPT|INTERSECT */
+ 237, /* (90) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
+ 237, /* (91) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
+ 249, /* (92) values ::= VALUES LP nexprlist RP */
+ 249, /* (93) values ::= values COMMA LP nexprlist RP */
+ 240, /* (94) distinct ::= DISTINCT */
+ 240, /* (95) distinct ::= ALL */
+ 240, /* (96) distinct ::= */
+ 251, /* (97) sclp ::= */
+ 241, /* (98) selcollist ::= sclp scanpt expr scanpt as */
+ 241, /* (99) selcollist ::= sclp scanpt STAR */
+ 241, /* (100) selcollist ::= sclp scanpt nm DOT STAR */
+ 252, /* (101) as ::= AS nm */
+ 252, /* (102) as ::= */
+ 242, /* (103) from ::= */
+ 242, /* (104) from ::= FROM seltablist */
+ 254, /* (105) stl_prefix ::= seltablist joinop */
+ 254, /* (106) stl_prefix ::= */
+ 253, /* (107) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
+ 253, /* (108) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
+ 253, /* (109) seltablist ::= stl_prefix LP select RP as on_opt using_opt */
+ 253, /* (110) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
+ 198, /* (111) dbnm ::= */
+ 198, /* (112) dbnm ::= DOT nm */
+ 235, /* (113) fullname ::= nm */
+ 235, /* (114) fullname ::= nm DOT nm */
+ 260, /* (115) xfullname ::= nm */
+ 260, /* (116) xfullname ::= nm DOT nm */
+ 260, /* (117) xfullname ::= nm DOT nm AS nm */
+ 260, /* (118) xfullname ::= nm AS nm */
+ 255, /* (119) joinop ::= COMMA|JOIN */
+ 255, /* (120) joinop ::= JOIN_KW JOIN */
+ 255, /* (121) joinop ::= JOIN_KW nm JOIN */
+ 255, /* (122) joinop ::= JOIN_KW nm nm JOIN */
+ 257, /* (123) on_opt ::= ON expr */
+ 257, /* (124) on_opt ::= */
+ 256, /* (125) indexed_opt ::= */
+ 256, /* (126) indexed_opt ::= INDEXED BY nm */
+ 256, /* (127) indexed_opt ::= NOT INDEXED */
+ 258, /* (128) using_opt ::= USING LP idlist RP */
+ 258, /* (129) using_opt ::= */
+ 246, /* (130) orderby_opt ::= */
+ 246, /* (131) orderby_opt ::= ORDER BY sortlist */
+ 228, /* (132) sortlist ::= sortlist COMMA expr sortorder nulls */
+ 228, /* (133) sortlist ::= expr sortorder nulls */
+ 216, /* (134) sortorder ::= ASC */
+ 216, /* (135) sortorder ::= DESC */
+ 216, /* (136) sortorder ::= */
+ 262, /* (137) nulls ::= NULLS FIRST */
+ 262, /* (138) nulls ::= NULLS LAST */
+ 262, /* (139) nulls ::= */
+ 244, /* (140) groupby_opt ::= */
+ 244, /* (141) groupby_opt ::= GROUP BY nexprlist */
+ 245, /* (142) having_opt ::= */
+ 245, /* (143) having_opt ::= HAVING expr */
+ 247, /* (144) limit_opt ::= */
+ 247, /* (145) limit_opt ::= LIMIT expr */
+ 247, /* (146) limit_opt ::= LIMIT expr OFFSET expr */
+ 247, /* (147) limit_opt ::= LIMIT expr COMMA expr */
+ 188, /* (148) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
+ 243, /* (149) where_opt ::= */
+ 243, /* (150) where_opt ::= WHERE expr */
+ 264, /* (151) where_opt_ret ::= */
+ 264, /* (152) where_opt_ret ::= WHERE expr */
+ 264, /* (153) where_opt_ret ::= RETURNING selcollist */
+ 264, /* (154) where_opt_ret ::= WHERE expr RETURNING selcollist */
+ 188, /* (155) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
+ 265, /* (156) setlist ::= setlist COMMA nm EQ expr */
+ 265, /* (157) setlist ::= setlist COMMA LP idlist RP EQ expr */
+ 265, /* (158) setlist ::= nm EQ expr */
+ 265, /* (159) setlist ::= LP idlist RP EQ expr */
+ 188, /* (160) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ 188, /* (161) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
+ 268, /* (162) upsert ::= */
+ 268, /* (163) upsert ::= RETURNING selcollist */
+ 268, /* (164) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
+ 268, /* (165) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
+ 268, /* (166) upsert ::= ON CONFLICT DO NOTHING returning */
+ 268, /* (167) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
+ 269, /* (168) returning ::= RETURNING selcollist */
+ 266, /* (169) insert_cmd ::= INSERT orconf */
+ 266, /* (170) insert_cmd ::= REPLACE */
+ 267, /* (171) idlist_opt ::= */
+ 267, /* (172) idlist_opt ::= LP idlist RP */
+ 261, /* (173) idlist ::= idlist COMMA nm */
+ 261, /* (174) idlist ::= nm */
+ 214, /* (175) expr ::= LP expr RP */
+ 214, /* (176) expr ::= ID|INDEXED */
+ 214, /* (177) expr ::= JOIN_KW */
+ 214, /* (178) expr ::= nm DOT nm */
+ 214, /* (179) expr ::= nm DOT nm DOT nm */
+ 213, /* (180) term ::= NULL|FLOAT|BLOB */
+ 213, /* (181) term ::= STRING */
+ 213, /* (182) term ::= INTEGER */
+ 214, /* (183) expr ::= VARIABLE */
+ 214, /* (184) expr ::= expr COLLATE ID|STRING */
+ 214, /* (185) expr ::= CAST LP expr AS typetoken RP */
+ 214, /* (186) expr ::= ID|INDEXED LP distinct exprlist RP */
+ 214, /* (187) expr ::= ID|INDEXED LP STAR RP */
+ 214, /* (188) expr ::= ID|INDEXED LP distinct exprlist RP filter_over */
+ 214, /* (189) expr ::= ID|INDEXED LP STAR RP filter_over */
+ 213, /* (190) term ::= CTIME_KW */
+ 214, /* (191) expr ::= LP nexprlist COMMA expr RP */
+ 214, /* (192) expr ::= expr AND expr */
+ 214, /* (193) expr ::= expr OR expr */
+ 214, /* (194) expr ::= expr LT|GT|GE|LE expr */
+ 214, /* (195) expr ::= expr EQ|NE expr */
+ 214, /* (196) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
+ 214, /* (197) expr ::= expr PLUS|MINUS expr */
+ 214, /* (198) expr ::= expr STAR|SLASH|REM expr */
+ 214, /* (199) expr ::= expr CONCAT expr */
+ 271, /* (200) likeop ::= NOT LIKE_KW|MATCH */
+ 214, /* (201) expr ::= expr likeop expr */
+ 214, /* (202) expr ::= expr likeop expr ESCAPE expr */
+ 214, /* (203) expr ::= expr ISNULL|NOTNULL */
+ 214, /* (204) expr ::= expr NOT NULL */
+ 214, /* (205) expr ::= expr IS expr */
+ 214, /* (206) expr ::= expr IS NOT expr */
+ 214, /* (207) expr ::= NOT expr */
+ 214, /* (208) expr ::= BITNOT expr */
+ 214, /* (209) expr ::= PLUS|MINUS expr */
+ 272, /* (210) between_op ::= BETWEEN */
+ 272, /* (211) between_op ::= NOT BETWEEN */
+ 214, /* (212) expr ::= expr between_op expr AND expr */
+ 273, /* (213) in_op ::= IN */
+ 273, /* (214) in_op ::= NOT IN */
+ 214, /* (215) expr ::= expr in_op LP exprlist RP */
+ 214, /* (216) expr ::= LP select RP */
+ 214, /* (217) expr ::= expr in_op LP select RP */
+ 214, /* (218) expr ::= expr in_op nm dbnm paren_exprlist */
+ 214, /* (219) expr ::= EXISTS LP select RP */
+ 214, /* (220) expr ::= CASE case_operand case_exprlist case_else END */
+ 276, /* (221) case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ 276, /* (222) case_exprlist ::= WHEN expr THEN expr */
+ 277, /* (223) case_else ::= ELSE expr */
+ 277, /* (224) case_else ::= */
+ 275, /* (225) case_operand ::= expr */
+ 275, /* (226) case_operand ::= */
+ 259, /* (227) exprlist ::= */
+ 250, /* (228) nexprlist ::= nexprlist COMMA expr */
+ 250, /* (229) nexprlist ::= expr */
+ 274, /* (230) paren_exprlist ::= */
+ 274, /* (231) paren_exprlist ::= LP exprlist RP */
+ 188, /* (232) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ 278, /* (233) uniqueflag ::= UNIQUE */
+ 278, /* (234) uniqueflag ::= */
+ 218, /* (235) eidlist_opt ::= */
+ 218, /* (236) eidlist_opt ::= LP eidlist RP */
+ 229, /* (237) eidlist ::= eidlist COMMA nm collate sortorder */
+ 229, /* (238) eidlist ::= nm collate sortorder */
+ 279, /* (239) collate ::= */
+ 279, /* (240) collate ::= COLLATE ID|STRING */
+ 188, /* (241) cmd ::= DROP INDEX ifexists fullname */
+ 188, /* (242) cmd ::= VACUUM vinto */
+ 188, /* (243) cmd ::= VACUUM nm vinto */
+ 280, /* (244) vinto ::= INTO expr */
+ 280, /* (245) vinto ::= */
+ 188, /* (246) cmd ::= PRAGMA nm dbnm */
+ 188, /* (247) cmd ::= PRAGMA nm dbnm EQ nmnum */
+ 188, /* (248) cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ 188, /* (249) cmd ::= PRAGMA nm dbnm EQ minus_num */
+ 188, /* (250) cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ 208, /* (251) plus_num ::= PLUS INTEGER|FLOAT */
+ 209, /* (252) minus_num ::= MINUS INTEGER|FLOAT */
+ 188, /* (253) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ 282, /* (254) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ 284, /* (255) trigger_time ::= BEFORE|AFTER */
+ 284, /* (256) trigger_time ::= INSTEAD OF */
+ 284, /* (257) trigger_time ::= */
+ 285, /* (258) trigger_event ::= DELETE|INSERT */
+ 285, /* (259) trigger_event ::= UPDATE */
+ 285, /* (260) trigger_event ::= UPDATE OF idlist */
+ 287, /* (261) when_clause ::= */
+ 287, /* (262) when_clause ::= WHEN expr */
+ 283, /* (263) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ 283, /* (264) trigger_cmd_list ::= trigger_cmd SEMI */
+ 289, /* (265) trnm ::= nm DOT nm */
+ 290, /* (266) tridxby ::= INDEXED BY nm */
+ 290, /* (267) tridxby ::= NOT INDEXED */
+ 288, /* (268) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
+ 288, /* (269) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ 288, /* (270) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+ 288, /* (271) trigger_cmd ::= scanpt select scanpt */
+ 214, /* (272) expr ::= RAISE LP IGNORE RP */
+ 214, /* (273) expr ::= RAISE LP raisetype COMMA nm RP */
+ 233, /* (274) raisetype ::= ROLLBACK */
+ 233, /* (275) raisetype ::= ABORT */
+ 233, /* (276) raisetype ::= FAIL */
+ 188, /* (277) cmd ::= DROP TRIGGER ifexists fullname */
+ 188, /* (278) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ 188, /* (279) cmd ::= DETACH database_kw_opt expr */
+ 292, /* (280) key_opt ::= */
+ 292, /* (281) key_opt ::= KEY expr */
+ 188, /* (282) cmd ::= REINDEX */
+ 188, /* (283) cmd ::= REINDEX nm dbnm */
+ 188, /* (284) cmd ::= ANALYZE */
+ 188, /* (285) cmd ::= ANALYZE nm dbnm */
+ 188, /* (286) cmd ::= ALTER TABLE fullname RENAME TO nm */
+ 188, /* (287) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ 188, /* (288) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+ 293, /* (289) add_column_fullname ::= fullname */
+ 188, /* (290) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ 188, /* (291) cmd ::= create_vtab */
+ 188, /* (292) cmd ::= create_vtab LP vtabarglist RP */
+ 295, /* (293) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ 297, /* (294) vtabarg ::= */
+ 298, /* (295) vtabargtoken ::= ANY */
+ 298, /* (296) vtabargtoken ::= lp anylist RP */
+ 299, /* (297) lp ::= LP */
+ 263, /* (298) with ::= WITH wqlist */
+ 263, /* (299) with ::= WITH RECURSIVE wqlist */
+ 302, /* (300) wqas ::= AS */
+ 302, /* (301) wqas ::= AS MATERIALIZED */
+ 302, /* (302) wqas ::= AS NOT MATERIALIZED */
+ 301, /* (303) wqitem ::= nm eidlist_opt wqas LP select RP */
+ 238, /* (304) wqlist ::= wqitem */
+ 238, /* (305) wqlist ::= wqlist COMMA wqitem */
+ 303, /* (306) windowdefn_list ::= windowdefn */
+ 303, /* (307) windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ 304, /* (308) windowdefn ::= nm AS LP window RP */
+ 305, /* (309) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ 305, /* (310) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ 305, /* (311) window ::= ORDER BY sortlist frame_opt */
+ 305, /* (312) window ::= nm ORDER BY sortlist frame_opt */
+ 305, /* (313) window ::= frame_opt */
+ 305, /* (314) window ::= nm frame_opt */
+ 306, /* (315) frame_opt ::= */
+ 306, /* (316) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ 306, /* (317) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ 310, /* (318) range_or_rows ::= RANGE|ROWS|GROUPS */
+ 312, /* (319) frame_bound_s ::= frame_bound */
+ 312, /* (320) frame_bound_s ::= UNBOUNDED PRECEDING */
+ 313, /* (321) frame_bound_e ::= frame_bound */
+ 313, /* (322) frame_bound_e ::= UNBOUNDED FOLLOWING */
+ 311, /* (323) frame_bound ::= expr PRECEDING|FOLLOWING */
+ 311, /* (324) frame_bound ::= CURRENT ROW */
+ 314, /* (325) frame_exclude_opt ::= */
+ 314, /* (326) frame_exclude_opt ::= EXCLUDE frame_exclude */
+ 315, /* (327) frame_exclude ::= NO OTHERS */
+ 315, /* (328) frame_exclude ::= CURRENT ROW */
+ 315, /* (329) frame_exclude ::= GROUP|TIES */
+ 248, /* (330) window_clause ::= WINDOW windowdefn_list */
+ 270, /* (331) filter_over ::= filter_clause over_clause */
+ 270, /* (332) filter_over ::= over_clause */
+ 270, /* (333) filter_over ::= filter_clause */
+ 309, /* (334) over_clause ::= OVER LP window RP */
+ 309, /* (335) over_clause ::= OVER nm */
+ 308, /* (336) filter_clause ::= FILTER LP WHERE expr RP */
+ 183, /* (337) input ::= cmdlist */
+ 184, /* (338) cmdlist ::= cmdlist ecmd */
+ 184, /* (339) cmdlist ::= ecmd */
+ 185, /* (340) ecmd ::= SEMI */
+ 185, /* (341) ecmd ::= cmdx SEMI */
+ 185, /* (342) ecmd ::= explain cmdx SEMI */
+ 190, /* (343) trans_opt ::= */
+ 190, /* (344) trans_opt ::= TRANSACTION */
+ 190, /* (345) trans_opt ::= TRANSACTION nm */
+ 192, /* (346) savepoint_opt ::= SAVEPOINT */
+ 192, /* (347) savepoint_opt ::= */
+ 188, /* (348) cmd ::= create_table create_table_args */
+ 199, /* (349) columnlist ::= columnlist COMMA columnname carglist */
+ 199, /* (350) columnlist ::= columnname carglist */
+ 191, /* (351) nm ::= ID|INDEXED */
+ 191, /* (352) nm ::= STRING */
+ 191, /* (353) nm ::= JOIN_KW */
+ 205, /* (354) typetoken ::= typename */
+ 206, /* (355) typename ::= ID|STRING */
+ 207, /* (356) signed ::= plus_num */
+ 207, /* (357) signed ::= minus_num */
+ 204, /* (358) carglist ::= carglist ccons */
+ 204, /* (359) carglist ::= */
+ 212, /* (360) ccons ::= NULL onconf */
+ 212, /* (361) ccons ::= GENERATED ALWAYS AS generated */
+ 212, /* (362) ccons ::= AS generated */
+ 200, /* (363) conslist_opt ::= COMMA conslist */
+ 225, /* (364) conslist ::= conslist tconscomma tcons */
+ 225, /* (365) conslist ::= tcons */
+ 226, /* (366) tconscomma ::= */
+ 230, /* (367) defer_subclause_opt ::= defer_subclause */
+ 232, /* (368) resolvetype ::= raisetype */
+ 236, /* (369) selectnowith ::= oneselect */
+ 237, /* (370) oneselect ::= values */
+ 251, /* (371) sclp ::= selcollist COMMA */
+ 252, /* (372) as ::= ID|STRING */
+ 269, /* (373) returning ::= */
+ 214, /* (374) expr ::= term */
+ 271, /* (375) likeop ::= LIKE_KW|MATCH */
+ 259, /* (376) exprlist ::= nexprlist */
+ 281, /* (377) nmnum ::= plus_num */
+ 281, /* (378) nmnum ::= nm */
+ 281, /* (379) nmnum ::= ON */
+ 281, /* (380) nmnum ::= DELETE */
+ 281, /* (381) nmnum ::= DEFAULT */
+ 208, /* (382) plus_num ::= INTEGER|FLOAT */
+ 286, /* (383) foreach_clause ::= */
+ 286, /* (384) foreach_clause ::= FOR EACH ROW */
+ 289, /* (385) trnm ::= nm */
+ 290, /* (386) tridxby ::= */
+ 291, /* (387) database_kw_opt ::= DATABASE */
+ 291, /* (388) database_kw_opt ::= */
+ 294, /* (389) kwcolumn_opt ::= */
+ 294, /* (390) kwcolumn_opt ::= COLUMNKW */
+ 296, /* (391) vtabarglist ::= vtabarg */
+ 296, /* (392) vtabarglist ::= vtabarglist COMMA vtabarg */
+ 297, /* (393) vtabarg ::= vtabarg vtabargtoken */
+ 300, /* (394) anylist ::= */
+ 300, /* (395) anylist ::= anylist LP anylist RP */
+ 300, /* (396) anylist ::= anylist ANY */
+ 263, /* (397) with ::= */
};
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
@@ -158014,243 +160147,256 @@ static const signed char yyRuleInfoNRhs[] = {
-2, /* (145) limit_opt ::= LIMIT expr */
-4, /* (146) limit_opt ::= LIMIT expr OFFSET expr */
-4, /* (147) limit_opt ::= LIMIT expr COMMA expr */
- -6, /* (148) cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
+ -6, /* (148) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
0, /* (149) where_opt ::= */
-2, /* (150) where_opt ::= WHERE expr */
- -9, /* (151) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt */
- -5, /* (152) setlist ::= setlist COMMA nm EQ expr */
- -7, /* (153) setlist ::= setlist COMMA LP idlist RP EQ expr */
- -3, /* (154) setlist ::= nm EQ expr */
- -5, /* (155) setlist ::= LP idlist RP EQ expr */
- -7, /* (156) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
- -7, /* (157) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
- 0, /* (158) upsert ::= */
- -11, /* (159) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
- -8, /* (160) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
- -4, /* (161) upsert ::= ON CONFLICT DO NOTHING */
- -2, /* (162) insert_cmd ::= INSERT orconf */
- -1, /* (163) insert_cmd ::= REPLACE */
- 0, /* (164) idlist_opt ::= */
- -3, /* (165) idlist_opt ::= LP idlist RP */
- -3, /* (166) idlist ::= idlist COMMA nm */
- -1, /* (167) idlist ::= nm */
- -3, /* (168) expr ::= LP expr RP */
- -1, /* (169) expr ::= ID|INDEXED */
- -1, /* (170) expr ::= JOIN_KW */
- -3, /* (171) expr ::= nm DOT nm */
- -5, /* (172) expr ::= nm DOT nm DOT nm */
- -1, /* (173) term ::= NULL|FLOAT|BLOB */
- -1, /* (174) term ::= STRING */
- -1, /* (175) term ::= INTEGER */
- -1, /* (176) expr ::= VARIABLE */
- -3, /* (177) expr ::= expr COLLATE ID|STRING */
- -6, /* (178) expr ::= CAST LP expr AS typetoken RP */
- -5, /* (179) expr ::= ID|INDEXED LP distinct exprlist RP */
- -4, /* (180) expr ::= ID|INDEXED LP STAR RP */
- -6, /* (181) expr ::= ID|INDEXED LP distinct exprlist RP filter_over */
- -5, /* (182) expr ::= ID|INDEXED LP STAR RP filter_over */
- -1, /* (183) term ::= CTIME_KW */
- -5, /* (184) expr ::= LP nexprlist COMMA expr RP */
- -3, /* (185) expr ::= expr AND expr */
- -3, /* (186) expr ::= expr OR expr */
- -3, /* (187) expr ::= expr LT|GT|GE|LE expr */
- -3, /* (188) expr ::= expr EQ|NE expr */
- -3, /* (189) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
- -3, /* (190) expr ::= expr PLUS|MINUS expr */
- -3, /* (191) expr ::= expr STAR|SLASH|REM expr */
- -3, /* (192) expr ::= expr CONCAT expr */
- -2, /* (193) likeop ::= NOT LIKE_KW|MATCH */
- -3, /* (194) expr ::= expr likeop expr */
- -5, /* (195) expr ::= expr likeop expr ESCAPE expr */
- -2, /* (196) expr ::= expr ISNULL|NOTNULL */
- -3, /* (197) expr ::= expr NOT NULL */
- -3, /* (198) expr ::= expr IS expr */
- -4, /* (199) expr ::= expr IS NOT expr */
- -2, /* (200) expr ::= NOT expr */
- -2, /* (201) expr ::= BITNOT expr */
- -2, /* (202) expr ::= PLUS|MINUS expr */
- -1, /* (203) between_op ::= BETWEEN */
- -2, /* (204) between_op ::= NOT BETWEEN */
- -5, /* (205) expr ::= expr between_op expr AND expr */
- -1, /* (206) in_op ::= IN */
- -2, /* (207) in_op ::= NOT IN */
- -5, /* (208) expr ::= expr in_op LP exprlist RP */
- -3, /* (209) expr ::= LP select RP */
- -5, /* (210) expr ::= expr in_op LP select RP */
- -5, /* (211) expr ::= expr in_op nm dbnm paren_exprlist */
- -4, /* (212) expr ::= EXISTS LP select RP */
- -5, /* (213) expr ::= CASE case_operand case_exprlist case_else END */
- -5, /* (214) case_exprlist ::= case_exprlist WHEN expr THEN expr */
- -4, /* (215) case_exprlist ::= WHEN expr THEN expr */
- -2, /* (216) case_else ::= ELSE expr */
- 0, /* (217) case_else ::= */
- -1, /* (218) case_operand ::= expr */
- 0, /* (219) case_operand ::= */
- 0, /* (220) exprlist ::= */
- -3, /* (221) nexprlist ::= nexprlist COMMA expr */
- -1, /* (222) nexprlist ::= expr */
- 0, /* (223) paren_exprlist ::= */
- -3, /* (224) paren_exprlist ::= LP exprlist RP */
- -12, /* (225) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
- -1, /* (226) uniqueflag ::= UNIQUE */
- 0, /* (227) uniqueflag ::= */
- 0, /* (228) eidlist_opt ::= */
- -3, /* (229) eidlist_opt ::= LP eidlist RP */
- -5, /* (230) eidlist ::= eidlist COMMA nm collate sortorder */
- -3, /* (231) eidlist ::= nm collate sortorder */
- 0, /* (232) collate ::= */
- -2, /* (233) collate ::= COLLATE ID|STRING */
- -4, /* (234) cmd ::= DROP INDEX ifexists fullname */
- -2, /* (235) cmd ::= VACUUM vinto */
- -3, /* (236) cmd ::= VACUUM nm vinto */
- -2, /* (237) vinto ::= INTO expr */
- 0, /* (238) vinto ::= */
- -3, /* (239) cmd ::= PRAGMA nm dbnm */
- -5, /* (240) cmd ::= PRAGMA nm dbnm EQ nmnum */
- -6, /* (241) cmd ::= PRAGMA nm dbnm LP nmnum RP */
- -5, /* (242) cmd ::= PRAGMA nm dbnm EQ minus_num */
- -6, /* (243) cmd ::= PRAGMA nm dbnm LP minus_num RP */
- -2, /* (244) plus_num ::= PLUS INTEGER|FLOAT */
- -2, /* (245) minus_num ::= MINUS INTEGER|FLOAT */
- -5, /* (246) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
- -11, /* (247) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
- -1, /* (248) trigger_time ::= BEFORE|AFTER */
- -2, /* (249) trigger_time ::= INSTEAD OF */
- 0, /* (250) trigger_time ::= */
- -1, /* (251) trigger_event ::= DELETE|INSERT */
- -1, /* (252) trigger_event ::= UPDATE */
- -3, /* (253) trigger_event ::= UPDATE OF idlist */
- 0, /* (254) when_clause ::= */
- -2, /* (255) when_clause ::= WHEN expr */
- -3, /* (256) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
- -2, /* (257) trigger_cmd_list ::= trigger_cmd SEMI */
- -3, /* (258) trnm ::= nm DOT nm */
- -3, /* (259) tridxby ::= INDEXED BY nm */
- -2, /* (260) tridxby ::= NOT INDEXED */
- -9, /* (261) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
- -8, /* (262) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
- -6, /* (263) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
- -3, /* (264) trigger_cmd ::= scanpt select scanpt */
- -4, /* (265) expr ::= RAISE LP IGNORE RP */
- -6, /* (266) expr ::= RAISE LP raisetype COMMA nm RP */
- -1, /* (267) raisetype ::= ROLLBACK */
- -1, /* (268) raisetype ::= ABORT */
- -1, /* (269) raisetype ::= FAIL */
- -4, /* (270) cmd ::= DROP TRIGGER ifexists fullname */
- -6, /* (271) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
- -3, /* (272) cmd ::= DETACH database_kw_opt expr */
- 0, /* (273) key_opt ::= */
- -2, /* (274) key_opt ::= KEY expr */
- -1, /* (275) cmd ::= REINDEX */
- -3, /* (276) cmd ::= REINDEX nm dbnm */
- -1, /* (277) cmd ::= ANALYZE */
- -3, /* (278) cmd ::= ANALYZE nm dbnm */
- -6, /* (279) cmd ::= ALTER TABLE fullname RENAME TO nm */
- -7, /* (280) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
- -1, /* (281) add_column_fullname ::= fullname */
- -8, /* (282) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
- -1, /* (283) cmd ::= create_vtab */
- -4, /* (284) cmd ::= create_vtab LP vtabarglist RP */
- -8, /* (285) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
- 0, /* (286) vtabarg ::= */
- -1, /* (287) vtabargtoken ::= ANY */
- -3, /* (288) vtabargtoken ::= lp anylist RP */
- -1, /* (289) lp ::= LP */
- -2, /* (290) with ::= WITH wqlist */
- -3, /* (291) with ::= WITH RECURSIVE wqlist */
- -6, /* (292) wqlist ::= nm eidlist_opt AS LP select RP */
- -8, /* (293) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
- -1, /* (294) windowdefn_list ::= windowdefn */
- -3, /* (295) windowdefn_list ::= windowdefn_list COMMA windowdefn */
- -5, /* (296) windowdefn ::= nm AS LP window RP */
- -5, /* (297) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
- -6, /* (298) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
- -4, /* (299) window ::= ORDER BY sortlist frame_opt */
- -5, /* (300) window ::= nm ORDER BY sortlist frame_opt */
- -1, /* (301) window ::= frame_opt */
- -2, /* (302) window ::= nm frame_opt */
- 0, /* (303) frame_opt ::= */
- -3, /* (304) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
- -6, /* (305) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
- -1, /* (306) range_or_rows ::= RANGE|ROWS|GROUPS */
- -1, /* (307) frame_bound_s ::= frame_bound */
- -2, /* (308) frame_bound_s ::= UNBOUNDED PRECEDING */
- -1, /* (309) frame_bound_e ::= frame_bound */
- -2, /* (310) frame_bound_e ::= UNBOUNDED FOLLOWING */
- -2, /* (311) frame_bound ::= expr PRECEDING|FOLLOWING */
- -2, /* (312) frame_bound ::= CURRENT ROW */
- 0, /* (313) frame_exclude_opt ::= */
- -2, /* (314) frame_exclude_opt ::= EXCLUDE frame_exclude */
- -2, /* (315) frame_exclude ::= NO OTHERS */
- -2, /* (316) frame_exclude ::= CURRENT ROW */
- -1, /* (317) frame_exclude ::= GROUP|TIES */
- -2, /* (318) window_clause ::= WINDOW windowdefn_list */
- -2, /* (319) filter_over ::= filter_clause over_clause */
- -1, /* (320) filter_over ::= over_clause */
- -1, /* (321) filter_over ::= filter_clause */
- -4, /* (322) over_clause ::= OVER LP window RP */
- -2, /* (323) over_clause ::= OVER nm */
- -5, /* (324) filter_clause ::= FILTER LP WHERE expr RP */
- -1, /* (325) input ::= cmdlist */
- -2, /* (326) cmdlist ::= cmdlist ecmd */
- -1, /* (327) cmdlist ::= ecmd */
- -1, /* (328) ecmd ::= SEMI */
- -2, /* (329) ecmd ::= cmdx SEMI */
- -3, /* (330) ecmd ::= explain cmdx SEMI */
- 0, /* (331) trans_opt ::= */
- -1, /* (332) trans_opt ::= TRANSACTION */
- -2, /* (333) trans_opt ::= TRANSACTION nm */
- -1, /* (334) savepoint_opt ::= SAVEPOINT */
- 0, /* (335) savepoint_opt ::= */
- -2, /* (336) cmd ::= create_table create_table_args */
- -4, /* (337) columnlist ::= columnlist COMMA columnname carglist */
- -2, /* (338) columnlist ::= columnname carglist */
- -1, /* (339) nm ::= ID|INDEXED */
- -1, /* (340) nm ::= STRING */
- -1, /* (341) nm ::= JOIN_KW */
- -1, /* (342) typetoken ::= typename */
- -1, /* (343) typename ::= ID|STRING */
- -1, /* (344) signed ::= plus_num */
- -1, /* (345) signed ::= minus_num */
- -2, /* (346) carglist ::= carglist ccons */
- 0, /* (347) carglist ::= */
- -2, /* (348) ccons ::= NULL onconf */
- -4, /* (349) ccons ::= GENERATED ALWAYS AS generated */
- -2, /* (350) ccons ::= AS generated */
- -2, /* (351) conslist_opt ::= COMMA conslist */
- -3, /* (352) conslist ::= conslist tconscomma tcons */
- -1, /* (353) conslist ::= tcons */
- 0, /* (354) tconscomma ::= */
- -1, /* (355) defer_subclause_opt ::= defer_subclause */
- -1, /* (356) resolvetype ::= raisetype */
- -1, /* (357) selectnowith ::= oneselect */
- -1, /* (358) oneselect ::= values */
- -2, /* (359) sclp ::= selcollist COMMA */
- -1, /* (360) as ::= ID|STRING */
- -1, /* (361) expr ::= term */
- -1, /* (362) likeop ::= LIKE_KW|MATCH */
- -1, /* (363) exprlist ::= nexprlist */
- -1, /* (364) nmnum ::= plus_num */
- -1, /* (365) nmnum ::= nm */
- -1, /* (366) nmnum ::= ON */
- -1, /* (367) nmnum ::= DELETE */
- -1, /* (368) nmnum ::= DEFAULT */
- -1, /* (369) plus_num ::= INTEGER|FLOAT */
- 0, /* (370) foreach_clause ::= */
- -3, /* (371) foreach_clause ::= FOR EACH ROW */
- -1, /* (372) trnm ::= nm */
- 0, /* (373) tridxby ::= */
- -1, /* (374) database_kw_opt ::= DATABASE */
- 0, /* (375) database_kw_opt ::= */
- 0, /* (376) kwcolumn_opt ::= */
- -1, /* (377) kwcolumn_opt ::= COLUMNKW */
- -1, /* (378) vtabarglist ::= vtabarg */
- -3, /* (379) vtabarglist ::= vtabarglist COMMA vtabarg */
- -2, /* (380) vtabarg ::= vtabarg vtabargtoken */
- 0, /* (381) anylist ::= */
- -4, /* (382) anylist ::= anylist LP anylist RP */
- -2, /* (383) anylist ::= anylist ANY */
- 0, /* (384) with ::= */
+ 0, /* (151) where_opt_ret ::= */
+ -2, /* (152) where_opt_ret ::= WHERE expr */
+ -2, /* (153) where_opt_ret ::= RETURNING selcollist */
+ -4, /* (154) where_opt_ret ::= WHERE expr RETURNING selcollist */
+ -9, /* (155) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
+ -5, /* (156) setlist ::= setlist COMMA nm EQ expr */
+ -7, /* (157) setlist ::= setlist COMMA LP idlist RP EQ expr */
+ -3, /* (158) setlist ::= nm EQ expr */
+ -5, /* (159) setlist ::= LP idlist RP EQ expr */
+ -7, /* (160) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ -8, /* (161) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
+ 0, /* (162) upsert ::= */
+ -2, /* (163) upsert ::= RETURNING selcollist */
+ -12, /* (164) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
+ -9, /* (165) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
+ -5, /* (166) upsert ::= ON CONFLICT DO NOTHING returning */
+ -8, /* (167) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
+ -2, /* (168) returning ::= RETURNING selcollist */
+ -2, /* (169) insert_cmd ::= INSERT orconf */
+ -1, /* (170) insert_cmd ::= REPLACE */
+ 0, /* (171) idlist_opt ::= */
+ -3, /* (172) idlist_opt ::= LP idlist RP */
+ -3, /* (173) idlist ::= idlist COMMA nm */
+ -1, /* (174) idlist ::= nm */
+ -3, /* (175) expr ::= LP expr RP */
+ -1, /* (176) expr ::= ID|INDEXED */
+ -1, /* (177) expr ::= JOIN_KW */
+ -3, /* (178) expr ::= nm DOT nm */
+ -5, /* (179) expr ::= nm DOT nm DOT nm */
+ -1, /* (180) term ::= NULL|FLOAT|BLOB */
+ -1, /* (181) term ::= STRING */
+ -1, /* (182) term ::= INTEGER */
+ -1, /* (183) expr ::= VARIABLE */
+ -3, /* (184) expr ::= expr COLLATE ID|STRING */
+ -6, /* (185) expr ::= CAST LP expr AS typetoken RP */
+ -5, /* (186) expr ::= ID|INDEXED LP distinct exprlist RP */
+ -4, /* (187) expr ::= ID|INDEXED LP STAR RP */
+ -6, /* (188) expr ::= ID|INDEXED LP distinct exprlist RP filter_over */
+ -5, /* (189) expr ::= ID|INDEXED LP STAR RP filter_over */
+ -1, /* (190) term ::= CTIME_KW */
+ -5, /* (191) expr ::= LP nexprlist COMMA expr RP */
+ -3, /* (192) expr ::= expr AND expr */
+ -3, /* (193) expr ::= expr OR expr */
+ -3, /* (194) expr ::= expr LT|GT|GE|LE expr */
+ -3, /* (195) expr ::= expr EQ|NE expr */
+ -3, /* (196) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
+ -3, /* (197) expr ::= expr PLUS|MINUS expr */
+ -3, /* (198) expr ::= expr STAR|SLASH|REM expr */
+ -3, /* (199) expr ::= expr CONCAT expr */
+ -2, /* (200) likeop ::= NOT LIKE_KW|MATCH */
+ -3, /* (201) expr ::= expr likeop expr */
+ -5, /* (202) expr ::= expr likeop expr ESCAPE expr */
+ -2, /* (203) expr ::= expr ISNULL|NOTNULL */
+ -3, /* (204) expr ::= expr NOT NULL */
+ -3, /* (205) expr ::= expr IS expr */
+ -4, /* (206) expr ::= expr IS NOT expr */
+ -2, /* (207) expr ::= NOT expr */
+ -2, /* (208) expr ::= BITNOT expr */
+ -2, /* (209) expr ::= PLUS|MINUS expr */
+ -1, /* (210) between_op ::= BETWEEN */
+ -2, /* (211) between_op ::= NOT BETWEEN */
+ -5, /* (212) expr ::= expr between_op expr AND expr */
+ -1, /* (213) in_op ::= IN */
+ -2, /* (214) in_op ::= NOT IN */
+ -5, /* (215) expr ::= expr in_op LP exprlist RP */
+ -3, /* (216) expr ::= LP select RP */
+ -5, /* (217) expr ::= expr in_op LP select RP */
+ -5, /* (218) expr ::= expr in_op nm dbnm paren_exprlist */
+ -4, /* (219) expr ::= EXISTS LP select RP */
+ -5, /* (220) expr ::= CASE case_operand case_exprlist case_else END */
+ -5, /* (221) case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ -4, /* (222) case_exprlist ::= WHEN expr THEN expr */
+ -2, /* (223) case_else ::= ELSE expr */
+ 0, /* (224) case_else ::= */
+ -1, /* (225) case_operand ::= expr */
+ 0, /* (226) case_operand ::= */
+ 0, /* (227) exprlist ::= */
+ -3, /* (228) nexprlist ::= nexprlist COMMA expr */
+ -1, /* (229) nexprlist ::= expr */
+ 0, /* (230) paren_exprlist ::= */
+ -3, /* (231) paren_exprlist ::= LP exprlist RP */
+ -12, /* (232) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ -1, /* (233) uniqueflag ::= UNIQUE */
+ 0, /* (234) uniqueflag ::= */
+ 0, /* (235) eidlist_opt ::= */
+ -3, /* (236) eidlist_opt ::= LP eidlist RP */
+ -5, /* (237) eidlist ::= eidlist COMMA nm collate sortorder */
+ -3, /* (238) eidlist ::= nm collate sortorder */
+ 0, /* (239) collate ::= */
+ -2, /* (240) collate ::= COLLATE ID|STRING */
+ -4, /* (241) cmd ::= DROP INDEX ifexists fullname */
+ -2, /* (242) cmd ::= VACUUM vinto */
+ -3, /* (243) cmd ::= VACUUM nm vinto */
+ -2, /* (244) vinto ::= INTO expr */
+ 0, /* (245) vinto ::= */
+ -3, /* (246) cmd ::= PRAGMA nm dbnm */
+ -5, /* (247) cmd ::= PRAGMA nm dbnm EQ nmnum */
+ -6, /* (248) cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ -5, /* (249) cmd ::= PRAGMA nm dbnm EQ minus_num */
+ -6, /* (250) cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ -2, /* (251) plus_num ::= PLUS INTEGER|FLOAT */
+ -2, /* (252) minus_num ::= MINUS INTEGER|FLOAT */
+ -5, /* (253) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ -11, /* (254) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ -1, /* (255) trigger_time ::= BEFORE|AFTER */
+ -2, /* (256) trigger_time ::= INSTEAD OF */
+ 0, /* (257) trigger_time ::= */
+ -1, /* (258) trigger_event ::= DELETE|INSERT */
+ -1, /* (259) trigger_event ::= UPDATE */
+ -3, /* (260) trigger_event ::= UPDATE OF idlist */
+ 0, /* (261) when_clause ::= */
+ -2, /* (262) when_clause ::= WHEN expr */
+ -3, /* (263) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ -2, /* (264) trigger_cmd_list ::= trigger_cmd SEMI */
+ -3, /* (265) trnm ::= nm DOT nm */
+ -3, /* (266) tridxby ::= INDEXED BY nm */
+ -2, /* (267) tridxby ::= NOT INDEXED */
+ -9, /* (268) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
+ -8, /* (269) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ -6, /* (270) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+ -3, /* (271) trigger_cmd ::= scanpt select scanpt */
+ -4, /* (272) expr ::= RAISE LP IGNORE RP */
+ -6, /* (273) expr ::= RAISE LP raisetype COMMA nm RP */
+ -1, /* (274) raisetype ::= ROLLBACK */
+ -1, /* (275) raisetype ::= ABORT */
+ -1, /* (276) raisetype ::= FAIL */
+ -4, /* (277) cmd ::= DROP TRIGGER ifexists fullname */
+ -6, /* (278) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ -3, /* (279) cmd ::= DETACH database_kw_opt expr */
+ 0, /* (280) key_opt ::= */
+ -2, /* (281) key_opt ::= KEY expr */
+ -1, /* (282) cmd ::= REINDEX */
+ -3, /* (283) cmd ::= REINDEX nm dbnm */
+ -1, /* (284) cmd ::= ANALYZE */
+ -3, /* (285) cmd ::= ANALYZE nm dbnm */
+ -6, /* (286) cmd ::= ALTER TABLE fullname RENAME TO nm */
+ -7, /* (287) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ -6, /* (288) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+ -1, /* (289) add_column_fullname ::= fullname */
+ -8, /* (290) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ -1, /* (291) cmd ::= create_vtab */
+ -4, /* (292) cmd ::= create_vtab LP vtabarglist RP */
+ -8, /* (293) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ 0, /* (294) vtabarg ::= */
+ -1, /* (295) vtabargtoken ::= ANY */
+ -3, /* (296) vtabargtoken ::= lp anylist RP */
+ -1, /* (297) lp ::= LP */
+ -2, /* (298) with ::= WITH wqlist */
+ -3, /* (299) with ::= WITH RECURSIVE wqlist */
+ -1, /* (300) wqas ::= AS */
+ -2, /* (301) wqas ::= AS MATERIALIZED */
+ -3, /* (302) wqas ::= AS NOT MATERIALIZED */
+ -6, /* (303) wqitem ::= nm eidlist_opt wqas LP select RP */
+ -1, /* (304) wqlist ::= wqitem */
+ -3, /* (305) wqlist ::= wqlist COMMA wqitem */
+ -1, /* (306) windowdefn_list ::= windowdefn */
+ -3, /* (307) windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ -5, /* (308) windowdefn ::= nm AS LP window RP */
+ -5, /* (309) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ -6, /* (310) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ -4, /* (311) window ::= ORDER BY sortlist frame_opt */
+ -5, /* (312) window ::= nm ORDER BY sortlist frame_opt */
+ -1, /* (313) window ::= frame_opt */
+ -2, /* (314) window ::= nm frame_opt */
+ 0, /* (315) frame_opt ::= */
+ -3, /* (316) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ -6, /* (317) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ -1, /* (318) range_or_rows ::= RANGE|ROWS|GROUPS */
+ -1, /* (319) frame_bound_s ::= frame_bound */
+ -2, /* (320) frame_bound_s ::= UNBOUNDED PRECEDING */
+ -1, /* (321) frame_bound_e ::= frame_bound */
+ -2, /* (322) frame_bound_e ::= UNBOUNDED FOLLOWING */
+ -2, /* (323) frame_bound ::= expr PRECEDING|FOLLOWING */
+ -2, /* (324) frame_bound ::= CURRENT ROW */
+ 0, /* (325) frame_exclude_opt ::= */
+ -2, /* (326) frame_exclude_opt ::= EXCLUDE frame_exclude */
+ -2, /* (327) frame_exclude ::= NO OTHERS */
+ -2, /* (328) frame_exclude ::= CURRENT ROW */
+ -1, /* (329) frame_exclude ::= GROUP|TIES */
+ -2, /* (330) window_clause ::= WINDOW windowdefn_list */
+ -2, /* (331) filter_over ::= filter_clause over_clause */
+ -1, /* (332) filter_over ::= over_clause */
+ -1, /* (333) filter_over ::= filter_clause */
+ -4, /* (334) over_clause ::= OVER LP window RP */
+ -2, /* (335) over_clause ::= OVER nm */
+ -5, /* (336) filter_clause ::= FILTER LP WHERE expr RP */
+ -1, /* (337) input ::= cmdlist */
+ -2, /* (338) cmdlist ::= cmdlist ecmd */
+ -1, /* (339) cmdlist ::= ecmd */
+ -1, /* (340) ecmd ::= SEMI */
+ -2, /* (341) ecmd ::= cmdx SEMI */
+ -3, /* (342) ecmd ::= explain cmdx SEMI */
+ 0, /* (343) trans_opt ::= */
+ -1, /* (344) trans_opt ::= TRANSACTION */
+ -2, /* (345) trans_opt ::= TRANSACTION nm */
+ -1, /* (346) savepoint_opt ::= SAVEPOINT */
+ 0, /* (347) savepoint_opt ::= */
+ -2, /* (348) cmd ::= create_table create_table_args */
+ -4, /* (349) columnlist ::= columnlist COMMA columnname carglist */
+ -2, /* (350) columnlist ::= columnname carglist */
+ -1, /* (351) nm ::= ID|INDEXED */
+ -1, /* (352) nm ::= STRING */
+ -1, /* (353) nm ::= JOIN_KW */
+ -1, /* (354) typetoken ::= typename */
+ -1, /* (355) typename ::= ID|STRING */
+ -1, /* (356) signed ::= plus_num */
+ -1, /* (357) signed ::= minus_num */
+ -2, /* (358) carglist ::= carglist ccons */
+ 0, /* (359) carglist ::= */
+ -2, /* (360) ccons ::= NULL onconf */
+ -4, /* (361) ccons ::= GENERATED ALWAYS AS generated */
+ -2, /* (362) ccons ::= AS generated */
+ -2, /* (363) conslist_opt ::= COMMA conslist */
+ -3, /* (364) conslist ::= conslist tconscomma tcons */
+ -1, /* (365) conslist ::= tcons */
+ 0, /* (366) tconscomma ::= */
+ -1, /* (367) defer_subclause_opt ::= defer_subclause */
+ -1, /* (368) resolvetype ::= raisetype */
+ -1, /* (369) selectnowith ::= oneselect */
+ -1, /* (370) oneselect ::= values */
+ -2, /* (371) sclp ::= selcollist COMMA */
+ -1, /* (372) as ::= ID|STRING */
+ 0, /* (373) returning ::= */
+ -1, /* (374) expr ::= term */
+ -1, /* (375) likeop ::= LIKE_KW|MATCH */
+ -1, /* (376) exprlist ::= nexprlist */
+ -1, /* (377) nmnum ::= plus_num */
+ -1, /* (378) nmnum ::= nm */
+ -1, /* (379) nmnum ::= ON */
+ -1, /* (380) nmnum ::= DELETE */
+ -1, /* (381) nmnum ::= DEFAULT */
+ -1, /* (382) plus_num ::= INTEGER|FLOAT */
+ 0, /* (383) foreach_clause ::= */
+ -3, /* (384) foreach_clause ::= FOR EACH ROW */
+ -1, /* (385) trnm ::= nm */
+ 0, /* (386) tridxby ::= */
+ -1, /* (387) database_kw_opt ::= DATABASE */
+ 0, /* (388) database_kw_opt ::= */
+ 0, /* (389) kwcolumn_opt ::= */
+ -1, /* (390) kwcolumn_opt ::= COLUMNKW */
+ -1, /* (391) vtabarglist ::= vtabarg */
+ -3, /* (392) vtabarglist ::= vtabarglist COMMA vtabarg */
+ -2, /* (393) vtabarg ::= vtabarg vtabargtoken */
+ 0, /* (394) anylist ::= */
+ -4, /* (395) anylist ::= anylist LP anylist RP */
+ -2, /* (396) anylist ::= anylist ANY */
+ 0, /* (397) with ::= */
};
static void yy_accept(yyParser*); /* Forward Declaration */
@@ -158280,55 +160426,6 @@ static YYACTIONTYPE yy_reduce(
(void)yyLookahead;
(void)yyLookaheadToken;
yymsp = yypParser->yytos;
- assert( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) );
-#ifndef NDEBUG
- if( yyTraceFILE ){
- yysize = yyRuleInfoNRhs[yyruleno];
- if( yysize ){
- fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
- yyTracePrompt,
- yyruleno, yyRuleName[yyruleno],
- yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action",
- yymsp[yysize].stateno);
- }else{
- fprintf(yyTraceFILE, "%sReduce %d [%s]%s.\n",
- yyTracePrompt, yyruleno, yyRuleName[yyruleno],
- yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action");
- }
- }
-#endif /* NDEBUG */
-
- /* Check that the stack is large enough to grow by a single entry
- ** if the RHS of the rule is empty. This ensures that there is room
- ** enough on the stack to push the LHS value */
- if( yyRuleInfoNRhs[yyruleno]==0 ){
-#ifdef YYTRACKMAXSTACKDEPTH
- if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
- yypParser->yyhwm++;
- assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack));
- }
-#endif
-#if YYSTACKDEPTH>0
- if( yypParser->yytos>=yypParser->yystackEnd ){
- yyStackOverflow(yypParser);
- /* The call to yyStackOverflow() above pops the stack until it is
- ** empty, causing the main parser loop to exit. So the return value
- ** is never used and does not matter. */
- return 0;
- }
-#else
- if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){
- if( yyGrowStack(yypParser) ){
- yyStackOverflow(yypParser);
- /* The call to yyStackOverflow() above pops the stack until it is
- ** empty, causing the main parser loop to exit. So the return value
- ** is never used and does not matter. */
- return 0;
- }
- yymsp = yypParser->yytos;
- }
-#endif
- }
switch( yyruleno ){
/* Beginning here are the reduction cases. A typical example
@@ -158351,16 +160448,16 @@ static YYACTIONTYPE yy_reduce(
{ sqlite3FinishCoding(pParse); }
break;
case 3: /* cmd ::= BEGIN transtype trans_opt */
-{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy192);}
+{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy60);}
break;
case 4: /* transtype ::= */
-{yymsp[1].minor.yy192 = TK_DEFERRED;}
+{yymsp[1].minor.yy60 = TK_DEFERRED;}
break;
case 5: /* transtype ::= DEFERRED */
case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6);
case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7);
- case 306: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==306);
-{yymsp[0].minor.yy192 = yymsp[0].major; /*A-overwrites-X*/}
+ case 318: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==318);
+{yymsp[0].minor.yy60 = yymsp[0].major; /*A-overwrites-X*/}
break;
case 8: /* cmd ::= COMMIT|END trans_opt */
case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9);
@@ -158383,7 +160480,7 @@ static YYACTIONTYPE yy_reduce(
break;
case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
{
- sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy192,0,0,yymsp[-2].minor.yy192);
+ sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy60,0,0,yymsp[-2].minor.yy60);
}
break;
case 14: /* createkw ::= CREATE */
@@ -158397,33 +160494,33 @@ static YYACTIONTYPE yy_reduce(
case 70: /* defer_subclause_opt ::= */ yytestcase(yyruleno==70);
case 79: /* ifexists ::= */ yytestcase(yyruleno==79);
case 96: /* distinct ::= */ yytestcase(yyruleno==96);
- case 232: /* collate ::= */ yytestcase(yyruleno==232);
-{yymsp[1].minor.yy192 = 0;}
+ case 239: /* collate ::= */ yytestcase(yyruleno==239);
+{yymsp[1].minor.yy60 = 0;}
break;
case 16: /* ifnotexists ::= IF NOT EXISTS */
-{yymsp[-2].minor.yy192 = 1;}
+{yymsp[-2].minor.yy60 = 1;}
break;
case 17: /* temp ::= TEMP */
case 46: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==46);
-{yymsp[0].minor.yy192 = 1;}
+{yymsp[0].minor.yy60 = 1;}
break;
case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_options */
{
- sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy192,0);
+ sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy60,0);
}
break;
case 20: /* create_table_args ::= AS select */
{
- sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy539);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy539);
+ sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy307);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy307);
}
break;
case 22: /* table_options ::= WITHOUT nm */
{
if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){
- yymsp[-1].minor.yy192 = TF_WithoutRowid | TF_NoVisibleRowid;
+ yymsp[-1].minor.yy60 = TF_WithoutRowid | TF_NoVisibleRowid;
}else{
- yymsp[-1].minor.yy192 = 0;
+ yymsp[-1].minor.yy60 = 0;
sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z);
}
}
@@ -158452,7 +160549,7 @@ static YYACTIONTYPE yy_reduce(
case 28: /* scanpt ::= */
{
assert( yyLookahead!=YYNOCODE );
- yymsp[1].minor.yy436 = yyLookaheadToken.z;
+ yymsp[1].minor.yy528 = yyLookaheadToken.z;
}
break;
case 29: /* scantok ::= */
@@ -158466,17 +160563,17 @@ static YYACTIONTYPE yy_reduce(
{pParse->constraintName = yymsp[0].minor.yy0;}
break;
case 31: /* ccons ::= DEFAULT scantok term */
-{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy202,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
+{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy602,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
break;
case 32: /* ccons ::= DEFAULT LP expr RP */
-{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy202,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
+{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy602,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
break;
case 33: /* ccons ::= DEFAULT PLUS scantok term */
-{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy202,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
+{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy602,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
break;
case 34: /* ccons ::= DEFAULT MINUS scantok term */
{
- Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy202, 0);
+ Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy602, 0);
sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);
}
break;
@@ -158491,176 +160588,158 @@ static YYACTIONTYPE yy_reduce(
}
break;
case 36: /* ccons ::= NOT NULL onconf */
-{sqlite3AddNotNull(pParse, yymsp[0].minor.yy192);}
+{sqlite3AddNotNull(pParse, yymsp[0].minor.yy60);}
break;
case 37: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
-{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy192,yymsp[0].minor.yy192,yymsp[-2].minor.yy192);}
+{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy60,yymsp[0].minor.yy60,yymsp[-2].minor.yy60);}
break;
case 38: /* ccons ::= UNIQUE onconf */
-{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy192,0,0,0,0,
+{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy60,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
break;
case 39: /* ccons ::= CHECK LP expr RP */
-{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy202,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);}
+{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy602,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);}
break;
case 40: /* ccons ::= REFERENCES nm eidlist_opt refargs */
-{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy242,yymsp[0].minor.yy192);}
+{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy338,yymsp[0].minor.yy60);}
break;
case 41: /* ccons ::= defer_subclause */
-{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy192);}
+{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy60);}
break;
case 42: /* ccons ::= COLLATE ID|STRING */
{sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
break;
case 43: /* generated ::= LP expr RP */
-{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy202,0);}
+{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy602,0);}
break;
case 44: /* generated ::= LP expr RP ID */
-{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy202,&yymsp[0].minor.yy0);}
+{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy602,&yymsp[0].minor.yy0);}
break;
case 47: /* refargs ::= */
-{ yymsp[1].minor.yy192 = OE_None*0x0101; /* EV: R-19803-45884 */}
+{ yymsp[1].minor.yy60 = OE_None*0x0101; /* EV: R-19803-45884 */}
break;
case 48: /* refargs ::= refargs refarg */
-{ yymsp[-1].minor.yy192 = (yymsp[-1].minor.yy192 & ~yymsp[0].minor.yy207.mask) | yymsp[0].minor.yy207.value; }
+{ yymsp[-1].minor.yy60 = (yymsp[-1].minor.yy60 & ~yymsp[0].minor.yy615.mask) | yymsp[0].minor.yy615.value; }
break;
case 49: /* refarg ::= MATCH nm */
-{ yymsp[-1].minor.yy207.value = 0; yymsp[-1].minor.yy207.mask = 0x000000; }
+{ yymsp[-1].minor.yy615.value = 0; yymsp[-1].minor.yy615.mask = 0x000000; }
break;
case 50: /* refarg ::= ON INSERT refact */
-{ yymsp[-2].minor.yy207.value = 0; yymsp[-2].minor.yy207.mask = 0x000000; }
+{ yymsp[-2].minor.yy615.value = 0; yymsp[-2].minor.yy615.mask = 0x000000; }
break;
case 51: /* refarg ::= ON DELETE refact */
-{ yymsp[-2].minor.yy207.value = yymsp[0].minor.yy192; yymsp[-2].minor.yy207.mask = 0x0000ff; }
+{ yymsp[-2].minor.yy615.value = yymsp[0].minor.yy60; yymsp[-2].minor.yy615.mask = 0x0000ff; }
break;
case 52: /* refarg ::= ON UPDATE refact */
-{ yymsp[-2].minor.yy207.value = yymsp[0].minor.yy192<<8; yymsp[-2].minor.yy207.mask = 0x00ff00; }
+{ yymsp[-2].minor.yy615.value = yymsp[0].minor.yy60<<8; yymsp[-2].minor.yy615.mask = 0x00ff00; }
break;
case 53: /* refact ::= SET NULL */
-{ yymsp[-1].minor.yy192 = OE_SetNull; /* EV: R-33326-45252 */}
+{ yymsp[-1].minor.yy60 = OE_SetNull; /* EV: R-33326-45252 */}
break;
case 54: /* refact ::= SET DEFAULT */
-{ yymsp[-1].minor.yy192 = OE_SetDflt; /* EV: R-33326-45252 */}
+{ yymsp[-1].minor.yy60 = OE_SetDflt; /* EV: R-33326-45252 */}
break;
case 55: /* refact ::= CASCADE */
-{ yymsp[0].minor.yy192 = OE_Cascade; /* EV: R-33326-45252 */}
+{ yymsp[0].minor.yy60 = OE_Cascade; /* EV: R-33326-45252 */}
break;
case 56: /* refact ::= RESTRICT */
-{ yymsp[0].minor.yy192 = OE_Restrict; /* EV: R-33326-45252 */}
+{ yymsp[0].minor.yy60 = OE_Restrict; /* EV: R-33326-45252 */}
break;
case 57: /* refact ::= NO ACTION */
-{ yymsp[-1].minor.yy192 = OE_None; /* EV: R-33326-45252 */}
+{ yymsp[-1].minor.yy60 = OE_None; /* EV: R-33326-45252 */}
break;
case 58: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
-{yymsp[-2].minor.yy192 = 0;}
+{yymsp[-2].minor.yy60 = 0;}
break;
case 59: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
case 74: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==74);
- case 162: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==162);
-{yymsp[-1].minor.yy192 = yymsp[0].minor.yy192;}
+ case 169: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==169);
+{yymsp[-1].minor.yy60 = yymsp[0].minor.yy60;}
break;
case 61: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
case 78: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==78);
- case 204: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==204);
- case 207: /* in_op ::= NOT IN */ yytestcase(yyruleno==207);
- case 233: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==233);
-{yymsp[-1].minor.yy192 = 1;}
+ case 211: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==211);
+ case 214: /* in_op ::= NOT IN */ yytestcase(yyruleno==214);
+ case 240: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==240);
+{yymsp[-1].minor.yy60 = 1;}
break;
case 62: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
-{yymsp[-1].minor.yy192 = 0;}
+{yymsp[-1].minor.yy60 = 0;}
break;
case 64: /* tconscomma ::= COMMA */
{pParse->constraintName.n = 0;}
break;
case 66: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
-{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy242,yymsp[0].minor.yy192,yymsp[-2].minor.yy192,0);}
+{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy338,yymsp[0].minor.yy60,yymsp[-2].minor.yy60,0);}
break;
case 67: /* tcons ::= UNIQUE LP sortlist RP onconf */
-{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy242,yymsp[0].minor.yy192,0,0,0,0,
+{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy338,yymsp[0].minor.yy60,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
break;
case 68: /* tcons ::= CHECK LP expr RP onconf */
-{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy202,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);}
+{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy602,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);}
break;
case 69: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
{
- sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy242, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy242, yymsp[-1].minor.yy192);
- sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy192);
+ sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy338, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy338, yymsp[-1].minor.yy60);
+ sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy60);
}
break;
case 71: /* onconf ::= */
case 73: /* orconf ::= */ yytestcase(yyruleno==73);
-{yymsp[1].minor.yy192 = OE_Default;}
+{yymsp[1].minor.yy60 = OE_Default;}
break;
case 72: /* onconf ::= ON CONFLICT resolvetype */
-{yymsp[-2].minor.yy192 = yymsp[0].minor.yy192;}
+{yymsp[-2].minor.yy60 = yymsp[0].minor.yy60;}
break;
case 75: /* resolvetype ::= IGNORE */
-{yymsp[0].minor.yy192 = OE_Ignore;}
+{yymsp[0].minor.yy60 = OE_Ignore;}
break;
case 76: /* resolvetype ::= REPLACE */
- case 163: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==163);
-{yymsp[0].minor.yy192 = OE_Replace;}
+ case 170: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==170);
+{yymsp[0].minor.yy60 = OE_Replace;}
break;
case 77: /* cmd ::= DROP TABLE ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy47, 0, yymsp[-1].minor.yy192);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy291, 0, yymsp[-1].minor.yy60);
}
break;
case 80: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
{
- sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy242, yymsp[0].minor.yy539, yymsp[-7].minor.yy192, yymsp[-5].minor.yy192);
+ sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy338, yymsp[0].minor.yy307, yymsp[-7].minor.yy60, yymsp[-5].minor.yy60);
}
break;
case 81: /* cmd ::= DROP VIEW ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy47, 1, yymsp[-1].minor.yy192);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy291, 1, yymsp[-1].minor.yy60);
}
break;
case 82: /* cmd ::= select */
{
SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0};
- sqlite3Select(pParse, yymsp[0].minor.yy539, &dest);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy539);
+ sqlite3Select(pParse, yymsp[0].minor.yy307, &dest);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy307);
}
break;
case 83: /* select ::= WITH wqlist selectnowith */
-{
- Select *p = yymsp[0].minor.yy539;
- if( p ){
- p->pWith = yymsp[-1].minor.yy131;
- parserDoubleLinkSelect(pParse, p);
- }else{
- sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy131);
- }
- yymsp[-2].minor.yy539 = p;
-}
+{yymsp[-2].minor.yy307 = attachWithToSelect(pParse,yymsp[0].minor.yy307,yymsp[-1].minor.yy195);}
break;
case 84: /* select ::= WITH RECURSIVE wqlist selectnowith */
-{
- Select *p = yymsp[0].minor.yy539;
- if( p ){
- p->pWith = yymsp[-1].minor.yy131;
- parserDoubleLinkSelect(pParse, p);
- }else{
- sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy131);
- }
- yymsp[-3].minor.yy539 = p;
-}
+{yymsp[-3].minor.yy307 = attachWithToSelect(pParse,yymsp[0].minor.yy307,yymsp[-1].minor.yy195);}
break;
case 85: /* select ::= selectnowith */
{
- Select *p = yymsp[0].minor.yy539;
+ Select *p = yymsp[0].minor.yy307;
if( p ){
parserDoubleLinkSelect(pParse, p);
}
- yymsp[0].minor.yy539 = p; /*A-overwrites-X*/
+ yymsp[0].minor.yy307 = p; /*A-overwrites-X*/
}
break;
case 86: /* selectnowith ::= selectnowith multiselect_op oneselect */
{
- Select *pRhs = yymsp[0].minor.yy539;
- Select *pLhs = yymsp[-2].minor.yy539;
+ Select *pRhs = yymsp[0].minor.yy307;
+ Select *pLhs = yymsp[-2].minor.yy307;
if( pRhs && pRhs->pPrior ){
SrcList *pFrom;
Token x;
@@ -158670,83 +160749,83 @@ static YYACTIONTYPE yy_reduce(
pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
}
if( pRhs ){
- pRhs->op = (u8)yymsp[-1].minor.yy192;
+ pRhs->op = (u8)yymsp[-1].minor.yy60;
pRhs->pPrior = pLhs;
if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
pRhs->selFlags &= ~SF_MultiValue;
- if( yymsp[-1].minor.yy192!=TK_ALL ) pParse->hasCompound = 1;
+ if( yymsp[-1].minor.yy60!=TK_ALL ) pParse->hasCompound = 1;
}else{
sqlite3SelectDelete(pParse->db, pLhs);
}
- yymsp[-2].minor.yy539 = pRhs;
+ yymsp[-2].minor.yy307 = pRhs;
}
break;
case 87: /* multiselect_op ::= UNION */
case 89: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==89);
-{yymsp[0].minor.yy192 = yymsp[0].major; /*A-overwrites-OP*/}
+{yymsp[0].minor.yy60 = yymsp[0].major; /*A-overwrites-OP*/}
break;
case 88: /* multiselect_op ::= UNION ALL */
-{yymsp[-1].minor.yy192 = TK_ALL;}
+{yymsp[-1].minor.yy60 = TK_ALL;}
break;
case 90: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
{
- yymsp[-8].minor.yy539 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy242,yymsp[-5].minor.yy47,yymsp[-4].minor.yy202,yymsp[-3].minor.yy242,yymsp[-2].minor.yy202,yymsp[-1].minor.yy242,yymsp[-7].minor.yy192,yymsp[0].minor.yy202);
+ yymsp[-8].minor.yy307 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy338,yymsp[-5].minor.yy291,yymsp[-4].minor.yy602,yymsp[-3].minor.yy338,yymsp[-2].minor.yy602,yymsp[-1].minor.yy338,yymsp[-7].minor.yy60,yymsp[0].minor.yy602);
}
break;
case 91: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
{
- yymsp[-9].minor.yy539 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy242,yymsp[-6].minor.yy47,yymsp[-5].minor.yy202,yymsp[-4].minor.yy242,yymsp[-3].minor.yy202,yymsp[-1].minor.yy242,yymsp[-8].minor.yy192,yymsp[0].minor.yy202);
- if( yymsp[-9].minor.yy539 ){
- yymsp[-9].minor.yy539->pWinDefn = yymsp[-2].minor.yy303;
+ yymsp[-9].minor.yy307 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy338,yymsp[-6].minor.yy291,yymsp[-5].minor.yy602,yymsp[-4].minor.yy338,yymsp[-3].minor.yy602,yymsp[-1].minor.yy338,yymsp[-8].minor.yy60,yymsp[0].minor.yy602);
+ if( yymsp[-9].minor.yy307 ){
+ yymsp[-9].minor.yy307->pWinDefn = yymsp[-2].minor.yy19;
}else{
- sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy303);
+ sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy19);
}
}
break;
case 92: /* values ::= VALUES LP nexprlist RP */
{
- yymsp[-3].minor.yy539 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy242,0,0,0,0,0,SF_Values,0);
+ yymsp[-3].minor.yy307 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy338,0,0,0,0,0,SF_Values,0);
}
break;
case 93: /* values ::= values COMMA LP nexprlist RP */
{
- Select *pRight, *pLeft = yymsp[-4].minor.yy539;
- pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy242,0,0,0,0,0,SF_Values|SF_MultiValue,0);
+ Select *pRight, *pLeft = yymsp[-4].minor.yy307;
+ pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy338,0,0,0,0,0,SF_Values|SF_MultiValue,0);
if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
if( pRight ){
pRight->op = TK_ALL;
pRight->pPrior = pLeft;
- yymsp[-4].minor.yy539 = pRight;
+ yymsp[-4].minor.yy307 = pRight;
}else{
- yymsp[-4].minor.yy539 = pLeft;
+ yymsp[-4].minor.yy307 = pLeft;
}
}
break;
case 94: /* distinct ::= DISTINCT */
-{yymsp[0].minor.yy192 = SF_Distinct;}
+{yymsp[0].minor.yy60 = SF_Distinct;}
break;
case 95: /* distinct ::= ALL */
-{yymsp[0].minor.yy192 = SF_All;}
+{yymsp[0].minor.yy60 = SF_All;}
break;
case 97: /* sclp ::= */
case 130: /* orderby_opt ::= */ yytestcase(yyruleno==130);
case 140: /* groupby_opt ::= */ yytestcase(yyruleno==140);
- case 220: /* exprlist ::= */ yytestcase(yyruleno==220);
- case 223: /* paren_exprlist ::= */ yytestcase(yyruleno==223);
- case 228: /* eidlist_opt ::= */ yytestcase(yyruleno==228);
-{yymsp[1].minor.yy242 = 0;}
+ case 227: /* exprlist ::= */ yytestcase(yyruleno==227);
+ case 230: /* paren_exprlist ::= */ yytestcase(yyruleno==230);
+ case 235: /* eidlist_opt ::= */ yytestcase(yyruleno==235);
+{yymsp[1].minor.yy338 = 0;}
break;
case 98: /* selcollist ::= sclp scanpt expr scanpt as */
{
- yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy242, yymsp[-2].minor.yy202);
- if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy242, &yymsp[0].minor.yy0, 1);
- sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy242,yymsp[-3].minor.yy436,yymsp[-1].minor.yy436);
+ yymsp[-4].minor.yy338 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy338, yymsp[-2].minor.yy602);
+ if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy338, &yymsp[0].minor.yy0, 1);
+ sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy338,yymsp[-3].minor.yy528,yymsp[-1].minor.yy528);
}
break;
case 99: /* selcollist ::= sclp scanpt STAR */
{
Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
- yymsp[-2].minor.yy242 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy242, p);
+ yymsp[-2].minor.yy338 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy338, p);
}
break;
case 100: /* selcollist ::= sclp scanpt nm DOT STAR */
@@ -158754,56 +160833,56 @@ static YYACTIONTYPE yy_reduce(
Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
- yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy242, pDot);
+ yymsp[-4].minor.yy338 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy338, pDot);
}
break;
case 101: /* as ::= AS nm */
case 112: /* dbnm ::= DOT nm */ yytestcase(yyruleno==112);
- case 244: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==244);
- case 245: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==245);
+ case 251: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==251);
+ case 252: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==252);
{yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}
break;
case 103: /* from ::= */
case 106: /* stl_prefix ::= */ yytestcase(yyruleno==106);
-{yymsp[1].minor.yy47 = 0;}
+{yymsp[1].minor.yy291 = 0;}
break;
case 104: /* from ::= FROM seltablist */
{
- yymsp[-1].minor.yy47 = yymsp[0].minor.yy47;
- sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy47);
+ yymsp[-1].minor.yy291 = yymsp[0].minor.yy291;
+ sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy291);
}
break;
case 105: /* stl_prefix ::= seltablist joinop */
{
- if( ALWAYS(yymsp[-1].minor.yy47 && yymsp[-1].minor.yy47->nSrc>0) ) yymsp[-1].minor.yy47->a[yymsp[-1].minor.yy47->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy192;
+ if( ALWAYS(yymsp[-1].minor.yy291 && yymsp[-1].minor.yy291->nSrc>0) ) yymsp[-1].minor.yy291->a[yymsp[-1].minor.yy291->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy60;
}
break;
case 107: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
{
- yymsp[-6].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy47,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
- sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy47, &yymsp[-2].minor.yy0);
+ yymsp[-6].minor.yy291 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy291,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy602,yymsp[0].minor.yy288);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy291, &yymsp[-2].minor.yy0);
}
break;
case 108: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
{
- yymsp[-8].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy47,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
- sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy47, yymsp[-4].minor.yy242);
+ yymsp[-8].minor.yy291 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy291,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy602,yymsp[0].minor.yy288);
+ sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy291, yymsp[-4].minor.yy338);
}
break;
case 109: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
{
- yymsp[-6].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy47,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy539,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
+ yymsp[-6].minor.yy291 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy291,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy307,yymsp[-1].minor.yy602,yymsp[0].minor.yy288);
}
break;
case 110: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
{
- if( yymsp[-6].minor.yy47==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy202==0 && yymsp[0].minor.yy600==0 ){
- yymsp[-6].minor.yy47 = yymsp[-4].minor.yy47;
- }else if( yymsp[-4].minor.yy47->nSrc==1 ){
- yymsp[-6].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy47,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
- if( yymsp[-6].minor.yy47 ){
- struct SrcList_item *pNew = &yymsp[-6].minor.yy47->a[yymsp[-6].minor.yy47->nSrc-1];
- struct SrcList_item *pOld = yymsp[-4].minor.yy47->a;
+ if( yymsp[-6].minor.yy291==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy602==0 && yymsp[0].minor.yy288==0 ){
+ yymsp[-6].minor.yy291 = yymsp[-4].minor.yy291;
+ }else if( yymsp[-4].minor.yy291->nSrc==1 ){
+ yymsp[-6].minor.yy291 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy291,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy602,yymsp[0].minor.yy288);
+ if( yymsp[-6].minor.yy291 ){
+ SrcItem *pNew = &yymsp[-6].minor.yy291->a[yymsp[-6].minor.yy291->nSrc-1];
+ SrcItem *pOld = yymsp[-4].minor.yy291->a;
pNew->zName = pOld->zName;
pNew->zDatabase = pOld->zDatabase;
pNew->pSelect = pOld->pSelect;
@@ -158816,12 +160895,12 @@ static YYACTIONTYPE yy_reduce(
pOld->zName = pOld->zDatabase = 0;
pOld->pSelect = 0;
}
- sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy47);
+ sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy291);
}else{
Select *pSubquery;
- sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy47);
- pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy47,0,0,0,0,SF_NestedFrom,0);
- yymsp[-6].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy47,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
+ sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy291);
+ pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy291,0,0,0,0,SF_NestedFrom,0);
+ yymsp[-6].minor.yy291 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy291,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy602,yymsp[0].minor.yy288);
}
}
break;
@@ -158831,63 +160910,65 @@ static YYACTIONTYPE yy_reduce(
break;
case 113: /* fullname ::= nm */
{
- yylhsminor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0);
- if( IN_RENAME_OBJECT && yylhsminor.yy47 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy47->a[0].zName, &yymsp[0].minor.yy0);
+ yylhsminor.yy291 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0);
+ if( IN_RENAME_OBJECT && yylhsminor.yy291 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy291->a[0].zName, &yymsp[0].minor.yy0);
}
- yymsp[0].minor.yy47 = yylhsminor.yy47;
+ yymsp[0].minor.yy291 = yylhsminor.yy291;
break;
case 114: /* fullname ::= nm DOT nm */
{
- yylhsminor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
- if( IN_RENAME_OBJECT && yylhsminor.yy47 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy47->a[0].zName, &yymsp[0].minor.yy0);
+ yylhsminor.yy291 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
+ if( IN_RENAME_OBJECT && yylhsminor.yy291 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy291->a[0].zName, &yymsp[0].minor.yy0);
}
- yymsp[-2].minor.yy47 = yylhsminor.yy47;
+ yymsp[-2].minor.yy291 = yylhsminor.yy291;
break;
case 115: /* xfullname ::= nm */
-{yymsp[0].minor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/}
+{yymsp[0].minor.yy291 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/}
break;
case 116: /* xfullname ::= nm DOT nm */
-{yymsp[-2].minor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
+{yymsp[-2].minor.yy291 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
case 117: /* xfullname ::= nm DOT nm AS nm */
{
- yymsp[-4].minor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/
- if( yymsp[-4].minor.yy47 ) yymsp[-4].minor.yy47->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
+ yymsp[-4].minor.yy291 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/
+ if( yymsp[-4].minor.yy291 ) yymsp[-4].minor.yy291->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
break;
case 118: /* xfullname ::= nm AS nm */
{
- yymsp[-2].minor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/
- if( yymsp[-2].minor.yy47 ) yymsp[-2].minor.yy47->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
+ yymsp[-2].minor.yy291 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/
+ if( yymsp[-2].minor.yy291 ) yymsp[-2].minor.yy291->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
break;
case 119: /* joinop ::= COMMA|JOIN */
-{ yymsp[0].minor.yy192 = JT_INNER; }
+{ yymsp[0].minor.yy60 = JT_INNER; }
break;
case 120: /* joinop ::= JOIN_KW JOIN */
-{yymsp[-1].minor.yy192 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
+{yymsp[-1].minor.yy60 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
break;
case 121: /* joinop ::= JOIN_KW nm JOIN */
-{yymsp[-2].minor.yy192 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
+{yymsp[-2].minor.yy60 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
break;
case 122: /* joinop ::= JOIN_KW nm nm JOIN */
-{yymsp[-3].minor.yy192 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
+{yymsp[-3].minor.yy60 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
break;
case 123: /* on_opt ::= ON expr */
case 143: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==143);
case 150: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==150);
- case 216: /* case_else ::= ELSE expr */ yytestcase(yyruleno==216);
- case 237: /* vinto ::= INTO expr */ yytestcase(yyruleno==237);
-{yymsp[-1].minor.yy202 = yymsp[0].minor.yy202;}
+ case 152: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==152);
+ case 223: /* case_else ::= ELSE expr */ yytestcase(yyruleno==223);
+ case 244: /* vinto ::= INTO expr */ yytestcase(yyruleno==244);
+{yymsp[-1].minor.yy602 = yymsp[0].minor.yy602;}
break;
case 124: /* on_opt ::= */
case 142: /* having_opt ::= */ yytestcase(yyruleno==142);
case 144: /* limit_opt ::= */ yytestcase(yyruleno==144);
case 149: /* where_opt ::= */ yytestcase(yyruleno==149);
- case 217: /* case_else ::= */ yytestcase(yyruleno==217);
- case 219: /* case_operand ::= */ yytestcase(yyruleno==219);
- case 238: /* vinto ::= */ yytestcase(yyruleno==238);
-{yymsp[1].minor.yy202 = 0;}
+ case 151: /* where_opt_ret ::= */ yytestcase(yyruleno==151);
+ case 224: /* case_else ::= */ yytestcase(yyruleno==224);
+ case 226: /* case_operand ::= */ yytestcase(yyruleno==226);
+ case 245: /* vinto ::= */ yytestcase(yyruleno==245);
+{yymsp[1].minor.yy602 = 0;}
break;
case 126: /* indexed_opt ::= INDEXED BY nm */
{yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;}
@@ -158896,129 +160977,144 @@ static YYACTIONTYPE yy_reduce(
{yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;}
break;
case 128: /* using_opt ::= USING LP idlist RP */
-{yymsp[-3].minor.yy600 = yymsp[-1].minor.yy600;}
+{yymsp[-3].minor.yy288 = yymsp[-1].minor.yy288;}
break;
case 129: /* using_opt ::= */
- case 164: /* idlist_opt ::= */ yytestcase(yyruleno==164);
-{yymsp[1].minor.yy600 = 0;}
+ case 171: /* idlist_opt ::= */ yytestcase(yyruleno==171);
+{yymsp[1].minor.yy288 = 0;}
break;
case 131: /* orderby_opt ::= ORDER BY sortlist */
case 141: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==141);
-{yymsp[-2].minor.yy242 = yymsp[0].minor.yy242;}
+{yymsp[-2].minor.yy338 = yymsp[0].minor.yy338;}
break;
case 132: /* sortlist ::= sortlist COMMA expr sortorder nulls */
{
- yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy242,yymsp[-2].minor.yy202);
- sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy242,yymsp[-1].minor.yy192,yymsp[0].minor.yy192);
+ yymsp[-4].minor.yy338 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy338,yymsp[-2].minor.yy602);
+ sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy338,yymsp[-1].minor.yy60,yymsp[0].minor.yy60);
}
break;
case 133: /* sortlist ::= expr sortorder nulls */
{
- yymsp[-2].minor.yy242 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy202); /*A-overwrites-Y*/
- sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy242,yymsp[-1].minor.yy192,yymsp[0].minor.yy192);
+ yymsp[-2].minor.yy338 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy602); /*A-overwrites-Y*/
+ sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy338,yymsp[-1].minor.yy60,yymsp[0].minor.yy60);
}
break;
case 134: /* sortorder ::= ASC */
-{yymsp[0].minor.yy192 = SQLITE_SO_ASC;}
+{yymsp[0].minor.yy60 = SQLITE_SO_ASC;}
break;
case 135: /* sortorder ::= DESC */
-{yymsp[0].minor.yy192 = SQLITE_SO_DESC;}
+{yymsp[0].minor.yy60 = SQLITE_SO_DESC;}
break;
case 136: /* sortorder ::= */
case 139: /* nulls ::= */ yytestcase(yyruleno==139);
-{yymsp[1].minor.yy192 = SQLITE_SO_UNDEFINED;}
+{yymsp[1].minor.yy60 = SQLITE_SO_UNDEFINED;}
break;
case 137: /* nulls ::= NULLS FIRST */
-{yymsp[-1].minor.yy192 = SQLITE_SO_ASC;}
+{yymsp[-1].minor.yy60 = SQLITE_SO_ASC;}
break;
case 138: /* nulls ::= NULLS LAST */
-{yymsp[-1].minor.yy192 = SQLITE_SO_DESC;}
+{yymsp[-1].minor.yy60 = SQLITE_SO_DESC;}
break;
case 145: /* limit_opt ::= LIMIT expr */
-{yymsp[-1].minor.yy202 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy202,0);}
+{yymsp[-1].minor.yy602 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy602,0);}
break;
case 146: /* limit_opt ::= LIMIT expr OFFSET expr */
-{yymsp[-3].minor.yy202 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy202,yymsp[0].minor.yy202);}
+{yymsp[-3].minor.yy602 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy602,yymsp[0].minor.yy602);}
break;
case 147: /* limit_opt ::= LIMIT expr COMMA expr */
-{yymsp[-3].minor.yy202 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy202,yymsp[-2].minor.yy202);}
+{yymsp[-3].minor.yy602 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy602,yymsp[-2].minor.yy602);}
break;
- case 148: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
+ case 148: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
{
- sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy47, &yymsp[-1].minor.yy0);
- sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy47,yymsp[0].minor.yy202,0,0);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy291, &yymsp[-1].minor.yy0);
+ sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy291,yymsp[0].minor.yy602,0,0);
}
break;
- case 151: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt */
+ case 153: /* where_opt_ret ::= RETURNING selcollist */
+{sqlite3AddReturning(pParse,yymsp[0].minor.yy338); yymsp[-1].minor.yy602 = 0;}
+ break;
+ case 154: /* where_opt_ret ::= WHERE expr RETURNING selcollist */
+{sqlite3AddReturning(pParse,yymsp[0].minor.yy338); yymsp[-3].minor.yy602 = yymsp[-2].minor.yy602;}
+ break;
+ case 155: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
{
- sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy47, &yymsp[-4].minor.yy0);
- sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy242,"set list");
- yymsp[-5].minor.yy47 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy47, yymsp[-1].minor.yy47);
- sqlite3Update(pParse,yymsp[-5].minor.yy47,yymsp[-2].minor.yy242,yymsp[0].minor.yy202,yymsp[-6].minor.yy192,0,0,0);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy291, &yymsp[-4].minor.yy0);
+ sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy338,"set list");
+ yymsp[-5].minor.yy291 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy291, yymsp[-1].minor.yy291);
+ sqlite3Update(pParse,yymsp[-5].minor.yy291,yymsp[-2].minor.yy338,yymsp[0].minor.yy602,yymsp[-6].minor.yy60,0,0,0);
}
break;
- case 152: /* setlist ::= setlist COMMA nm EQ expr */
+ case 156: /* setlist ::= setlist COMMA nm EQ expr */
{
- yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy242, yymsp[0].minor.yy202);
- sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy242, &yymsp[-2].minor.yy0, 1);
+ yymsp[-4].minor.yy338 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy338, yymsp[0].minor.yy602);
+ sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy338, &yymsp[-2].minor.yy0, 1);
}
break;
- case 153: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
+ case 157: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
{
- yymsp[-6].minor.yy242 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy242, yymsp[-3].minor.yy600, yymsp[0].minor.yy202);
+ yymsp[-6].minor.yy338 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy338, yymsp[-3].minor.yy288, yymsp[0].minor.yy602);
}
break;
- case 154: /* setlist ::= nm EQ expr */
+ case 158: /* setlist ::= nm EQ expr */
{
- yylhsminor.yy242 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy202);
- sqlite3ExprListSetName(pParse, yylhsminor.yy242, &yymsp[-2].minor.yy0, 1);
+ yylhsminor.yy338 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy602);
+ sqlite3ExprListSetName(pParse, yylhsminor.yy338, &yymsp[-2].minor.yy0, 1);
}
- yymsp[-2].minor.yy242 = yylhsminor.yy242;
+ yymsp[-2].minor.yy338 = yylhsminor.yy338;
break;
- case 155: /* setlist ::= LP idlist RP EQ expr */
+ case 159: /* setlist ::= LP idlist RP EQ expr */
{
- yymsp[-4].minor.yy242 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy600, yymsp[0].minor.yy202);
+ yymsp[-4].minor.yy338 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy288, yymsp[0].minor.yy602);
}
break;
- case 156: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ case 160: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
{
- sqlite3Insert(pParse, yymsp[-3].minor.yy47, yymsp[-1].minor.yy539, yymsp[-2].minor.yy600, yymsp[-5].minor.yy192, yymsp[0].minor.yy318);
+ sqlite3Insert(pParse, yymsp[-3].minor.yy291, yymsp[-1].minor.yy307, yymsp[-2].minor.yy288, yymsp[-5].minor.yy60, yymsp[0].minor.yy178);
}
break;
- case 157: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
+ case 161: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
{
- sqlite3Insert(pParse, yymsp[-3].minor.yy47, 0, yymsp[-2].minor.yy600, yymsp[-5].minor.yy192, 0);
+ sqlite3Insert(pParse, yymsp[-4].minor.yy291, 0, yymsp[-3].minor.yy288, yymsp[-6].minor.yy60, 0);
}
break;
- case 158: /* upsert ::= */
-{ yymsp[1].minor.yy318 = 0; }
+ case 162: /* upsert ::= */
+{ yymsp[1].minor.yy178 = 0; }
+ break;
+ case 163: /* upsert ::= RETURNING selcollist */
+{ yymsp[-1].minor.yy178 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy338); }
break;
- case 159: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
-{ yymsp[-10].minor.yy318 = sqlite3UpsertNew(pParse->db,yymsp[-7].minor.yy242,yymsp[-5].minor.yy202,yymsp[-1].minor.yy242,yymsp[0].minor.yy202);}
+ case 164: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
+{ yymsp[-11].minor.yy178 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy338,yymsp[-6].minor.yy602,yymsp[-2].minor.yy338,yymsp[-1].minor.yy602,yymsp[0].minor.yy178);}
break;
- case 160: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
-{ yymsp[-7].minor.yy318 = sqlite3UpsertNew(pParse->db,yymsp[-4].minor.yy242,yymsp[-2].minor.yy202,0,0); }
+ case 165: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
+{ yymsp[-8].minor.yy178 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy338,yymsp[-3].minor.yy602,0,0,yymsp[0].minor.yy178); }
break;
- case 161: /* upsert ::= ON CONFLICT DO NOTHING */
-{ yymsp[-3].minor.yy318 = sqlite3UpsertNew(pParse->db,0,0,0,0); }
+ case 166: /* upsert ::= ON CONFLICT DO NOTHING returning */
+{ yymsp[-4].minor.yy178 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); }
break;
- case 165: /* idlist_opt ::= LP idlist RP */
-{yymsp[-2].minor.yy600 = yymsp[-1].minor.yy600;}
+ case 167: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
+{ yymsp[-7].minor.yy178 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy338,yymsp[-1].minor.yy602,0);}
break;
- case 166: /* idlist ::= idlist COMMA nm */
-{yymsp[-2].minor.yy600 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy600,&yymsp[0].minor.yy0);}
+ case 168: /* returning ::= RETURNING selcollist */
+{sqlite3AddReturning(pParse,yymsp[0].minor.yy338);}
break;
- case 167: /* idlist ::= nm */
-{yymsp[0].minor.yy600 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
+ case 172: /* idlist_opt ::= LP idlist RP */
+{yymsp[-2].minor.yy288 = yymsp[-1].minor.yy288;}
break;
- case 168: /* expr ::= LP expr RP */
-{yymsp[-2].minor.yy202 = yymsp[-1].minor.yy202;}
+ case 173: /* idlist ::= idlist COMMA nm */
+{yymsp[-2].minor.yy288 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy288,&yymsp[0].minor.yy0);}
break;
- case 169: /* expr ::= ID|INDEXED */
- case 170: /* expr ::= JOIN_KW */ yytestcase(yyruleno==170);
-{yymsp[0].minor.yy202=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 174: /* idlist ::= nm */
+{yymsp[0].minor.yy288 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
break;
- case 171: /* expr ::= nm DOT nm */
+ case 175: /* expr ::= LP expr RP */
+{yymsp[-2].minor.yy602 = yymsp[-1].minor.yy602;}
+ break;
+ case 176: /* expr ::= ID|INDEXED */
+ case 177: /* expr ::= JOIN_KW */ yytestcase(yyruleno==177);
+{yymsp[0].minor.yy602=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ break;
+ case 178: /* expr ::= nm DOT nm */
{
Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1);
@@ -159026,11 +161122,11 @@ static YYACTIONTYPE yy_reduce(
sqlite3RenameTokenMap(pParse, (void*)temp2, &yymsp[0].minor.yy0);
sqlite3RenameTokenMap(pParse, (void*)temp1, &yymsp[-2].minor.yy0);
}
- yylhsminor.yy202 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
+ yylhsminor.yy602 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
}
- yymsp[-2].minor.yy202 = yylhsminor.yy202;
+ yymsp[-2].minor.yy602 = yylhsminor.yy602;
break;
- case 172: /* expr ::= nm DOT nm DOT nm */
+ case 179: /* expr ::= nm DOT nm DOT nm */
{
Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-4].minor.yy0, 1);
Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
@@ -159040,26 +161136,26 @@ static YYACTIONTYPE yy_reduce(
sqlite3RenameTokenMap(pParse, (void*)temp3, &yymsp[0].minor.yy0);
sqlite3RenameTokenMap(pParse, (void*)temp2, &yymsp[-2].minor.yy0);
}
- yylhsminor.yy202 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
+ yylhsminor.yy602 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
}
- yymsp[-4].minor.yy202 = yylhsminor.yy202;
+ yymsp[-4].minor.yy602 = yylhsminor.yy602;
break;
- case 173: /* term ::= NULL|FLOAT|BLOB */
- case 174: /* term ::= STRING */ yytestcase(yyruleno==174);
-{yymsp[0].minor.yy202=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 180: /* term ::= NULL|FLOAT|BLOB */
+ case 181: /* term ::= STRING */ yytestcase(yyruleno==181);
+{yymsp[0].minor.yy602=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 175: /* term ::= INTEGER */
+ case 182: /* term ::= INTEGER */
{
- yylhsminor.yy202 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
+ yylhsminor.yy602 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
}
- yymsp[0].minor.yy202 = yylhsminor.yy202;
+ yymsp[0].minor.yy602 = yylhsminor.yy602;
break;
- case 176: /* expr ::= VARIABLE */
+ case 183: /* expr ::= VARIABLE */
{
if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){
u32 n = yymsp[0].minor.yy0.n;
- yymsp[0].minor.yy202 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
- sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy202, n);
+ yymsp[0].minor.yy602 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
+ sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy602, n);
}else{
/* When doing a nested parse, one can include terms in an expression
** that look like this: #1 #2 ... These terms refer to registers
@@ -159068,159 +161164,159 @@ static YYACTIONTYPE yy_reduce(
assert( t.n>=2 );
if( pParse->nested==0 ){
sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
- yymsp[0].minor.yy202 = 0;
+ yymsp[0].minor.yy602 = 0;
}else{
- yymsp[0].minor.yy202 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
- if( yymsp[0].minor.yy202 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy202->iTable);
+ yymsp[0].minor.yy602 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
+ if( yymsp[0].minor.yy602 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy602->iTable);
}
}
}
break;
- case 177: /* expr ::= expr COLLATE ID|STRING */
+ case 184: /* expr ::= expr COLLATE ID|STRING */
{
- yymsp[-2].minor.yy202 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy202, &yymsp[0].minor.yy0, 1);
+ yymsp[-2].minor.yy602 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy602, &yymsp[0].minor.yy0, 1);
}
break;
- case 178: /* expr ::= CAST LP expr AS typetoken RP */
+ case 185: /* expr ::= CAST LP expr AS typetoken RP */
{
- yymsp[-5].minor.yy202 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
- sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy202, yymsp[-3].minor.yy202, 0);
+ yymsp[-5].minor.yy602 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
+ sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy602, yymsp[-3].minor.yy602, 0);
}
break;
- case 179: /* expr ::= ID|INDEXED LP distinct exprlist RP */
+ case 186: /* expr ::= ID|INDEXED LP distinct exprlist RP */
{
- yylhsminor.yy202 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy242, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy192);
+ yylhsminor.yy602 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy338, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy60);
}
- yymsp[-4].minor.yy202 = yylhsminor.yy202;
+ yymsp[-4].minor.yy602 = yylhsminor.yy602;
break;
- case 180: /* expr ::= ID|INDEXED LP STAR RP */
+ case 187: /* expr ::= ID|INDEXED LP STAR RP */
{
- yylhsminor.yy202 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0);
+ yylhsminor.yy602 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0);
}
- yymsp[-3].minor.yy202 = yylhsminor.yy202;
+ yymsp[-3].minor.yy602 = yylhsminor.yy602;
break;
- case 181: /* expr ::= ID|INDEXED LP distinct exprlist RP filter_over */
+ case 188: /* expr ::= ID|INDEXED LP distinct exprlist RP filter_over */
{
- yylhsminor.yy202 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy242, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy192);
- sqlite3WindowAttach(pParse, yylhsminor.yy202, yymsp[0].minor.yy303);
+ yylhsminor.yy602 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy338, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy60);
+ sqlite3WindowAttach(pParse, yylhsminor.yy602, yymsp[0].minor.yy19);
}
- yymsp[-5].minor.yy202 = yylhsminor.yy202;
+ yymsp[-5].minor.yy602 = yylhsminor.yy602;
break;
- case 182: /* expr ::= ID|INDEXED LP STAR RP filter_over */
+ case 189: /* expr ::= ID|INDEXED LP STAR RP filter_over */
{
- yylhsminor.yy202 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0);
- sqlite3WindowAttach(pParse, yylhsminor.yy202, yymsp[0].minor.yy303);
+ yylhsminor.yy602 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0);
+ sqlite3WindowAttach(pParse, yylhsminor.yy602, yymsp[0].minor.yy19);
}
- yymsp[-4].minor.yy202 = yylhsminor.yy202;
+ yymsp[-4].minor.yy602 = yylhsminor.yy602;
break;
- case 183: /* term ::= CTIME_KW */
+ case 190: /* term ::= CTIME_KW */
{
- yylhsminor.yy202 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0);
+ yylhsminor.yy602 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0);
}
- yymsp[0].minor.yy202 = yylhsminor.yy202;
+ yymsp[0].minor.yy602 = yylhsminor.yy602;
break;
- case 184: /* expr ::= LP nexprlist COMMA expr RP */
+ case 191: /* expr ::= LP nexprlist COMMA expr RP */
{
- ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy242, yymsp[-1].minor.yy202);
- yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
- if( yymsp[-4].minor.yy202 ){
- yymsp[-4].minor.yy202->x.pList = pList;
+ ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy338, yymsp[-1].minor.yy602);
+ yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
+ if( yymsp[-4].minor.yy602 ){
+ yymsp[-4].minor.yy602->x.pList = pList;
if( ALWAYS(pList->nExpr) ){
- yymsp[-4].minor.yy202->flags |= pList->a[0].pExpr->flags & EP_Propagate;
+ yymsp[-4].minor.yy602->flags |= pList->a[0].pExpr->flags & EP_Propagate;
}
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
}
break;
- case 185: /* expr ::= expr AND expr */
-{yymsp[-2].minor.yy202=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy202,yymsp[0].minor.yy202);}
+ case 192: /* expr ::= expr AND expr */
+{yymsp[-2].minor.yy602=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy602,yymsp[0].minor.yy602);}
break;
- case 186: /* expr ::= expr OR expr */
- case 187: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==187);
- case 188: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==188);
- case 189: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==189);
- case 190: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==190);
- case 191: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==191);
- case 192: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==192);
-{yymsp[-2].minor.yy202=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy202,yymsp[0].minor.yy202);}
+ case 193: /* expr ::= expr OR expr */
+ case 194: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==194);
+ case 195: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==195);
+ case 196: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==196);
+ case 197: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==197);
+ case 198: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==198);
+ case 199: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==199);
+{yymsp[-2].minor.yy602=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy602,yymsp[0].minor.yy602);}
break;
- case 193: /* likeop ::= NOT LIKE_KW|MATCH */
+ case 200: /* likeop ::= NOT LIKE_KW|MATCH */
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/}
break;
- case 194: /* expr ::= expr likeop expr */
+ case 201: /* expr ::= expr likeop expr */
{
ExprList *pList;
int bNot = yymsp[-1].minor.yy0.n & 0x80000000;
yymsp[-1].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy202);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy202);
- yymsp[-2].minor.yy202 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
- if( bNot ) yymsp[-2].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy202, 0);
- if( yymsp[-2].minor.yy202 ) yymsp[-2].minor.yy202->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy602);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy602);
+ yymsp[-2].minor.yy602 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
+ if( bNot ) yymsp[-2].minor.yy602 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy602, 0);
+ if( yymsp[-2].minor.yy602 ) yymsp[-2].minor.yy602->flags |= EP_InfixFunc;
}
break;
- case 195: /* expr ::= expr likeop expr ESCAPE expr */
+ case 202: /* expr ::= expr likeop expr ESCAPE expr */
{
ExprList *pList;
int bNot = yymsp[-3].minor.yy0.n & 0x80000000;
yymsp[-3].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy202);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy202);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy202);
- yymsp[-4].minor.yy202 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0);
- if( bNot ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
- if( yymsp[-4].minor.yy202 ) yymsp[-4].minor.yy202->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy602);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy602);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy602);
+ yymsp[-4].minor.yy602 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0);
+ if( bNot ) yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy602, 0);
+ if( yymsp[-4].minor.yy602 ) yymsp[-4].minor.yy602->flags |= EP_InfixFunc;
}
break;
- case 196: /* expr ::= expr ISNULL|NOTNULL */
-{yymsp[-1].minor.yy202 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy202,0);}
+ case 203: /* expr ::= expr ISNULL|NOTNULL */
+{yymsp[-1].minor.yy602 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy602,0);}
break;
- case 197: /* expr ::= expr NOT NULL */
-{yymsp[-2].minor.yy202 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy202,0);}
+ case 204: /* expr ::= expr NOT NULL */
+{yymsp[-2].minor.yy602 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy602,0);}
break;
- case 198: /* expr ::= expr IS expr */
+ case 205: /* expr ::= expr IS expr */
{
- yymsp[-2].minor.yy202 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy202,yymsp[0].minor.yy202);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy202, yymsp[-2].minor.yy202, TK_ISNULL);
+ yymsp[-2].minor.yy602 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy602,yymsp[0].minor.yy602);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy602, yymsp[-2].minor.yy602, TK_ISNULL);
}
break;
- case 199: /* expr ::= expr IS NOT expr */
+ case 206: /* expr ::= expr IS NOT expr */
{
- yymsp[-3].minor.yy202 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy202,yymsp[0].minor.yy202);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy202, yymsp[-3].minor.yy202, TK_NOTNULL);
+ yymsp[-3].minor.yy602 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy602,yymsp[0].minor.yy602);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy602, yymsp[-3].minor.yy602, TK_NOTNULL);
}
break;
- case 200: /* expr ::= NOT expr */
- case 201: /* expr ::= BITNOT expr */ yytestcase(yyruleno==201);
-{yymsp[-1].minor.yy202 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy202, 0);/*A-overwrites-B*/}
+ case 207: /* expr ::= NOT expr */
+ case 208: /* expr ::= BITNOT expr */ yytestcase(yyruleno==208);
+{yymsp[-1].minor.yy602 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy602, 0);/*A-overwrites-B*/}
break;
- case 202: /* expr ::= PLUS|MINUS expr */
+ case 209: /* expr ::= PLUS|MINUS expr */
{
- yymsp[-1].minor.yy202 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy202, 0);
+ yymsp[-1].minor.yy602 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy602, 0);
/*A-overwrites-B*/
}
break;
- case 203: /* between_op ::= BETWEEN */
- case 206: /* in_op ::= IN */ yytestcase(yyruleno==206);
-{yymsp[0].minor.yy192 = 0;}
+ case 210: /* between_op ::= BETWEEN */
+ case 213: /* in_op ::= IN */ yytestcase(yyruleno==213);
+{yymsp[0].minor.yy60 = 0;}
break;
- case 205: /* expr ::= expr between_op expr AND expr */
+ case 212: /* expr ::= expr between_op expr AND expr */
{
- ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy202);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy202);
- yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy202, 0);
- if( yymsp[-4].minor.yy202 ){
- yymsp[-4].minor.yy202->x.pList = pList;
+ ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy602);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy602);
+ yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy602, 0);
+ if( yymsp[-4].minor.yy602 ){
+ yymsp[-4].minor.yy602->x.pList = pList;
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
- if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
+ if( yymsp[-3].minor.yy60 ) yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy602, 0);
}
break;
- case 208: /* expr ::= expr in_op LP exprlist RP */
+ case 215: /* expr ::= expr in_op LP exprlist RP */
{
- if( yymsp[-1].minor.yy242==0 ){
+ if( yymsp[-1].minor.yy338==0 ){
/* Expressions of the form
**
** expr1 IN ()
@@ -159229,197 +161325,197 @@ static YYACTIONTYPE yy_reduce(
** simplify to constants 0 (false) and 1 (true), respectively,
** regardless of the value of expr1.
*/
- sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy202);
- yymsp[-4].minor.yy202 = sqlite3Expr(pParse->db, TK_INTEGER, yymsp[-3].minor.yy192 ? "1" : "0");
- }else if( yymsp[-1].minor.yy242->nExpr==1 && sqlite3ExprIsConstant(yymsp[-1].minor.yy242->a[0].pExpr) ){
- Expr *pRHS = yymsp[-1].minor.yy242->a[0].pExpr;
- yymsp[-1].minor.yy242->a[0].pExpr = 0;
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy242);
+ sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy602);
+ yymsp[-4].minor.yy602 = sqlite3Expr(pParse->db, TK_INTEGER, yymsp[-3].minor.yy60 ? "1" : "0");
+ }else if( yymsp[-1].minor.yy338->nExpr==1 && sqlite3ExprIsConstant(yymsp[-1].minor.yy338->a[0].pExpr) ){
+ Expr *pRHS = yymsp[-1].minor.yy338->a[0].pExpr;
+ yymsp[-1].minor.yy338->a[0].pExpr = 0;
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy338);
pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0);
- yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy202, pRHS);
- if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
+ yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy602, pRHS);
+ if( yymsp[-3].minor.yy60 ) yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy602, 0);
}else{
- yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy202, 0);
- if( yymsp[-4].minor.yy202 ){
- yymsp[-4].minor.yy202->x.pList = yymsp[-1].minor.yy242;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy202);
+ yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy602, 0);
+ if( yymsp[-4].minor.yy602 ){
+ yymsp[-4].minor.yy602->x.pList = yymsp[-1].minor.yy338;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy602);
}else{
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy242);
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy338);
}
- if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
+ if( yymsp[-3].minor.yy60 ) yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy602, 0);
}
}
break;
- case 209: /* expr ::= LP select RP */
+ case 216: /* expr ::= LP select RP */
{
- yymsp[-2].minor.yy202 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy202, yymsp[-1].minor.yy539);
+ yymsp[-2].minor.yy602 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy602, yymsp[-1].minor.yy307);
}
break;
- case 210: /* expr ::= expr in_op LP select RP */
+ case 217: /* expr ::= expr in_op LP select RP */
{
- yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy202, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy202, yymsp[-1].minor.yy539);
- if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
+ yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy602, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy602, yymsp[-1].minor.yy307);
+ if( yymsp[-3].minor.yy60 ) yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy602, 0);
}
break;
- case 211: /* expr ::= expr in_op nm dbnm paren_exprlist */
+ case 218: /* expr ::= expr in_op nm dbnm paren_exprlist */
{
SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);
Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
- if( yymsp[0].minor.yy242 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy242);
- yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy202, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy202, pSelect);
- if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
+ if( yymsp[0].minor.yy338 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy338);
+ yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy602, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy602, pSelect);
+ if( yymsp[-3].minor.yy60 ) yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy602, 0);
}
break;
- case 212: /* expr ::= EXISTS LP select RP */
+ case 219: /* expr ::= EXISTS LP select RP */
{
Expr *p;
- p = yymsp[-3].minor.yy202 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
- sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy539);
+ p = yymsp[-3].minor.yy602 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
+ sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy307);
}
break;
- case 213: /* expr ::= CASE case_operand case_exprlist case_else END */
+ case 220: /* expr ::= CASE case_operand case_exprlist case_else END */
{
- yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy202, 0);
- if( yymsp[-4].minor.yy202 ){
- yymsp[-4].minor.yy202->x.pList = yymsp[-1].minor.yy202 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy242,yymsp[-1].minor.yy202) : yymsp[-2].minor.yy242;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy202);
+ yymsp[-4].minor.yy602 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy602, 0);
+ if( yymsp[-4].minor.yy602 ){
+ yymsp[-4].minor.yy602->x.pList = yymsp[-1].minor.yy602 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy338,yymsp[-1].minor.yy602) : yymsp[-2].minor.yy338;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy602);
}else{
- sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy242);
- sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy202);
+ sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy338);
+ sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy602);
}
}
break;
- case 214: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 221: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
- yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy242, yymsp[-2].minor.yy202);
- yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy242, yymsp[0].minor.yy202);
+ yymsp[-4].minor.yy338 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy338, yymsp[-2].minor.yy602);
+ yymsp[-4].minor.yy338 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy338, yymsp[0].minor.yy602);
}
break;
- case 215: /* case_exprlist ::= WHEN expr THEN expr */
+ case 222: /* case_exprlist ::= WHEN expr THEN expr */
{
- yymsp[-3].minor.yy242 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy202);
- yymsp[-3].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy242, yymsp[0].minor.yy202);
+ yymsp[-3].minor.yy338 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy602);
+ yymsp[-3].minor.yy338 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy338, yymsp[0].minor.yy602);
}
break;
- case 218: /* case_operand ::= expr */
-{yymsp[0].minor.yy202 = yymsp[0].minor.yy202; /*A-overwrites-X*/}
+ case 225: /* case_operand ::= expr */
+{yymsp[0].minor.yy602 = yymsp[0].minor.yy602; /*A-overwrites-X*/}
break;
- case 221: /* nexprlist ::= nexprlist COMMA expr */
-{yymsp[-2].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy242,yymsp[0].minor.yy202);}
+ case 228: /* nexprlist ::= nexprlist COMMA expr */
+{yymsp[-2].minor.yy338 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy338,yymsp[0].minor.yy602);}
break;
- case 222: /* nexprlist ::= expr */
-{yymsp[0].minor.yy242 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy202); /*A-overwrites-Y*/}
+ case 229: /* nexprlist ::= expr */
+{yymsp[0].minor.yy338 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy602); /*A-overwrites-Y*/}
break;
- case 224: /* paren_exprlist ::= LP exprlist RP */
- case 229: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==229);
-{yymsp[-2].minor.yy242 = yymsp[-1].minor.yy242;}
+ case 231: /* paren_exprlist ::= LP exprlist RP */
+ case 236: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==236);
+{yymsp[-2].minor.yy338 = yymsp[-1].minor.yy338;}
break;
- case 225: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ case 232: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
{
sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0,
- sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy242, yymsp[-10].minor.yy192,
- &yymsp[-11].minor.yy0, yymsp[0].minor.yy202, SQLITE_SO_ASC, yymsp[-8].minor.yy192, SQLITE_IDXTYPE_APPDEF);
+ sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy338, yymsp[-10].minor.yy60,
+ &yymsp[-11].minor.yy0, yymsp[0].minor.yy602, SQLITE_SO_ASC, yymsp[-8].minor.yy60, SQLITE_IDXTYPE_APPDEF);
if( IN_RENAME_OBJECT && pParse->pNewIndex ){
sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0);
}
}
break;
- case 226: /* uniqueflag ::= UNIQUE */
- case 268: /* raisetype ::= ABORT */ yytestcase(yyruleno==268);
-{yymsp[0].minor.yy192 = OE_Abort;}
+ case 233: /* uniqueflag ::= UNIQUE */
+ case 275: /* raisetype ::= ABORT */ yytestcase(yyruleno==275);
+{yymsp[0].minor.yy60 = OE_Abort;}
break;
- case 227: /* uniqueflag ::= */
-{yymsp[1].minor.yy192 = OE_None;}
+ case 234: /* uniqueflag ::= */
+{yymsp[1].minor.yy60 = OE_None;}
break;
- case 230: /* eidlist ::= eidlist COMMA nm collate sortorder */
+ case 237: /* eidlist ::= eidlist COMMA nm collate sortorder */
{
- yymsp[-4].minor.yy242 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy242, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy192, yymsp[0].minor.yy192);
+ yymsp[-4].minor.yy338 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy338, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy60, yymsp[0].minor.yy60);
}
break;
- case 231: /* eidlist ::= nm collate sortorder */
+ case 238: /* eidlist ::= nm collate sortorder */
{
- yymsp[-2].minor.yy242 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy192, yymsp[0].minor.yy192); /*A-overwrites-Y*/
+ yymsp[-2].minor.yy338 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy60, yymsp[0].minor.yy60); /*A-overwrites-Y*/
}
break;
- case 234: /* cmd ::= DROP INDEX ifexists fullname */
-{sqlite3DropIndex(pParse, yymsp[0].minor.yy47, yymsp[-1].minor.yy192);}
+ case 241: /* cmd ::= DROP INDEX ifexists fullname */
+{sqlite3DropIndex(pParse, yymsp[0].minor.yy291, yymsp[-1].minor.yy60);}
break;
- case 235: /* cmd ::= VACUUM vinto */
-{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy202);}
+ case 242: /* cmd ::= VACUUM vinto */
+{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy602);}
break;
- case 236: /* cmd ::= VACUUM nm vinto */
-{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy202);}
+ case 243: /* cmd ::= VACUUM nm vinto */
+{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy602);}
break;
- case 239: /* cmd ::= PRAGMA nm dbnm */
+ case 246: /* cmd ::= PRAGMA nm dbnm */
{sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
break;
- case 240: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
+ case 247: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
break;
- case 241: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ case 248: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
break;
- case 242: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
+ case 249: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
break;
- case 243: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ case 250: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
break;
- case 246: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ case 253: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
{
Token all;
all.z = yymsp[-3].minor.yy0.z;
all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
- sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy447, &all);
+ sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy483, &all);
}
break;
- case 247: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ case 254: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
{
- sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy192, yymsp[-4].minor.yy230.a, yymsp[-4].minor.yy230.b, yymsp[-2].minor.yy47, yymsp[0].minor.yy202, yymsp[-10].minor.yy192, yymsp[-8].minor.yy192);
+ sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy60, yymsp[-4].minor.yy50.a, yymsp[-4].minor.yy50.b, yymsp[-2].minor.yy291, yymsp[0].minor.yy602, yymsp[-10].minor.yy60, yymsp[-8].minor.yy60);
yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/
}
break;
- case 248: /* trigger_time ::= BEFORE|AFTER */
-{ yymsp[0].minor.yy192 = yymsp[0].major; /*A-overwrites-X*/ }
+ case 255: /* trigger_time ::= BEFORE|AFTER */
+{ yymsp[0].minor.yy60 = yymsp[0].major; /*A-overwrites-X*/ }
break;
- case 249: /* trigger_time ::= INSTEAD OF */
-{ yymsp[-1].minor.yy192 = TK_INSTEAD;}
+ case 256: /* trigger_time ::= INSTEAD OF */
+{ yymsp[-1].minor.yy60 = TK_INSTEAD;}
break;
- case 250: /* trigger_time ::= */
-{ yymsp[1].minor.yy192 = TK_BEFORE; }
+ case 257: /* trigger_time ::= */
+{ yymsp[1].minor.yy60 = TK_BEFORE; }
break;
- case 251: /* trigger_event ::= DELETE|INSERT */
- case 252: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==252);
-{yymsp[0].minor.yy230.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy230.b = 0;}
+ case 258: /* trigger_event ::= DELETE|INSERT */
+ case 259: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==259);
+{yymsp[0].minor.yy50.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy50.b = 0;}
break;
- case 253: /* trigger_event ::= UPDATE OF idlist */
-{yymsp[-2].minor.yy230.a = TK_UPDATE; yymsp[-2].minor.yy230.b = yymsp[0].minor.yy600;}
+ case 260: /* trigger_event ::= UPDATE OF idlist */
+{yymsp[-2].minor.yy50.a = TK_UPDATE; yymsp[-2].minor.yy50.b = yymsp[0].minor.yy288;}
break;
- case 254: /* when_clause ::= */
- case 273: /* key_opt ::= */ yytestcase(yyruleno==273);
-{ yymsp[1].minor.yy202 = 0; }
+ case 261: /* when_clause ::= */
+ case 280: /* key_opt ::= */ yytestcase(yyruleno==280);
+{ yymsp[1].minor.yy602 = 0; }
break;
- case 255: /* when_clause ::= WHEN expr */
- case 274: /* key_opt ::= KEY expr */ yytestcase(yyruleno==274);
-{ yymsp[-1].minor.yy202 = yymsp[0].minor.yy202; }
+ case 262: /* when_clause ::= WHEN expr */
+ case 281: /* key_opt ::= KEY expr */ yytestcase(yyruleno==281);
+{ yymsp[-1].minor.yy602 = yymsp[0].minor.yy602; }
break;
- case 256: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 263: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
- assert( yymsp[-2].minor.yy447!=0 );
- yymsp[-2].minor.yy447->pLast->pNext = yymsp[-1].minor.yy447;
- yymsp[-2].minor.yy447->pLast = yymsp[-1].minor.yy447;
+ assert( yymsp[-2].minor.yy483!=0 );
+ yymsp[-2].minor.yy483->pLast->pNext = yymsp[-1].minor.yy483;
+ yymsp[-2].minor.yy483->pLast = yymsp[-1].minor.yy483;
}
break;
- case 257: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 264: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
- assert( yymsp[-1].minor.yy447!=0 );
- yymsp[-1].minor.yy447->pLast = yymsp[-1].minor.yy447;
+ assert( yymsp[-1].minor.yy483!=0 );
+ yymsp[-1].minor.yy483->pLast = yymsp[-1].minor.yy483;
}
break;
- case 258: /* trnm ::= nm DOT nm */
+ case 265: /* trnm ::= nm DOT nm */
{
yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;
sqlite3ErrorMsg(pParse,
@@ -159427,344 +161523,364 @@ static YYACTIONTYPE yy_reduce(
"statements within triggers");
}
break;
- case 259: /* tridxby ::= INDEXED BY nm */
+ case 266: /* tridxby ::= INDEXED BY nm */
{
sqlite3ErrorMsg(pParse,
"the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 260: /* tridxby ::= NOT INDEXED */
+ case 267: /* tridxby ::= NOT INDEXED */
{
sqlite3ErrorMsg(pParse,
"the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 261: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
-{yylhsminor.yy447 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy47, yymsp[-3].minor.yy242, yymsp[-1].minor.yy202, yymsp[-7].minor.yy192, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy436);}
- yymsp[-8].minor.yy447 = yylhsminor.yy447;
+ case 268: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
+{yylhsminor.yy483 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy291, yymsp[-3].minor.yy338, yymsp[-1].minor.yy602, yymsp[-7].minor.yy60, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy528);}
+ yymsp[-8].minor.yy483 = yylhsminor.yy483;
break;
- case 262: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ case 269: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
{
- yylhsminor.yy447 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy600,yymsp[-2].minor.yy539,yymsp[-6].minor.yy192,yymsp[-1].minor.yy318,yymsp[-7].minor.yy436,yymsp[0].minor.yy436);/*yylhsminor.yy447-overwrites-yymsp[-6].minor.yy192*/
+ yylhsminor.yy483 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy288,yymsp[-2].minor.yy307,yymsp[-6].minor.yy60,yymsp[-1].minor.yy178,yymsp[-7].minor.yy528,yymsp[0].minor.yy528);/*yylhsminor.yy483-overwrites-yymsp[-6].minor.yy60*/
}
- yymsp[-7].minor.yy447 = yylhsminor.yy447;
+ yymsp[-7].minor.yy483 = yylhsminor.yy483;
break;
- case 263: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
-{yylhsminor.yy447 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy202, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy436);}
- yymsp[-5].minor.yy447 = yylhsminor.yy447;
+ case 270: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+{yylhsminor.yy483 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy602, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy528);}
+ yymsp[-5].minor.yy483 = yylhsminor.yy483;
break;
- case 264: /* trigger_cmd ::= scanpt select scanpt */
-{yylhsminor.yy447 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy539, yymsp[-2].minor.yy436, yymsp[0].minor.yy436); /*yylhsminor.yy447-overwrites-yymsp[-1].minor.yy539*/}
- yymsp[-2].minor.yy447 = yylhsminor.yy447;
+ case 271: /* trigger_cmd ::= scanpt select scanpt */
+{yylhsminor.yy483 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy307, yymsp[-2].minor.yy528, yymsp[0].minor.yy528); /*yylhsminor.yy483-overwrites-yymsp[-1].minor.yy307*/}
+ yymsp[-2].minor.yy483 = yylhsminor.yy483;
break;
- case 265: /* expr ::= RAISE LP IGNORE RP */
+ case 272: /* expr ::= RAISE LP IGNORE RP */
{
- yymsp[-3].minor.yy202 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
- if( yymsp[-3].minor.yy202 ){
- yymsp[-3].minor.yy202->affExpr = OE_Ignore;
+ yymsp[-3].minor.yy602 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
+ if( yymsp[-3].minor.yy602 ){
+ yymsp[-3].minor.yy602->affExpr = OE_Ignore;
}
}
break;
- case 266: /* expr ::= RAISE LP raisetype COMMA nm RP */
+ case 273: /* expr ::= RAISE LP raisetype COMMA nm RP */
{
- yymsp[-5].minor.yy202 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
- if( yymsp[-5].minor.yy202 ) {
- yymsp[-5].minor.yy202->affExpr = (char)yymsp[-3].minor.yy192;
+ yymsp[-5].minor.yy602 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
+ if( yymsp[-5].minor.yy602 ) {
+ yymsp[-5].minor.yy602->affExpr = (char)yymsp[-3].minor.yy60;
}
}
break;
- case 267: /* raisetype ::= ROLLBACK */
-{yymsp[0].minor.yy192 = OE_Rollback;}
+ case 274: /* raisetype ::= ROLLBACK */
+{yymsp[0].minor.yy60 = OE_Rollback;}
break;
- case 269: /* raisetype ::= FAIL */
-{yymsp[0].minor.yy192 = OE_Fail;}
+ case 276: /* raisetype ::= FAIL */
+{yymsp[0].minor.yy60 = OE_Fail;}
break;
- case 270: /* cmd ::= DROP TRIGGER ifexists fullname */
+ case 277: /* cmd ::= DROP TRIGGER ifexists fullname */
{
- sqlite3DropTrigger(pParse,yymsp[0].minor.yy47,yymsp[-1].minor.yy192);
+ sqlite3DropTrigger(pParse,yymsp[0].minor.yy291,yymsp[-1].minor.yy60);
}
break;
- case 271: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ case 278: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
{
- sqlite3Attach(pParse, yymsp[-3].minor.yy202, yymsp[-1].minor.yy202, yymsp[0].minor.yy202);
+ sqlite3Attach(pParse, yymsp[-3].minor.yy602, yymsp[-1].minor.yy602, yymsp[0].minor.yy602);
}
break;
- case 272: /* cmd ::= DETACH database_kw_opt expr */
+ case 279: /* cmd ::= DETACH database_kw_opt expr */
{
- sqlite3Detach(pParse, yymsp[0].minor.yy202);
+ sqlite3Detach(pParse, yymsp[0].minor.yy602);
}
break;
- case 275: /* cmd ::= REINDEX */
+ case 282: /* cmd ::= REINDEX */
{sqlite3Reindex(pParse, 0, 0);}
break;
- case 276: /* cmd ::= REINDEX nm dbnm */
+ case 283: /* cmd ::= REINDEX nm dbnm */
{sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 277: /* cmd ::= ANALYZE */
+ case 284: /* cmd ::= ANALYZE */
{sqlite3Analyze(pParse, 0, 0);}
break;
- case 278: /* cmd ::= ANALYZE nm dbnm */
+ case 285: /* cmd ::= ANALYZE nm dbnm */
{sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 279: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+ case 286: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
{
- sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy47,&yymsp[0].minor.yy0);
+ sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy291,&yymsp[0].minor.yy0);
}
break;
- case 280: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ case 287: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
{
yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n;
sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0);
}
break;
- case 281: /* add_column_fullname ::= fullname */
+ case 288: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+{
+ sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy291, &yymsp[0].minor.yy0);
+}
+ break;
+ case 289: /* add_column_fullname ::= fullname */
{
disableLookaside(pParse);
- sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy47);
+ sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy291);
}
break;
- case 282: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ case 290: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
{
- sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy47, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
+ sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy291, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
}
break;
- case 283: /* cmd ::= create_vtab */
+ case 291: /* cmd ::= create_vtab */
{sqlite3VtabFinishParse(pParse,0);}
break;
- case 284: /* cmd ::= create_vtab LP vtabarglist RP */
+ case 292: /* cmd ::= create_vtab LP vtabarglist RP */
{sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
break;
- case 285: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ case 293: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
{
- sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy192);
+ sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy60);
}
break;
- case 286: /* vtabarg ::= */
+ case 294: /* vtabarg ::= */
{sqlite3VtabArgInit(pParse);}
break;
- case 287: /* vtabargtoken ::= ANY */
- case 288: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==288);
- case 289: /* lp ::= LP */ yytestcase(yyruleno==289);
+ case 295: /* vtabargtoken ::= ANY */
+ case 296: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==296);
+ case 297: /* lp ::= LP */ yytestcase(yyruleno==297);
{sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
break;
- case 290: /* with ::= WITH wqlist */
- case 291: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==291);
-{ sqlite3WithPush(pParse, yymsp[0].minor.yy131, 1); }
+ case 298: /* with ::= WITH wqlist */
+ case 299: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==299);
+{ sqlite3WithPush(pParse, yymsp[0].minor.yy195, 1); }
+ break;
+ case 300: /* wqas ::= AS */
+{yymsp[0].minor.yy570 = M10d_Any;}
+ break;
+ case 301: /* wqas ::= AS MATERIALIZED */
+{yymsp[-1].minor.yy570 = M10d_Yes;}
break;
- case 292: /* wqlist ::= nm eidlist_opt AS LP select RP */
+ case 302: /* wqas ::= AS NOT MATERIALIZED */
+{yymsp[-2].minor.yy570 = M10d_No;}
+ break;
+ case 303: /* wqitem ::= nm eidlist_opt wqas LP select RP */
+{
+ yymsp[-5].minor.yy607 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy338, yymsp[-1].minor.yy307, yymsp[-3].minor.yy570); /*A-overwrites-X*/
+}
+ break;
+ case 304: /* wqlist ::= wqitem */
{
- yymsp[-5].minor.yy131 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy242, yymsp[-1].minor.yy539); /*A-overwrites-X*/
+ yymsp[0].minor.yy195 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy607); /*A-overwrites-X*/
}
break;
- case 293: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
+ case 305: /* wqlist ::= wqlist COMMA wqitem */
{
- yymsp[-7].minor.yy131 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy131, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy242, yymsp[-1].minor.yy539);
+ yymsp[-2].minor.yy195 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy195, yymsp[0].minor.yy607);
}
break;
- case 294: /* windowdefn_list ::= windowdefn */
-{ yylhsminor.yy303 = yymsp[0].minor.yy303; }
- yymsp[0].minor.yy303 = yylhsminor.yy303;
+ case 306: /* windowdefn_list ::= windowdefn */
+{ yylhsminor.yy19 = yymsp[0].minor.yy19; }
+ yymsp[0].minor.yy19 = yylhsminor.yy19;
break;
- case 295: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ case 307: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
{
- assert( yymsp[0].minor.yy303!=0 );
- sqlite3WindowChain(pParse, yymsp[0].minor.yy303, yymsp[-2].minor.yy303);
- yymsp[0].minor.yy303->pNextWin = yymsp[-2].minor.yy303;
- yylhsminor.yy303 = yymsp[0].minor.yy303;
+ assert( yymsp[0].minor.yy19!=0 );
+ sqlite3WindowChain(pParse, yymsp[0].minor.yy19, yymsp[-2].minor.yy19);
+ yymsp[0].minor.yy19->pNextWin = yymsp[-2].minor.yy19;
+ yylhsminor.yy19 = yymsp[0].minor.yy19;
}
- yymsp[-2].minor.yy303 = yylhsminor.yy303;
+ yymsp[-2].minor.yy19 = yylhsminor.yy19;
break;
- case 296: /* windowdefn ::= nm AS LP window RP */
+ case 308: /* windowdefn ::= nm AS LP window RP */
{
- if( ALWAYS(yymsp[-1].minor.yy303) ){
- yymsp[-1].minor.yy303->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n);
+ if( ALWAYS(yymsp[-1].minor.yy19) ){
+ yymsp[-1].minor.yy19->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n);
}
- yylhsminor.yy303 = yymsp[-1].minor.yy303;
+ yylhsminor.yy19 = yymsp[-1].minor.yy19;
}
- yymsp[-4].minor.yy303 = yylhsminor.yy303;
+ yymsp[-4].minor.yy19 = yylhsminor.yy19;
break;
- case 297: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ case 309: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
{
- yymsp[-4].minor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, yymsp[-2].minor.yy242, yymsp[-1].minor.yy242, 0);
+ yymsp[-4].minor.yy19 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy19, yymsp[-2].minor.yy338, yymsp[-1].minor.yy338, 0);
}
break;
- case 298: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ case 310: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
{
- yylhsminor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, yymsp[-2].minor.yy242, yymsp[-1].minor.yy242, &yymsp[-5].minor.yy0);
+ yylhsminor.yy19 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy19, yymsp[-2].minor.yy338, yymsp[-1].minor.yy338, &yymsp[-5].minor.yy0);
}
- yymsp[-5].minor.yy303 = yylhsminor.yy303;
+ yymsp[-5].minor.yy19 = yylhsminor.yy19;
break;
- case 299: /* window ::= ORDER BY sortlist frame_opt */
+ case 311: /* window ::= ORDER BY sortlist frame_opt */
{
- yymsp[-3].minor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, 0, yymsp[-1].minor.yy242, 0);
+ yymsp[-3].minor.yy19 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy19, 0, yymsp[-1].minor.yy338, 0);
}
break;
- case 300: /* window ::= nm ORDER BY sortlist frame_opt */
+ case 312: /* window ::= nm ORDER BY sortlist frame_opt */
{
- yylhsminor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, 0, yymsp[-1].minor.yy242, &yymsp[-4].minor.yy0);
+ yylhsminor.yy19 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy19, 0, yymsp[-1].minor.yy338, &yymsp[-4].minor.yy0);
}
- yymsp[-4].minor.yy303 = yylhsminor.yy303;
+ yymsp[-4].minor.yy19 = yylhsminor.yy19;
break;
- case 301: /* window ::= frame_opt */
- case 320: /* filter_over ::= over_clause */ yytestcase(yyruleno==320);
+ case 313: /* window ::= frame_opt */
+ case 332: /* filter_over ::= over_clause */ yytestcase(yyruleno==332);
{
- yylhsminor.yy303 = yymsp[0].minor.yy303;
+ yylhsminor.yy19 = yymsp[0].minor.yy19;
}
- yymsp[0].minor.yy303 = yylhsminor.yy303;
+ yymsp[0].minor.yy19 = yylhsminor.yy19;
break;
- case 302: /* window ::= nm frame_opt */
+ case 314: /* window ::= nm frame_opt */
{
- yylhsminor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, 0, 0, &yymsp[-1].minor.yy0);
+ yylhsminor.yy19 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy19, 0, 0, &yymsp[-1].minor.yy0);
}
- yymsp[-1].minor.yy303 = yylhsminor.yy303;
+ yymsp[-1].minor.yy19 = yylhsminor.yy19;
break;
- case 303: /* frame_opt ::= */
+ case 315: /* frame_opt ::= */
{
- yymsp[1].minor.yy303 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
+ yymsp[1].minor.yy19 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
}
break;
- case 304: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ case 316: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
{
- yylhsminor.yy303 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy192, yymsp[-1].minor.yy77.eType, yymsp[-1].minor.yy77.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy58);
+ yylhsminor.yy19 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy60, yymsp[-1].minor.yy113.eType, yymsp[-1].minor.yy113.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy570);
}
- yymsp[-2].minor.yy303 = yylhsminor.yy303;
+ yymsp[-2].minor.yy19 = yylhsminor.yy19;
break;
- case 305: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ case 317: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
{
- yylhsminor.yy303 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy192, yymsp[-3].minor.yy77.eType, yymsp[-3].minor.yy77.pExpr, yymsp[-1].minor.yy77.eType, yymsp[-1].minor.yy77.pExpr, yymsp[0].minor.yy58);
+ yylhsminor.yy19 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy60, yymsp[-3].minor.yy113.eType, yymsp[-3].minor.yy113.pExpr, yymsp[-1].minor.yy113.eType, yymsp[-1].minor.yy113.pExpr, yymsp[0].minor.yy570);
}
- yymsp[-5].minor.yy303 = yylhsminor.yy303;
+ yymsp[-5].minor.yy19 = yylhsminor.yy19;
break;
- case 307: /* frame_bound_s ::= frame_bound */
- case 309: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==309);
-{yylhsminor.yy77 = yymsp[0].minor.yy77;}
- yymsp[0].minor.yy77 = yylhsminor.yy77;
+ case 319: /* frame_bound_s ::= frame_bound */
+ case 321: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==321);
+{yylhsminor.yy113 = yymsp[0].minor.yy113;}
+ yymsp[0].minor.yy113 = yylhsminor.yy113;
break;
- case 308: /* frame_bound_s ::= UNBOUNDED PRECEDING */
- case 310: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==310);
- case 312: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==312);
-{yylhsminor.yy77.eType = yymsp[-1].major; yylhsminor.yy77.pExpr = 0;}
- yymsp[-1].minor.yy77 = yylhsminor.yy77;
+ case 320: /* frame_bound_s ::= UNBOUNDED PRECEDING */
+ case 322: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==322);
+ case 324: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==324);
+{yylhsminor.yy113.eType = yymsp[-1].major; yylhsminor.yy113.pExpr = 0;}
+ yymsp[-1].minor.yy113 = yylhsminor.yy113;
break;
- case 311: /* frame_bound ::= expr PRECEDING|FOLLOWING */
-{yylhsminor.yy77.eType = yymsp[0].major; yylhsminor.yy77.pExpr = yymsp[-1].minor.yy202;}
- yymsp[-1].minor.yy77 = yylhsminor.yy77;
+ case 323: /* frame_bound ::= expr PRECEDING|FOLLOWING */
+{yylhsminor.yy113.eType = yymsp[0].major; yylhsminor.yy113.pExpr = yymsp[-1].minor.yy602;}
+ yymsp[-1].minor.yy113 = yylhsminor.yy113;
break;
- case 313: /* frame_exclude_opt ::= */
-{yymsp[1].minor.yy58 = 0;}
+ case 325: /* frame_exclude_opt ::= */
+{yymsp[1].minor.yy570 = 0;}
break;
- case 314: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
-{yymsp[-1].minor.yy58 = yymsp[0].minor.yy58;}
+ case 326: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
+{yymsp[-1].minor.yy570 = yymsp[0].minor.yy570;}
break;
- case 315: /* frame_exclude ::= NO OTHERS */
- case 316: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==316);
-{yymsp[-1].minor.yy58 = yymsp[-1].major; /*A-overwrites-X*/}
+ case 327: /* frame_exclude ::= NO OTHERS */
+ case 328: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==328);
+{yymsp[-1].minor.yy570 = yymsp[-1].major; /*A-overwrites-X*/}
break;
- case 317: /* frame_exclude ::= GROUP|TIES */
-{yymsp[0].minor.yy58 = yymsp[0].major; /*A-overwrites-X*/}
+ case 329: /* frame_exclude ::= GROUP|TIES */
+{yymsp[0].minor.yy570 = yymsp[0].major; /*A-overwrites-X*/}
break;
- case 318: /* window_clause ::= WINDOW windowdefn_list */
-{ yymsp[-1].minor.yy303 = yymsp[0].minor.yy303; }
+ case 330: /* window_clause ::= WINDOW windowdefn_list */
+{ yymsp[-1].minor.yy19 = yymsp[0].minor.yy19; }
break;
- case 319: /* filter_over ::= filter_clause over_clause */
+ case 331: /* filter_over ::= filter_clause over_clause */
{
- yymsp[0].minor.yy303->pFilter = yymsp[-1].minor.yy202;
- yylhsminor.yy303 = yymsp[0].minor.yy303;
+ yymsp[0].minor.yy19->pFilter = yymsp[-1].minor.yy602;
+ yylhsminor.yy19 = yymsp[0].minor.yy19;
}
- yymsp[-1].minor.yy303 = yylhsminor.yy303;
+ yymsp[-1].minor.yy19 = yylhsminor.yy19;
break;
- case 321: /* filter_over ::= filter_clause */
+ case 333: /* filter_over ::= filter_clause */
{
- yylhsminor.yy303 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
- if( yylhsminor.yy303 ){
- yylhsminor.yy303->eFrmType = TK_FILTER;
- yylhsminor.yy303->pFilter = yymsp[0].minor.yy202;
+ yylhsminor.yy19 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
+ if( yylhsminor.yy19 ){
+ yylhsminor.yy19->eFrmType = TK_FILTER;
+ yylhsminor.yy19->pFilter = yymsp[0].minor.yy602;
}else{
- sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy202);
+ sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy602);
}
}
- yymsp[0].minor.yy303 = yylhsminor.yy303;
+ yymsp[0].minor.yy19 = yylhsminor.yy19;
break;
- case 322: /* over_clause ::= OVER LP window RP */
+ case 334: /* over_clause ::= OVER LP window RP */
{
- yymsp[-3].minor.yy303 = yymsp[-1].minor.yy303;
- assert( yymsp[-3].minor.yy303!=0 );
+ yymsp[-3].minor.yy19 = yymsp[-1].minor.yy19;
+ assert( yymsp[-3].minor.yy19!=0 );
}
break;
- case 323: /* over_clause ::= OVER nm */
+ case 335: /* over_clause ::= OVER nm */
{
- yymsp[-1].minor.yy303 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
- if( yymsp[-1].minor.yy303 ){
- yymsp[-1].minor.yy303->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n);
+ yymsp[-1].minor.yy19 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
+ if( yymsp[-1].minor.yy19 ){
+ yymsp[-1].minor.yy19->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n);
}
}
break;
- case 324: /* filter_clause ::= FILTER LP WHERE expr RP */
-{ yymsp[-4].minor.yy202 = yymsp[-1].minor.yy202; }
+ case 336: /* filter_clause ::= FILTER LP WHERE expr RP */
+{ yymsp[-4].minor.yy602 = yymsp[-1].minor.yy602; }
break;
default:
- /* (325) input ::= cmdlist */ yytestcase(yyruleno==325);
- /* (326) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==326);
- /* (327) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=327);
- /* (328) ecmd ::= SEMI */ yytestcase(yyruleno==328);
- /* (329) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==329);
- /* (330) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=330);
- /* (331) trans_opt ::= */ yytestcase(yyruleno==331);
- /* (332) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==332);
- /* (333) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==333);
- /* (334) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==334);
- /* (335) savepoint_opt ::= */ yytestcase(yyruleno==335);
- /* (336) cmd ::= create_table create_table_args */ yytestcase(yyruleno==336);
- /* (337) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==337);
- /* (338) columnlist ::= columnname carglist */ yytestcase(yyruleno==338);
- /* (339) nm ::= ID|INDEXED */ yytestcase(yyruleno==339);
- /* (340) nm ::= STRING */ yytestcase(yyruleno==340);
- /* (341) nm ::= JOIN_KW */ yytestcase(yyruleno==341);
- /* (342) typetoken ::= typename */ yytestcase(yyruleno==342);
- /* (343) typename ::= ID|STRING */ yytestcase(yyruleno==343);
- /* (344) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=344);
- /* (345) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=345);
- /* (346) carglist ::= carglist ccons */ yytestcase(yyruleno==346);
- /* (347) carglist ::= */ yytestcase(yyruleno==347);
- /* (348) ccons ::= NULL onconf */ yytestcase(yyruleno==348);
- /* (349) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==349);
- /* (350) ccons ::= AS generated */ yytestcase(yyruleno==350);
- /* (351) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==351);
- /* (352) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==352);
- /* (353) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=353);
- /* (354) tconscomma ::= */ yytestcase(yyruleno==354);
- /* (355) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=355);
- /* (356) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=356);
- /* (357) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=357);
- /* (358) oneselect ::= values */ yytestcase(yyruleno==358);
- /* (359) sclp ::= selcollist COMMA */ yytestcase(yyruleno==359);
- /* (360) as ::= ID|STRING */ yytestcase(yyruleno==360);
- /* (361) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=361);
- /* (362) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==362);
- /* (363) exprlist ::= nexprlist */ yytestcase(yyruleno==363);
- /* (364) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=364);
- /* (365) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=365);
- /* (366) nmnum ::= ON */ yytestcase(yyruleno==366);
- /* (367) nmnum ::= DELETE */ yytestcase(yyruleno==367);
- /* (368) nmnum ::= DEFAULT */ yytestcase(yyruleno==368);
- /* (369) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==369);
- /* (370) foreach_clause ::= */ yytestcase(yyruleno==370);
- /* (371) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==371);
- /* (372) trnm ::= nm */ yytestcase(yyruleno==372);
- /* (373) tridxby ::= */ yytestcase(yyruleno==373);
- /* (374) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==374);
- /* (375) database_kw_opt ::= */ yytestcase(yyruleno==375);
- /* (376) kwcolumn_opt ::= */ yytestcase(yyruleno==376);
- /* (377) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==377);
- /* (378) vtabarglist ::= vtabarg */ yytestcase(yyruleno==378);
- /* (379) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==379);
- /* (380) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==380);
- /* (381) anylist ::= */ yytestcase(yyruleno==381);
- /* (382) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==382);
- /* (383) anylist ::= anylist ANY */ yytestcase(yyruleno==383);
- /* (384) with ::= */ yytestcase(yyruleno==384);
+ /* (337) input ::= cmdlist */ yytestcase(yyruleno==337);
+ /* (338) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==338);
+ /* (339) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=339);
+ /* (340) ecmd ::= SEMI */ yytestcase(yyruleno==340);
+ /* (341) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==341);
+ /* (342) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=342);
+ /* (343) trans_opt ::= */ yytestcase(yyruleno==343);
+ /* (344) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==344);
+ /* (345) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==345);
+ /* (346) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==346);
+ /* (347) savepoint_opt ::= */ yytestcase(yyruleno==347);
+ /* (348) cmd ::= create_table create_table_args */ yytestcase(yyruleno==348);
+ /* (349) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==349);
+ /* (350) columnlist ::= columnname carglist */ yytestcase(yyruleno==350);
+ /* (351) nm ::= ID|INDEXED */ yytestcase(yyruleno==351);
+ /* (352) nm ::= STRING */ yytestcase(yyruleno==352);
+ /* (353) nm ::= JOIN_KW */ yytestcase(yyruleno==353);
+ /* (354) typetoken ::= typename */ yytestcase(yyruleno==354);
+ /* (355) typename ::= ID|STRING */ yytestcase(yyruleno==355);
+ /* (356) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=356);
+ /* (357) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=357);
+ /* (358) carglist ::= carglist ccons */ yytestcase(yyruleno==358);
+ /* (359) carglist ::= */ yytestcase(yyruleno==359);
+ /* (360) ccons ::= NULL onconf */ yytestcase(yyruleno==360);
+ /* (361) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==361);
+ /* (362) ccons ::= AS generated */ yytestcase(yyruleno==362);
+ /* (363) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==363);
+ /* (364) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==364);
+ /* (365) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=365);
+ /* (366) tconscomma ::= */ yytestcase(yyruleno==366);
+ /* (367) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=367);
+ /* (368) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=368);
+ /* (369) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=369);
+ /* (370) oneselect ::= values */ yytestcase(yyruleno==370);
+ /* (371) sclp ::= selcollist COMMA */ yytestcase(yyruleno==371);
+ /* (372) as ::= ID|STRING */ yytestcase(yyruleno==372);
+ /* (373) returning ::= */ yytestcase(yyruleno==373);
+ /* (374) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=374);
+ /* (375) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==375);
+ /* (376) exprlist ::= nexprlist */ yytestcase(yyruleno==376);
+ /* (377) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=377);
+ /* (378) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=378);
+ /* (379) nmnum ::= ON */ yytestcase(yyruleno==379);
+ /* (380) nmnum ::= DELETE */ yytestcase(yyruleno==380);
+ /* (381) nmnum ::= DEFAULT */ yytestcase(yyruleno==381);
+ /* (382) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==382);
+ /* (383) foreach_clause ::= */ yytestcase(yyruleno==383);
+ /* (384) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==384);
+ /* (385) trnm ::= nm */ yytestcase(yyruleno==385);
+ /* (386) tridxby ::= */ yytestcase(yyruleno==386);
+ /* (387) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==387);
+ /* (388) database_kw_opt ::= */ yytestcase(yyruleno==388);
+ /* (389) kwcolumn_opt ::= */ yytestcase(yyruleno==389);
+ /* (390) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==390);
+ /* (391) vtabarglist ::= vtabarg */ yytestcase(yyruleno==391);
+ /* (392) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==392);
+ /* (393) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==393);
+ /* (394) anylist ::= */ yytestcase(yyruleno==394);
+ /* (395) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==395);
+ /* (396) anylist ::= anylist ANY */ yytestcase(yyruleno==396);
+ /* (397) with ::= */ yytestcase(yyruleno==397);
break;
/********** End reduce actions ************************************************/
};
@@ -159916,12 +162032,56 @@ SQLITE_PRIVATE void sqlite3Parser(
}
#endif
- do{
+ while(1){ /* Exit by "break" */
+ assert( yypParser->yytos>=yypParser->yystack );
assert( yyact==yypParser->yytos->stateno );
yyact = yy_find_shift_action((YYCODETYPE)yymajor,yyact);
if( yyact >= YY_MIN_REDUCE ){
- yyact = yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor,
- yyminor sqlite3ParserCTX_PARAM);
+ unsigned int yyruleno = yyact - YY_MIN_REDUCE; /* Reduce by this rule */
+ assert( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) );
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ int yysize = yyRuleInfoNRhs[yyruleno];
+ if( yysize ){
+ fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
+ yyTracePrompt,
+ yyruleno, yyRuleName[yyruleno],
+ yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action",
+ yypParser->yytos[yysize].stateno);
+ }else{
+ fprintf(yyTraceFILE, "%sReduce %d [%s]%s.\n",
+ yyTracePrompt, yyruleno, yyRuleName[yyruleno],
+ yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action");
+ }
+ }
+#endif /* NDEBUG */
+
+ /* Check that the stack is large enough to grow by a single entry
+ ** if the RHS of the rule is empty. This ensures that there is room
+ ** enough on the stack to push the LHS value */
+ if( yyRuleInfoNRhs[yyruleno]==0 ){
+#ifdef YYTRACKMAXSTACKDEPTH
+ if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
+ yypParser->yyhwm++;
+ assert( yypParser->yyhwm ==
+ (int)(yypParser->yytos - yypParser->yystack));
+ }
+#endif
+#if YYSTACKDEPTH>0
+ if( yypParser->yytos>=yypParser->yystackEnd ){
+ yyStackOverflow(yypParser);
+ break;
+ }
+#else
+ if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){
+ if( yyGrowStack(yypParser) ){
+ yyStackOverflow(yypParser);
+ break;
+ }
+ }
+#endif
+ }
+ yyact = yy_reduce(yypParser,yyruleno,yymajor,yyminor sqlite3ParserCTX_PARAM);
}else if( yyact <= YY_MAX_SHIFTREDUCE ){
yy_shift(yypParser,yyact,(YYCODETYPE)yymajor,yyminor);
#ifndef YYNOERRORRECOVERY
@@ -160034,7 +162194,7 @@ SQLITE_PRIVATE void sqlite3Parser(
break;
#endif
}
- }while( yypParser->yytos>yypParser->yystack );
+ }
#ifndef NDEBUG
if( yyTraceFILE ){
yyStackEntry *i;
@@ -160095,8 +162255,8 @@ SQLITE_PRIVATE int sqlite3ParserFallback(int iToken){
** all of them need to be used within the switch.
*/
#define CC_X 0 /* The letter 'x', or start of BLOB literal */
-#define CC_KYWD 1 /* Alphabetics or '_'. Usable in a keyword */
-#define CC_ID 2 /* unicode characters usable in IDs */
+#define CC_KYWD0 1 /* First letter of a keyword */
+#define CC_KYWD 2 /* Alphabetics or '_'. Usable in a keyword */
#define CC_DIGIT 3 /* Digits */
#define CC_DOLLAR 4 /* '$' */
#define CC_VARALPHA 5 /* '@', '#', ':'. Alphabetic SQL variables */
@@ -160121,20 +162281,21 @@ SQLITE_PRIVATE int sqlite3ParserFallback(int iToken){
#define CC_AND 24 /* '&' */
#define CC_TILDA 25 /* '~' */
#define CC_DOT 26 /* '.' */
-#define CC_ILLEGAL 27 /* Illegal character */
-#define CC_NUL 28 /* 0x00 */
+#define CC_ID 27 /* unicode characters usable in IDs */
+#define CC_ILLEGAL 28 /* Illegal character */
+#define CC_NUL 29 /* 0x00 */
static const unsigned char aiClass[] = {
#ifdef SQLITE_ASCII
/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */
-/* 0x */ 28, 27, 27, 27, 27, 27, 27, 27, 27, 7, 7, 27, 7, 7, 27, 27,
-/* 1x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+/* 0x */ 29, 28, 28, 28, 28, 28, 28, 28, 28, 7, 7, 28, 7, 7, 28, 28,
+/* 1x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
/* 2x */ 7, 15, 8, 5, 4, 22, 24, 8, 17, 18, 21, 20, 23, 11, 26, 16,
/* 3x */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 19, 12, 14, 13, 6,
/* 4x */ 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-/* 5x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 9, 27, 27, 27, 1,
+/* 5x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 9, 28, 28, 28, 2,
/* 6x */ 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-/* 7x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 27, 10, 27, 25, 27,
+/* 7x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 28, 10, 28, 25, 28,
/* 8x */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
/* 9x */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
/* Ax */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -160146,22 +162307,22 @@ static const unsigned char aiClass[] = {
#endif
#ifdef SQLITE_EBCDIC
/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */
-/* 0x */ 27, 27, 27, 27, 27, 7, 27, 27, 27, 27, 27, 27, 7, 7, 27, 27,
-/* 1x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-/* 2x */ 27, 27, 27, 27, 27, 7, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-/* 3x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-/* 4x */ 7, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 12, 17, 20, 10,
-/* 5x */ 24, 27, 27, 27, 27, 27, 27, 27, 27, 27, 15, 4, 21, 18, 19, 27,
-/* 6x */ 11, 16, 27, 27, 27, 27, 27, 27, 27, 27, 27, 23, 22, 1, 13, 6,
-/* 7x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 8, 5, 5, 5, 8, 14, 8,
-/* 8x */ 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 27, 27, 27, 27, 27,
-/* 9x */ 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 27, 27, 27, 27, 27,
-/* Ax */ 27, 25, 1, 1, 1, 1, 1, 0, 1, 1, 27, 27, 27, 27, 27, 27,
-/* Bx */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 9, 27, 27, 27, 27, 27,
-/* Cx */ 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 27, 27, 27, 27, 27,
-/* Dx */ 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 27, 27, 27, 27, 27,
-/* Ex */ 27, 27, 1, 1, 1, 1, 1, 0, 1, 1, 27, 27, 27, 27, 27, 27,
-/* Fx */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 27, 27, 27, 27, 27, 27,
+/* 0x */ 29, 28, 28, 28, 28, 7, 28, 28, 28, 28, 28, 28, 7, 7, 28, 28,
+/* 1x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+/* 2x */ 28, 28, 28, 28, 28, 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+/* 3x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+/* 4x */ 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 26, 12, 17, 20, 10,
+/* 5x */ 24, 28, 28, 28, 28, 28, 28, 28, 28, 28, 15, 4, 21, 18, 19, 28,
+/* 6x */ 11, 16, 28, 28, 28, 28, 28, 28, 28, 28, 28, 23, 22, 2, 13, 6,
+/* 7x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 8, 5, 5, 5, 8, 14, 8,
+/* 8x */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28,
+/* 9x */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28,
+/* Ax */ 28, 25, 1, 1, 1, 1, 1, 0, 2, 2, 28, 28, 28, 28, 28, 28,
+/* Bx */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 9, 28, 28, 28, 28, 28,
+/* Cx */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28,
+/* Dx */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28,
+/* Ex */ 28, 28, 1, 1, 1, 1, 1, 0, 2, 2, 28, 28, 28, 28, 28, 28,
+/* Fx */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 28, 28, 28, 28, 28, 28,
#endif
};
@@ -160226,20 +162387,21 @@ const unsigned char ebcdicToAscii[] = {
** is substantially reduced. This is important for embedded applications
** on platforms with limited memory.
*/
-/* Hash score: 227 */
-/* zKWText[] encodes 984 bytes of keyword text in 648 bytes */
+/* Hash score: 231 */
+/* zKWText[] encodes 1007 bytes of keyword text in 667 bytes */
/* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */
/* ABLEFTHENDEFERRABLELSEXCLUDELETEMPORARYISNULLSAVEPOINTERSECT */
/* IESNOTNULLIKEXCEPTRANSACTIONATURALTERAISEXCLUSIVEXISTS */
/* CONSTRAINTOFFSETRIGGERANGENERATEDETACHAVINGLOBEGINNEREFERENCES */
/* UNIQUERYWITHOUTERELEASEATTACHBETWEENOTHINGROUPSCASCADEFAULT */
/* CASECOLLATECREATECURRENT_DATEIMMEDIATEJOINSERTMATCHPLANALYZE */
-/* PRAGMABORTUPDATEVALUESVIRTUALWAYSWHENWHERECURSIVEAFTERENAMEAND */
-/* EFERREDISTINCTAUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSS */
-/* CURRENT_TIMESTAMPARTITIONDROPRECEDINGFAILASTFILTEREPLACEFIRST */
-/* FOLLOWINGFROMFULLIMITIFORDERESTRICTOTHERSOVERIGHTROLLBACKROWS */
-/* UNBOUNDEDUNIONUSINGVACUUMVIEWINDOWBYINITIALLYPRIMARY */
-static const char zKWText[647] = {
+/* PRAGMATERIALIZEDEFERREDISTINCTUPDATEVALUESVIRTUALWAYSWHENWHERE */
+/* CURSIVEABORTAFTERENAMEANDROPARTITIONAUTOINCREMENTCASTCOLUMN */
+/* COMMITCONFLICTCROSSCURRENT_TIMESTAMPRECEDINGFAILASTFILTER */
+/* EPLACEFIRSTFOLLOWINGFROMFULLIMITIFORDERESTRICTOTHERSOVER */
+/* ETURNINGRIGHTROLLBACKROWSUNBOUNDEDUNIONUSINGVACUUMVIEWINDOWBY */
+/* INITIALLYPRIMARY */
+static const char zKWText[666] = {
'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H',
'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G',
'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A',
@@ -160260,86 +162422,87 @@ static const char zKWText[647] = {
'C','R','E','A','T','E','C','U','R','R','E','N','T','_','D','A','T','E',
'I','M','M','E','D','I','A','T','E','J','O','I','N','S','E','R','T','M',
'A','T','C','H','P','L','A','N','A','L','Y','Z','E','P','R','A','G','M',
- 'A','B','O','R','T','U','P','D','A','T','E','V','A','L','U','E','S','V',
- 'I','R','T','U','A','L','W','A','Y','S','W','H','E','N','W','H','E','R',
- 'E','C','U','R','S','I','V','E','A','F','T','E','R','E','N','A','M','E',
- 'A','N','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T','A',
- 'U','T','O','I','N','C','R','E','M','E','N','T','C','A','S','T','C','O',
- 'L','U','M','N','C','O','M','M','I','T','C','O','N','F','L','I','C','T',
- 'C','R','O','S','S','C','U','R','R','E','N','T','_','T','I','M','E','S',
- 'T','A','M','P','A','R','T','I','T','I','O','N','D','R','O','P','R','E',
- 'C','E','D','I','N','G','F','A','I','L','A','S','T','F','I','L','T','E',
- 'R','E','P','L','A','C','E','F','I','R','S','T','F','O','L','L','O','W',
- 'I','N','G','F','R','O','M','F','U','L','L','I','M','I','T','I','F','O',
- 'R','D','E','R','E','S','T','R','I','C','T','O','T','H','E','R','S','O',
- 'V','E','R','I','G','H','T','R','O','L','L','B','A','C','K','R','O','W',
- 'S','U','N','B','O','U','N','D','E','D','U','N','I','O','N','U','S','I',
- 'N','G','V','A','C','U','U','M','V','I','E','W','I','N','D','O','W','B',
- 'Y','I','N','I','T','I','A','L','L','Y','P','R','I','M','A','R','Y',
+ 'A','T','E','R','I','A','L','I','Z','E','D','E','F','E','R','R','E','D',
+ 'I','S','T','I','N','C','T','U','P','D','A','T','E','V','A','L','U','E',
+ 'S','V','I','R','T','U','A','L','W','A','Y','S','W','H','E','N','W','H',
+ 'E','R','E','C','U','R','S','I','V','E','A','B','O','R','T','A','F','T',
+ 'E','R','E','N','A','M','E','A','N','D','R','O','P','A','R','T','I','T',
+ 'I','O','N','A','U','T','O','I','N','C','R','E','M','E','N','T','C','A',
+ 'S','T','C','O','L','U','M','N','C','O','M','M','I','T','C','O','N','F',
+ 'L','I','C','T','C','R','O','S','S','C','U','R','R','E','N','T','_','T',
+ 'I','M','E','S','T','A','M','P','R','E','C','E','D','I','N','G','F','A',
+ 'I','L','A','S','T','F','I','L','T','E','R','E','P','L','A','C','E','F',
+ 'I','R','S','T','F','O','L','L','O','W','I','N','G','F','R','O','M','F',
+ 'U','L','L','I','M','I','T','I','F','O','R','D','E','R','E','S','T','R',
+ 'I','C','T','O','T','H','E','R','S','O','V','E','R','E','T','U','R','N',
+ 'I','N','G','R','I','G','H','T','R','O','L','L','B','A','C','K','R','O',
+ 'W','S','U','N','B','O','U','N','D','E','D','U','N','I','O','N','U','S',
+ 'I','N','G','V','A','C','U','U','M','V','I','E','W','I','N','D','O','W',
+ 'B','Y','I','N','I','T','I','A','L','L','Y','P','R','I','M','A','R','Y',
};
/* aKWHash[i] is the hash value for the i-th keyword */
static const unsigned char aKWHash[127] = {
- 84, 102, 132, 82, 114, 29, 0, 0, 91, 0, 85, 72, 0,
- 53, 35, 86, 15, 0, 42, 94, 54, 126, 133, 19, 0, 0,
- 138, 0, 40, 128, 0, 22, 104, 0, 9, 0, 0, 122, 80,
- 0, 78, 6, 0, 65, 99, 145, 0, 134, 112, 0, 0, 48,
- 0, 100, 24, 0, 17, 0, 27, 70, 23, 26, 5, 60, 140,
- 107, 121, 0, 73, 101, 71, 143, 61, 119, 74, 0, 49, 0,
- 11, 41, 0, 110, 0, 0, 0, 106, 10, 108, 113, 124, 14,
- 50, 123, 0, 89, 0, 18, 120, 142, 56, 129, 137, 88, 83,
- 37, 30, 125, 0, 0, 105, 51, 130, 127, 0, 34, 0, 0,
- 44, 0, 95, 38, 39, 0, 20, 45, 116, 90,
+ 84, 92, 134, 82, 105, 29, 0, 0, 94, 0, 85, 72, 0,
+ 53, 35, 86, 15, 0, 42, 97, 54, 89, 135, 19, 0, 0,
+ 140, 0, 40, 129, 0, 22, 107, 0, 9, 0, 0, 123, 80,
+ 0, 78, 6, 0, 65, 103, 147, 0, 136, 115, 0, 0, 48,
+ 0, 90, 24, 0, 17, 0, 27, 70, 23, 26, 5, 60, 142,
+ 110, 122, 0, 73, 91, 71, 145, 61, 120, 74, 0, 49, 0,
+ 11, 41, 0, 113, 0, 0, 0, 109, 10, 111, 116, 125, 14,
+ 50, 124, 0, 100, 0, 18, 121, 144, 56, 130, 139, 88, 83,
+ 37, 30, 126, 0, 0, 108, 51, 131, 128, 0, 34, 0, 0,
+ 132, 0, 98, 38, 39, 0, 20, 45, 117, 93,
};
/* aKWNext[] forms the hash collision chain. If aKWHash[i]==0
** then the i-th keyword has no more hash collisions. Otherwise,
** the next keyword with the same hash is aKWHash[i]-1. */
-static const unsigned char aKWNext[145] = {
- 0, 0, 0, 0, 4, 0, 43, 0, 0, 103, 111, 0, 0,
- 0, 2, 0, 0, 141, 0, 0, 0, 13, 0, 0, 0, 0,
- 139, 0, 0, 118, 52, 0, 0, 135, 12, 0, 0, 62, 0,
- 136, 0, 131, 0, 0, 36, 0, 0, 28, 77, 0, 0, 0,
+static const unsigned char aKWNext[147] = {
+ 0, 0, 0, 0, 4, 0, 43, 0, 0, 106, 114, 0, 0,
+ 0, 2, 0, 0, 143, 0, 0, 0, 13, 0, 0, 0, 0,
+ 141, 0, 0, 119, 52, 0, 0, 137, 12, 0, 0, 62, 0,
+ 138, 0, 133, 0, 0, 36, 0, 0, 28, 77, 0, 0, 0,
0, 59, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 69, 0, 0, 0, 0, 0, 144, 3, 0, 58, 0, 1,
- 75, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 64, 66,
- 63, 0, 0, 0, 0, 46, 0, 16, 0, 115, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 81, 97, 0, 8, 0, 109,
- 21, 7, 67, 0, 79, 93, 117, 0, 0, 68, 0, 0, 96,
- 0, 55, 0, 76, 0, 92, 32, 33, 57, 25, 0, 98, 0,
- 0, 87,
+ 0, 69, 0, 0, 0, 0, 0, 146, 3, 0, 58, 0, 1,
+ 75, 0, 0, 0, 31, 0, 0, 0, 0, 0, 127, 0, 104,
+ 0, 64, 66, 63, 0, 0, 0, 0, 0, 46, 0, 16, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 101, 0,
+ 112, 21, 7, 67, 0, 79, 96, 118, 0, 0, 68, 0, 0,
+ 99, 44, 0, 55, 0, 76, 0, 95, 32, 33, 57, 25, 0,
+ 102, 0, 0, 87,
};
/* aKWLen[i] is the length (in bytes) of the i-th keyword */
-static const unsigned char aKWLen[145] = {
+static const unsigned char aKWLen[147] = {
7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6,
7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 7,
6, 9, 4, 2, 6, 5, 9, 9, 4, 7, 3, 2, 4,
4, 6, 11, 6, 2, 7, 5, 5, 9, 6, 10, 4, 6,
2, 3, 7, 5, 9, 6, 6, 4, 5, 5, 10, 6, 5,
7, 4, 5, 7, 6, 7, 7, 6, 5, 7, 3, 7, 4,
- 7, 6, 12, 9, 4, 6, 5, 4, 7, 6, 5, 6, 6,
- 7, 6, 4, 5, 9, 5, 6, 3, 8, 8, 2, 13, 2,
- 2, 4, 6, 6, 8, 5, 17, 12, 7, 9, 4, 9, 4,
- 4, 6, 7, 5, 9, 4, 4, 5, 2, 5, 8, 6, 4,
- 5, 8, 4, 3, 9, 5, 5, 6, 4, 6, 2, 2, 9,
- 3, 7,
+ 7, 6, 12, 9, 4, 6, 5, 4, 7, 6, 12, 8, 8,
+ 2, 6, 6, 7, 6, 4, 5, 9, 5, 5, 6, 3, 4,
+ 9, 13, 2, 2, 4, 6, 6, 8, 5, 17, 12, 7, 9,
+ 4, 4, 6, 7, 5, 9, 4, 4, 5, 2, 5, 8, 6,
+ 4, 9, 5, 8, 4, 3, 9, 5, 5, 6, 4, 6, 2,
+ 2, 9, 3, 7,
};
/* aKWOffset[i] is the index into zKWText[] of the start of
** the text for the i-th keyword. */
-static const unsigned short int aKWOffset[145] = {
+static const unsigned short int aKWOffset[147] = {
0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33,
36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81,
86, 90, 90, 94, 99, 101, 105, 111, 119, 123, 123, 123, 126,
129, 132, 137, 142, 146, 147, 152, 156, 160, 168, 174, 181, 184,
184, 187, 189, 195, 198, 206, 211, 216, 219, 222, 226, 236, 239,
244, 244, 248, 252, 259, 265, 271, 277, 277, 283, 284, 288, 295,
- 299, 306, 312, 324, 333, 335, 341, 346, 348, 355, 360, 365, 371,
- 377, 382, 388, 392, 395, 404, 408, 414, 416, 423, 424, 431, 433,
- 435, 444, 448, 454, 460, 468, 473, 473, 473, 489, 498, 501, 510,
- 513, 517, 522, 529, 534, 543, 547, 550, 555, 557, 561, 569, 575,
- 578, 583, 591, 591, 595, 604, 609, 614, 620, 623, 626, 629, 631,
- 636, 640,
+ 299, 306, 312, 324, 333, 335, 341, 346, 348, 355, 359, 370, 377,
+ 378, 385, 391, 397, 402, 408, 412, 415, 424, 429, 433, 439, 441,
+ 444, 453, 455, 457, 466, 470, 476, 482, 490, 495, 495, 495, 511,
+ 520, 523, 527, 532, 539, 544, 553, 557, 560, 565, 567, 571, 579,
+ 585, 588, 597, 602, 610, 610, 614, 623, 628, 633, 639, 642, 645,
+ 648, 650, 655, 659,
};
/* aKWCode[i] is the parser symbol code for the i-th keyword */
-static const unsigned char aKWCode[145] = {
+static const unsigned char aKWCode[147] = {
TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE,
TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN,
TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD,
@@ -160357,18 +162520,19 @@ static const unsigned char aKWCode[145] = {
TK_BETWEEN, TK_NOTHING, TK_GROUPS, TK_GROUP, TK_CASCADE,
TK_ASC, TK_DEFAULT, TK_CASE, TK_COLLATE, TK_CREATE,
TK_CTIME_KW, TK_IMMEDIATE, TK_JOIN, TK_INSERT, TK_MATCH,
- TK_PLAN, TK_ANALYZE, TK_PRAGMA, TK_ABORT, TK_UPDATE,
- TK_VALUES, TK_VIRTUAL, TK_ALWAYS, TK_WHEN, TK_WHERE,
- TK_RECURSIVE, TK_AFTER, TK_RENAME, TK_AND, TK_DEFERRED,
- TK_DISTINCT, TK_IS, TK_AUTOINCR, TK_TO, TK_IN,
- TK_CAST, TK_COLUMNKW, TK_COMMIT, TK_CONFLICT, TK_JOIN_KW,
- TK_CTIME_KW, TK_CTIME_KW, TK_CURRENT, TK_PARTITION, TK_DROP,
- TK_PRECEDING, TK_FAIL, TK_LAST, TK_FILTER, TK_REPLACE,
- TK_FIRST, TK_FOLLOWING, TK_FROM, TK_JOIN_KW, TK_LIMIT,
- TK_IF, TK_ORDER, TK_RESTRICT, TK_OTHERS, TK_OVER,
- TK_JOIN_KW, TK_ROLLBACK, TK_ROWS, TK_ROW, TK_UNBOUNDED,
- TK_UNION, TK_USING, TK_VACUUM, TK_VIEW, TK_WINDOW,
- TK_DO, TK_BY, TK_INITIALLY, TK_ALL, TK_PRIMARY,
+ TK_PLAN, TK_ANALYZE, TK_PRAGMA, TK_MATERIALIZED, TK_DEFERRED,
+ TK_DISTINCT, TK_IS, TK_UPDATE, TK_VALUES, TK_VIRTUAL,
+ TK_ALWAYS, TK_WHEN, TK_WHERE, TK_RECURSIVE, TK_ABORT,
+ TK_AFTER, TK_RENAME, TK_AND, TK_DROP, TK_PARTITION,
+ TK_AUTOINCR, TK_TO, TK_IN, TK_CAST, TK_COLUMNKW,
+ TK_COMMIT, TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, TK_CTIME_KW,
+ TK_CURRENT, TK_PRECEDING, TK_FAIL, TK_LAST, TK_FILTER,
+ TK_REPLACE, TK_FIRST, TK_FOLLOWING, TK_FROM, TK_JOIN_KW,
+ TK_LIMIT, TK_IF, TK_ORDER, TK_RESTRICT, TK_OTHERS,
+ TK_OVER, TK_RETURNING, TK_JOIN_KW, TK_ROLLBACK, TK_ROWS,
+ TK_ROW, TK_UNBOUNDED, TK_UNION, TK_USING, TK_VACUUM,
+ TK_VIEW, TK_WINDOW, TK_DO, TK_BY, TK_INITIALLY,
+ TK_ALL, TK_PRIMARY,
};
/* Hash table decoded:
** 0: INSERT
@@ -160392,7 +162556,7 @@ static const unsigned char aKWCode[145] = {
** 18: TRANSACTION RIGHT
** 19: WHEN
** 20: SET HAVING
-** 21: IF
+** 21: MATERIALIZED IF
** 22: ROWS
** 23: SELECT
** 24:
@@ -160488,7 +162652,7 @@ static const unsigned char aKWCode[145] = {
** 114: INTERSECT UNBOUNDED
** 115:
** 116:
-** 117: ON
+** 117: RETURNING ON
** 118:
** 119: WHERE
** 120: NO INNER
@@ -160506,7 +162670,7 @@ static int keywordCode(const char *z, int n, int *pType){
int i, j;
const char *zKW;
if( n>=2 ){
- i = ((charMap(z[0])*4) ^ (charMap(z[n-1])*3) ^ n) % 127;
+ i = ((charMap(z[0])*4) ^ (charMap(z[n-1])*3) ^ n*1) % 127;
for(i=((int)aKWHash[i])-1; i>=0; i=((int)aKWNext[i])-1){
if( aKWLen[i]!=n ) continue;
zKW = &zKWText[aKWOffset[i]];
@@ -160611,63 +162775,65 @@ static int keywordCode(const char *z, int n, int *pType){
testcase( i==85 ); /* PLAN */
testcase( i==86 ); /* ANALYZE */
testcase( i==87 ); /* PRAGMA */
- testcase( i==88 ); /* ABORT */
- testcase( i==89 ); /* UPDATE */
- testcase( i==90 ); /* VALUES */
- testcase( i==91 ); /* VIRTUAL */
- testcase( i==92 ); /* ALWAYS */
- testcase( i==93 ); /* WHEN */
- testcase( i==94 ); /* WHERE */
- testcase( i==95 ); /* RECURSIVE */
- testcase( i==96 ); /* AFTER */
- testcase( i==97 ); /* RENAME */
- testcase( i==98 ); /* AND */
- testcase( i==99 ); /* DEFERRED */
- testcase( i==100 ); /* DISTINCT */
- testcase( i==101 ); /* IS */
- testcase( i==102 ); /* AUTOINCREMENT */
- testcase( i==103 ); /* TO */
- testcase( i==104 ); /* IN */
- testcase( i==105 ); /* CAST */
- testcase( i==106 ); /* COLUMN */
- testcase( i==107 ); /* COMMIT */
- testcase( i==108 ); /* CONFLICT */
- testcase( i==109 ); /* CROSS */
- testcase( i==110 ); /* CURRENT_TIMESTAMP */
- testcase( i==111 ); /* CURRENT_TIME */
- testcase( i==112 ); /* CURRENT */
- testcase( i==113 ); /* PARTITION */
- testcase( i==114 ); /* DROP */
- testcase( i==115 ); /* PRECEDING */
- testcase( i==116 ); /* FAIL */
- testcase( i==117 ); /* LAST */
- testcase( i==118 ); /* FILTER */
- testcase( i==119 ); /* REPLACE */
- testcase( i==120 ); /* FIRST */
- testcase( i==121 ); /* FOLLOWING */
- testcase( i==122 ); /* FROM */
- testcase( i==123 ); /* FULL */
- testcase( i==124 ); /* LIMIT */
- testcase( i==125 ); /* IF */
- testcase( i==126 ); /* ORDER */
- testcase( i==127 ); /* RESTRICT */
- testcase( i==128 ); /* OTHERS */
- testcase( i==129 ); /* OVER */
- testcase( i==130 ); /* RIGHT */
- testcase( i==131 ); /* ROLLBACK */
- testcase( i==132 ); /* ROWS */
- testcase( i==133 ); /* ROW */
- testcase( i==134 ); /* UNBOUNDED */
- testcase( i==135 ); /* UNION */
- testcase( i==136 ); /* USING */
- testcase( i==137 ); /* VACUUM */
- testcase( i==138 ); /* VIEW */
- testcase( i==139 ); /* WINDOW */
- testcase( i==140 ); /* DO */
- testcase( i==141 ); /* BY */
- testcase( i==142 ); /* INITIALLY */
- testcase( i==143 ); /* ALL */
- testcase( i==144 ); /* PRIMARY */
+ testcase( i==88 ); /* MATERIALIZED */
+ testcase( i==89 ); /* DEFERRED */
+ testcase( i==90 ); /* DISTINCT */
+ testcase( i==91 ); /* IS */
+ testcase( i==92 ); /* UPDATE */
+ testcase( i==93 ); /* VALUES */
+ testcase( i==94 ); /* VIRTUAL */
+ testcase( i==95 ); /* ALWAYS */
+ testcase( i==96 ); /* WHEN */
+ testcase( i==97 ); /* WHERE */
+ testcase( i==98 ); /* RECURSIVE */
+ testcase( i==99 ); /* ABORT */
+ testcase( i==100 ); /* AFTER */
+ testcase( i==101 ); /* RENAME */
+ testcase( i==102 ); /* AND */
+ testcase( i==103 ); /* DROP */
+ testcase( i==104 ); /* PARTITION */
+ testcase( i==105 ); /* AUTOINCREMENT */
+ testcase( i==106 ); /* TO */
+ testcase( i==107 ); /* IN */
+ testcase( i==108 ); /* CAST */
+ testcase( i==109 ); /* COLUMN */
+ testcase( i==110 ); /* COMMIT */
+ testcase( i==111 ); /* CONFLICT */
+ testcase( i==112 ); /* CROSS */
+ testcase( i==113 ); /* CURRENT_TIMESTAMP */
+ testcase( i==114 ); /* CURRENT_TIME */
+ testcase( i==115 ); /* CURRENT */
+ testcase( i==116 ); /* PRECEDING */
+ testcase( i==117 ); /* FAIL */
+ testcase( i==118 ); /* LAST */
+ testcase( i==119 ); /* FILTER */
+ testcase( i==120 ); /* REPLACE */
+ testcase( i==121 ); /* FIRST */
+ testcase( i==122 ); /* FOLLOWING */
+ testcase( i==123 ); /* FROM */
+ testcase( i==124 ); /* FULL */
+ testcase( i==125 ); /* LIMIT */
+ testcase( i==126 ); /* IF */
+ testcase( i==127 ); /* ORDER */
+ testcase( i==128 ); /* RESTRICT */
+ testcase( i==129 ); /* OTHERS */
+ testcase( i==130 ); /* OVER */
+ testcase( i==131 ); /* RETURNING */
+ testcase( i==132 ); /* RIGHT */
+ testcase( i==133 ); /* ROLLBACK */
+ testcase( i==134 ); /* ROWS */
+ testcase( i==135 ); /* ROW */
+ testcase( i==136 ); /* UNBOUNDED */
+ testcase( i==137 ); /* UNION */
+ testcase( i==138 ); /* USING */
+ testcase( i==139 ); /* VACUUM */
+ testcase( i==140 ); /* VIEW */
+ testcase( i==141 ); /* WINDOW */
+ testcase( i==142 ); /* DO */
+ testcase( i==143 ); /* BY */
+ testcase( i==144 ); /* INITIALLY */
+ testcase( i==145 ); /* ALL */
+ testcase( i==146 ); /* PRIMARY */
*pType = aKWCode[i];
break;
}
@@ -160679,7 +162845,7 @@ SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char *z, int n){
keywordCode((char*)z, n, &id);
return id;
}
-#define SQLITE_N_KEYWORD 145
+#define SQLITE_N_KEYWORD 147
SQLITE_API int sqlite3_keyword_name(int i,const char **pzName,int *pnName){
if( i<0 || i>=SQLITE_N_KEYWORD ) return SQLITE_ERROR;
*pzName = zKWText + aKWOffset[i];
@@ -161048,7 +163214,7 @@ SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){
if( n==0 ) *tokenType = TK_ILLEGAL;
return i;
}
- case CC_KYWD: {
+ case CC_KYWD0: {
for(i=1; aiClass[z[i]]<=CC_KYWD; i++){}
if( IdChar(z[i]) ){
/* This token started out using characters that can appear in keywords,
@@ -161078,6 +163244,7 @@ SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){
** SQL keywords start with the letter 'x'. Fall through */
/* no break */ deliberate_fall_through
}
+ case CC_KYWD:
case CC_ID: {
i = 1;
break;
@@ -161260,19 +163427,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr
if( !IN_RENAME_OBJECT ){
sqlite3DeleteTrigger(db, pParse->pNewTrigger);
}
-
- if( pParse->pWithToFree ) sqlite3WithDelete(db, pParse->pWithToFree);
sqlite3DbFree(db, pParse->pVList);
- while( pParse->pAinc ){
- AutoincInfo *p = pParse->pAinc;
- pParse->pAinc = p->pNext;
- sqlite3DbFreeNN(db, p);
- }
- while( pParse->pZombieTab ){
- Table *p = pParse->pZombieTab;
- pParse->pZombieTab = p->pNextZombie;
- sqlite3DeleteTable(db, p);
- }
db->pParse = pParse->pParentParse;
pParse->pParentParse = 0;
assert( nErr==0 || pParse->rc!=SQLITE_OK );
@@ -164179,7 +166334,7 @@ SQLITE_API int sqlite3_wal_checkpoint_v2(
return SQLITE_OK;
#else
int rc; /* Return code */
- int iDb = SQLITE_MAX_ATTACHED; /* sqlite3.aDb[] index of db to checkpoint */
+ int iDb; /* Schema to checkpoint */
#ifdef SQLITE_ENABLE_API_ARMOR
if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
@@ -164202,6 +166357,8 @@ SQLITE_API int sqlite3_wal_checkpoint_v2(
sqlite3_mutex_enter(db->mutex);
if( zDb && zDb[0] ){
iDb = sqlite3FindDbName(db, zDb);
+ }else{
+ iDb = SQLITE_MAX_DB; /* This means process all schemas */
}
if( iDb<0 ){
rc = SQLITE_ERROR;
@@ -164250,7 +166407,7 @@ SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){
** associated with the specific b-tree being checkpointed is taken by
** this function while the checkpoint is running.
**
-** If iDb is passed SQLITE_MAX_ATTACHED, then all attached databases are
+** If iDb is passed SQLITE_MAX_DB then all attached databases are
** checkpointed. If an error is encountered it is returned immediately -
** no attempt is made to checkpoint any remaining databases.
**
@@ -164265,9 +166422,11 @@ SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog
assert( sqlite3_mutex_held(db->mutex) );
assert( !pnLog || *pnLog==-1 );
assert( !pnCkpt || *pnCkpt==-1 );
+ testcase( iDb==SQLITE_MAX_ATTACHED ); /* See forum post a006d86f72 */
+ testcase( iDb==SQLITE_MAX_DB );
for(i=0; i<db->nDb && rc==SQLITE_OK; i++){
- if( i==iDb || iDb==SQLITE_MAX_ATTACHED ){
+ if( i==iDb || iDb==SQLITE_MAX_DB ){
rc = sqlite3BtreeCheckpoint(db->aDb[i].pBt, eMode, pnLog, pnCkpt);
pnLog = 0;
pnCkpt = 0;
@@ -165885,7 +168044,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){
*/
case SQLITE_TESTCTRL_OPTIMIZATIONS: {
sqlite3 *db = va_arg(ap, sqlite3*);
- db->dbOptFlags = (u16)(va_arg(ap, int) & 0xffff);
+ db->dbOptFlags = va_arg(ap, u32);
break;
}
@@ -166060,7 +168219,26 @@ SQLITE_API int sqlite3_test_control(int op, ...){
break;
}
-
+ /* sqlite3_test_control(SQLITE_TESTCTRL_TRACEFLAGS, op, ptr)
+ **
+ ** "ptr" is a pointer to a u32.
+ **
+ ** op==0 Store the current sqlite3SelectTrace in *ptr
+ ** op==1 Set sqlite3SelectTrace to the value *ptr
+ ** op==3 Store the current sqlite3WhereTrace in *ptr
+ ** op==3 Set sqlite3WhereTrace to the value *ptr
+ */
+ case SQLITE_TESTCTRL_TRACEFLAGS: {
+ int opTrace = va_arg(ap, int);
+ u32 *ptr = va_arg(ap, u32*);
+ switch( opTrace ){
+ case 0: *ptr = sqlite3SelectTrace; break;
+ case 1: sqlite3SelectTrace = *ptr; break;
+ case 2: *ptr = sqlite3WhereTrace; break;
+ case 3: sqlite3WhereTrace = *ptr; break;
+ }
+ break;
+ }
}
va_end(ap);
#endif /* SQLITE_UNTESTABLE */
@@ -172945,9 +175123,9 @@ static int fts3EvalNearTrim(
);
if( res ){
nNew = (int)(pOut - pPhrase->doclist.pList) - 1;
- if( nNew>=0 ){
+ assert_fts3_nc( nNew<=pPhrase->doclist.nList && nNew>0 );
+ if( nNew>=0 && nNew<=pPhrase->doclist.nList ){
assert( pPhrase->doclist.pList[nNew]=='\0' );
- assert( nNew<=pPhrase->doclist.nList && nNew>0 );
memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew);
pPhrase->doclist.nList = nNew;
}
@@ -174881,6 +177059,11 @@ static int getNextNode(
if( *zInput=='(' ){
int nConsumed = 0;
pParse->nNest++;
+#if !defined(SQLITE_MAX_EXPR_DEPTH)
+ if( pParse->nNest>1000 ) return SQLITE_ERROR;
+#elif SQLITE_MAX_EXPR_DEPTH>0
+ if( pParse->nNest>SQLITE_MAX_EXPR_DEPTH ) return SQLITE_ERROR;
+#endif
rc = fts3ExprParse(pParse, zInput+1, nInput-1, ppExpr, &nConsumed);
*pnConsumed = (int)(zInput - z) + 1 + nConsumed;
return rc;
@@ -182284,17 +184467,20 @@ static int fts3IncrmergeLoad(
while( reader.aNode && rc==SQLITE_OK ) rc = nodeReaderNext(&reader);
blobGrowBuffer(&pNode->key, reader.term.n, &rc);
if( rc==SQLITE_OK ){
- memcpy(pNode->key.a, reader.term.a, reader.term.n);
+ assert_fts3_nc( reader.term.n>0 || reader.aNode==0 );
+ if( reader.term.n>0 ){
+ memcpy(pNode->key.a, reader.term.a, reader.term.n);
+ }
pNode->key.n = reader.term.n;
if( i>0 ){
char *aBlock = 0;
int nBlock = 0;
pNode = &pWriter->aNodeWriter[i-1];
pNode->iBlock = reader.iChild;
- rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock, 0);
+ rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock,0);
blobGrowBuffer(&pNode->block,
MAX(nBlock, p->nNodeSize)+FTS3_NODE_PADDING, &rc
- );
+ );
if( rc==SQLITE_OK ){
memcpy(pNode->block.a, aBlock, nBlock);
pNode->block.n = nBlock;
@@ -185782,6 +187968,7 @@ static int unicodeOpen(
pCsr->aInput = (const unsigned char *)aInput;
if( aInput==0 ){
pCsr->nInput = 0;
+ pCsr->aInput = (const unsigned char*)"";
}else if( nInput<0 ){
pCsr->nInput = (int)strlen(aInput);
}else{
@@ -201537,22 +203724,24 @@ static int rbuVfsShmLock(sqlite3_file *pFile, int ofst, int n, int flags){
#endif
assert( p->openFlags & (SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_TEMP_DB) );
- if( pRbu && (pRbu->eStage==RBU_STAGE_OAL || pRbu->eStage==RBU_STAGE_MOVE) ){
- /* Magic number 1 is the WAL_CKPT_LOCK lock. Preventing SQLite from
- ** taking this lock also prevents any checkpoints from occurring.
- ** todo: really, it's not clear why this might occur, as
- ** wal_autocheckpoint ought to be turned off. */
+ if( pRbu && (
+ pRbu->eStage==RBU_STAGE_OAL
+ || pRbu->eStage==RBU_STAGE_MOVE
+ || pRbu->eStage==RBU_STAGE_DONE
+ )){
+ /* Prevent SQLite from taking a shm-lock on the target file when it
+ ** is supplying heap memory to the upper layer in place of *-shm
+ ** segments. */
if( ofst==WAL_LOCK_CKPT && n==1 ) rc = SQLITE_BUSY;
}else{
int bCapture = 0;
if( pRbu && pRbu->eStage==RBU_STAGE_CAPTURE ){
bCapture = 1;
}
-
if( bCapture==0 || 0==(flags & SQLITE_SHM_UNLOCK) ){
rc = p->pReal->pMethods->xShmLock(p->pReal, ofst, n, flags);
if( bCapture && rc==SQLITE_OK ){
- pRbu->mLock |= (1 << ofst);
+ pRbu->mLock |= ((1<<n) - 1) << ofst;
}
}
}
@@ -203339,6 +205528,7 @@ struct sqlite3_session {
int rc; /* Non-zero if an error has occurred */
void *pFilterCtx; /* First argument to pass to xTableFilter */
int (*xTableFilter)(void *pCtx, const char *zTab);
+ i64 nMalloc; /* Number of bytes of data allocated */
sqlite3_value *pZeroBlob; /* Value containing X'' */
sqlite3_session *pNext; /* Next session object on same db. */
SessionTable *pTable; /* List of attached tables */
@@ -203381,6 +205571,7 @@ struct sqlite3_changeset_iter {
SessionBuffer tblhdr; /* Buffer to hold apValue/zTab/abPK/ */
int bPatchset; /* True if this is a patchset */
int bInvert; /* True to invert changeset */
+ int bSkipEmpty; /* Skip noop UPDATE changes */
int rc; /* Iterator error code */
sqlite3_stmt *pConflict; /* Points to conflicting row, if any */
char *zTab; /* Current table */
@@ -203722,6 +205913,26 @@ static int sessionSerializeValue(
return SQLITE_OK;
}
+/*
+** Allocate and return a pointer to a buffer nByte bytes in size. If
+** pSession is not NULL, increase the sqlite3_session.nMalloc variable
+** by the number of bytes allocated.
+*/
+static void *sessionMalloc64(sqlite3_session *pSession, i64 nByte){
+ void *pRet = sqlite3_malloc64(nByte);
+ if( pSession ) pSession->nMalloc += sqlite3_msize(pRet);
+ return pRet;
+}
+
+/*
+** Free buffer pFree, which must have been allocated by an earlier
+** call to sessionMalloc64(). If pSession is not NULL, decrease the
+** sqlite3_session.nMalloc counter by the number of bytes freed.
+*/
+static void sessionFree(sqlite3_session *pSession, void *pFree){
+ if( pSession ) pSession->nMalloc -= sqlite3_msize(pFree);
+ sqlite3_free(pFree);
+}
/*
** This macro is used to calculate hash key values for data structures. In
@@ -204189,13 +206400,19 @@ static int sessionPreupdateEqual(
** Growing the hash table in this case is a performance optimization only,
** it is not required for correct operation.
*/
-static int sessionGrowHash(int bPatchset, SessionTable *pTab){
+static int sessionGrowHash(
+ sqlite3_session *pSession, /* For memory accounting. May be NULL */
+ int bPatchset,
+ SessionTable *pTab
+){
if( pTab->nChange==0 || pTab->nEntry>=(pTab->nChange/2) ){
int i;
SessionChange **apNew;
sqlite3_int64 nNew = 2*(sqlite3_int64)(pTab->nChange ? pTab->nChange : 128);
- apNew = (SessionChange **)sqlite3_malloc64(sizeof(SessionChange *) * nNew);
+ apNew = (SessionChange**)sessionMalloc64(
+ pSession, sizeof(SessionChange*) * nNew
+ );
if( apNew==0 ){
if( pTab->nChange==0 ){
return SQLITE_ERROR;
@@ -204216,7 +206433,7 @@ static int sessionGrowHash(int bPatchset, SessionTable *pTab){
}
}
- sqlite3_free(pTab->apChange);
+ sessionFree(pSession, pTab->apChange);
pTab->nChange = nNew;
pTab->apChange = apNew;
}
@@ -204250,6 +206467,7 @@ static int sessionGrowHash(int bPatchset, SessionTable *pTab){
** be freed using sqlite3_free() by the caller
*/
static int sessionTableInfo(
+ sqlite3_session *pSession, /* For memory accounting. May be NULL */
sqlite3 *db, /* Database connection */
const char *zDb, /* Name of attached database (e.g. "main") */
const char *zThis, /* Table name */
@@ -204304,7 +206522,7 @@ static int sessionTableInfo(
if( rc==SQLITE_OK ){
nByte += nDbCol * (sizeof(const char *) + sizeof(u8) + 1);
- pAlloc = sqlite3_malloc64(nByte);
+ pAlloc = sessionMalloc64(pSession, nByte);
if( pAlloc==0 ){
rc = SQLITE_NOMEM;
}
@@ -204347,7 +206565,7 @@ static int sessionTableInfo(
*pabPK = 0;
*pnCol = 0;
if( pzTab ) *pzTab = 0;
- sqlite3_free(azCol);
+ sessionFree(pSession, azCol);
}
sqlite3_finalize(pStmt);
return rc;
@@ -204369,7 +206587,7 @@ static int sessionInitTable(sqlite3_session *pSession, SessionTable *pTab){
if( pTab->nCol==0 ){
u8 *abPK;
assert( pTab->azCol==0 || pTab->abPK==0 );
- pSession->rc = sessionTableInfo(pSession->db, pSession->zDb,
+ pSession->rc = sessionTableInfo(pSession, pSession->db, pSession->zDb,
pTab->zName, &pTab->nCol, 0, &pTab->azCol, &abPK
);
if( pSession->rc==SQLITE_OK ){
@@ -204460,7 +206678,7 @@ static void sessionPreupdateOneChange(
}
/* Grow the hash table if required */
- if( sessionGrowHash(0, pTab) ){
+ if( sessionGrowHash(pSession, 0, pTab) ){
pSession->rc = SQLITE_NOMEM;
return;
}
@@ -204527,7 +206745,7 @@ static void sessionPreupdateOneChange(
}
/* Allocate the change object */
- pChange = (SessionChange *)sqlite3_malloc64(nByte);
+ pChange = (SessionChange *)sessionMalloc64(pSession, nByte);
if( !pChange ){
rc = SQLITE_NOMEM;
goto error_out;
@@ -204900,7 +207118,7 @@ SQLITE_API int sqlite3session_diff(
int nCol; /* Columns in zFrom.zTbl */
u8 *abPK;
const char **azCol = 0;
- rc = sessionTableInfo(db, zFrom, zTbl, &nCol, 0, &azCol, &abPK);
+ rc = sessionTableInfo(0, db, zFrom, zTbl, &nCol, 0, &azCol, &abPK);
if( rc==SQLITE_OK ){
if( pTo->nCol!=nCol ){
bMismatch = 1;
@@ -204998,7 +207216,7 @@ SQLITE_API int sqlite3session_create(
** Free the list of table objects passed as the first argument. The contents
** of the changed-rows hash tables are also deleted.
*/
-static void sessionDeleteTable(SessionTable *pList){
+static void sessionDeleteTable(sqlite3_session *pSession, SessionTable *pList){
SessionTable *pNext;
SessionTable *pTab;
@@ -205010,12 +207228,12 @@ static void sessionDeleteTable(SessionTable *pList){
SessionChange *pNextChange;
for(p=pTab->apChange[i]; p; p=pNextChange){
pNextChange = p->pNext;
- sqlite3_free(p);
+ sessionFree(pSession, p);
}
}
- sqlite3_free((char*)pTab->azCol); /* cast works around VC++ bug */
- sqlite3_free(pTab->apChange);
- sqlite3_free(pTab);
+ sessionFree(pSession, (char*)pTab->azCol); /* cast works around VC++ bug */
+ sessionFree(pSession, pTab->apChange);
+ sessionFree(pSession, pTab);
}
}
@@ -205043,9 +207261,11 @@ SQLITE_API void sqlite3session_delete(sqlite3_session *pSession){
/* Delete all attached table objects. And the contents of their
** associated hash-tables. */
- sessionDeleteTable(pSession->pTable);
+ sessionDeleteTable(pSession, pSession->pTable);
- /* Free the session object itself. */
+ /* Assert that all allocations have been freed and then free the
+ ** session object itself. */
+ assert( pSession->nMalloc==0 );
sqlite3_free(pSession);
}
@@ -205092,7 +207312,8 @@ SQLITE_API int sqlite3session_attach(
if( !pTab ){
/* Allocate new SessionTable object. */
- pTab = (SessionTable *)sqlite3_malloc64(sizeof(SessionTable) + nName + 1);
+ int nByte = sizeof(SessionTable) + nName + 1;
+ pTab = (SessionTable*)sessionMalloc64(pSession, nByte);
if( !pTab ){
rc = SQLITE_NOMEM;
}else{
@@ -205689,7 +207910,7 @@ static int sessionGenerateChangeset(
int nNoop; /* Size of buffer after writing tbl header */
/* Check the table schema is still Ok. */
- rc = sessionTableInfo(db, pSession->zDb, zName, &nCol, 0, &azCol, &abPK);
+ rc = sessionTableInfo(0, db, pSession->zDb, zName, &nCol, 0,&azCol,&abPK);
if( !rc && (pTab->nCol!=nCol || memcmp(abPK, pTab->abPK, nCol)) ){
rc = SQLITE_SCHEMA;
}
@@ -205865,6 +208086,13 @@ SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession){
}
/*
+** Return the amount of heap memory in use.
+*/
+SQLITE_API sqlite3_int64 sqlite3session_memory_used(sqlite3_session *pSession){
+ return pSession->nMalloc;
+}
+
+/*
** Do the work for either sqlite3changeset_start() or start_strm().
*/
static int sessionChangesetStart(
@@ -205873,7 +208101,8 @@ static int sessionChangesetStart(
void *pIn,
int nChangeset, /* Size of buffer pChangeset in bytes */
void *pChangeset, /* Pointer to buffer containing changeset */
- int bInvert /* True to invert changeset */
+ int bInvert, /* True to invert changeset */
+ int bSkipEmpty /* True to skip empty UPDATE changes */
){
sqlite3_changeset_iter *pRet; /* Iterator to return */
int nByte; /* Number of bytes to allocate for iterator */
@@ -205894,6 +208123,7 @@ static int sessionChangesetStart(
pRet->in.pIn = pIn;
pRet->in.bEof = (xInput ? 0 : 1);
pRet->bInvert = bInvert;
+ pRet->bSkipEmpty = bSkipEmpty;
/* Populate the output variable and return success. */
*pp = pRet;
@@ -205908,7 +208138,7 @@ SQLITE_API int sqlite3changeset_start(
int nChangeset, /* Size of buffer pChangeset in bytes */
void *pChangeset /* Pointer to buffer containing changeset */
){
- return sessionChangesetStart(pp, 0, 0, nChangeset, pChangeset, 0);
+ return sessionChangesetStart(pp, 0, 0, nChangeset, pChangeset, 0, 0);
}
SQLITE_API int sqlite3changeset_start_v2(
sqlite3_changeset_iter **pp, /* OUT: Changeset iterator handle */
@@ -205917,7 +208147,7 @@ SQLITE_API int sqlite3changeset_start_v2(
int flags
){
int bInvert = !!(flags & SQLITE_CHANGESETSTART_INVERT);
- return sessionChangesetStart(pp, 0, 0, nChangeset, pChangeset, bInvert);
+ return sessionChangesetStart(pp, 0, 0, nChangeset, pChangeset, bInvert, 0);
}
/*
@@ -205928,7 +208158,7 @@ SQLITE_API int sqlite3changeset_start_strm(
int (*xInput)(void *pIn, void *pData, int *pnData),
void *pIn
){
- return sessionChangesetStart(pp, xInput, pIn, 0, 0, 0);
+ return sessionChangesetStart(pp, xInput, pIn, 0, 0, 0, 0);
}
SQLITE_API int sqlite3changeset_start_v2_strm(
sqlite3_changeset_iter **pp, /* OUT: Changeset iterator handle */
@@ -205937,7 +208167,7 @@ SQLITE_API int sqlite3changeset_start_v2_strm(
int flags
){
int bInvert = !!(flags & SQLITE_CHANGESETSTART_INVERT);
- return sessionChangesetStart(pp, xInput, pIn, 0, 0, bInvert);
+ return sessionChangesetStart(pp, xInput, pIn, 0, 0, bInvert, 0);
}
/*
@@ -206063,11 +208293,14 @@ static int sessionReadRecord(
SessionInput *pIn, /* Input data */
int nCol, /* Number of values in record */
u8 *abPK, /* Array of primary key flags, or NULL */
- sqlite3_value **apOut /* Write values to this array */
+ sqlite3_value **apOut, /* Write values to this array */
+ int *pbEmpty
){
int i; /* Used to iterate through columns */
int rc = SQLITE_OK;
+ assert( pbEmpty==0 || *pbEmpty==0 );
+ if( pbEmpty ) *pbEmpty = 1;
for(i=0; i<nCol && rc==SQLITE_OK; i++){
int eType = 0; /* Type of value (SQLITE_NULL, TEXT etc.) */
if( abPK && abPK[i]==0 ) continue;
@@ -206079,6 +208312,7 @@ static int sessionReadRecord(
eType = pIn->aData[pIn->iNext++];
assert( apOut[i]==0 );
if( eType ){
+ if( pbEmpty ) *pbEmpty = 0;
apOut[i] = sqlite3ValueNew(0);
if( !apOut[i] ) rc = SQLITE_NOMEM;
}
@@ -206258,31 +208492,27 @@ static int sessionChangesetReadTblhdr(sqlite3_changeset_iter *p){
}
/*
-** Advance the changeset iterator to the next change.
-**
-** If both paRec and pnRec are NULL, then this function works like the public
-** API sqlite3changeset_next(). If SQLITE_ROW is returned, then the
-** sqlite3changeset_new() and old() APIs may be used to query for values.
+** Advance the changeset iterator to the next change. The differences between
+** this function and sessionChangesetNext() are that
**
-** Otherwise, if paRec and pnRec are not NULL, then a pointer to the change
-** record is written to *paRec before returning and the number of bytes in
-** the record to *pnRec.
+** * If pbEmpty is not NULL and the change is a no-op UPDATE (an UPDATE
+** that modifies no columns), this function sets (*pbEmpty) to 1.
**
-** Either way, this function returns SQLITE_ROW if the iterator is
-** successfully advanced to the next change in the changeset, an SQLite
-** error code if an error occurs, or SQLITE_DONE if there are no further
-** changes in the changeset.
+** * If the iterator is configured to skip no-op UPDATEs,
+** sessionChangesetNext() does that. This function does not.
*/
-static int sessionChangesetNext(
+static int sessionChangesetNextOne(
sqlite3_changeset_iter *p, /* Changeset iterator */
u8 **paRec, /* If non-NULL, store record pointer here */
int *pnRec, /* If non-NULL, store size of record here */
- int *pbNew /* If non-NULL, true if new table */
+ int *pbNew, /* If non-NULL, true if new table */
+ int *pbEmpty
){
int i;
u8 op;
assert( (paRec==0 && pnRec==0) || (paRec && pnRec) );
+ assert( pbEmpty==0 || *pbEmpty==0 );
/* If the iterator is in the error-state, return immediately. */
if( p->rc!=SQLITE_OK ) return p->rc;
@@ -206355,13 +208585,13 @@ static int sessionChangesetNext(
/* If this is an UPDATE or DELETE, read the old.* record. */
if( p->op!=SQLITE_INSERT && (p->bPatchset==0 || p->op==SQLITE_DELETE) ){
u8 *abPK = p->bPatchset ? p->abPK : 0;
- p->rc = sessionReadRecord(&p->in, p->nCol, abPK, apOld);
+ p->rc = sessionReadRecord(&p->in, p->nCol, abPK, apOld, 0);
if( p->rc!=SQLITE_OK ) return p->rc;
}
/* If this is an INSERT or UPDATE, read the new.* record. */
if( p->op!=SQLITE_DELETE ){
- p->rc = sessionReadRecord(&p->in, p->nCol, 0, apNew);
+ p->rc = sessionReadRecord(&p->in, p->nCol, 0, apNew, pbEmpty);
if( p->rc!=SQLITE_OK ) return p->rc;
}
@@ -206389,6 +208619,37 @@ static int sessionChangesetNext(
}
/*
+** Advance the changeset iterator to the next change.
+**
+** If both paRec and pnRec are NULL, then this function works like the public
+** API sqlite3changeset_next(). If SQLITE_ROW is returned, then the
+** sqlite3changeset_new() and old() APIs may be used to query for values.
+**
+** Otherwise, if paRec and pnRec are not NULL, then a pointer to the change
+** record is written to *paRec before returning and the number of bytes in
+** the record to *pnRec.
+**
+** Either way, this function returns SQLITE_ROW if the iterator is
+** successfully advanced to the next change in the changeset, an SQLite
+** error code if an error occurs, or SQLITE_DONE if there are no further
+** changes in the changeset.
+*/
+static int sessionChangesetNext(
+ sqlite3_changeset_iter *p, /* Changeset iterator */
+ u8 **paRec, /* If non-NULL, store record pointer here */
+ int *pnRec, /* If non-NULL, store size of record here */
+ int *pbNew /* If non-NULL, true if new table */
+){
+ int bEmpty;
+ int rc;
+ do {
+ bEmpty = 0;
+ rc = sessionChangesetNextOne(p, paRec, pnRec, pbNew, &bEmpty);
+ }while( rc==SQLITE_ROW && p->bSkipEmpty && bEmpty);
+ return rc;
+}
+
+/*
** Advance an iterator created by sqlite3changeset_start() to the next
** change in the changeset. This function may return SQLITE_ROW, SQLITE_DONE
** or SQLITE_CORRUPT.
@@ -206660,9 +208921,9 @@ static int sessionChangesetInvert(
/* Read the old.* and new.* records for the update change. */
pInput->iNext += 2;
- rc = sessionReadRecord(pInput, nCol, 0, &apVal[0]);
+ rc = sessionReadRecord(pInput, nCol, 0, &apVal[0], 0);
if( rc==SQLITE_OK ){
- rc = sessionReadRecord(pInput, nCol, 0, &apVal[nCol]);
+ rc = sessionReadRecord(pInput, nCol, 0, &apVal[nCol], 0);
}
/* Write the new old.* record. Consists of the PK columns from the
@@ -206763,16 +209024,25 @@ SQLITE_API int sqlite3changeset_invert_strm(
return rc;
}
+
+typedef struct SessionUpdate SessionUpdate;
+struct SessionUpdate {
+ sqlite3_stmt *pStmt;
+ u32 *aMask;
+ SessionUpdate *pNext;
+};
+
typedef struct SessionApplyCtx SessionApplyCtx;
struct SessionApplyCtx {
sqlite3 *db;
sqlite3_stmt *pDelete; /* DELETE statement */
- sqlite3_stmt *pUpdate; /* UPDATE statement */
sqlite3_stmt *pInsert; /* INSERT statement */
sqlite3_stmt *pSelect; /* SELECT statement */
int nCol; /* Size of azCol[] and abPK[] arrays */
const char **azCol; /* Array of column names */
u8 *abPK; /* Boolean array - true if column is in PK */
+ u32 *aUpdateMask; /* Used by sessionUpdateFind */
+ SessionUpdate *pUp;
int bStat1; /* True if table is sqlite_stat1 */
int bDeferConstraints; /* True to defer constraints */
int bInvertConstraints; /* Invert when iterating constraints buffer */
@@ -206782,6 +209052,167 @@ struct SessionApplyCtx {
u8 bRebase; /* True to collect rebase information */
};
+/* Number of prepared UPDATE statements to cache. */
+#define SESSION_UPDATE_CACHE_SZ 12
+
+/*
+** Find a prepared UPDATE statement suitable for the UPDATE step currently
+** being visited by the iterator. The UPDATE is of the form:
+**
+** UPDATE tbl SET col = ?, col2 = ? WHERE pk1 IS ? AND pk2 IS ?
+*/
+static int sessionUpdateFind(
+ sqlite3_changeset_iter *pIter,
+ SessionApplyCtx *p,
+ int bPatchset,
+ sqlite3_stmt **ppStmt
+){
+ int rc = SQLITE_OK;
+ SessionUpdate *pUp = 0;
+ int nCol = pIter->nCol;
+ int nU32 = (pIter->nCol+33)/32;
+ int ii;
+
+ if( p->aUpdateMask==0 ){
+ p->aUpdateMask = sqlite3_malloc(nU32*sizeof(u32));
+ if( p->aUpdateMask==0 ){
+ rc = SQLITE_NOMEM;
+ }
+ }
+
+ if( rc==SQLITE_OK ){
+ memset(p->aUpdateMask, 0, nU32*sizeof(u32));
+ rc = SQLITE_CORRUPT;
+ for(ii=0; ii<pIter->nCol; ii++){
+ if( sessionChangesetNew(pIter, ii) ){
+ p->aUpdateMask[ii/32] |= (1<<(ii%32));
+ rc = SQLITE_OK;
+ }
+ }
+ }
+
+ if( rc==SQLITE_OK ){
+ if( bPatchset ) p->aUpdateMask[nCol/32] |= (1<<(nCol%32));
+
+ if( p->pUp ){
+ int nUp = 0;
+ SessionUpdate **pp = &p->pUp;
+ while( 1 ){
+ nUp++;
+ if( 0==memcmp(p->aUpdateMask, (*pp)->aMask, nU32*sizeof(u32)) ){
+ pUp = *pp;
+ *pp = pUp->pNext;
+ pUp->pNext = p->pUp;
+ p->pUp = pUp;
+ break;
+ }
+
+ if( (*pp)->pNext ){
+ pp = &(*pp)->pNext;
+ }else{
+ if( nUp>=SESSION_UPDATE_CACHE_SZ ){
+ sqlite3_finalize((*pp)->pStmt);
+ sqlite3_free(*pp);
+ *pp = 0;
+ }
+ break;
+ }
+ }
+ }
+
+ if( pUp==0 ){
+ int nByte = sizeof(SessionUpdate) * nU32*sizeof(u32);
+ int bStat1 = (sqlite3_stricmp(pIter->zTab, "sqlite_stat1")==0);
+ pUp = (SessionUpdate*)sqlite3_malloc(nByte);
+ if( pUp==0 ){
+ rc = SQLITE_NOMEM;
+ }else{
+ const char *zSep = "";
+ SessionBuffer buf;
+
+ memset(&buf, 0, sizeof(buf));
+ pUp->aMask = (u32*)&pUp[1];
+ memcpy(pUp->aMask, p->aUpdateMask, nU32*sizeof(u32));
+
+ sessionAppendStr(&buf, "UPDATE main.", &rc);
+ sessionAppendIdent(&buf, pIter->zTab, &rc);
+ sessionAppendStr(&buf, " SET ", &rc);
+
+ /* Create the assignments part of the UPDATE */
+ for(ii=0; ii<pIter->nCol; ii++){
+ if( p->abPK[ii]==0 && sessionChangesetNew(pIter, ii) ){
+ sessionAppendStr(&buf, zSep, &rc);
+ sessionAppendIdent(&buf, p->azCol[ii], &rc);
+ sessionAppendStr(&buf, " = ?", &rc);
+ sessionAppendInteger(&buf, ii*2+1, &rc);
+ zSep = ", ";
+ }
+ }
+
+ /* Create the WHERE clause part of the UPDATE */
+ zSep = "";
+ sessionAppendStr(&buf, " WHERE ", &rc);
+ for(ii=0; ii<pIter->nCol; ii++){
+ if( p->abPK[ii] || (bPatchset==0 && sessionChangesetOld(pIter, ii)) ){
+ sessionAppendStr(&buf, zSep, &rc);
+ if( bStat1 && ii==1 ){
+ assert( sqlite3_stricmp(p->azCol[ii], "idx")==0 );
+ sessionAppendStr(&buf,
+ "idx IS CASE "
+ "WHEN length(?4)=0 AND typeof(?4)='blob' THEN NULL "
+ "ELSE ?4 END ", &rc
+ );
+ }else{
+ sessionAppendIdent(&buf, p->azCol[ii], &rc);
+ sessionAppendStr(&buf, " IS ?", &rc);
+ sessionAppendInteger(&buf, ii*2+2, &rc);
+ }
+ zSep = " AND ";
+ }
+ }
+
+ if( rc==SQLITE_OK ){
+ char *zSql = (char*)buf.aBuf;
+ rc = sqlite3_prepare_v2(p->db, zSql, buf.nBuf, &pUp->pStmt, 0);
+ }
+
+ if( rc!=SQLITE_OK ){
+ sqlite3_free(pUp);
+ pUp = 0;
+ }else{
+ pUp->pNext = p->pUp;
+ p->pUp = pUp;
+ }
+ sqlite3_free(buf.aBuf);
+ }
+ }
+ }
+
+ assert( (rc==SQLITE_OK)==(pUp!=0) );
+ if( pUp ){
+ *ppStmt = pUp->pStmt;
+ }else{
+ *ppStmt = 0;
+ }
+ return rc;
+}
+
+/*
+** Free all cached UPDATE statements.
+*/
+static void sessionUpdateFree(SessionApplyCtx *p){
+ SessionUpdate *pUp;
+ SessionUpdate *pNext;
+ for(pUp=p->pUp; pUp; pUp=pNext){
+ pNext = pUp->pNext;
+ sqlite3_finalize(pUp->pStmt);
+ sqlite3_free(pUp);
+ }
+ p->pUp = 0;
+ sqlite3_free(p->aUpdateMask);
+ p->aUpdateMask = 0;
+}
+
/*
** Formulate a statement to DELETE a row from database db. Assuming a table
** structure like this:
@@ -206852,103 +209283,6 @@ static int sessionDeleteRow(
}
/*
-** Formulate and prepare a statement to UPDATE a row from database db.
-** Assuming a table structure like this:
-**
-** CREATE TABLE x(a, b, c, d, PRIMARY KEY(a, c));
-**
-** The UPDATE statement looks like this:
-**
-** UPDATE x SET
-** a = CASE WHEN ?2 THEN ?3 ELSE a END,
-** b = CASE WHEN ?5 THEN ?6 ELSE b END,
-** c = CASE WHEN ?8 THEN ?9 ELSE c END,
-** d = CASE WHEN ?11 THEN ?12 ELSE d END
-** WHERE a = ?1 AND c = ?7 AND (?13 OR
-** (?5==0 OR b IS ?4) AND (?11==0 OR d IS ?10) AND
-** )
-**
-** For each column in the table, there are three variables to bind:
-**
-** ?(i*3+1) The old.* value of the column, if any.
-** ?(i*3+2) A boolean flag indicating that the value is being modified.
-** ?(i*3+3) The new.* value of the column, if any.
-**
-** Also, a boolean flag that, if set to true, causes the statement to update
-** a row even if the non-PK values do not match. This is required if the
-** conflict-handler is invoked with CHANGESET_DATA and returns
-** CHANGESET_REPLACE. This is variable "?(nCol*3+1)".
-**
-** If successful, SQLITE_OK is returned and SessionApplyCtx.pUpdate is left
-** pointing to the prepared version of the SQL statement.
-*/
-static int sessionUpdateRow(
- sqlite3 *db, /* Database handle */
- const char *zTab, /* Table name */
- SessionApplyCtx *p /* Session changeset-apply context */
-){
- int rc = SQLITE_OK;
- int i;
- const char *zSep = "";
- SessionBuffer buf = {0, 0, 0};
-
- /* Append "UPDATE tbl SET " */
- sessionAppendStr(&buf, "UPDATE main.", &rc);
- sessionAppendIdent(&buf, zTab, &rc);
- sessionAppendStr(&buf, " SET ", &rc);
-
- /* Append the assignments */
- for(i=0; i<p->nCol; i++){
- sessionAppendStr(&buf, zSep, &rc);
- sessionAppendIdent(&buf, p->azCol[i], &rc);
- sessionAppendStr(&buf, " = CASE WHEN ?", &rc);
- sessionAppendInteger(&buf, i*3+2, &rc);
- sessionAppendStr(&buf, " THEN ?", &rc);
- sessionAppendInteger(&buf, i*3+3, &rc);
- sessionAppendStr(&buf, " ELSE ", &rc);
- sessionAppendIdent(&buf, p->azCol[i], &rc);
- sessionAppendStr(&buf, " END", &rc);
- zSep = ", ";
- }
-
- /* Append the PK part of the WHERE clause */
- sessionAppendStr(&buf, " WHERE ", &rc);
- for(i=0; i<p->nCol; i++){
- if( p->abPK[i] ){
- sessionAppendIdent(&buf, p->azCol[i], &rc);
- sessionAppendStr(&buf, " = ?", &rc);
- sessionAppendInteger(&buf, i*3+1, &rc);
- sessionAppendStr(&buf, " AND ", &rc);
- }
- }
-
- /* Append the non-PK part of the WHERE clause */
- sessionAppendStr(&buf, " (?", &rc);
- sessionAppendInteger(&buf, p->nCol*3+1, &rc);
- sessionAppendStr(&buf, " OR 1", &rc);
- for(i=0; i<p->nCol; i++){
- if( !p->abPK[i] ){
- sessionAppendStr(&buf, " AND (?", &rc);
- sessionAppendInteger(&buf, i*3+2, &rc);
- sessionAppendStr(&buf, "=0 OR ", &rc);
- sessionAppendIdent(&buf, p->azCol[i], &rc);
- sessionAppendStr(&buf, " IS ?", &rc);
- sessionAppendInteger(&buf, i*3+1, &rc);
- sessionAppendStr(&buf, ")", &rc);
- }
- }
- sessionAppendStr(&buf, ")", &rc);
-
- if( rc==SQLITE_OK ){
- rc = sqlite3_prepare_v2(db, (char *)buf.aBuf, buf.nBuf, &p->pUpdate, 0);
- }
- sqlite3_free(buf.aBuf);
-
- return rc;
-}
-
-
-/*
** Formulate and prepare an SQL statement to query table zTab by primary
** key. Assuming the following table structure:
**
@@ -207029,17 +209363,6 @@ static int sessionStat1Sql(sqlite3 *db, SessionApplyCtx *p){
);
}
if( rc==SQLITE_OK ){
- rc = sessionPrepare(db, &p->pUpdate,
- "UPDATE main.sqlite_stat1 SET "
- "tbl = CASE WHEN ?2 THEN ?3 ELSE tbl END, "
- "idx = CASE WHEN ?5 THEN ?6 ELSE idx END, "
- "stat = CASE WHEN ?8 THEN ?9 ELSE stat END "
- "WHERE tbl=?1 AND idx IS "
- "CASE WHEN length(?4)=0 AND typeof(?4)='blob' THEN NULL ELSE ?4 END "
- "AND (?10 OR ?8=0 OR stat IS ?7)"
- );
- }
- if( rc==SQLITE_OK ){
rc = sessionPrepare(db, &p->pDelete,
"DELETE FROM main.sqlite_stat1 WHERE tbl=?1 AND idx IS "
"CASE WHEN length(?2)=0 AND typeof(?2)='blob' THEN NULL ELSE ?2 END "
@@ -207355,7 +209678,7 @@ static int sessionApplyOneOp(
int nCol;
int rc = SQLITE_OK;
- assert( p->pDelete && p->pUpdate && p->pInsert && p->pSelect );
+ assert( p->pDelete && p->pInsert && p->pSelect );
assert( p->azCol && p->abPK );
assert( !pbReplace || *pbReplace==0 );
@@ -207395,29 +209718,28 @@ static int sessionApplyOneOp(
}else if( op==SQLITE_UPDATE ){
int i;
+ sqlite3_stmt *pUp = 0;
+ int bPatchset = (pbRetry==0 || pIter->bPatchset);
+
+ rc = sessionUpdateFind(pIter, p, bPatchset, &pUp);
/* Bind values to the UPDATE statement. */
for(i=0; rc==SQLITE_OK && i<nCol; i++){
sqlite3_value *pOld = sessionChangesetOld(pIter, i);
sqlite3_value *pNew = sessionChangesetNew(pIter, i);
-
- sqlite3_bind_int(p->pUpdate, i*3+2, !!pNew);
- if( pOld ){
- rc = sessionBindValue(p->pUpdate, i*3+1, pOld);
+ if( p->abPK[i] || (bPatchset==0 && pOld) ){
+ rc = sessionBindValue(pUp, i*2+2, pOld);
}
if( rc==SQLITE_OK && pNew ){
- rc = sessionBindValue(p->pUpdate, i*3+3, pNew);
+ rc = sessionBindValue(pUp, i*2+1, pNew);
}
}
- if( rc==SQLITE_OK ){
- sqlite3_bind_int(p->pUpdate, nCol*3+1, pbRetry==0 || pIter->bPatchset);
- }
if( rc!=SQLITE_OK ) return rc;
/* Attempt the UPDATE. In the case of a NOTFOUND or DATA conflict,
** the result will be SQLITE_OK with 0 rows modified. */
- sqlite3_step(p->pUpdate);
- rc = sqlite3_reset(p->pUpdate);
+ sqlite3_step(pUp);
+ rc = sqlite3_reset(pUp);
if( rc==SQLITE_OK && sqlite3_changes(p->db)==0 ){
/* A NOTFOUND or DATA error. Search the table to see if it contains
@@ -207549,7 +209871,7 @@ static int sessionRetryConstraints(
memset(&pApply->constraints, 0, sizeof(SessionBuffer));
rc = sessionChangesetStart(
- &pIter2, 0, 0, cons.nBuf, cons.aBuf, pApply->bInvertConstraints
+ &pIter2, 0, 0, cons.nBuf, cons.aBuf, pApply->bInvertConstraints, 1
);
if( rc==SQLITE_OK ){
size_t nByte = 2*pApply->nCol*sizeof(sqlite3_value*);
@@ -207640,14 +209962,13 @@ static int sessionChangesetApply(
);
if( rc!=SQLITE_OK ) break;
+ sessionUpdateFree(&sApply);
sqlite3_free((char*)sApply.azCol); /* cast works around VC++ bug */
sqlite3_finalize(sApply.pDelete);
- sqlite3_finalize(sApply.pUpdate);
sqlite3_finalize(sApply.pInsert);
sqlite3_finalize(sApply.pSelect);
sApply.db = db;
sApply.pDelete = 0;
- sApply.pUpdate = 0;
sApply.pInsert = 0;
sApply.pSelect = 0;
sApply.nCol = 0;
@@ -207675,7 +209996,7 @@ static int sessionChangesetApply(
int i;
sqlite3changeset_pk(pIter, &abPK, 0);
- rc = sessionTableInfo(
+ rc = sessionTableInfo(0,
db, "main", zNew, &sApply.nCol, &zTab, &sApply.azCol, &sApply.abPK
);
if( rc!=SQLITE_OK ) break;
@@ -207711,11 +210032,10 @@ static int sessionChangesetApply(
}
sApply.bStat1 = 1;
}else{
- if((rc = sessionSelectRow(db, zTab, &sApply))
- || (rc = sessionUpdateRow(db, zTab, &sApply))
- || (rc = sessionDeleteRow(db, zTab, &sApply))
- || (rc = sessionInsertRow(db, zTab, &sApply))
- ){
+ if( (rc = sessionSelectRow(db, zTab, &sApply))
+ || (rc = sessionDeleteRow(db, zTab, &sApply))
+ || (rc = sessionInsertRow(db, zTab, &sApply))
+ ){
break;
}
sApply.bStat1 = 0;
@@ -207774,9 +210094,9 @@ static int sessionChangesetApply(
*pnRebase = sApply.rebase.nBuf;
sApply.rebase.aBuf = 0;
}
+ sessionUpdateFree(&sApply);
sqlite3_finalize(sApply.pInsert);
sqlite3_finalize(sApply.pDelete);
- sqlite3_finalize(sApply.pUpdate);
sqlite3_finalize(sApply.pSelect);
sqlite3_free((char*)sApply.azCol); /* cast works around VC++ bug */
sqlite3_free((char*)sApply.constraints.aBuf);
@@ -207807,8 +210127,8 @@ SQLITE_API int sqlite3changeset_apply_v2(
int flags
){
sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */
- int bInverse = !!(flags & SQLITE_CHANGESETAPPLY_INVERT);
- int rc = sessionChangesetStart(&pIter, 0, 0, nChangeset, pChangeset,bInverse);
+ int bInv = !!(flags & SQLITE_CHANGESETAPPLY_INVERT);
+ int rc = sessionChangesetStart(&pIter, 0, 0, nChangeset, pChangeset, bInv, 1);
if( rc==SQLITE_OK ){
rc = sessionChangesetApply(
db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags
@@ -207866,7 +210186,7 @@ SQLITE_API int sqlite3changeset_apply_v2_strm(
){
sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */
int bInverse = !!(flags & SQLITE_CHANGESETAPPLY_INVERT);
- int rc = sessionChangesetStart(&pIter, xInput, pIn, 0, 0, bInverse);
+ int rc = sessionChangesetStart(&pIter, xInput, pIn, 0, 0, bInverse, 1);
if( rc==SQLITE_OK ){
rc = sessionChangesetApply(
db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags
@@ -208154,7 +210474,7 @@ static int sessionChangesetToHash(
}
}
- if( sessionGrowHash(pIter->bPatchset, pTab) ){
+ if( sessionGrowHash(0, pIter->bPatchset, pTab) ){
rc = SQLITE_NOMEM;
break;
}
@@ -208340,7 +210660,7 @@ SQLITE_API int sqlite3changegroup_output_strm(
*/
SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup *pGrp){
if( pGrp ){
- sessionDeleteTable(pGrp->pList);
+ sessionDeleteTable(0, pGrp->pList);
sqlite3_free(pGrp);
}
}
@@ -208486,7 +210806,7 @@ static void sessionAppendPartialUpdate(
int n1 = sessionSerialLen(a1);
int n2 = sessionSerialLen(a2);
if( pIter->abPK[i] || a2[0]==0 ){
- if( !pIter->abPK[i] ) bData = 1;
+ if( !pIter->abPK[i] && a1[0] ) bData = 1;
memcpy(pOut, a1, n1);
pOut += n1;
}else if( a2[0]!=0xFF ){
@@ -208741,7 +211061,7 @@ SQLITE_API int sqlite3rebaser_rebase_strm(
*/
SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p){
if( p ){
- sessionDeleteTable(p->grp.pList);
+ sessionDeleteTable(0, p->grp.pList);
sqlite3_free(p);
}
}
@@ -211203,55 +213523,6 @@ static fts5YYACTIONTYPE fts5yy_reduce(
(void)fts5yyLookahead;
(void)fts5yyLookaheadToken;
fts5yymsp = fts5yypParser->fts5yytos;
- assert( fts5yyruleno<(int)(sizeof(fts5yyRuleName)/sizeof(fts5yyRuleName[0])) );
-#ifndef NDEBUG
- if( fts5yyTraceFILE ){
- fts5yysize = fts5yyRuleInfoNRhs[fts5yyruleno];
- if( fts5yysize ){
- fprintf(fts5yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
- fts5yyTracePrompt,
- fts5yyruleno, fts5yyRuleName[fts5yyruleno],
- fts5yyruleno<fts5YYNRULE_WITH_ACTION ? "" : " without external action",
- fts5yymsp[fts5yysize].stateno);
- }else{
- fprintf(fts5yyTraceFILE, "%sReduce %d [%s]%s.\n",
- fts5yyTracePrompt, fts5yyruleno, fts5yyRuleName[fts5yyruleno],
- fts5yyruleno<fts5YYNRULE_WITH_ACTION ? "" : " without external action");
- }
- }
-#endif /* NDEBUG */
-
- /* Check that the stack is large enough to grow by a single entry
- ** if the RHS of the rule is empty. This ensures that there is room
- ** enough on the stack to push the LHS value */
- if( fts5yyRuleInfoNRhs[fts5yyruleno]==0 ){
-#ifdef fts5YYTRACKMAXSTACKDEPTH
- if( (int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack)>fts5yypParser->fts5yyhwm ){
- fts5yypParser->fts5yyhwm++;
- assert( fts5yypParser->fts5yyhwm == (int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack));
- }
-#endif
-#if fts5YYSTACKDEPTH>0
- if( fts5yypParser->fts5yytos>=fts5yypParser->fts5yystackEnd ){
- fts5yyStackOverflow(fts5yypParser);
- /* The call to fts5yyStackOverflow() above pops the stack until it is
- ** empty, causing the main parser loop to exit. So the return value
- ** is never used and does not matter. */
- return 0;
- }
-#else
- if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5yypParser->fts5yystksz-1] ){
- if( fts5yyGrowStack(fts5yypParser) ){
- fts5yyStackOverflow(fts5yypParser);
- /* The call to fts5yyStackOverflow() above pops the stack until it is
- ** empty, causing the main parser loop to exit. So the return value
- ** is never used and does not matter. */
- return 0;
- }
- fts5yymsp = fts5yypParser->fts5yytos;
- }
-#endif
- }
switch( fts5yyruleno ){
/* Beginning here are the reduction cases. A typical example
@@ -211554,12 +213825,56 @@ static void sqlite3Fts5Parser(
}
#endif
- do{
+ while(1){ /* Exit by "break" */
+ assert( fts5yypParser->fts5yytos>=fts5yypParser->fts5yystack );
assert( fts5yyact==fts5yypParser->fts5yytos->stateno );
fts5yyact = fts5yy_find_shift_action((fts5YYCODETYPE)fts5yymajor,fts5yyact);
if( fts5yyact >= fts5YY_MIN_REDUCE ){
- fts5yyact = fts5yy_reduce(fts5yypParser,fts5yyact-fts5YY_MIN_REDUCE,fts5yymajor,
- fts5yyminor sqlite3Fts5ParserCTX_PARAM);
+ unsigned int fts5yyruleno = fts5yyact - fts5YY_MIN_REDUCE; /* Reduce by this rule */
+ assert( fts5yyruleno<(int)(sizeof(fts5yyRuleName)/sizeof(fts5yyRuleName[0])) );
+#ifndef NDEBUG
+ if( fts5yyTraceFILE ){
+ int fts5yysize = fts5yyRuleInfoNRhs[fts5yyruleno];
+ if( fts5yysize ){
+ fprintf(fts5yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
+ fts5yyTracePrompt,
+ fts5yyruleno, fts5yyRuleName[fts5yyruleno],
+ fts5yyruleno<fts5YYNRULE_WITH_ACTION ? "" : " without external action",
+ fts5yypParser->fts5yytos[fts5yysize].stateno);
+ }else{
+ fprintf(fts5yyTraceFILE, "%sReduce %d [%s]%s.\n",
+ fts5yyTracePrompt, fts5yyruleno, fts5yyRuleName[fts5yyruleno],
+ fts5yyruleno<fts5YYNRULE_WITH_ACTION ? "" : " without external action");
+ }
+ }
+#endif /* NDEBUG */
+
+ /* Check that the stack is large enough to grow by a single entry
+ ** if the RHS of the rule is empty. This ensures that there is room
+ ** enough on the stack to push the LHS value */
+ if( fts5yyRuleInfoNRhs[fts5yyruleno]==0 ){
+#ifdef fts5YYTRACKMAXSTACKDEPTH
+ if( (int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack)>fts5yypParser->fts5yyhwm ){
+ fts5yypParser->fts5yyhwm++;
+ assert( fts5yypParser->fts5yyhwm ==
+ (int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack));
+ }
+#endif
+#if fts5YYSTACKDEPTH>0
+ if( fts5yypParser->fts5yytos>=fts5yypParser->fts5yystackEnd ){
+ fts5yyStackOverflow(fts5yypParser);
+ break;
+ }
+#else
+ if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5yypParser->fts5yystksz-1] ){
+ if( fts5yyGrowStack(fts5yypParser) ){
+ fts5yyStackOverflow(fts5yypParser);
+ break;
+ }
+ }
+#endif
+ }
+ fts5yyact = fts5yy_reduce(fts5yypParser,fts5yyruleno,fts5yymajor,fts5yyminor sqlite3Fts5ParserCTX_PARAM);
}else if( fts5yyact <= fts5YY_MAX_SHIFTREDUCE ){
fts5yy_shift(fts5yypParser,fts5yyact,(fts5YYCODETYPE)fts5yymajor,fts5yyminor);
#ifndef fts5YYNOERRORRECOVERY
@@ -211672,7 +213987,7 @@ static void sqlite3Fts5Parser(
break;
#endif
}
- }while( fts5yypParser->fts5yytos>fts5yypParser->fts5yystack );
+ }
#ifndef NDEBUG
if( fts5yyTraceFILE ){
fts5yyStackEntry *i;
@@ -215284,8 +217599,8 @@ static int sqlite3Fts5ExprFirst(Fts5Expr *p, Fts5Index *pIdx, i64 iFirst, int bD
}
/* If the iterator is not at a real match, skip forward until it is. */
- while( pRoot->bNomatch ){
- assert( pRoot->bEof==0 && rc==SQLITE_OK );
+ while( pRoot->bNomatch && rc==SQLITE_OK ){
+ assert( pRoot->bEof==0 );
rc = fts5ExprNodeNext(p, pRoot, 0, 0);
}
return rc;
@@ -219470,14 +221785,10 @@ static void fts5SegIterNext(
}else{
/* The following could be done by calling fts5SegIterLoadNPos(). But
** this block is particularly performance critical, so equivalent
- ** code is inlined.
- **
- ** Later: Switched back to fts5SegIterLoadNPos() because it supports
- ** detail=none mode. Not ideal.
- */
+ ** code is inlined. */
int nSz;
assert( p->rc==SQLITE_OK );
- assert( pIter->iLeafOffset<=pIter->pLeaf->nn );
+ assert_nc( pIter->iLeafOffset<=pIter->pLeaf->nn );
fts5FastGetVarint32(pIter->pLeaf->p, pIter->iLeafOffset, nSz);
pIter->bDel = (nSz & 0x0001);
pIter->nPos = nSz>>1;
@@ -220469,7 +222780,7 @@ static void fts5ChunkIterate(
int pgno = pSeg->iLeafPgno;
int pgnoSave = 0;
- /* This function does notmwork with detail=none databases. */
+ /* This function does not work with detail=none databases. */
assert( p->pConfig->eDetail!=FTS5_DETAIL_NONE );
if( (pSeg->flags & FTS5_SEGITER_REVERSE)==0 ){
@@ -220482,6 +222793,9 @@ static void fts5ChunkIterate(
fts5DataRelease(pData);
if( nRem<=0 ){
break;
+ }else if( pSeg->pSeg==0 ){
+ p->rc = FTS5_CORRUPT;
+ return;
}else{
pgno++;
pData = fts5LeafRead(p, FTS5_SEGMENT_ROWID(pSeg->pSeg->iSegid, pgno));
@@ -220533,66 +222847,72 @@ static void fts5SegiterPoslist(
}
/*
-** IN/OUT parameter (*pa) points to a position list n bytes in size. If
-** the position list contains entries for column iCol, then (*pa) is set
-** to point to the sub-position-list for that column and the number of
-** bytes in it returned. Or, if the argument position list does not
-** contain any entries for column iCol, return 0.
+** Parameter pPos points to a buffer containing a position list, size nPos.
+** This function filters it according to pColset (which must be non-NULL)
+** and sets pIter->base.pData/nData to point to the new position list.
+** If memory is required for the new position list, use buffer pIter->poslist.
+** Or, if the new position list is a contiguous subset of the input, set
+** pIter->base.pData/nData to point directly to it.
+**
+** This function is a no-op if *pRc is other than SQLITE_OK when it is
+** called. If an OOM error is encountered, *pRc is set to SQLITE_NOMEM
+** before returning.
*/
-static int fts5IndexExtractCol(
- const u8 **pa, /* IN/OUT: Pointer to poslist */
- int n, /* IN: Size of poslist in bytes */
- int iCol /* Column to extract from poslist */
-){
- int iCurrent = 0; /* Anything before the first 0x01 is col 0 */
- const u8 *p = *pa;
- const u8 *pEnd = &p[n]; /* One byte past end of position list */
-
- while( iCol>iCurrent ){
- /* Advance pointer p until it points to pEnd or an 0x01 byte that is
- ** not part of a varint. Note that it is not possible for a negative
- ** or extremely large varint to occur within an uncorrupted position
- ** list. So the last byte of each varint may be assumed to have a clear
- ** 0x80 bit. */
- while( *p!=0x01 ){
- while( *p++ & 0x80 );
- if( p>=pEnd ) return 0;
- }
- *pa = p++;
- iCurrent = *p++;
- if( iCurrent & 0x80 ){
- p--;
- p += fts5GetVarint32(p, iCurrent);
- }
- }
- if( iCol!=iCurrent ) return 0;
-
- /* Advance pointer p until it points to pEnd or an 0x01 byte that is
- ** not part of a varint */
- while( p<pEnd && *p!=0x01 ){
- while( *p++ & 0x80 );
- }
-
- return p - (*pa);
-}
-
static void fts5IndexExtractColset(
int *pRc,
Fts5Colset *pColset, /* Colset to filter on */
const u8 *pPos, int nPos, /* Position list */
- Fts5Buffer *pBuf /* Output buffer */
+ Fts5Iter *pIter
){
if( *pRc==SQLITE_OK ){
- int i;
- fts5BufferZero(pBuf);
- for(i=0; i<pColset->nCol; i++){
- const u8 *pSub = pPos;
- int nSub = fts5IndexExtractCol(&pSub, nPos, pColset->aiCol[i]);
- if( nSub ){
- fts5BufferAppendBlob(pRc, pBuf, nSub, pSub);
+ const u8 *p = pPos;
+ const u8 *aCopy = p;
+ const u8 *pEnd = &p[nPos]; /* One byte past end of position list */
+ int i = 0;
+ int iCurrent = 0;
+
+ if( pColset->nCol>1 && sqlite3Fts5BufferSize(pRc, &pIter->poslist, nPos) ){
+ return;
+ }
+
+ while( 1 ){
+ while( pColset->aiCol[i]<iCurrent ){
+ i++;
+ if( i==pColset->nCol ){
+ pIter->base.pData = pIter->poslist.p;
+ pIter->base.nData = pIter->poslist.n;
+ return;
+ }
+ }
+
+ /* Advance pointer p until it points to pEnd or an 0x01 byte that is
+ ** not part of a varint */
+ while( p<pEnd && *p!=0x01 ){
+ while( *p++ & 0x80 );
+ }
+
+ if( pColset->aiCol[i]==iCurrent ){
+ if( pColset->nCol==1 ){
+ pIter->base.pData = aCopy;
+ pIter->base.nData = p-aCopy;
+ return;
+ }
+ fts5BufferSafeAppendBlob(&pIter->poslist, aCopy, p-aCopy);
+ }
+ if( p==pEnd ){
+ pIter->base.pData = pIter->poslist.p;
+ pIter->base.nData = pIter->poslist.n;
+ return;
+ }
+ aCopy = p++;
+ iCurrent = *p++;
+ if( iCurrent & 0x80 ){
+ p--;
+ p += fts5GetVarint32(p, iCurrent);
}
}
}
+
}
/*
@@ -220712,16 +223032,9 @@ static void fts5IterSetOutputs_Full(Fts5Iter *pIter, Fts5SegIter *pSeg){
/* All data is stored on the current page. Populate the output
** variables to point into the body of the page object. */
const u8 *a = &pSeg->pLeaf->p[pSeg->iLeafOffset];
- if( pColset->nCol==1 ){
- pIter->base.nData = fts5IndexExtractCol(&a, pSeg->nPos,pColset->aiCol[0]);
- pIter->base.pData = a;
- }else{
- int *pRc = &pIter->pIndex->rc;
- fts5BufferZero(&pIter->poslist);
- fts5IndexExtractColset(pRc, pColset, a, pSeg->nPos, &pIter->poslist);
- pIter->base.pData = pIter->poslist.p;
- pIter->base.nData = pIter->poslist.n;
- }
+ int *pRc = &pIter->pIndex->rc;
+ fts5BufferZero(&pIter->poslist);
+ fts5IndexExtractColset(pRc, pColset, a, pSeg->nPos, pIter);
}else{
/* The data is distributed over two or more pages. Copy it into the
** Fts5Iter.poslist buffer and then set the output pointer to point
@@ -222204,7 +224517,7 @@ static void fts5AppendPoslist(
static void fts5DoclistIterNext(Fts5DoclistIter *pIter){
u8 *p = pIter->aPoslist + pIter->nSize + pIter->nPoslist;
- assert( pIter->aPoslist );
+ assert( pIter->aPoslist || (p==0 && pIter->aPoslist==0) );
if( p>=pIter->aEof ){
pIter->aPoslist = 0;
}else{
@@ -222224,6 +224537,9 @@ static void fts5DoclistIterNext(Fts5DoclistIter *pIter){
}
pIter->aPoslist = p;
+ if( &pIter->aPoslist[pIter->nPoslist]>pIter->aEof ){
+ pIter->aPoslist = 0;
+ }
}
}
@@ -222232,9 +224548,11 @@ static void fts5DoclistIterInit(
Fts5DoclistIter *pIter
){
memset(pIter, 0, sizeof(*pIter));
- pIter->aPoslist = pBuf->p;
- pIter->aEof = &pBuf->p[pBuf->n];
- fts5DoclistIterNext(pIter);
+ if( pBuf->n>0 ){
+ pIter->aPoslist = pBuf->p;
+ pIter->aEof = &pBuf->p[pBuf->n];
+ fts5DoclistIterNext(pIter);
+ }
}
#if 0
@@ -222288,16 +224606,20 @@ static void fts5NextRowid(Fts5Buffer *pBuf, int *piOff, i64 *piRowid){
static void fts5MergeRowidLists(
Fts5Index *p, /* FTS5 backend object */
Fts5Buffer *p1, /* First list to merge */
- Fts5Buffer *p2 /* Second list to merge */
+ int nBuf, /* Number of entries in apBuf[] */
+ Fts5Buffer *aBuf /* Array of other lists to merge into p1 */
){
int i1 = 0;
int i2 = 0;
i64 iRowid1 = 0;
i64 iRowid2 = 0;
i64 iOut = 0;
-
+ Fts5Buffer *p2 = &aBuf[0];
Fts5Buffer out;
+
+ (void)nBuf;
memset(&out, 0, sizeof(out));
+ assert( nBuf==1 );
sqlite3Fts5BufferSize(&p->rc, &out, p1->n + p2->n);
if( p->rc ) return;
@@ -222324,180 +224646,213 @@ static void fts5MergeRowidLists(
fts5BufferFree(&out);
}
+typedef struct PrefixMerger PrefixMerger;
+struct PrefixMerger {
+ Fts5DoclistIter iter; /* Doclist iterator */
+ i64 iPos; /* For iterating through a position list */
+ int iOff;
+ u8 *aPos;
+ PrefixMerger *pNext; /* Next in docid/poslist order */
+};
+
+static void fts5PrefixMergerInsertByRowid(
+ PrefixMerger **ppHead,
+ PrefixMerger *p
+){
+ if( p->iter.aPoslist ){
+ PrefixMerger **pp = ppHead;
+ while( *pp && p->iter.iRowid>(*pp)->iter.iRowid ){
+ pp = &(*pp)->pNext;
+ }
+ p->pNext = *pp;
+ *pp = p;
+ }
+}
+
+static void fts5PrefixMergerInsertByPosition(
+ PrefixMerger **ppHead,
+ PrefixMerger *p
+){
+ if( p->iPos>=0 ){
+ PrefixMerger **pp = ppHead;
+ while( *pp && p->iPos>(*pp)->iPos ){
+ pp = &(*pp)->pNext;
+ }
+ p->pNext = *pp;
+ *pp = p;
+ }
+}
+
+
/*
-** Buffers p1 and p2 contain doclists. This function merges the content
-** of the two doclists together and sets buffer p1 to the result before
-** returning.
-**
-** If an error occurs, an error code is left in p->rc. If an error has
-** already occurred, this function is a no-op.
+** Array aBuf[] contains nBuf doclists. These are all merged in with the
+** doclist in buffer p1.
*/
static void fts5MergePrefixLists(
Fts5Index *p, /* FTS5 backend object */
Fts5Buffer *p1, /* First list to merge */
- Fts5Buffer *p2 /* Second list to merge */
-){
- if( p2->n ){
- i64 iLastRowid = 0;
- Fts5DoclistIter i1;
- Fts5DoclistIter i2;
- Fts5Buffer out = {0, 0, 0};
- Fts5Buffer tmp = {0, 0, 0};
-
- /* The maximum size of the output is equal to the sum of the two
- ** input sizes + 1 varint (9 bytes). The extra varint is because if the
- ** first rowid in one input is a large negative number, and the first in
- ** the other a non-negative number, the delta for the non-negative
- ** number will be larger on disk than the literal integer value
- ** was.
- **
- ** Or, if the input position-lists are corrupt, then the output might
- ** include up to 2 extra 10-byte positions created by interpreting -1
- ** (the value PoslistNext64() uses for EOF) as a position and appending
- ** it to the output. This can happen at most once for each input
- ** position-list, hence two 10 byte paddings. */
- if( sqlite3Fts5BufferSize(&p->rc, &out, p1->n + p2->n + 9+10+10) ) return;
- fts5DoclistIterInit(p1, &i1);
- fts5DoclistIterInit(p2, &i2);
+ int nBuf, /* Number of buffers in array aBuf[] */
+ Fts5Buffer *aBuf /* Other lists to merge in */
+){
+#define fts5PrefixMergerNextPosition(p) \
+ sqlite3Fts5PoslistNext64((p)->aPos,(p)->iter.nPoslist,&(p)->iOff,&(p)->iPos);
+#define FTS5_MERGE_NLIST 16
+ PrefixMerger aMerger[FTS5_MERGE_NLIST];
+ PrefixMerger *pHead = 0;
+ int i;
+ int nOut = 0;
+ Fts5Buffer out = {0, 0, 0};
+ Fts5Buffer tmp = {0, 0, 0};
+ i64 iLastRowid = 0;
+
+ /* Initialize a doclist-iterator for each input buffer. Arrange them in
+ ** a linked-list starting at pHead in ascending order of rowid. Avoid
+ ** linking any iterators already at EOF into the linked list at all. */
+ assert( nBuf+1<=sizeof(aMerger)/sizeof(aMerger[0]) );
+ memset(aMerger, 0, sizeof(PrefixMerger)*(nBuf+1));
+ pHead = &aMerger[nBuf];
+ fts5DoclistIterInit(p1, &pHead->iter);
+ for(i=0; i<nBuf; i++){
+ fts5DoclistIterInit(&aBuf[i], &aMerger[i].iter);
+ fts5PrefixMergerInsertByRowid(&pHead, &aMerger[i]);
+ nOut += aBuf[i].n;
+ }
+ if( nOut==0 ) return;
+ nOut += p1->n + 9 + 10*nBuf;
+
+ /* The maximum size of the output is equal to the sum of the
+ ** input sizes + 1 varint (9 bytes). The extra varint is because if the
+ ** first rowid in one input is a large negative number, and the first in
+ ** the other a non-negative number, the delta for the non-negative
+ ** number will be larger on disk than the literal integer value
+ ** was.
+ **
+ ** Or, if the input position-lists are corrupt, then the output might
+ ** include up to (nBuf+1) extra 10-byte positions created by interpreting -1
+ ** (the value PoslistNext64() uses for EOF) as a position and appending
+ ** it to the output. This can happen at most once for each input
+ ** position-list, hence (nBuf+1) 10 byte paddings. */
+ if( sqlite3Fts5BufferSize(&p->rc, &out, nOut) ) return;
+
+ while( pHead ){
+ fts5MergeAppendDocid(&out, iLastRowid, pHead->iter.iRowid);
+
+ if( pHead->pNext && iLastRowid==pHead->pNext->iter.iRowid ){
+ /* Merge data from two or more poslists */
+ i64 iPrev = 0;
+ int nTmp = FTS5_DATA_ZERO_PADDING;
+ int nMerge = 0;
+ PrefixMerger *pSave = pHead;
+ PrefixMerger *pThis = 0;
+ int nTail = 0;
+
+ pHead = 0;
+ while( pSave && pSave->iter.iRowid==iLastRowid ){
+ PrefixMerger *pNext = pSave->pNext;
+ pSave->iOff = 0;
+ pSave->iPos = 0;
+ pSave->aPos = &pSave->iter.aPoslist[pSave->iter.nSize];
+ fts5PrefixMergerNextPosition(pSave);
+ nTmp += pSave->iter.nPoslist + 10;
+ nMerge++;
+ fts5PrefixMergerInsertByPosition(&pHead, pSave);
+ pSave = pNext;
+ }
+
+ if( pHead==0 || pHead->pNext==0 ){
+ p->rc = FTS5_CORRUPT;
+ break;
+ }
- while( 1 ){
- if( i1.iRowid<i2.iRowid ){
- /* Copy entry from i1 */
- fts5MergeAppendDocid(&out, iLastRowid, i1.iRowid);
- fts5BufferSafeAppendBlob(&out, i1.aPoslist, i1.nPoslist+i1.nSize);
- fts5DoclistIterNext(&i1);
- if( i1.aPoslist==0 ) break;
- assert( out.n<=((i1.aPoslist-p1->p) + (i2.aPoslist-p2->p)+9+10+10) );
- }
- else if( i2.iRowid!=i1.iRowid ){
- /* Copy entry from i2 */
- fts5MergeAppendDocid(&out, iLastRowid, i2.iRowid);
- fts5BufferSafeAppendBlob(&out, i2.aPoslist, i2.nPoslist+i2.nSize);
- fts5DoclistIterNext(&i2);
- if( i2.aPoslist==0 ) break;
- assert( out.n<=((i1.aPoslist-p1->p) + (i2.aPoslist-p2->p)+9+10+10) );
+ /* See the earlier comment in this function for an explanation of why
+ ** corrupt input position lists might cause the output to consume
+ ** at most nMerge*10 bytes of unexpected space. */
+ if( sqlite3Fts5BufferSize(&p->rc, &tmp, nTmp+nMerge*10) ){
+ break;
}
- else{
- /* Merge the two position lists. */
- i64 iPos1 = 0;
- i64 iPos2 = 0;
- int iOff1 = 0;
- int iOff2 = 0;
- u8 *a1 = &i1.aPoslist[i1.nSize];
- u8 *a2 = &i2.aPoslist[i2.nSize];
- int nCopy;
- u8 *aCopy;
-
- i64 iPrev = 0;
- Fts5PoslistWriter writer;
- memset(&writer, 0, sizeof(writer));
-
- /* See the earlier comment in this function for an explanation of why
- ** corrupt input position lists might cause the output to consume
- ** at most 20 bytes of unexpected space. */
- fts5MergeAppendDocid(&out, iLastRowid, i2.iRowid);
- fts5BufferZero(&tmp);
- sqlite3Fts5BufferSize(&p->rc, &tmp,
- i1.nPoslist + i2.nPoslist + 10 + 10 + FTS5_DATA_ZERO_PADDING
- );
- if( p->rc ) break;
+ fts5BufferZero(&tmp);
- sqlite3Fts5PoslistNext64(a1, i1.nPoslist, &iOff1, &iPos1);
- sqlite3Fts5PoslistNext64(a2, i2.nPoslist, &iOff2, &iPos2);
- assert_nc( iPos1>=0 && iPos2>=0 );
+ pThis = pHead;
+ pHead = pThis->pNext;
+ sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, pThis->iPos);
+ fts5PrefixMergerNextPosition(pThis);
+ fts5PrefixMergerInsertByPosition(&pHead, pThis);
- if( iPos1<iPos2 ){
- sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, iPos1);
- sqlite3Fts5PoslistNext64(a1, i1.nPoslist, &iOff1, &iPos1);
- }else{
- sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, iPos2);
- sqlite3Fts5PoslistNext64(a2, i2.nPoslist, &iOff2, &iPos2);
- }
- if( iPos1>=0 && iPos2>=0 ){
- while( 1 ){
- if( iPos1<iPos2 ){
- if( iPos1!=iPrev ){
- sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, iPos1);
- }
- sqlite3Fts5PoslistNext64(a1, i1.nPoslist, &iOff1, &iPos1);
- if( iPos1<0 ) break;
- }else{
- assert_nc( iPos2!=iPrev );
- sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, iPos2);
- sqlite3Fts5PoslistNext64(a2, i2.nPoslist, &iOff2, &iPos2);
- if( iPos2<0 ) break;
- }
- }
+ while( pHead->pNext ){
+ pThis = pHead;
+ if( pThis->iPos!=iPrev ){
+ sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, pThis->iPos);
}
+ fts5PrefixMergerNextPosition(pThis);
+ pHead = pThis->pNext;
+ fts5PrefixMergerInsertByPosition(&pHead, pThis);
+ }
- if( iPos1>=0 ){
- if( iPos1!=iPrev ){
- sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, iPos1);
- }
- aCopy = &a1[iOff1];
- nCopy = i1.nPoslist - iOff1;
- }else{
- assert_nc( iPos2>=0 && iPos2!=iPrev );
- sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, iPos2);
- aCopy = &a2[iOff2];
- nCopy = i2.nPoslist - iOff2;
- }
- if( nCopy>0 ){
- fts5BufferSafeAppendBlob(&tmp, aCopy, nCopy);
- }
+ if( pHead->iPos!=iPrev ){
+ sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, pHead->iPos);
+ }
+ nTail = pHead->iter.nPoslist - pHead->iOff;
- /* WRITEPOSLISTSIZE */
- assert_nc( tmp.n<=i1.nPoslist+i2.nPoslist );
- assert( tmp.n<=i1.nPoslist+i2.nPoslist+10+10 );
- if( tmp.n>i1.nPoslist+i2.nPoslist ){
- if( p->rc==SQLITE_OK ) p->rc = FTS5_CORRUPT;
- break;
+ /* WRITEPOSLISTSIZE */
+ assert( tmp.n+nTail<=nTmp );
+ if( tmp.n+nTail>nTmp-FTS5_DATA_ZERO_PADDING ){
+ if( p->rc==SQLITE_OK ) p->rc = FTS5_CORRUPT;
+ break;
+ }
+ fts5BufferSafeAppendVarint(&out, (tmp.n+nTail) * 2);
+ fts5BufferSafeAppendBlob(&out, tmp.p, tmp.n);
+ if( nTail>0 ){
+ fts5BufferSafeAppendBlob(&out, &pHead->aPos[pHead->iOff], nTail);
+ }
+
+ pHead = pSave;
+ for(i=0; i<nBuf+1; i++){
+ PrefixMerger *pX = &aMerger[i];
+ if( pX->iter.aPoslist && pX->iter.iRowid==iLastRowid ){
+ fts5DoclistIterNext(&pX->iter);
+ fts5PrefixMergerInsertByRowid(&pHead, pX);
}
- fts5BufferSafeAppendVarint(&out, tmp.n * 2);
- fts5BufferSafeAppendBlob(&out, tmp.p, tmp.n);
- fts5DoclistIterNext(&i1);
- fts5DoclistIterNext(&i2);
- assert_nc( out.n<=(p1->n+p2->n+9) );
- if( i1.aPoslist==0 || i2.aPoslist==0 ) break;
- assert( out.n<=((i1.aPoslist-p1->p) + (i2.aPoslist-p2->p)+9+10+10) );
}
- }
- if( i1.aPoslist ){
- fts5MergeAppendDocid(&out, iLastRowid, i1.iRowid);
- fts5BufferSafeAppendBlob(&out, i1.aPoslist, i1.aEof - i1.aPoslist);
- }
- else if( i2.aPoslist ){
- fts5MergeAppendDocid(&out, iLastRowid, i2.iRowid);
- fts5BufferSafeAppendBlob(&out, i2.aPoslist, i2.aEof - i2.aPoslist);
+ }else{
+ /* Copy poslist from pHead to output */
+ PrefixMerger *pThis = pHead;
+ Fts5DoclistIter *pI = &pThis->iter;
+ fts5BufferSafeAppendBlob(&out, pI->aPoslist, pI->nPoslist+pI->nSize);
+ fts5DoclistIterNext(pI);
+ pHead = pThis->pNext;
+ fts5PrefixMergerInsertByRowid(&pHead, pThis);
}
- assert_nc( out.n<=(p1->n+p2->n+9) );
-
- fts5BufferFree(p1);
- fts5BufferFree(&tmp);
- memset(&out.p[out.n], 0, FTS5_DATA_ZERO_PADDING);
- *p1 = out;
}
+
+ fts5BufferFree(p1);
+ fts5BufferFree(&tmp);
+ memset(&out.p[out.n], 0, FTS5_DATA_ZERO_PADDING);
+ *p1 = out;
}
static void fts5SetupPrefixIter(
Fts5Index *p, /* Index to read from */
int bDesc, /* True for "ORDER BY rowid DESC" */
- const u8 *pToken, /* Buffer containing prefix to match */
+ int iIdx, /* Index to scan for data */
+ u8 *pToken, /* Buffer containing prefix to match */
int nToken, /* Size of buffer pToken in bytes */
Fts5Colset *pColset, /* Restrict matches to these columns */
Fts5Iter **ppIter /* OUT: New iterator */
){
Fts5Structure *pStruct;
Fts5Buffer *aBuf;
- const int nBuf = 32;
+ int nBuf = 32;
+ int nMerge = 1;
- void (*xMerge)(Fts5Index*, Fts5Buffer*, Fts5Buffer*);
+ void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*);
void (*xAppend)(Fts5Index*, i64, Fts5Iter*, Fts5Buffer*);
if( p->pConfig->eDetail==FTS5_DETAIL_NONE ){
xMerge = fts5MergeRowidLists;
xAppend = fts5AppendRowid;
}else{
+ nMerge = FTS5_MERGE_NLIST-1;
+ nBuf = nMerge*8; /* Sufficient to merge (16^8)==(2^32) lists */
xMerge = fts5MergePrefixLists;
xAppend = fts5AppendPoslist;
}
@@ -222517,6 +224872,27 @@ static void fts5SetupPrefixIter(
int bNewTerm = 1;
memset(&doclist, 0, sizeof(doclist));
+ if( iIdx!=0 ){
+ int dummy = 0;
+ const int f2 = FTS5INDEX_QUERY_SKIPEMPTY|FTS5INDEX_QUERY_NOOUTPUT;
+ pToken[0] = FTS5_MAIN_PREFIX;
+ fts5MultiIterNew(p, pStruct, f2, pColset, pToken, nToken, -1, 0, &p1);
+ fts5IterSetOutputCb(&p->rc, p1);
+ for(;
+ fts5MultiIterEof(p, p1)==0;
+ fts5MultiIterNext2(p, p1, &dummy)
+ ){
+ Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ];
+ p1->xSetOutputs(p1, pSeg);
+ if( p1->base.nData ){
+ xAppend(p, p1->base.iRowid-iLastRowid, p1, &doclist);
+ iLastRowid = p1->base.iRowid;
+ }
+ }
+ fts5MultiIterFree(p1);
+ }
+
+ pToken[0] = FTS5_MAIN_PREFIX + iIdx;
fts5MultiIterNew(p, pStruct, flags, pColset, pToken, nToken, -1, 0, &p1);
fts5IterSetOutputCb(&p->rc, p1);
for( /* no-op */ ;
@@ -222537,13 +224913,21 @@ static void fts5SetupPrefixIter(
if( p1->base.iRowid<=iLastRowid && doclist.n>0 ){
for(i=0; p->rc==SQLITE_OK && doclist.n; i++){
- assert( i<nBuf );
- if( aBuf[i].n==0 ){
- fts5BufferSwap(&doclist, &aBuf[i]);
- fts5BufferZero(&doclist);
- }else{
- xMerge(p, &doclist, &aBuf[i]);
- fts5BufferZero(&aBuf[i]);
+ int i1 = i*nMerge;
+ int iStore;
+ assert( i1+nMerge<=nBuf );
+ for(iStore=i1; iStore<i1+nMerge; iStore++){
+ if( aBuf[iStore].n==0 ){
+ fts5BufferSwap(&doclist, &aBuf[iStore]);
+ fts5BufferZero(&doclist);
+ break;
+ }
+ }
+ if( iStore==i1+nMerge ){
+ xMerge(p, &doclist, nMerge, &aBuf[i1]);
+ for(iStore=i1; iStore<i1+nMerge; iStore++){
+ fts5BufferZero(&aBuf[iStore]);
+ }
}
}
iLastRowid = 0;
@@ -222553,11 +224937,15 @@ static void fts5SetupPrefixIter(
iLastRowid = p1->base.iRowid;
}
- for(i=0; i<nBuf; i++){
+ assert( (nBuf%nMerge)==0 );
+ for(i=0; i<nBuf; i+=nMerge){
+ int iFree;
if( p->rc==SQLITE_OK ){
- xMerge(p, &doclist, &aBuf[i]);
+ xMerge(p, &doclist, nMerge, &aBuf[i]);
+ }
+ for(iFree=i; iFree<i+nMerge; iFree++){
+ fts5BufferFree(&aBuf[iFree]);
}
- fts5BufferFree(&aBuf[i]);
}
fts5MultiIterFree(p1);
@@ -222812,6 +225200,7 @@ static int sqlite3Fts5IndexQuery(
if( sqlite3Fts5BufferSize(&p->rc, &buf, nToken+1)==0 ){
int iIdx = 0; /* Index to search */
+ int iPrefixIdx = 0; /* +1 prefix index */
if( nToken ) memcpy(&buf.p[1], pToken, nToken);
/* Figure out which index to search and set iIdx accordingly. If this
@@ -222833,7 +225222,9 @@ static int sqlite3Fts5IndexQuery(
if( flags & FTS5INDEX_QUERY_PREFIX ){
int nChar = fts5IndexCharlen(pToken, nToken);
for(iIdx=1; iIdx<=pConfig->nPrefix; iIdx++){
- if( pConfig->aPrefix[iIdx-1]==nChar ) break;
+ int nIdxChar = pConfig->aPrefix[iIdx-1];
+ if( nIdxChar==nChar ) break;
+ if( nIdxChar==nChar+1 ) iPrefixIdx = iIdx;
}
}
@@ -222850,8 +225241,7 @@ static int sqlite3Fts5IndexQuery(
}else{
/* Scan multiple terms in the main index */
int bDesc = (flags & FTS5INDEX_QUERY_DESC)!=0;
- buf.p[0] = FTS5_MAIN_PREFIX;
- fts5SetupPrefixIter(p, bDesc, buf.p, nToken+1, pColset, &pRet);
+ fts5SetupPrefixIter(p, bDesc, iPrefixIdx, buf.p, nToken+1, pColset,&pRet);
assert( p->rc!=SQLITE_OK || pRet->pColset==0 );
fts5IterSetOutputCb(&p->rc, pRet);
if( p->rc==SQLITE_OK ){
@@ -222924,8 +225314,9 @@ static int sqlite3Fts5IterNextFrom(Fts5IndexIter *pIndexIter, i64 iMatch){
static const char *sqlite3Fts5IterTerm(Fts5IndexIter *pIndexIter, int *pn){
int n;
const char *z = (const char*)fts5MultiIterTerm((Fts5Iter*)pIndexIter, &n);
+ assert_nc( z || n<=1 );
*pn = n-1;
- return &z[1];
+ return (z ? &z[1] : 0);
}
/*
@@ -226211,7 +228602,8 @@ static int fts5ApiPhraseFirst(
int n;
int rc = fts5CsrPoslist(pCsr, iPhrase, &pIter->a, &n);
if( rc==SQLITE_OK ){
- pIter->b = &pIter->a[n];
+ assert( pIter->a || n==0 );
+ pIter->b = (pIter->a ? &pIter->a[n] : 0);
*piCol = 0;
*piOff = 0;
fts5ApiPhraseNext(pCtx, pIter, piCol, piOff);
@@ -226270,7 +228662,8 @@ static int fts5ApiPhraseFirstColumn(
rc = sqlite3Fts5ExprPhraseCollist(pCsr->pExpr, iPhrase, &pIter->a, &n);
}
if( rc==SQLITE_OK ){
- pIter->b = &pIter->a[n];
+ assert( pIter->a || n==0 );
+ pIter->b = (pIter->a ? &pIter->a[n] : 0);
*piCol = 0;
fts5ApiPhraseNextColumn(pCtx, pIter, piCol);
}
@@ -226278,7 +228671,8 @@ static int fts5ApiPhraseFirstColumn(
int n;
rc = fts5CsrPoslist(pCsr, iPhrase, &pIter->a, &n);
if( rc==SQLITE_OK ){
- pIter->b = &pIter->a[n];
+ assert( pIter->a || n==0 );
+ pIter->b = (pIter->a ? &pIter->a[n] : 0);
if( n<=0 ){
*piCol = -1;
}else if( pIter->a[0]==0x01 ){
@@ -226756,7 +229150,7 @@ static int sqlite3Fts5GetTokenizer(
*pzErr = sqlite3_mprintf("no such tokenizer: %s", azArg[0]);
}else{
rc = pMod->x.xCreate(
- pMod->pUserData, &azArg[1], (nArg?nArg-1:0), &pConfig->pTok
+ pMod->pUserData, (azArg?&azArg[1]:0), (nArg?nArg-1:0), &pConfig->pTok
);
pConfig->pTokApi = &pMod->x;
if( rc!=SQLITE_OK ){
@@ -226819,7 +229213,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
- sqlite3_result_text(pCtx, "fts5: 2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b", -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(pCtx, "fts5: 2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827", -1, SQLITE_TRANSIENT);
}
/*
@@ -231745,9 +234139,9 @@ SQLITE_API int sqlite3_stmt_init(
#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
/************** End of stmt.c ************************************************/
-#if __LINE__!=231748
+#if __LINE__!=234142
#undef SQLITE_SOURCE_ID
-#define SQLITE_SOURCE_ID "2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089falt2"
+#define SQLITE_SOURCE_ID "2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50calt2"
#endif
/* Return the source-id for this library */
SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
diff --git a/src/3rdparty/sqlite/sqlite3.h b/src/3rdparty/sqlite/sqlite3.h
index 9098a37297..f636b294d2 100644
--- a/src/3rdparty/sqlite/sqlite3.h
+++ b/src/3rdparty/sqlite/sqlite3.h
@@ -123,9 +123,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.34.0"
-#define SQLITE_VERSION_NUMBER 3034000
-#define SQLITE_SOURCE_ID "2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b"
+#define SQLITE_VERSION "3.35.2"
+#define SQLITE_VERSION_NUMBER 3035002
+#define SQLITE_SOURCE_ID "2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -2115,7 +2115,13 @@ struct sqlite3_mem_methods {
** The second parameter is a pointer to an integer into which
** is written 0 or 1 to indicate whether triggers are disabled or enabled
** following this call. The second parameter may be a NULL pointer, in
-** which case the trigger setting is not reported back. </dd>
+** which case the trigger setting is not reported back.
+**
+** <p>Originally this option disabled all triggers. ^(However, since
+** SQLite version 3.35.0, TEMP triggers are still allowed even if
+** this option is off. So, in other words, this option now only disables
+** triggers in the main database schema or in the schemas of ATTACH-ed
+** databases.)^ </dd>
**
** [[SQLITE_DBCONFIG_ENABLE_VIEW]]
** <dt>SQLITE_DBCONFIG_ENABLE_VIEW</dt>
@@ -2126,7 +2132,13 @@ struct sqlite3_mem_methods {
** The second parameter is a pointer to an integer into which
** is written 0 or 1 to indicate whether views are disabled or enabled
** following this call. The second parameter may be a NULL pointer, in
-** which case the view setting is not reported back. </dd>
+** which case the view setting is not reported back.
+**
+** <p>Originally this option disabled all views. ^(However, since
+** SQLite version 3.35.0, TEMP views are still allowed even if
+** this option is off. So, in other words, this option now only disables
+** views in the main database schema or in the schemas of ATTACH-ed
+** databases.)^ </dd>
**
** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]]
** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
@@ -3499,6 +3511,7 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** that uses dot-files in place of posix advisory locking.
** <tr><td> file:data.db?mode=readonly <td>
** An error. "readonly" is not a valid option for the "mode" parameter.
+** Use "ro" instead: "file:data.db?mode=ro".
** </table>
**
** ^URI hexadecimal escape sequences (%HH) are supported within the path and
@@ -3697,7 +3710,7 @@ SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*);
** If the Y parameter to sqlite3_free_filename(Y) is anything other
** than a NULL pointer or a pointer previously acquired from
** sqlite3_create_filename(), then bad things such as heap
-** corruption or segfaults may occur. The value Y should be
+** corruption or segfaults may occur. The value Y should not be
** used again after sqlite3_free_filename(Y) has been called. This means
** that if the [sqlite3_vfs.xOpen()] method of a VFS has been called using Y,
** then the corresponding [sqlite3_module.xClose() method should also be
@@ -7765,7 +7778,8 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_PRNG_SEED 28
#define SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS 29
#define SQLITE_TESTCTRL_SEEK_COUNT 30
-#define SQLITE_TESTCTRL_LAST 30 /* Largest TESTCTRL */
+#define SQLITE_TESTCTRL_TRACEFLAGS 31
+#define SQLITE_TESTCTRL_LAST 31 /* Largest TESTCTRL */
/*
** CAPI3REF: SQL Keyword Checking
@@ -10439,6 +10453,14 @@ SQLITE_API int sqlite3session_patchset(
SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession);
/*
+** CAPI3REF: Query for the amount of heap memory used by a session object.
+**
+** This API returns the total amount of heap memory in bytes currently
+** used by the session object passed as the only argument.
+*/
+SQLITE_API sqlite3_int64 sqlite3session_memory_used(sqlite3_session *pSession);
+
+/*
** CAPI3REF: Create An Iterator To Traverse A Changeset
** CONSTRUCTOR: sqlite3_changeset_iter
**
@@ -10540,18 +10562,23 @@ SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter);
** call to [sqlite3changeset_next()] must have returned [SQLITE_ROW]. If this
** is not the case, this function returns [SQLITE_MISUSE].
**
-** If argument pzTab is not NULL, then *pzTab is set to point to a
-** nul-terminated utf-8 encoded string containing the name of the table
-** affected by the current change. The buffer remains valid until either
-** sqlite3changeset_next() is called on the iterator or until the
-** conflict-handler function returns. If pnCol is not NULL, then *pnCol is
-** set to the number of columns in the table affected by the change. If
-** pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change
+** Arguments pOp, pnCol and pzTab may not be NULL. Upon return, three
+** outputs are set through these pointers:
+**
+** *pOp is set to one of [SQLITE_INSERT], [SQLITE_DELETE] or [SQLITE_UPDATE],
+** depending on the type of change that the iterator currently points to;
+**
+** *pnCol is set to the number of columns in the table affected by the change; and
+**
+** *pzTab is set to point to a nul-terminated utf-8 encoded string containing
+** the name of the table affected by the current change. The buffer remains
+** valid until either sqlite3changeset_next() is called on the iterator
+** or until the conflict-handler function returns.
+**
+** If pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change
** is an indirect change, or false (0) otherwise. See the documentation for
** [sqlite3session_indirect()] for a description of direct and indirect
-** changes. Finally, if pOp is not NULL, then *pOp is set to one of
-** [SQLITE_INSERT], [SQLITE_DELETE] or [SQLITE_UPDATE], depending on the
-** type of change that the iterator currently points to.
+** changes.
**
** If no error occurs, SQLITE_OK is returned. If an error does occur, an
** SQLite error code is returned. The values of the output variables may not
diff --git a/src/android/jar/.gitignore b/src/android/jar/.gitignore
new file mode 100644
index 0000000000..364420a59a
--- /dev/null
+++ b/src/android/jar/.gitignore
@@ -0,0 +1,6 @@
+.gradle/
+build/
+gradle/
+gradlew
+gradlew.bat
+local.properties
diff --git a/src/android/jar/AndroidManifest.xml b/src/android/jar/AndroidManifest.xml
index b461cac762..c53b90c912 100644
--- a/src/android/jar/AndroidManifest.xml
+++ b/src/android/jar/AndroidManifest.xml
@@ -1,5 +1,4 @@
<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="org.qtproject.qt.android">
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
- <uses-sdk android:minSdkVersion="9" />
</manifest>
diff --git a/src/android/jar/build.gradle b/src/android/jar/build.gradle
new file mode 100644
index 0000000000..f2dcb500ca
--- /dev/null
+++ b/src/android/jar/build.gradle
@@ -0,0 +1,54 @@
+// This is mainly used to allow Android Studio to easily read this folder as an android project.
+
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:4.0.2'
+ }
+}
+
+apply plugin: 'com.android.library'
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+// implementation 'androidx.appcompat:appcompat:1.2.0' // for androidx
+}
+
+repositories {
+ google()
+ jcenter()
+}
+
+android {
+ compileSdkVersion 30
+ buildToolsVersion "30.0.3"
+
+ defaultConfig {
+ minSdkVersion 23
+ targetSdkVersion 30
+ }
+
+ sourceSets {
+ main {
+ java.srcDir 'src/'
+ resources.srcDir 'libs/'
+ manifest.srcFile 'AndroidManifest.xml'
+ res.srcDirs = ['res/']
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ android {
+ lintOptions {
+ abortOnError true
+ }
+ }
+}
diff --git a/src/android/jar/settings.gradle b/src/android/jar/settings.gradle
new file mode 100644
index 0000000000..3f935dd3e2
--- /dev/null
+++ b/src/android/jar/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = "QtAndroid"
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
index 3785eb4011..4cae9465ba 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
@@ -343,7 +343,7 @@ public class QtActivityDelegate
}
if ((inputHints & ImhHiddenText) != 0)
- inputType |= 0x10 /* TYPE_NUMBER_VARIATION_PASSWORD */;
+ inputType |= android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD;
} else if ((inputHints & ImhDialableCharactersOnly) != 0) {
inputType = android.text.InputType.TYPE_CLASS_PHONE;
} else if ((inputHints & (ImhDate | ImhTime)) != 0) {
@@ -351,29 +351,28 @@ public class QtActivityDelegate
if ((inputHints & (ImhDate | ImhTime)) != (ImhDate | ImhTime)) {
if ((inputHints & ImhDate) != 0)
inputType |= android.text.InputType.TYPE_DATETIME_VARIATION_DATE;
- if ((inputHints & ImhTime) != 0)
+ else
inputType |= android.text.InputType.TYPE_DATETIME_VARIATION_TIME;
} // else { TYPE_DATETIME_VARIATION_NORMAL(0) }
} else { // CLASS_TEXT
- if ((inputHints & (ImhEmailCharactersOnly | ImhUrlCharactersOnly)) != 0) {
- if ((inputHints & ImhUrlCharactersOnly) != 0) {
- inputType |= android.text.InputType.TYPE_TEXT_VARIATION_URI;
-
- if (enterKeyType == 0) // not explicitly overridden
- imeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_GO;
- } else if ((inputHints & ImhEmailCharactersOnly) != 0) {
- inputType |= android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
- }
- } else if ((inputHints & ImhHiddenText) != 0) {
+ if ((inputHints & ImhHiddenText) != 0) {
inputType |= android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD;
} else if ((inputHints & ImhSensitiveData) != 0 ||
((inputHints & ImhNoPredictiveText) != 0 &&
System.getenv("QT_ANDROID_ENABLE_WORKAROUND_TO_DISABLE_PREDICTIVE_TEXT") != null)) {
inputType |= android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
+ } else if ((inputHints & ImhUrlCharactersOnly) != 0) {
+ inputType |= android.text.InputType.TYPE_TEXT_VARIATION_URI;
+ if (enterKeyType == 0) // not explicitly overridden
+ imeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_GO;
+ } else if ((inputHints & ImhEmailCharactersOnly) != 0) {
+ inputType |= android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
}
if ((inputHints & ImhMultiLine) != 0)
inputType |= android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE;
+ if ((inputHints & (ImhNoPredictiveText | ImhSensitiveData | ImhHiddenText)) != 0)
+ inputType |= android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
if ((inputHints & ImhUppercaseOnly) != 0) {
initialCapsMode |= android.text.TextUtils.CAP_MODE_CHARACTERS;
@@ -382,11 +381,6 @@ public class QtActivityDelegate
initialCapsMode |= android.text.TextUtils.CAP_MODE_SENTENCES;
inputType |= android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
}
-
- if ((inputHints & ImhNoPredictiveText) != 0 || (inputHints & ImhSensitiveData) != 0
- || (inputHints & ImhHiddenText) != 0) {
- inputType |= android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
- }
}
if (enterKeyType == 0 && (inputHints & ImhMultiLine) != 0)
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java
index 8ac4395ac9..2fbc4a70be 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java
@@ -84,6 +84,7 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Objects;
public class QtServiceDelegate
{
@@ -118,7 +119,8 @@ public class QtServiceDelegate
QtNative.setApplicationDisplayMetrics(10, 10, 0, 0, 10, 10, 120, 120, 1.0, 1.0);
if (loaderParams.containsKey(STATIC_INIT_CLASSES_KEY)) {
- for (String className: loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY)) {
+ for (String className :
+ Objects.requireNonNull(loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY))) {
if (className.length() == 0)
continue;
try {
@@ -128,9 +130,11 @@ public class QtServiceDelegate
Method m = initClass.getMethod("setService", Service.class, Object.class);
m.invoke(staticInitDataObject, m_service, this);
} catch (Exception e) {
- e.printStackTrace();
+ Log.d(QtNative.QtTAG,
+ "Class " + className + " does not implement setService method");
}
+ // For modules that don't need/have setService
try {
Method m = initClass.getMethod("setContext", Context.class);
m.invoke(staticInitDataObject, (Context)m_service);
diff --git a/src/android/java/src/org/qtproject/qt/android/bindings/QtService.java b/src/android/java/src/org/qtproject/qt/android/bindings/QtService.java
index cb24d1f541..afbe4350a0 100644
--- a/src/android/java/src/org/qtproject/qt/android/bindings/QtService.java
+++ b/src/android/java/src/org/qtproject/qt/android/bindings/QtService.java
@@ -39,8 +39,11 @@ package org.qtproject.qt.android.bindings;
import android.app.Service;
import android.content.Intent;
import android.content.res.Configuration;
+import android.os.Bundle;
import android.os.IBinder;
+import org.qtproject.qt.android.QtNative;
+
public class QtService extends Service
{
QtServiceLoader m_loader = new QtServiceLoader(this);
@@ -153,4 +156,14 @@ public class QtService extends Service
return super.onUnbind(intent);
}
//---------------------------------------------------------------------------
+
+ public boolean loadApplication(Service service, ClassLoader classLoader, Bundle loaderParams)
+ {
+ return QtNative.serviceDelegate().loadApplication(service, classLoader, loaderParams);
+ }
+
+ public boolean startApplication()
+ {
+ return QtNative.serviceDelegate().startApplication();
+ }
}
diff --git a/src/concurrent/qtconcurrentiteratekernel.cpp b/src/concurrent/qtconcurrentiteratekernel.cpp
index 430ae89c85..268db56246 100644
--- a/src/concurrent/qtconcurrentiteratekernel.cpp
+++ b/src/concurrent/qtconcurrentiteratekernel.cpp
@@ -131,7 +131,7 @@ void BlockSizeManager::timeAfterUser()
if (controlPartElapsed.isMedianValid() == false)
return;
- if (controlPartElapsed.median() * TargetRatio < userPartElapsed.median())
+ if (controlPartElapsed.median() * int(TargetRatio) < userPartElapsed.median())
return;
m_blockSize = qMin(m_blockSize * 2, maxBlockSize);
diff --git a/src/concurrent/qtconcurrentthreadengine.h b/src/concurrent/qtconcurrentthreadengine.h
index cbd8ad04d7..4cd5b85210 100644
--- a/src/concurrent/qtconcurrentthreadengine.h
+++ b/src/concurrent/qtconcurrentthreadengine.h
@@ -256,8 +256,8 @@ template <>
class ThreadEngineStarter<void> : public ThreadEngineStarterBase<void>
{
public:
- ThreadEngineStarter<void>(ThreadEngine<void> *_threadEngine)
- :ThreadEngineStarterBase<void>(_threadEngine) {}
+ ThreadEngineStarter(ThreadEngine<void> *_threadEngine)
+ : ThreadEngineStarterBase<void>(_threadEngine) {}
void startBlocking()
{
diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt
index c4461da6b5..00ba3f32f4 100644
--- a/src/corelib/CMakeLists.txt
+++ b/src/corelib/CMakeLists.txt
@@ -598,29 +598,16 @@ qt_internal_extend_target(Core CONDITION QT_FEATURE_journald
PkgConfig::Libsystemd
)
-# special case begin
-add_library(Core_versiontagging OBJECT
- global/qversiontagging.cpp global/qversiontagging.h
-)
-
-set_target_properties(Core_versiontagging PROPERTIES
- COMPILE_OPTIONS $<TARGET_PROPERTY:Core,COMPILE_OPTIONS>
- COMPILE_DEFINITIONS $<TARGET_PROPERTY:Core,COMPILE_DEFINITIONS>
- INCLUDE_DIRECTORIES $<TARGET_PROPERTY:Core,INCLUDE_DIRECTORIES>
-)
+set(core_version_tagging_files global/qversiontagging.cpp global/qversiontagging.h)
+target_sources(Core PRIVATE ${core_version_tagging_files})
# Disable LTO, as the symbols disappear somehow under GCC
# (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200)
if(GCC AND FEATURE_ltcg)
- target_compile_options(Core_versiontagging PRIVATE "-fno-lto")
+ set_source_files_properties(${core_version_tagging_files}
+ PROPERTIES COMPILE_OPTIONS "-fno-lto")
endif()
-qt_internal_extend_target(Core
- SOURCES
- $<TARGET_OBJECTS:Core_versiontagging>
-)
-# special case end
-
qt_internal_extend_target(Core CONDITION UNIX
SOURCES
io/qfilesystemengine_unix.cpp
@@ -1152,7 +1139,6 @@ qt_internal_extend_target(Core CONDITION QT_FEATURE_mimetype
# edited qrc files.
if(QT_FEATURE_mimetype AND QT_FEATURE_mimetype_database)
include(${CMAKE_CURRENT_SOURCE_DIR}/mimetypes/mimetypes_resources.cmake)
- corelib_add_mimetypes_resources(Core)
# Generate qmimeprovider_database.cpp
set(qmimeprovider_db_output "${CMAKE_CURRENT_BINARY_DIR}/.rcc/qmimeprovider_database.cpp")
diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake
index f4732e4579..a71163d9f7 100644
--- a/src/corelib/Qt6AndroidMacros.cmake
+++ b/src/corelib/Qt6AndroidMacros.cmake
@@ -45,7 +45,7 @@ function(qt6_android_generate_deployment_settings target)
string(APPEND file_contents
" \"description\": \"This file is generated by cmake to be read by androiddeployqt and should not be modified by hand.\",\n")
- # Host Qt Android install path
+ # Host Qt Android install path
if (NOT QT_BUILDING_QT OR QT_STANDALONE_TEST_PATH)
set(qt_path "${QT6_INSTALL_PREFIX}")
set(android_plugin_dir_path "${qt_path}/${QT6_INSTALL_PLUGINS}/platforms")
@@ -62,12 +62,9 @@ function(qt6_android_generate_deployment_settings target)
list(GET plugin_dir_files 0 android_platform_plugin_path)
message(STATUS "Found android platform plugin at: ${android_platform_plugin_path}")
endif()
- set(qt_android_install_dir "${qt_path}")
- else()
- # Building from source, use the same install prefix.
- set(qt_android_install_dir "${CMAKE_INSTALL_PREFIX}")
endif()
+ set(qt_android_install_dir "${QT6_INSTALL_PREFIX}")
file(TO_CMAKE_PATH "${qt_android_install_dir}" qt_android_install_dir_native)
string(APPEND file_contents
" \"qt\": \"${qt_android_install_dir_native}\",\n")
@@ -281,7 +278,7 @@ function(qt6_android_add_apk_target target)
COMMAND ${CMAKE_COMMAND}
-E copy $<TARGET_FILE:${target}>
"${apk_dir}/libs/${CMAKE_ANDROID_ARCH_ABI}/$<TARGET_FILE_NAME:${target}>"
- COMMENT "Copying ${target} binarty to apk folder"
+ COMMENT "Copying ${target} binary to apk folder"
)
add_custom_target(${target}_make_apk
diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake
index 7a8fe80671..a74b212ab2 100644
--- a/src/corelib/Qt6CoreMacros.cmake
+++ b/src/corelib/Qt6CoreMacros.cmake
@@ -1106,6 +1106,9 @@ function(__qt_propagate_generated_resource target resource_name generated_source
set(resource_target "${target}_resources_${resource_count}")
add_library("${resource_target}" OBJECT "${generated_source_code}")
+ target_compile_definitions("${resource_target}" PRIVATE
+ "$<TARGET_PROPERTY:${QT_CMAKE_EXPORT_NAMESPACE}::Core,INTERFACE_COMPILE_DEFINITIONS>"
+ )
set_property(TARGET ${resource_target} APPEND PROPERTY _qt_resource_name ${resource_name})
# Save the path to the generated source file, relative to the the current build dir.
diff --git a/src/corelib/doc/snippets/cmake-macros/examples.cmake b/src/corelib/doc/snippets/cmake-macros/examples.cmake
index 685b29db01..7515d7fdb2 100644
--- a/src/corelib/doc/snippets/cmake-macros/examples.cmake
+++ b/src/corelib/doc/snippets/cmake-macros/examples.cmake
@@ -81,7 +81,7 @@ qt_add_executable(simpleapp main.cpp)
#! [qt_add_executable_deferred]
qt_add_executable(complexapp MANUAL_FINALIZATION complex.cpp)
set_target_properties(complexapp PROPERTIES OUTPUT_NAME Complexify)
-qt_finalize_target(complexapp)
+qt_finalize_executable(complexapp)
#! [qt_add_executable_deferred]
#! [qt_android_deploy_basic]
diff --git a/src/corelib/doc/src/json.qdoc b/src/corelib/doc/src/json.qdoc
index a32772f910..e7d60841b0 100644
--- a/src/corelib/doc/src/json.qdoc
+++ b/src/corelib/doc/src/json.qdoc
@@ -40,9 +40,7 @@
now widely used as a data exchange format on the internet.
The JSON support in Qt provides an easy to use C++ API to parse,
- modify and save JSON data. It also contains support for saving this
- data in a binary format that is directly "mmap"-able and very fast to
- access.
+ modify and save JSON data.
More details about the JSON data format can be found at \l{http://json.org}{json.org}
and in \l{http://tools.ietf.org/html/rfc4627}{RFC-4627}.
diff --git a/src/corelib/doc/src/qt6-changes.qdoc b/src/corelib/doc/src/qt6-changes.qdoc
index d789f42fc5..a0b8888e25 100644
--- a/src/corelib/doc/src/qt6-changes.qdoc
+++ b/src/corelib/doc/src/qt6-changes.qdoc
@@ -307,7 +307,7 @@
\section1 String related classes
- \section2 QStringView
+ \section2 The QStringView class
Starting with Qt6 it is generally recommended to use \l QStringView over
\c QStringRef. \l QStringView references a contiguous portion of a UTF-16
@@ -332,7 +332,7 @@
string += ...;
\endcode
- \section2 QStringRef
+ \section2 The QStringRef class
In Qt6 \l QStringRef got removed from Qt Core. To ease porting of existing
applications without touching the whole code-base, the \c QStringRef class
@@ -394,7 +394,7 @@
\section1 QFuture and Related Classes
- \section2 QFuture
+ \section2 The QFuture class
To avoid unintended usage of QFuture, there were some changes to
QFuture API in Qt 6, which may introduce source compatibility breaks.
@@ -461,14 +461,14 @@
\endlist
- \section2 QPromise
+ \section2 The QPromise class
In Qt 6, the new QPromise class should be used instead of unofficial
QFutureInterface as a "setter" counterpart of QFuture.
\section1 IO Classes
- \section2 QProcess
+ \section2 The QProcess class
In Qt 6, the QProcess::start() overload that interprets a single command string
by splitting it into program name and arguments is renamed to QProcess::startCommand().
@@ -499,7 +499,7 @@
\section1 Meta-Type system
- \section2 QVariant
+ \section2 The QVariant class
\c QVariant has been rewritten to use \c QMetaType for all of its operations. This implies
behavior changes in a few methods:
@@ -520,7 +520,7 @@
\endlist
- \section2 QMetaType
+ \section2 The QMetaType class
In Qt 6, registration of comparators, and \cQDebug and \QDataStream streaming operators is
done automatically. Consequently, \c QMetaType::registerEqualsComparator(),
@@ -546,7 +546,7 @@
\section1 Regular expression classes
- \section2 QRegularExpression
+ \section2 The QRegularExpression class
In Qt6, all methods taking the \c QRegExp got removed from our code-base.
Therefore it is very likely that you will have to port your application or
@@ -777,7 +777,7 @@
{QRegularExpression::UseUnicodePropertiesOption}
pattern option.
- \section2 QRegExp
+ \section2 The QRegExp class
In Qt6 \l QRegExp got removed from Qt Core. If your application cannot be
ported right now, \c QRegExp still exists in Qt5Compat to keep these
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index bcfc6ada2e..74acb1e06f 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -479,6 +479,14 @@ static_assert((std::is_same<qsizetype, qptrdiff>::value));
\since 4.2
Returns \c true if the flag \a flag is set, otherwise \c false.
+
+ \note if \a flag contains multiple bits set to 1 (for instance, if
+ it's an enumerator equal to the bitwise-OR of other enumerators)
+ then this function will return \c true if and only if all the bits
+ are set in this flags object. On the other hand, if \a flag contains
+ no bits set to 1 (that is, its value as a integer is 0), then this
+ function will return \c true if and only if this flags object also
+ has no bits set to 1.
*/
/*!
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 97d79f4b1e..dd6fccd678 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -728,10 +728,26 @@
/*!
\enum Qt::TimeSpec
- \value LocalTime Locale dependent time (Timezones and Daylight Savings Time).
- \value UTC Coordinated Universal Time, replaces Greenwich Mean Time.
+ \value LocalTime Local time, controlled by a system time-zone setting.
+ \value UTC Coordinated Universal Time.
\value OffsetFromUTC An offset in seconds from Coordinated Universal Time.
- \value TimeZone A named time zone using a specific set of Daylight Savings rules.
+ \value TimeZone A named time zone.
+
+ Both LocalTime and TimeZone will take care of transitions, such as
+ the start and end of daylight-saving time. UTC is the standard
+ time relative to which time-zones are usually specified: Greenwich
+ Mean Time has zero offset from it. Neither UTC nor OffsetFromUTC
+ has any transitions.
+
+ \note After a change to the system time-zone setting, the behavior
+ of LocalTime-based QDateTime objects created before the change is
+ undefined: QDateTime may have cached data that the change
+ invalidates. (This is not triggered by transitions of the system
+ time-zone.) In long-running processes, updates to the system's
+ time-zone data (e.g. when politicians change the rules for a zone)
+ may likewise lead to conflicts between the updated time-zone
+ information and data cached by QDateTime objects created before
+ the update, using either LocalTime or TimeZone.
*/
/*!
diff --git a/src/corelib/global/qrandom.cpp b/src/corelib/global/qrandom.cpp
index ca16566c1c..7f85813716 100644
--- a/src/corelib/global/qrandom.cpp
+++ b/src/corelib/global/qrandom.cpp
@@ -376,7 +376,6 @@ struct QRandomGenerator::SystemAndGlobalGenerators
constexpr SystemAndGlobalGenerators g = {};
Q_UNUSED(g);
- static_assert(std::is_literal_type<SystemAndGlobalGenerators>::value);
#endif
}
diff --git a/src/corelib/global/qsimd.cpp b/src/corelib/global/qsimd.cpp
index c2db117853..13b35aa8a7 100644
--- a/src/corelib/global/qsimd.cpp
+++ b/src/corelib/global/qsimd.cpp
@@ -132,7 +132,7 @@ static inline quint64 detectProcessorFeatures()
#if defined(Q_OS_LINUX)
# if defined(Q_PROCESSOR_ARM_V8) && defined(Q_PROCESSOR_ARM_64)
- features |= Q_UINT64_C(1) << CpuFeatureNEON; // NEON is always available on ARMv8 64bit.
+ features |= CpuFeatureNEON; // NEON is always available on ARMv8 64bit.
# endif
int auxv = qt_safe_open("/proc/self/auxv", O_RDONLY);
if (auxv != -1) {
@@ -151,17 +151,17 @@ static inline quint64 detectProcessorFeatures()
# if defined(Q_PROCESSOR_ARM_V8) && defined(Q_PROCESSOR_ARM_64)
// For Aarch64:
if (vector[i+1] & HWCAP_CRC32)
- features |= Q_UINT64_C(1) << CpuFeatureCRC32;
+ features |= CpuFeatureCRC32;
# endif
// Aarch32, or ARMv7 or before:
if (vector[i+1] & HWCAP_NEON)
- features |= Q_UINT64_C(1) << CpuFeatureNEON;
+ features |= CpuFeatureNEON;
}
# if defined(Q_PROCESSOR_ARM_32)
// For Aarch32:
if (vector[i] == AT_HWCAP2) {
if (vector[i+1] & HWCAP2_CRC32)
- features |= Q_UINT64_C(1) << CpuFeatureCRC32;
+ features |= CpuFeatureCRC32;
}
# endif
}
@@ -174,10 +174,10 @@ static inline quint64 detectProcessorFeatures()
#endif
#if defined(__ARM_NEON__)
- features |= Q_UINT64_C(1) << CpuFeatureNEON;
+ features |= CpuFeatureNEON;
#endif
#if defined(__ARM_FEATURE_CRC32)
- features |= Q_UINT64_C(1) << CpuFeatureCRC32;
+ features |= CpuFeatureCRC32;
#endif
return features;
@@ -548,18 +548,18 @@ static inline quint64 detectProcessorFeatures()
quint64 flags = 0;
#if defined __mips_dsp
- flags |= Q_UINT64_C(1) << CpuFeatureDSP;
+ flags |= CpuFeatureDSP;
# if defined __mips_dsp_rev && __mips_dsp_rev >= 2
- flags |= Q_UINT64_C(1) << CpuFeatureDSPR2;
+ flags |= CpuFeatureDSPR2;
# elif defined(Q_OS_LINUX)
if (procCpuinfoContains("cpu model", "MIPS 74Kc") || procCpuinfoContains("cpu model", "MIPS 74Kf"))
- flags |= Q_UINT64_C(1) << CpuFeatureDSPR2;
+ flags |= CpuFeatureDSPR2;
# endif
#elif defined(Q_OS_LINUX)
if (procCpuinfoContains("ASEs implemented", "dsp")) {
- flags |= Q_UINT64_C(1) << CpuFeatureDSP;
+ flags |= CpuFeatureDSP;
if (procCpuinfoContains("cpu model", "MIPS 74Kc") || procCpuinfoContains("cpu model", "MIPS 74Kf"))
- flags |= Q_UINT64_C(1) << CpuFeatureDSPR2;
+ flags |= CpuFeatureDSPR2;
}
#endif
diff --git a/src/corelib/global/qtypeinfo.h b/src/corelib/global/qtypeinfo.h
index e5914414f2..ec43586765 100644
--- a/src/corelib/global/qtypeinfo.h
+++ b/src/corelib/global/qtypeinfo.h
@@ -227,8 +227,8 @@ template <typename, typename = void>
struct is_container : std::false_type {};
template <typename T>
struct is_container<T, std::void_t<
- std::is_convertible<decltype(std::declval<T>().begin() != std::declval<T>().end()), bool>,
- typename T::value_type
+ typename T::value_type,
+ std::is_convertible<decltype(std::declval<T>().begin() != std::declval<T>().end()), bool>
>> : std::true_type {};
@@ -258,7 +258,11 @@ struct expand_operator_equal_container : expand_operator_equal_tuple<T> {};
// if T::value_type exists, check first T::value_type, then T itself
template<typename T>
struct expand_operator_equal_container<T, true> :
- std::conjunction<expand_operator_equal<typename T::value_type>, expand_operator_equal_tuple<T>> {};
+ std::conjunction<
+ std::disjunction<
+ std::is_same<T, typename T::value_type>, // avoid endless recursion
+ expand_operator_equal<typename T::value_type>
+ >, expand_operator_equal_tuple<T>> {};
// recursively check the template arguments of a tuple like object
template<typename ...T>
@@ -294,7 +298,12 @@ template<typename T, bool>
struct expand_operator_less_than_container : expand_operator_less_than_tuple<T> {};
template<typename T>
struct expand_operator_less_than_container<T, true> :
- std::conjunction<expand_operator_less_than<typename T::value_type>, expand_operator_less_than_tuple<T>> {};
+ std::conjunction<
+ std::disjunction<
+ std::is_same<T, typename T::value_type>,
+ expand_operator_less_than<typename T::value_type>
+ >, expand_operator_less_than_tuple<T>
+ > {};
template<typename ...T>
using expand_operator_less_than_recursive = std::conjunction<expand_operator_less_than<T>...>;
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp
index 7da824d9c6..a033f89230 100644
--- a/src/corelib/io/qdir.cpp
+++ b/src/corelib/io/qdir.cpp
@@ -952,22 +952,29 @@ QString QDir::toNativeSeparators(const QString &pathName)
QString QDir::fromNativeSeparators(const QString &pathName)
{
#if defined(Q_OS_WIN)
- int i = pathName.indexOf(QLatin1Char('\\'));
+ const QChar nativeSeparator = u'\\';
+ int i = pathName.indexOf(nativeSeparator);
if (i != -1) {
QString n(pathName);
- if (n.startsWith(QLatin1String("\\\\?\\"))) {
- n.remove(0, 4);
- i = n.indexOf(QLatin1Char('\\'));
- if (i == -1)
+ const QStringView uncPrefix(uR"(\\?\UNC\)");
+ const QStringView extendedLengthPathPrefix(uR"(\\?\)");
+ if (n.startsWith(uncPrefix)) {
+ // Keep the initial double-slash, chop out the rest of the prefix.
+ n = n.remove(2, uncPrefix.size() - 2);
+ if ((i = n.indexOf(nativeSeparator)) == -1)
+ return n;
+ } else if (n.startsWith(extendedLengthPathPrefix)) {
+ n = n.sliced(extendedLengthPathPrefix.size());
+ if ((i = n.indexOf(nativeSeparator)) == -1)
return n;
}
QChar * const data = n.data();
- data[i++] = QLatin1Char('/');
+ data[i++] = u'/';
for (; i < n.length(); ++i) {
- if (data[i] == QLatin1Char('\\'))
- data[i] = QLatin1Char('/');
+ if (data[i] == nativeSeparator)
+ data[i] = u'/';
}
return n;
@@ -2312,16 +2319,8 @@ static QString qt_cleanPath(const QString &path, bool *ok)
{
if (path.isEmpty())
return path;
- QString name = path;
-#if defined (Q_OS_WIN)
- if (name.startsWith(QLatin1String("\\\\?\\")))
- name.remove(0, 4);
-#endif
-
- QChar dir_separator = QDir::separator();
- if (dir_separator != QLatin1Char('/'))
- name.replace(dir_separator, QLatin1Char('/'));
+ QString name = QDir::fromNativeSeparators(path);
QString ret = qt_normalizePathSegments(name, OSSupportsUncPaths ? QDirPrivate::AllowUncPaths : QDirPrivate::DefaultNormalization, ok);
// Strip away last slash except for root directories
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index 167b21f8b1..e0c41bdb38 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -311,7 +311,7 @@ mtime(const T &statBuffer, int)
static int qt_real_statx(int fd, const char *pathname, int flags, struct statx *statxBuffer)
{
unsigned mask = STATX_BASIC_STATS | STATX_BTIME;
- int ret = statx(fd, pathname, flags, mask, statxBuffer);
+ int ret = statx(fd, pathname, flags | AT_NO_AUTOMOUNT, mask, statxBuffer);
return ret == -1 ? -errno : 0;
}
diff --git a/src/corelib/io/qfilesystementry.cpp b/src/corelib/io/qfilesystementry.cpp
index 9b474b25b1..83f8a86439 100644
--- a/src/corelib/io/qfilesystementry.cpp
+++ b/src/corelib/io/qfilesystementry.cpp
@@ -142,12 +142,6 @@ void QFileSystemEntry::resolveFilePath() const
if (m_filePath.isEmpty() && !m_nativeFilePath.isEmpty()) {
#if defined(QFILESYSTEMENTRY_NATIVE_PATH_IS_UTF16)
m_filePath = QDir::fromNativeSeparators(m_nativeFilePath);
-#ifdef Q_OS_WIN
- if (m_filePath.startsWith(QLatin1String("//?/UNC/")))
- m_filePath = m_filePath.remove(2,6);
- if (m_filePath.startsWith(QLatin1String("//?/")))
- m_filePath = m_filePath.remove(0,4);
-#endif
#else
m_filePath = QDir::fromNativeSeparators(QFile::decodeName(m_nativeFilePath));
#endif
diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp
index 5c8c0e6a27..d07897141c 100644
--- a/src/corelib/io/qiodevice.cpp
+++ b/src/corelib/io/qiodevice.cpp
@@ -290,10 +290,18 @@ QIODevicePrivate::~QIODevicePrivate()
*/
/*!
+ \class QIODeviceBase
+ \inheaderfile QIODevice
+ \inmodule QtCore
+ \brief Base class for QIODevice that provides flags describing the mode in
+ which a device is opened.
+*/
+
+/*!
\enum QIODeviceBase::OpenModeFlag
- This enum is used with open() to describe the mode in which a device
- is opened. It is also returned by openMode().
+ This enum is used with QIODevice::open() to describe the mode in which a
+ device is opened. It is also returned by QIODevice::openMode().
\value NotOpen The device is not open.
\value ReadOnly The device is open for reading.
@@ -519,7 +527,7 @@ bool QIODevice::isSequential() const
\sa OpenMode
*/
-QIODevice::OpenMode QIODevice::openMode() const
+QIODeviceBase::OpenMode QIODevice::openMode() const
{
return d_func()->openMode;
}
@@ -531,7 +539,7 @@ QIODevice::OpenMode QIODevice::openMode() const
\sa openMode(), OpenMode
*/
-void QIODevice::setOpenMode(OpenMode openMode)
+void QIODevice::setOpenMode(QIODeviceBase::OpenMode openMode)
{
Q_D(QIODevice);
#if defined QIODEVICE_DEBUG
@@ -581,7 +589,7 @@ bool QIODevice::isTextModeEnabled() const
default, this function returns \c false if openMode() returns
\c NotOpen.
- \sa openMode(), OpenMode
+ \sa openMode(), QIODeviceBase::OpenMode
*/
bool QIODevice::isOpen() const
{
@@ -766,9 +774,9 @@ bool QIODevicePrivate::allWriteBuffersEmpty() const
otherwise returns \c false. This function should be called from any
reimplementations of open() or other functions that open the device.
- \sa openMode(), OpenMode
+ \sa openMode(), QIODeviceBase::OpenMode
*/
-bool QIODevice::open(OpenMode mode)
+bool QIODevice::open(QIODeviceBase::OpenMode mode)
{
Q_D(QIODevice);
d->openMode = mode;
@@ -789,7 +797,7 @@ bool QIODevice::open(OpenMode mode)
First emits aboutToClose(), then closes the device and sets its
OpenMode to NotOpen. The error string is also reset.
- \sa setOpenMode(), OpenMode
+ \sa setOpenMode(), QIODeviceBase::OpenMode
*/
void QIODevice::close()
{
diff --git a/src/corelib/io/qiodevice.h b/src/corelib/io/qiodevice.h
index e4388b8972..fd97e8d1e5 100644
--- a/src/corelib/io/qiodevice.h
+++ b/src/corelib/io/qiodevice.h
@@ -78,7 +78,7 @@ public:
#endif
virtual ~QIODevice();
- OpenMode openMode() const;
+ QIODeviceBase::OpenMode openMode() const;
void setTextModeEnabled(bool enabled);
bool isTextModeEnabled() const;
@@ -95,7 +95,7 @@ public:
int currentWriteChannel() const;
void setCurrentWriteChannel(int channel);
- virtual bool open(OpenMode mode);
+ virtual bool open(QIODeviceBase::OpenMode mode);
virtual void close();
// ### Qt 7 - QTBUG-76492: pos() and seek() should not be virtual, and
@@ -159,7 +159,7 @@ protected:
virtual qint64 skipData(qint64 maxSize);
virtual qint64 writeData(const char *data, qint64 len) = 0;
- void setOpenMode(OpenMode openMode);
+ void setOpenMode(QIODeviceBase::OpenMode openMode);
void setErrorString(const QString &errorString);
diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp
index bdd128a88c..1e7e67b625 100644
--- a/src/corelib/io/qtemporaryfile.cpp
+++ b/src/corelib/io/qtemporaryfile.cpp
@@ -78,7 +78,7 @@ typedef int NativeFileHandle;
QTemporaryFileName::QTemporaryFileName(const QString &templateName)
{
// Ensure there is a placeholder mask
- QString qfilename = templateName;
+ QString qfilename = QDir::fromNativeSeparators(templateName);
uint phPos = qfilename.length();
uint phLength = 0;
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index 0d406c057e..ce3f21d43e 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -413,7 +413,6 @@
#include "qstringlist.h"
#include "qdebug.h"
#include "qhash.h"
-#include "qdir.h" // for QDir::fromNativeSeparators
#include "qdatastream.h"
#include "private/qipaddress_p.h"
#include "qurlquery.h"
@@ -3296,6 +3295,25 @@ bool QUrl::isDetached() const
return !d || d->ref.loadRelaxed() == 1;
}
+static QString fromNativeSeparators(const QString &pathName)
+{
+#if defined(Q_OS_WIN)
+ QString result(pathName);
+ const QChar nativeSeparator = u'\\';
+ auto i = result.indexOf(nativeSeparator);
+ if (i != -1) {
+ QChar * const data = result.data();
+ const auto length = result.length();
+ for (; i < length; ++i) {
+ if (data[i] == nativeSeparator)
+ data[i] = u'/';
+ }
+ }
+ return result;
+#else
+ return pathName;
+#endif
+}
/*!
Returns a QUrl representation of \a localFile, interpreted as a local
@@ -3334,7 +3352,7 @@ QUrl QUrl::fromLocalFile(const QString &localFile)
if (localFile.isEmpty())
return url;
QString scheme = fileScheme();
- QString deslashified = QDir::fromNativeSeparators(localFile);
+ QString deslashified = fromNativeSeparators(localFile);
// magic for drives on windows
if (deslashified.length() > 1 && deslashified.at(1) == QLatin1Char(':') && deslashified.at(0) != QLatin1Char('/')) {
diff --git a/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp b/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp
index 09deee4429..72ff6c1f36 100644
--- a/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp
+++ b/src/corelib/itemmodels/qconcatenatetablesproxymodel.cpp
@@ -622,9 +622,14 @@ void QConcatenateTablesProxyModelPrivate::_q_slotDataChanged(const QModelIndex &
Q_Q(QConcatenateTablesProxyModel);
Q_ASSERT(from.isValid());
Q_ASSERT(to.isValid());
+ if (from.column() >= m_columnCount)
+ return;
+ QModelIndex adjustedTo = to;
+ if (to.column() >= m_columnCount)
+ adjustedTo = to.siblingAtColumn(m_columnCount - 1);
const QModelIndex myFrom = q->mapFromSource(from);
Q_ASSERT(q->checkIndex(myFrom, QAbstractItemModel::CheckIndexOption::IndexIsValid));
- const QModelIndex myTo = q->mapFromSource(to);
+ const QModelIndex myTo = q->mapFromSource(adjustedTo);
Q_ASSERT(q->checkIndex(myTo, QAbstractItemModel::CheckIndexOption::IndexIsValid));
emit q->dataChanged(myFrom, myTo, roles);
}
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
index fb09c22798..2f0df724bc 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
@@ -173,7 +173,7 @@ public:
int filter_column;
int filter_role;
- QRegularExpression filter_data;
+ QRegularExpression filter_regularexpression;
QModelIndex last_top_source;
bool filter_recursive;
@@ -193,6 +193,17 @@ public:
void remove_from_mapping(const QModelIndex &source_parent);
+ /*!
+ * Legacy: changing the pattern through a string does not change the
+ * case sensitivity.
+ */
+ void set_filter_pattern(const QString &pattern)
+ {
+ filter_regularexpression.setPattern(pattern);
+ filter_regularexpression.setPatternOptions(filter_regularexpression.patternOptions()
+ & QRegularExpression::CaseInsensitiveOption);
+ }
+
inline QHash<QModelIndex, Mapping *>::const_iterator index_to_iterator(
const QModelIndex &proxy_index) const
{
@@ -826,8 +837,9 @@ void QSortFilterProxyModelPrivate::insert_source_items(
q->beginInsertColumns(proxy_parent, proxy_start, proxy_end);
}
- for (int i = 0; i < source_items.size(); ++i)
- proxy_to_source.insert(proxy_start + i, source_items.at(i));
+ // TODO: use the range QList::insert() overload once it is implemented (QTBUG-58633).
+ proxy_to_source.insert(proxy_start, source_items.size(), 0);
+ std::copy(source_items.cbegin(), source_items.cend(), proxy_to_source.begin() + proxy_start);
build_source_to_proxy_mapping(proxy_to_source, source_to_proxy, proxy_start);
@@ -1171,9 +1183,10 @@ void QSortFilterProxyModelPrivate::update_persistent_indexes(
*/
void QSortFilterProxyModelPrivate::filter_about_to_be_changed(const QModelIndex &source_parent)
{
- if (!filter_data.pattern().isEmpty() &&
- source_index_mapping.constFind(source_parent) == source_index_mapping.constEnd())
- create_mapping(source_parent);
+ if (!filter_regularexpression.pattern().isEmpty()
+ && source_index_mapping.constFind(source_parent) == source_index_mapping.constEnd()) {
+ create_mapping(source_parent);
+ }
}
@@ -1713,7 +1726,10 @@ void QSortFilterProxyModelPrivate::_q_sourceColumnsRemoved(
source_sort_column = -1;
}
- proxy_sort_column = q->mapFromSource(model->index(0,source_sort_column, source_parent)).column();
+ if (source_sort_column >= 0)
+ proxy_sort_column = q->mapFromSource(model->index(0,source_sort_column, source_parent)).column();
+ else
+ proxy_sort_column = -1;
}
void QSortFilterProxyModelPrivate::_q_sourceColumnsAboutToBeMoved(
@@ -2489,8 +2505,8 @@ Qt::SortOrder QSortFilterProxyModel::sortOrder() const
\property QSortFilterProxyModel::filterRegularExpression
\brief the QRegularExpression used to filter the contents of the source model
- Setting this property overwrites the current
- \l{QSortFilterProxyModel::filterCaseSensitivity}{filterCaseSensitivity}.
+ Setting this property through the QRegularExpression overload overwrites the
+ current \l{QSortFilterProxyModel::filterCaseSensitivity}{filterCaseSensitivity}.
By default, the QRegularExpression is an empty string matching all contents.
If no QRegularExpression or an empty string is set, everything in the source
@@ -2501,14 +2517,14 @@ Qt::SortOrder QSortFilterProxyModel::sortOrder() const
QRegularExpression QSortFilterProxyModel::filterRegularExpression() const
{
Q_D(const QSortFilterProxyModel);
- return d->filter_data;
+ return d->filter_regularexpression;
}
void QSortFilterProxyModel::setFilterRegularExpression(const QRegularExpression &regularExpression)
{
Q_D(QSortFilterProxyModel);
d->filter_about_to_be_changed();
- d->filter_data = regularExpression;
+ d->filter_regularexpression = regularExpression;
d->filter_changed(QSortFilterProxyModelPrivate::Direction::Rows);
}
#endif
@@ -2555,20 +2571,21 @@ void QSortFilterProxyModel::setFilterKeyColumn(int column)
Qt::CaseSensitivity QSortFilterProxyModel::filterCaseSensitivity() const
{
Q_D(const QSortFilterProxyModel);
- return d->filter_data.patternOptions() & QRegularExpression::CaseInsensitiveOption ?
- Qt::CaseInsensitive : Qt::CaseSensitive;
+ return d->filter_regularexpression.patternOptions() & QRegularExpression::CaseInsensitiveOption
+ ? Qt::CaseInsensitive
+ : Qt::CaseSensitive;
}
void QSortFilterProxyModel::setFilterCaseSensitivity(Qt::CaseSensitivity cs)
{
Q_D(QSortFilterProxyModel);
- QRegularExpression::PatternOptions o = QRegularExpression::NoPatternOption;
- if (cs == Qt::CaseInsensitive)
- o = QRegularExpression::CaseInsensitiveOption;
- if (o == d->filter_data.patternOptions())
+ QRegularExpression::PatternOptions options = d->filter_regularexpression.patternOptions();
+ options.setFlag(QRegularExpression::CaseInsensitiveOption, cs == Qt::CaseInsensitive);
+ if (d->filter_regularexpression.patternOptions() == options)
return;
+
d->filter_about_to_be_changed();
- d->filter_data.setPatternOptions(o);
+ d->filter_regularexpression.setPatternOptions(options);
d->filter_changed(QSortFilterProxyModelPrivate::Direction::Rows);
emit filterCaseSensitivityChanged(cs);
}
@@ -2649,15 +2666,16 @@ void QSortFilterProxyModel::setSortLocaleAware(bool on)
This method should be preferred for new code as it will use
QRegularExpression internally.
+ This method will reset the regular expression options
+ but respect case sensitivity.
+
\sa setFilterCaseSensitivity(), setFilterWildcard(), setFilterFixedString(), filterRegularExpression()
*/
void QSortFilterProxyModel::setFilterRegularExpression(const QString &pattern)
{
Q_D(QSortFilterProxyModel);
d->filter_about_to_be_changed();
- QRegularExpression rx(pattern,
- d->filter_data.patternOptions() & QRegularExpression::CaseInsensitiveOption);
- d->filter_data.setPattern(pattern);
+ d->set_filter_pattern(pattern);
d->filter_changed(QSortFilterProxyModelPrivate::Direction::Rows);
}
#endif
@@ -2666,14 +2684,17 @@ void QSortFilterProxyModel::setFilterRegularExpression(const QString &pattern)
Sets the wildcard expression used to filter the contents
of the source model to the given \a pattern.
+ This method will reset the regular expression options
+ but respect case sensitivity.
+
\sa setFilterCaseSensitivity(), setFilterRegularExpression(), setFilterFixedString(), filterRegularExpression()
*/
void QSortFilterProxyModel::setFilterWildcard(const QString &pattern)
{
Q_D(QSortFilterProxyModel);
d->filter_about_to_be_changed();
- QString p = QRegularExpression::wildcardToRegularExpression(pattern, QRegularExpression::UnanchoredWildcardConversion);
- d->filter_data.setPattern(p);
+ d->set_filter_pattern(QRegularExpression::wildcardToRegularExpression(
+ pattern, QRegularExpression::UnanchoredWildcardConversion));
d->filter_changed(QSortFilterProxyModelPrivate::Direction::Rows);
}
@@ -2681,13 +2702,16 @@ void QSortFilterProxyModel::setFilterWildcard(const QString &pattern)
Sets the fixed string used to filter the contents
of the source model to the given \a pattern.
+ This method will reset the regular expression options
+ but respect case sensitivity.
+
\sa setFilterCaseSensitivity(), setFilterRegularExpression(), setFilterWildcard(), filterRegularExpression()
*/
void QSortFilterProxyModel::setFilterFixedString(const QString &pattern)
{
Q_D(QSortFilterProxyModel);
d->filter_about_to_be_changed();
- d->filter_data.setPattern(QRegularExpression::escape(pattern));
+ d->set_filter_pattern(QRegularExpression::escape(pattern));
d->filter_changed(QSortFilterProxyModelPrivate::Direction::Rows);
}
@@ -2999,23 +3023,25 @@ bool QSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &
{
Q_D(const QSortFilterProxyModel);
- if (d->filter_data.pattern().isEmpty())
+ if (d->filter_regularexpression.pattern().isEmpty())
return true;
+
+ int column_count = d->model->columnCount(source_parent);
if (d->filter_column == -1) {
- int column_count = d->model->columnCount(source_parent);
for (int column = 0; column < column_count; ++column) {
QModelIndex source_index = d->model->index(source_row, column, source_parent);
QString key = d->model->data(source_index, d->filter_role).toString();
- if (d->filter_data.match(key).hasMatch())
+ if (key.contains(d->filter_regularexpression))
return true;
}
return false;
}
- QModelIndex source_index = d->model->index(source_row, d->filter_column, source_parent);
- if (!source_index.isValid()) // the column may not exist
+
+ if (d->filter_column >= column_count) // the column may not exist
return true;
+ QModelIndex source_index = d->model->index(source_row, d->filter_column, source_parent);
QString key = d->model->data(source_index, d->filter_role).toString();
- return d->filter_data.match(key).hasMatch();
+ return key.contains(d->filter_regularexpression);
}
/*!
diff --git a/src/corelib/kernel/qcfsocketnotifier.cpp b/src/corelib/kernel/qcfsocketnotifier.cpp
index 920ec9cd86..13fe30d0cd 100644
--- a/src/corelib/kernel/qcfsocketnotifier.cpp
+++ b/src/corelib/kernel/qcfsocketnotifier.cpp
@@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE
Socket Notifiers
*************************************************************************/
void qt_mac_socket_callback(CFSocketRef s, CFSocketCallBackType callbackType, CFDataRef,
- const void *, void *info)
+ const void *data, void *info)
{
QCFSocketNotifier *cfSocketNotifier = static_cast<QCFSocketNotifier *>(info);
@@ -61,7 +61,15 @@ void qt_mac_socket_callback(CFSocketRef s, CFSocketCallBackType callbackType, CF
// notification after we've successfully disabled the CFSocket, but our Qt
// notifier is now gone. The upshot is we have to check the notifier
// every time.
- if (callbackType == kCFSocketReadCallBack) {
+ if (callbackType == kCFSocketConnectCallBack) {
+ // The data pointer will be non-null on connection error
+ if (data) {
+ if (socketInfo->readNotifier)
+ QCoreApplication::sendEvent(socketInfo->readNotifier, &notifierEvent);
+ if (socketInfo->writeNotifier)
+ QCoreApplication::sendEvent(socketInfo->writeNotifier, &notifierEvent);
+ }
+ } else if (callbackType == kCFSocketReadCallBack) {
if (socketInfo->readNotifier && socketInfo->readEnabled) {
socketInfo->readEnabled = false;
QCoreApplication::sendEvent(socketInfo->readNotifier, &notifierEvent);
@@ -152,7 +160,7 @@ void QCFSocketNotifier::registerSocketNotifier(QSocketNotifier *notifier)
// Create CFSocket, specify that we want both read and write callbacks (the callbacks
// are enabled/disabled later on).
- const int callbackTypes = kCFSocketReadCallBack | kCFSocketWriteCallBack;
+ const int callbackTypes = kCFSocketConnectCallBack | kCFSocketReadCallBack | kCFSocketWriteCallBack;
CFSocketContext context = {0, this, 0, 0, 0};
socketInfo->socket = CFSocketCreateWithNative(kCFAllocatorDefault, nativeSocket, callbackTypes, qt_mac_socket_callback, &context);
if (CFSocketIsValid(socketInfo->socket) == false) {
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 67cc56449a..9c1f2afcb1 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -252,6 +252,7 @@ Q_GLOBAL_STATIC(QStartUpFuncList, preRList)
typedef QList<QtCleanUpFunction> QVFuncList;
Q_GLOBAL_STATIC(QVFuncList, postRList)
static QBasicMutex globalRoutinesMutex;
+static bool preRoutinesCalled = false;
/*!
\internal
@@ -265,8 +266,10 @@ void qAddPreRoutine(QtStartUpFunction p)
if (!list)
return;
- if (QCoreApplication::instance())
+ if (preRoutinesCalled) {
+ Q_ASSERT(QCoreApplication::instance());
p();
+ }
// Due to C++11 parallel dynamic initialization, this can be called
// from multiple threads.
@@ -294,6 +297,9 @@ void qRemovePostRoutine(QtCleanUpFunction p)
static void qt_call_pre_routines()
{
+ // After will be allowed invoke QtStartUpFunction when calling qAddPreRoutine
+ preRoutinesCalled = true;
+
if (!preRList.exists())
return;
@@ -855,6 +861,8 @@ void QCoreApplicationPrivate::init()
*/
QCoreApplication::~QCoreApplication()
{
+ preRoutinesCalled = false;
+
qt_call_post_routines();
self = nullptr;
diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
index d547642e7d..28d11d0576 100644
--- a/src/corelib/kernel/qeventdispatcher_win.cpp
+++ b/src/corelib/kernel/qeventdispatcher_win.cpp
@@ -492,13 +492,17 @@ bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags)
{
Q_D(QEventDispatcherWin32);
- d->interrupt.storeRelaxed(false);
+ // We don't know _when_ the interrupt occurred so we have to honor it.
+ const bool wasInterrupted = d->interrupt.fetchAndStoreRelaxed(false);
emit awake();
// To prevent livelocks, send posted events once per iteration.
// QCoreApplication::sendPostedEvents() takes care about recursions.
sendPostedEvents();
+ if (wasInterrupted)
+ return false;
+
auto threadData = d->threadData.loadRelaxed();
bool canWait;
bool retVal = false;
diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp
index 31c766b128..e6fb25c6b5 100644
--- a/src/corelib/kernel/qproperty.cpp
+++ b/src/corelib/kernel/qproperty.cpp
@@ -948,6 +948,29 @@ QString QPropertyBindingError::description() const
*/
/*!
+ \macro Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal)
+ \since 6.0
+ \relates QObjectBindableProperty
+ \brief Declares a \l QObjectBindableProperty inside \a containingClass
+ of type \a type with name \a name. If the optional argument \a signal is given,
+ this signal will be emitted when the property is marked dirty.
+
+ \sa {Qt's Property System}, {Qt Bindable Properties}
+*/
+
+/*!
+ \macro Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal)
+ \since 6.0
+ \relates QObjectBindableProperty
+ \brief Declares a \l QObjectBindableProperty inside \a containingClass
+ of type \a type with name \a name which is initialized to \a initialvalue.
+ If the optional argument \a signal is given, this signal will be emitted when
+ the property is marked dirty.
+
+ \sa {Qt's Property System}, {Qt Bindable Properties}
+*/
+
+/*!
\fn template <typename Class, typename T, auto offset, auto Callback> QObjectBindableProperty<Class, T, offset, Callback>::QObjectBindableProperty()
Constructs a property with a default constructed instance of T.
@@ -1126,6 +1149,8 @@ QString QPropertyBindingError::description() const
/*!
\class QPropertyAlias
\inmodule QtCore
+ \internal
+
\brief The QPropertyAlias class is a safe alias for a QProperty with same template parameter.
\ingroup tools
diff --git a/src/corelib/kernel/qsharedmemory_p.h b/src/corelib/kernel/qsharedmemory_p.h
index a248937037..e06e7e86f3 100644
--- a/src/corelib/kernel/qsharedmemory_p.h
+++ b/src/corelib/kernel/qsharedmemory_p.h
@@ -56,14 +56,20 @@
#include <QtCore/qstring.h>
#ifdef QT_NO_SHAREDMEMORY
-# ifndef QT_NO_SYSTEMSEMAPHORE
+# ifndef QT_NO_SYSTEMSEMAPHORE
+
+QT_BEGIN_NAMESPACE
+
namespace QSharedMemoryPrivate
{
int createUnixKeyFile(const QString &fileName);
QString makePlatformSafeKey(const QString &key,
const QString &prefix = QLatin1String("qipc_sharedmemory_"));
}
-#endif
+
+QT_END_NAMESPACE
+
+# endif
#else
#include "qsystemsemaphore.h"
diff --git a/src/corelib/kernel/qsharedmemory_systemv.cpp b/src/corelib/kernel/qsharedmemory_systemv.cpp
index 8149f20724..65ad23b9f6 100644
--- a/src/corelib/kernel/qsharedmemory_systemv.cpp
+++ b/src/corelib/kernel/qsharedmemory_systemv.cpp
@@ -109,7 +109,7 @@ key_t QSharedMemoryPrivate::handle()
0 already existed
1 created
*/
-int QSharedMemoryPrivate::createUnixKeyFile(const QString &fileName)
+int QT_PREPEND_NAMESPACE(QSharedMemoryPrivate)::createUnixKeyFile(const QString &fileName)
{
int fd = qt_safe_open(QFile::encodeName(fileName).constData(),
O_EXCL | O_CREAT | O_RDWR, 0640);
diff --git a/src/corelib/mimetypes/mime/generate.pl b/src/corelib/mimetypes/mime/generate.pl
index 1427658e59..4f2d7d5f2b 100644
--- a/src/corelib/mimetypes/mime/generate.pl
+++ b/src/corelib/mimetypes/mime/generate.pl
@@ -71,6 +71,10 @@ if (checkCommand("xmlstarlet")) {
# Minify the data before compressing
$cmd = "xmlstarlet sel -D -B -t -c / $fname";
$cmd .= "| $compress" if $compress;
+} elsif (checkCommand("xml")) {
+ # Minify the data before compressing
+ $cmd = "xml sel -D -B -t -c / $fname";
+ $cmd .= "| $compress" if $compress;
} elsif ($compress) {
$cmd = "$compress < $fname"
}
diff --git a/src/corelib/serialization/qjsonobject.cpp b/src/corelib/serialization/qjsonobject.cpp
index 0c4af59163..a06af5d02d 100644
--- a/src/corelib/serialization/qjsonobject.cpp
+++ b/src/corelib/serialization/qjsonobject.cpp
@@ -617,6 +617,7 @@ QJsonValue QJsonObject::takeImpl(T key)
if (!keyExists)
return QJsonValue(QJsonValue::Undefined);
+ detach();
const QJsonValue v = QJsonPrivate::Value::fromTrustedCbor(o->extractAt(index + 1));
removeAt(index / 2);
return v;
diff --git a/src/corelib/serialization/qjsonobject.h b/src/corelib/serialization/qjsonobject.h
index 1e6cc65227..e477345643 100644
--- a/src/corelib/serialization/qjsonobject.h
+++ b/src/corelib/serialization/qjsonobject.h
@@ -153,7 +153,7 @@ public:
bool operator<(const iterator& other) const
{ Q_ASSERT(item.o == other.item.o); return item.index < other.item.index; }
bool operator<=(const iterator& other) const
- { Q_ASSERT(item.o == other.item.o); return item.index < other.item.index; }
+ { Q_ASSERT(item.o == other.item.o); return item.index <= other.item.index; }
bool operator>(const iterator& other) const { return !(*this <= other); }
bool operator>=(const iterator& other) const { return !(*this < other); }
diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
index e56877082b..f298ef1702 100644
--- a/src/corelib/serialization/qxmlstream.cpp
+++ b/src/corelib/serialization/qxmlstream.cpp
@@ -1298,6 +1298,11 @@ inline int QXmlStreamReaderPrivate::fastScanName(int *prefix)
int n = 0;
uint c;
while ((c = getChar()) != StreamEOF) {
+ if (n >= 4096) {
+ // This is too long to be a sensible name, and
+ // can exhaust memory
+ return 0;
+ }
switch (c) {
case '\n':
case ' ':
diff --git a/src/corelib/serialization/qxmlstream.g b/src/corelib/serialization/qxmlstream.g
index b6417b080c..0051c6255b 100644
--- a/src/corelib/serialization/qxmlstream.g
+++ b/src/corelib/serialization/qxmlstream.g
@@ -237,6 +237,7 @@ bool QXmlStreamReaderPrivate::parse()
setType(QXmlStreamReader::EndElement);
Tag tag = tagStack_pop();
namespaceUri = tag.namespaceDeclaration.namespaceUri;
+ prefix = tag.namespaceDeclaration.prefix;
name = tag.name;
qualifiedName = tag.qualifiedName;
isEmptyElement = false;
@@ -1300,6 +1301,7 @@ etag ::= LANGLE SLASH qname space_opt RANGLE;
namespaceUri = tag.namespaceDeclaration.namespaceUri;
name = tag.name;
qualifiedName = tag.qualifiedName;
+ prefix = tag.namespaceDeclaration.prefix;
if (qualifiedName != symName(3))
raiseWellFormedError(QXmlStream::tr("Opening and ending tag mismatch."));
} break;
diff --git a/src/corelib/serialization/qxmlstreamparser_p.h b/src/corelib/serialization/qxmlstreamparser_p.h
index a5d8312390..d568f9d024 100644
--- a/src/corelib/serialization/qxmlstreamparser_p.h
+++ b/src/corelib/serialization/qxmlstreamparser_p.h
@@ -92,6 +92,7 @@ bool QXmlStreamReaderPrivate::parse()
setType(QXmlStreamReader::EndElement);
Tag tag = tagStack_pop();
namespaceUri = tag.namespaceDeclaration.namespaceUri;
+ prefix = tag.namespaceDeclaration.prefix;
name = tag.name;
qualifiedName = tag.qualifiedName;
isEmptyElement = false;
@@ -843,6 +844,7 @@ bool QXmlStreamReaderPrivate::parse()
Tag tag = tagStack_pop();
namespaceUri = tag.namespaceDeclaration.namespaceUri;
+ prefix = tag.namespaceDeclaration.prefix;
name = tag.name;
qualifiedName = tag.qualifiedName;
if (qualifiedName != symName(3))
diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp
index 89c7e0db66..23e295405f 100644
--- a/src/corelib/text/qbytearray.cpp
+++ b/src/corelib/text/qbytearray.cpp
@@ -67,12 +67,6 @@
QT_BEGIN_NAMESPACE
-template <typename T, typename Cmp = std::less<>>
-static constexpr bool points_into_range(const T *p, const T *b, const T *e, Cmp less = {}) noexcept
-{
- return !less(p, b) && less(p, e);
-}
-
const char QByteArray::_empty = '\0';
// ASCII case system, used by QByteArray::to{Upper,Lower}() and qstr(n)icmp():
@@ -1962,8 +1956,7 @@ QByteArray &QByteArray::append(const QByteArray &ba)
QByteArray& QByteArray::append(char ch)
{
- if (d->needsDetach() || !d->freeSpaceAtEnd())
- reallocGrowData(1);
+ d.detachAndGrow(QArrayData::GrowsAtEnd, 1, nullptr, nullptr);
d->copyAppend(1, ch);
d.data()[d.size] = '\0';
return *this;
@@ -2003,19 +1996,15 @@ QByteArray &QByteArray::insert(qsizetype i, QByteArrayView data)
// defer a call to free() so that it comes after we copied the data from
// the old memory:
DataPointer detached{}; // construction is free
- if (d->needsDetach() || i + size - d->size > d.freeSpaceAtEnd()) {
- detached = DataPointer::allocateGrow(d, i + size - d->size, Data::GrowsAtEnd);
- Q_CHECK_PTR(detached.data());
- detached->copyAppend(d.constBegin(), d.constEnd());
- d.swap(detached);
- }
+ d.detachAndGrow(Data::GrowsAtEnd, (i - d.size) + size, &str, &detached);
+ Q_CHECK_PTR(d.data());
d->copyAppend(i - d->size, ' ');
d->copyAppend(str, str + size);
d.data()[d.size] = '\0';
return *this;
}
- if (!d->needsDetach() && points_into_range(str, d.data(), d.data() + d.size)) {
+ if (!d->needsDetach() && QtPrivate::q_points_into_range(str, d.data(), d.data() + d.size)) {
QVarLengthArray a(str, str + size);
return insert(i, a);
}
@@ -2085,12 +2074,8 @@ QByteArray &QByteArray::insert(qsizetype i, qsizetype count, char ch)
if (i >= d->size) {
// handle this specially, as QArrayDataOps::insert() doesn't handle out of bounds positions
- if (d->needsDetach() || i + count - d->size > d.freeSpaceAtEnd()) {
- DataPointer detached(DataPointer::allocateGrow(d, i + count - d->size, Data::GrowsAtEnd));
- Q_CHECK_PTR(detached.data());
- detached->copyAppend(d.constBegin(), d.constEnd());
- d.swap(detached);
- }
+ d.detachAndGrow(Data::GrowsAtEnd, (i - d.size) + count, nullptr, nullptr);
+ Q_CHECK_PTR(d.data());
d->copyAppend(i - d->size, ' ');
d->copyAppend(count, ch);
d.data()[d.size] = '\0';
@@ -2144,7 +2129,7 @@ QByteArray &QByteArray::remove(qsizetype pos, qsizetype len)
QByteArray &QByteArray::replace(qsizetype pos, qsizetype len, QByteArrayView after)
{
- if (points_into_range(after.data(), d.data(), d.data() + d.size)) {
+ if (QtPrivate::q_points_into_range(after.data(), d.data(), d.data() + d.size)) {
QVarLengthArray copy(after.data(), after.data() + after.size());
return replace(pos, len, QByteArrayView{copy});
}
@@ -2201,11 +2186,11 @@ QByteArray &QByteArray::replace(QByteArrayView before, QByteArrayView after)
return *this;
// protect against before or after being part of this
- if (points_into_range(a, d.data(), d.data() + d.size)) {
+ if (QtPrivate::q_points_into_range(a, d.data(), d.data() + d.size)) {
QVarLengthArray copy(a, a + asize);
return replace(before, QByteArrayView{copy});
}
- if (points_into_range(b, d.data(), d.data() + d.size)) {
+ if (QtPrivate::q_points_into_range(b, d.data(), d.data() + d.size)) {
QVarLengthArray copy(b, b + bsize);
return replace(QByteArrayView{copy}, after);
}
diff --git a/src/corelib/text/qlocale.qdoc b/src/corelib/text/qlocale.qdoc
index b20fce7c6d..50b602d898 100644
--- a/src/corelib/text/qlocale.qdoc
+++ b/src/corelib/text/qlocale.qdoc
@@ -92,7 +92,7 @@
\note For the current keyboard input locale take a look at
QInputMethod::locale().
- QLocale's data is based on Common Locale Data Repository v38.
+ QLocale's data is based on Common Locale Data Repository v39.
\sa QString::arg(), QString::toInt(), QString::toDouble(),
QInputMethod::locale()
diff --git a/src/corelib/text/qlocale_data_p.h b/src/corelib/text/qlocale_data_p.h
index 41cb376c23..2bc293f7c9 100644
--- a/src/corelib/text/qlocale_data_p.h
+++ b/src/corelib/text/qlocale_data_p.h
@@ -77,8 +77,8 @@ static const int ImperialMeasurementSystemsCount =
// GENERATED PART STARTS HERE
/*
- This part of the file was generated on 2020-11-12 from the
- Common Locale Data Repository v38
+ This part of the file was generated on 2021-04-09 from the
+ Common Locale Data Repository v39
http://www.unicode.org/cldr/
@@ -731,7 +731,6 @@ static const QLocaleId likely_subtags[] = {
{ 0, 15, 0 }, { 85, 15, 84 }, // und_Brai -> fr_Brai_FR
{ 0, 16, 0 }, { 44, 16, 111 }, // und_Bugi -> bug_Bugi_ID
{ 0, 18, 0 }, { 65, 18, 41 }, // und_Cans -> cr_Cans_CA
- { 0, 20, 0 }, { 156, 20, 193 }, // und_Aghb -> lez_Aghb_RU
{ 0, 21, 0 }, { 52, 21, 20 }, // und_Cakm -> ccp_Cakm_BD
{ 0, 23, 0 }, { 55, 23, 248 }, // und_Cher -> chr_Cher_US
{ 0, 24, 0 }, { 62, 24, 71 }, // und_Copt -> cop_Copt_EG
@@ -1163,108 +1162,108 @@ static const QLocaleData locale_data[] = {
{ 9, 66, 126, 0, 0, 15, 15, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 0, 121, 0, 0, 405, 405, 462, 489, 516, 516, 10, 10, 50, 5, 22, 13, 73, 19, 24, 48, 61, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 57, 57, 27, 27, 14, 14, 11, 10, 4, 17, 23, 1, 6, 5, 7, 5, 6, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Albanian/Latin/Kosovo
{ 9, 66, 140, 0, 0, 15, 15, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 0, 121, 0, 0, 405, 405, 462, 489, 516, 516, 10, 10, 50, 5, 22, 14, 79, 19, 24, 48, 67, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 57, 57, 27, 27, 14, 14, 11, 10, 4, 17, 23, 3, 16, 5, 7, 5, 18, {77,75,68}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Albanian/Latin/Macedonia
{ 11, 33, 77, 24, 24, 30, 39, 6, 0, 1, 2, 3, 4, 5, 9, 17, 18, 19, 20, 27, 127, 10, 22, 530, 530, 557, 557, 583, 583, 21, 20, 54, 57, 22, 17, 95, 9, 13, 85, 89, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 27, 27, 26, 26, 13, 13, 3, 4, 3, 23, 23, 2, 9, 4, 6, 4, 5, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Amharic/Ethiopic/Ethiopia
- { 14, 4, 71, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 19, 104, 19, 0, 94, 101, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 9, 5, 0, 7, 3, {69,71,80}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Egypt
- { 14, 4, 4, 47, 47, 47, 47, 6, 1, 0, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 24, 113, 9, 13, 94, 104, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 12, 4, 6, 7, 7, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Algeria
- { 14, 4, 19, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 29, 125, 19, 0, 94, 111, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 12, 5, 0, 7, 7, {66,72,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Bahrain
- { 14, 4, 48, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 2, 137, 19, 0, 94, 118, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 4, 15, 5, 0, 7, 4, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Chad
- { 14, 4, 55, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 0, 0, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 3, 152, 19, 0, 94, 122, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 10, 5, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 2, 14, 5, 0, 7, 9, {75,77,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Comoros
- { 14, 4, 67, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 34, 166, 19, 0, 94, 131, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 3, 11, 5, 0, 7, 6, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Djibouti
- { 14, 4, 74, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 37, 177, 19, 0, 94, 137, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 3, 12, 5, 0, 7, 7, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Eritrea
- { 14, 4, 113, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 40, 189, 19, 0, 94, 144, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 11, 5, 0, 7, 6, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Iraq
- { 14, 4, 116, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 1, 1, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 45, 200, 19, 0, 94, 150, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 9, 4, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 1, 18, 5, 0, 7, 7, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Israel
- { 14, 4, 122, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 46, 218, 19, 0, 94, 157, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 11, 5, 0, 7, 6, {74,79,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Jordan
- { 14, 4, 127, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 51, 229, 19, 0, 94, 163, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 11, 5, 0, 7, 6, {75,87,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Kuwait
- { 14, 4, 132, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 56, 240, 19, 0, 94, 169, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 11, 5, 0, 7, 5, {76,66,80}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Lebanon
- { 14, 4, 135, 47, 47, 47, 47, 6, 1, 0, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 61, 251, 9, 13, 94, 174, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 10, 4, 6, 7, 5, {76,89,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Libya
- { 14, 4, 149, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 66, 261, 19, 0, 94, 179, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 4, 15, 5, 0, 7, 9, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Mauritania
- { 14, 4, 159, 47, 47, 47, 47, 6, 1, 0, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 0, 0, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 70, 276, 9, 13, 94, 188, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 10, 5, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 10, 4, 6, 7, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Morocco
- { 14, 4, 176, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 75, 286, 19, 0, 94, 194, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 10, 5, 0, 7, 5, {79,77,82}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Oman
- { 14, 4, 180, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 45, 200, 19, 0, 94, 199, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 1, 18, 5, 0, 7, 18, {73,76,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Palestinian Territories
- { 14, 4, 190, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 80, 296, 19, 0, 94, 217, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 9, 5, 0, 7, 3, {81,65,82}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Qatar
- { 14, 4, 205, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 85, 305, 19, 0, 94, 220, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 10, 5, 0, 7, 24, {83,65,82}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Saudi Arabia
- { 14, 4, 215, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 90, 315, 19, 0, 94, 244, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 1, 10, 5, 0, 7, 7, {83,79,83}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Somalia
- { 14, 4, 219, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 91, 325, 19, 0, 94, 251, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 1, 17, 5, 0, 7, 12, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/South Sudan
- { 14, 4, 222, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 92, 342, 19, 0, 94, 263, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 4, 11, 5, 0, 7, 7, {83,68,71}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Sudan
- { 14, 4, 227, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 96, 353, 19, 0, 94, 270, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 10, 5, 0, 7, 5, {83,89,80}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Syria
- { 14, 4, 238, 47, 47, 47, 47, 6, 1, 0, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 101, 363, 9, 13, 94, 275, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 11, 4, 6, 7, 4, {84,78,68}, 3, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Tunisia
- { 14, 4, 245, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 106, 374, 19, 0, 94, 279, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 12, 5, 0, 7, 24, {65,69,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/United Arab Emirates
- { 14, 4, 257, 47, 47, 47, 47, 6, 0, 1, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 70, 276, 9, 13, 94, 303, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 10, 4, 6, 7, 15, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Western Sahara
- { 14, 4, 258, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 0, 0, 19, 0, 318, 340, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 0, 0, 5, 0, 22, 6, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/World
- { 14, 4, 259, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 111, 386, 19, 0, 94, 346, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 47, 23, 5, 9, 5, 0, 7, 5, {89,69,82}, 0, 0, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Yemen
+ { 14, 4, 71, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 19, 104, 19, 0, 94, 101, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 9, 5, 0, 7, 3, {69,71,80}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Egypt
+ { 14, 4, 4, 47, 47, 47, 47, 6, 1, 0, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 24, 113, 9, 13, 94, 104, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 12, 4, 6, 7, 7, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Algeria
+ { 14, 4, 19, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 29, 125, 19, 0, 94, 111, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 12, 5, 0, 7, 7, {66,72,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Bahrain
+ { 14, 4, 48, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 2, 137, 19, 0, 94, 118, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 4, 15, 5, 0, 7, 4, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Chad
+ { 14, 4, 55, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 0, 0, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 3, 152, 19, 0, 94, 122, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 10, 5, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 2, 14, 5, 0, 7, 9, {75,77,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Comoros
+ { 14, 4, 67, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 34, 166, 19, 0, 94, 131, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 3, 11, 5, 0, 7, 6, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Djibouti
+ { 14, 4, 74, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 37, 177, 19, 0, 94, 137, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 3, 12, 5, 0, 7, 7, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Eritrea
+ { 14, 4, 113, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 40, 189, 19, 0, 94, 144, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 11, 5, 0, 7, 6, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Iraq
+ { 14, 4, 116, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 1, 1, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 45, 200, 19, 0, 94, 150, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 9, 4, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 1, 18, 5, 0, 7, 7, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Israel
+ { 14, 4, 122, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 46, 218, 19, 0, 94, 157, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 11, 5, 0, 7, 6, {74,79,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Jordan
+ { 14, 4, 127, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 51, 229, 19, 0, 94, 163, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 11, 5, 0, 7, 6, {75,87,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Kuwait
+ { 14, 4, 132, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 56, 240, 19, 0, 94, 169, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 11, 5, 0, 7, 5, {76,66,80}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Lebanon
+ { 14, 4, 135, 47, 47, 47, 47, 6, 1, 0, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 61, 251, 9, 13, 94, 174, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 10, 4, 6, 7, 5, {76,89,68}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Libya
+ { 14, 4, 149, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 66, 261, 19, 0, 94, 179, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 4, 15, 5, 0, 7, 9, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Mauritania
+ { 14, 4, 159, 47, 47, 47, 47, 6, 1, 0, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 0, 0, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 70, 276, 9, 13, 94, 188, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 10, 5, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 10, 4, 6, 7, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Morocco
+ { 14, 4, 176, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 75, 286, 19, 0, 94, 194, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 10, 5, 0, 7, 5, {79,77,82}, 3, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Oman
+ { 14, 4, 180, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 45, 200, 19, 0, 94, 199, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 1, 18, 5, 0, 7, 18, {73,76,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Palestinian Territories
+ { 14, 4, 190, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 80, 296, 19, 0, 94, 217, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 9, 5, 0, 7, 3, {81,65,82}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Qatar
+ { 14, 4, 205, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 85, 305, 19, 0, 94, 220, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 10, 5, 0, 7, 24, {83,65,82}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Saudi Arabia
+ { 14, 4, 215, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 90, 315, 19, 0, 94, 244, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 1, 10, 5, 0, 7, 7, {83,79,83}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Somalia
+ { 14, 4, 219, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 91, 325, 19, 0, 94, 251, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 1, 17, 5, 0, 7, 12, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/South Sudan
+ { 14, 4, 222, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 92, 342, 19, 0, 94, 263, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 4, 11, 5, 0, 7, 7, {83,68,71}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Sudan
+ { 14, 4, 227, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 96, 353, 19, 0, 94, 270, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 10, 5, 0, 7, 5, {83,89,80}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Syria
+ { 14, 4, 238, 47, 47, 47, 47, 6, 1, 0, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 101, 363, 9, 13, 94, 275, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 11, 4, 6, 7, 4, {84,78,68}, 3, 0, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Tunisia
+ { 14, 4, 245, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 106, 374, 19, 0, 94, 279, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 12, 5, 0, 7, 24, {65,69,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Arabic/Arabic/United Arab Emirates
+ { 14, 4, 257, 47, 47, 47, 47, 6, 0, 1, 32, 3, 35, 37, 9, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 70, 276, 9, 13, 94, 303, 6, 6, 6, 6, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 10, 4, 6, 7, 15, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/Western Sahara
+ { 14, 4, 258, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 0, 0, 19, 0, 318, 340, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 0, 0, 5, 0, 22, 6, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Arabic/Arabic/World
+ { 14, 4, 259, 47, 47, 47, 47, 53, 21, 22, 23, 25, 26, 28, 30, 11, 10, 13, 12, 137, 154, 10, 22, 596, 596, 596, 596, 647, 647, 24, 24, 80, 84, 22, 111, 386, 19, 0, 94, 346, 6, 6, 6, 6, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 51, 51, 51, 51, 13, 13, 1, 1, 4, 35, 23, 5, 9, 5, 0, 7, 5, {89,69,82}, 0, 0, 7, 5, 6, 1, 3, 3 }, // Arabic/Arabic/Yemen
{ 15, 66, 220, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 13, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Aragonese/Latin/Spain
- { 17, 5, 12, 0, 0, 54, 54, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 17, 18, 164, 184, 0, 0, 660, 660, 721, 721, 748, 748, 0, 0, 131, 137, 22, 116, 395, 19, 0, 351, 358, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 8, 10, 5, 61, 61, 27, 27, 13, 13, 2, 2, 6, 17, 23, 1, 13, 5, 0, 7, 8, {65,77,68}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Armenian/Armenian/Armenia
- { 18, 9, 110, 0, 0, 61, 61, 6, 0, 1, 2, 39, 4, 5, 9, 10, 11, 12, 13, 192, 210, 42, 42, 761, 761, 818, 818, 849, 849, 25, 25, 154, 158, 22, 117, 408, 4, 0, 366, 373, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 57, 57, 31, 31, 13, 13, 9, 7, 4, 37, 23, 1, 12, 5, 0, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Assamese/Bangla/India
+ { 17, 5, 12, 0, 0, 54, 54, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 17, 18, 164, 184, 0, 0, 660, 660, 721, 721, 748, 748, 0, 0, 119, 125, 22, 116, 395, 19, 0, 351, 358, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 8, 10, 5, 61, 61, 27, 27, 13, 13, 2, 2, 6, 17, 23, 1, 13, 5, 0, 7, 8, {65,77,68}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Armenian/Armenian/Armenia
+ { 18, 9, 110, 0, 0, 61, 61, 6, 0, 1, 2, 39, 4, 5, 9, 10, 11, 12, 13, 192, 210, 42, 42, 761, 761, 818, 818, 849, 849, 25, 25, 142, 146, 22, 117, 408, 4, 0, 366, 373, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 57, 57, 31, 31, 13, 13, 9, 7, 4, 37, 23, 1, 12, 5, 0, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Assamese/Bangla/India
{ 19, 66, 220, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 218, 87, 0, 0, 862, 862, 915, 915, 942, 942, 34, 32, 0, 5, 22, 13, 420, 19, 0, 377, 386, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 10, 5, 53, 53, 27, 27, 13, 13, 12, 11, 5, 17, 23, 1, 4, 5, 0, 9, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Asturian/Latin/Spain
{ 20, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 955, 955, 1014, 1014, 1041, 1041, 46, 43, 0, 5, 22, 118, 424, 19, 0, 392, 398, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 27, 27, 13, 13, 9, 8, 4, 17, 23, 3, 21, 5, 0, 6, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Asu/Latin/Tanzania
{ 21, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 121, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Atsam/Latin/Nigeria
- { 25, 66, 17, 0, 0, 77, 77, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 240, 184, 0, 0, 1054, 1054, 1120, 1146, 96, 96, 0, 0, 195, 5, 22, 122, 445, 19, 0, 406, 416, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 66, 66, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 17, 5, 0, 10, 10, {65,90,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Azerbaijani/Latin/Azerbaijan
+ { 25, 66, 17, 0, 0, 77, 77, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 240, 184, 0, 0, 1054, 1054, 1120, 1146, 96, 96, 0, 0, 183, 5, 22, 122, 445, 19, 0, 406, 416, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 66, 66, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 17, 5, 0, 10, 10, {65,90,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Azerbaijani/Latin/Azerbaijan
{ 25, 4, 112, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Azerbaijani/Arabic/Iran
{ 25, 27, 17, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 19, 20, 240, 184, 0, 0, 1172, 1172, 1238, 1238, 96, 96, 55, 51, 0, 5, 22, 122, 462, 19, 0, 426, 436, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 66, 66, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 5, 5, 0, 10, 10, {65,90,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Azerbaijani/Cyrillic/Azerbaijan
{ 26, 66, 40, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 12, 13, 71, 87, 0, 0, 1264, 1264, 1308, 1308, 1336, 1336, 57, 53, 0, 5, 22, 2, 467, 19, 0, 446, 451, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 44, 44, 28, 28, 13, 13, 6, 7, 4, 17, 23, 4, 4, 5, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bafia/Latin/Cameroon
- { 28, 66, 145, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 87, 0, 0, 1349, 1349, 1392, 1392, 1419, 1419, 0, 0, 0, 5, 22, 3, 471, 9, 13, 458, 467, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 43, 43, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 9, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bambara/Latin/Mali
- { 28, 90, 145, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 3, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bambara/Nko/Mali
- { 30, 9, 20, 0, 0, 85, 85, 6, 0, 1, 2, 39, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22, 1432, 1432, 1489, 1489, 1525, 1525, 0, 0, 154, 5, 22, 123, 488, 0, 31, 471, 476, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 57, 57, 36, 36, 17, 17, 2, 2, 4, 17, 23, 1, 14, 4, 6, 5, 8, {66,68,84}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Bangla/Bangla/Bangladesh
- { 30, 9, 110, 0, 0, 85, 85, 6, 0, 1, 2, 39, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22, 1432, 1432, 1489, 1489, 1525, 1525, 0, 0, 154, 5, 22, 117, 502, 0, 31, 471, 484, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 57, 57, 36, 36, 17, 17, 2, 2, 4, 17, 23, 1, 12, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Bangla/Bangla/India
+ { 28, 66, 145, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 87, 0, 0, 1349, 1349, 1392, 1392, 1419, 1419, 0, 0, 0, 5, 22, 123, 471, 9, 13, 458, 467, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 43, 43, 27, 27, 13, 13, 2, 2, 4, 17, 23, 5, 17, 4, 6, 9, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bambara/Latin/Mali
+ { 28, 90, 145, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 123, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 5, 0, 5, 0, 0, 0, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Bambara/Nko/Mali
+ { 30, 9, 20, 0, 0, 85, 85, 6, 0, 1, 2, 39, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22, 1432, 1432, 1489, 1489, 1525, 1525, 0, 0, 142, 5, 22, 128, 488, 0, 31, 471, 476, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 57, 57, 36, 36, 17, 17, 2, 2, 4, 17, 23, 1, 14, 4, 6, 5, 8, {66,68,84}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Bangla/Bangla/Bangladesh
+ { 30, 9, 110, 0, 0, 85, 85, 6, 0, 1, 2, 39, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22, 1432, 1432, 1489, 1489, 1525, 1525, 0, 0, 142, 5, 22, 117, 502, 0, 31, 471, 484, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 57, 57, 36, 36, 17, 17, 2, 2, 4, 17, 23, 1, 12, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Bangla/Bangla/India
{ 31, 66, 40, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 71, 87, 0, 0, 1542, 1542, 1611, 1611, 1638, 1638, 63, 60, 0, 5, 22, 2, 514, 19, 0, 488, 493, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 69, 69, 27, 27, 13, 13, 10, 9, 4, 17, 23, 4, 15, 5, 0, 5, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Basaa/Latin/Cameroon
- { 32, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 124, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bashkir/Cyrillic/Russia
- { 33, 66, 220, 0, 0, 94, 94, 6, 1, 0, 2, 3, 40, 5, 9, 10, 11, 10, 11, 257, 293, 54, 0, 1651, 1651, 1718, 1718, 1745, 1745, 0, 0, 199, 5, 22, 13, 529, 19, 24, 501, 508, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 6, 12, 5, 67, 67, 27, 27, 13, 13, 2, 2, 7, 17, 23, 1, 5, 5, 7, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Basque/Latin/Spain
- { 35, 27, 22, 0, 0, 103, 103, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 185, 66, 0, 1758, 1758, 1813, 1813, 1833, 1833, 0, 0, 206, 211, 22, 125, 534, 19, 0, 516, 526, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 7, 11, 5, 55, 55, 20, 20, 13, 13, 2, 2, 5, 17, 23, 2, 16, 5, 0, 10, 8, {66,89,78}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Belarusian/Cyrillic/Belarus
- { 36, 66, 260, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 1846, 1846, 1846, 1846, 83, 83, 73, 69, 0, 5, 22, 127, 0, 9, 13, 534, 543, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 79, 79, 79, 79, 13, 13, 8, 7, 4, 17, 23, 1, 0, 4, 6, 9, 6, {90,77,87}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bemba/Latin/Zambia
+ { 32, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 129, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bashkir/Cyrillic/Russia
+ { 33, 66, 220, 0, 0, 94, 94, 6, 1, 0, 2, 3, 40, 5, 9, 10, 11, 10, 11, 257, 293, 54, 0, 1651, 1651, 1718, 1718, 1745, 1745, 0, 0, 187, 5, 22, 13, 529, 19, 24, 501, 508, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 6, 12, 5, 67, 67, 27, 27, 13, 13, 2, 2, 7, 17, 23, 1, 5, 5, 7, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Basque/Latin/Spain
+ { 35, 27, 22, 0, 0, 103, 103, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 185, 66, 0, 1758, 1758, 1813, 1813, 1833, 1833, 0, 0, 194, 199, 22, 130, 534, 19, 0, 516, 526, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 7, 11, 5, 55, 55, 20, 20, 13, 13, 2, 2, 5, 17, 23, 2, 16, 5, 0, 10, 8, {66,89,78}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Belarusian/Cyrillic/Belarus
+ { 36, 66, 260, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 1846, 1846, 1846, 1846, 83, 83, 73, 69, 0, 5, 22, 132, 0, 9, 13, 534, 543, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 79, 79, 79, 79, 13, 13, 8, 7, 4, 17, 23, 1, 0, 4, 6, 9, 6, {90,77,87}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bemba/Latin/Zambia
{ 37, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 1925, 1925, 2006, 2006, 2033, 2033, 81, 76, 0, 5, 22, 118, 550, 0, 0, 549, 555, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 81, 81, 27, 27, 13, 13, 7, 7, 4, 17, 23, 3, 22, 4, 0, 6, 10, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Bena/Latin/Tanzania
{ 40, 33, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Blin/Ethiopic/Eritrea
{ 41, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 2046, 2046, 2099, 2099, 2131, 2131, 88, 83, 0, 5, 22, 117, 572, 4, 0, 565, 569, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 53, 53, 32, 32, 18, 18, 3, 6, 4, 17, 23, 1, 3, 5, 0, 4, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Bodo/Devanagari/India
- { 42, 66, 29, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 11, 12, 13, 345, 364, 0, 0, 2149, 2149, 2206, 2206, 2233, 2246, 91, 89, 228, 5, 22, 128, 575, 19, 0, 573, 581, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 11, 10, 5, 57, 57, 27, 27, 13, 13, 10, 7, 7, 17, 23, 2, 40, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bosnian/Latin/Bosnia And Herzegovina
- { 42, 27, 29, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 375, 395, 0, 0, 2259, 2259, 2314, 2314, 2341, 2341, 101, 96, 0, 5, 22, 130, 615, 19, 0, 600, 608, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 55, 55, 27, 27, 13, 13, 11, 13, 4, 17, 23, 2, 19, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bosnian/Cyrillic/Bosnia And Herzegovina
- { 43, 66, 84, 0, 0, 124, 124, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 127, 0, 0, 2354, 2354, 2396, 2396, 2428, 2428, 112, 109, 235, 242, 259, 13, 420, 19, 0, 627, 636, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 42, 42, 32, 32, 17, 17, 4, 4, 7, 17, 23, 1, 4, 5, 0, 9, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Breton/Latin/France
- { 45, 27, 36, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 15, 10, 15, 10, 299, 402, 77, 91, 2445, 2445, 2499, 2499, 2519, 2519, 116, 113, 282, 5, 22, 132, 634, 19, 24, 641, 650, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 12, 14, 9, 54, 54, 20, 20, 13, 13, 6, 6, 7, 17, 23, 3, 13, 5, 7, 9, 8, {66,71,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Bulgarian/Cyrillic/Bulgaria
- { 46, 86, 161, 132, 132, 138, 138, 134, 0, 1, 2, 41, 4, 5, 9, 10, 11, 12, 13, 414, 432, 100, 110, 2532, 2532, 2532, 2532, 2585, 2585, 122, 119, 289, 5, 22, 127, 647, 4, 0, 658, 658, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 6, 53, 53, 53, 53, 13, 13, 5, 3, 5, 17, 23, 1, 11, 5, 0, 6, 6, {77,77,75}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Burmese/Myanmar/Myanmar
- { 47, 137, 107, 148, 148, 153, 153, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 440, 454, 116, 27, 2598, 2598, 2598, 2598, 2625, 2625, 127, 122, 0, 5, 22, 135, 658, 9, 13, 664, 666, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 8, 13, 6, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 2, 4, 6, 2, 14, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cantonese/Traditional Han/Hong Kong
- { 47, 118, 50, 148, 148, 153, 153, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 454, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 0, 5, 22, 138, 660, 9, 13, 680, 682, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 3, 4, 6, 2, 7, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cantonese/Simplified Han/China
+ { 42, 66, 29, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 11, 12, 13, 345, 364, 0, 0, 2149, 2149, 2206, 2206, 2233, 2246, 91, 89, 216, 5, 22, 133, 575, 19, 0, 573, 581, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 11, 10, 5, 57, 57, 27, 27, 13, 13, 10, 7, 7, 17, 23, 2, 40, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bosnian/Latin/Bosnia And Herzegovina
+ { 42, 27, 29, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 375, 395, 0, 0, 2259, 2259, 2314, 2314, 2341, 2341, 101, 96, 0, 5, 22, 135, 615, 19, 0, 600, 608, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 55, 55, 27, 27, 13, 13, 11, 13, 4, 17, 23, 2, 19, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Bosnian/Cyrillic/Bosnia And Herzegovina
+ { 43, 66, 84, 0, 0, 124, 124, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 127, 0, 0, 2354, 2354, 2396, 2396, 2428, 2428, 112, 109, 223, 230, 247, 13, 420, 19, 0, 627, 636, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 42, 42, 32, 32, 17, 17, 4, 4, 7, 17, 23, 1, 4, 5, 0, 9, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Breton/Latin/France
+ { 45, 27, 36, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 15, 10, 15, 10, 299, 402, 77, 91, 2445, 2445, 2499, 2499, 2519, 2519, 116, 113, 270, 5, 22, 137, 634, 19, 24, 641, 650, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 12, 14, 9, 54, 54, 20, 20, 13, 13, 6, 6, 7, 17, 23, 3, 13, 5, 7, 9, 8, {66,71,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Bulgarian/Cyrillic/Bulgaria
+ { 46, 86, 161, 132, 132, 138, 138, 134, 0, 1, 2, 41, 4, 5, 9, 10, 11, 12, 13, 414, 432, 100, 110, 2532, 2532, 2532, 2532, 2585, 2585, 122, 119, 277, 5, 22, 132, 647, 4, 0, 658, 658, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 6, 53, 53, 53, 53, 13, 13, 5, 3, 5, 17, 23, 1, 11, 5, 0, 6, 6, {77,77,75}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Burmese/Myanmar/Myanmar
+ { 47, 137, 107, 148, 148, 153, 153, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 440, 454, 116, 27, 2598, 2598, 2598, 2598, 2625, 2625, 127, 122, 0, 5, 22, 140, 658, 9, 13, 664, 666, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 8, 13, 6, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 2, 4, 6, 2, 14, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cantonese/Traditional Han/Hong Kong
+ { 47, 118, 50, 148, 148, 153, 153, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 454, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 0, 5, 22, 143, 660, 9, 13, 680, 682, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 3, 4, 6, 2, 7, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cantonese/Simplified Han/China
{ 48, 66, 220, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 218, 87, 55, 1, 2658, 2658, 2717, 2717, 2744, 2744, 129, 124, 0, 5, 22, 13, 420, 19, 24, 689, 695, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 11, 4, 59, 59, 27, 27, 20, 20, 5, 5, 5, 17, 23, 1, 4, 5, 7, 6, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/Spain
{ 48, 66, 6, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 218, 87, 55, 1, 2658, 2658, 2717, 2717, 2744, 2744, 129, 124, 0, 5, 22, 13, 420, 19, 24, 689, 702, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 11, 4, 59, 59, 27, 27, 20, 20, 5, 5, 5, 17, 23, 1, 4, 5, 7, 6, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/Andorra
{ 48, 66, 84, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 218, 87, 55, 1, 2658, 2658, 2717, 2717, 2744, 2744, 129, 124, 0, 5, 22, 13, 420, 19, 24, 689, 709, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 11, 4, 59, 59, 27, 27, 20, 20, 5, 5, 5, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/France
{ 48, 66, 117, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 218, 87, 55, 1, 2658, 2658, 2717, 2717, 2744, 2744, 129, 124, 0, 5, 22, 13, 420, 19, 24, 689, 715, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 6, 11, 4, 59, 59, 27, 27, 20, 20, 5, 5, 5, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Catalan/Latin/Italy
- { 49, 66, 185, 0, 0, 158, 167, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 2764, 2764, 2819, 2819, 2846, 2846, 0, 0, 294, 5, 22, 139, 663, 9, 13, 721, 729, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 55, 55, 27, 27, 13, 13, 2, 2, 8, 17, 23, 1, 15, 4, 6, 8, 9, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cebuano/Latin/Philippines
+ { 49, 66, 185, 0, 0, 158, 167, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 2764, 2764, 2819, 2819, 2846, 2846, 0, 0, 282, 5, 22, 144, 663, 9, 13, 721, 729, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 55, 55, 27, 27, 13, 13, 2, 2, 8, 17, 23, 1, 15, 4, 6, 8, 9, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cebuano/Latin/Philippines
{ 50, 66, 159, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 2859, 2859, 2906, 2906, 2933, 2933, 134, 129, 0, 5, 22, 0, 678, 19, 0, 738, 755, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 47, 47, 27, 27, 13, 13, 9, 10, 4, 17, 23, 0, 15, 5, 0, 17, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Central Atlas Tamazight/Latin/Morocco
{ 51, 4, 113, 0, 0, 0, 0, 53, 21, 22, 23, 25, 46, 48, 30, 10, 11, 12, 13, 27, 44, 10, 22, 2946, 2946, 2946, 2946, 3003, 3003, 143, 139, 0, 5, 22, 40, 693, 19, 0, 761, 775, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 57, 57, 57, 57, 13, 13, 3, 3, 4, 17, 23, 5, 13, 5, 0, 14, 5, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Central Kurdish/Arabic/Iraq
{ 51, 4, 112, 0, 0, 0, 0, 53, 21, 22, 23, 25, 46, 48, 30, 10, 11, 12, 13, 27, 44, 0, 0, 2946, 2946, 2946, 2946, 3003, 3003, 143, 139, 0, 5, 22, 0, 706, 19, 0, 761, 780, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 10, 5, 57, 57, 57, 57, 13, 13, 3, 3, 4, 17, 23, 0, 12, 5, 0, 14, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Central Kurdish/Arabic/Iran
- { 52, 21, 20, 0, 0, 175, 175, 6, 0, 1, 2, 50, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22, 3016, 3016, 3142, 3142, 3226, 3226, 0, 0, 302, 5, 22, 123, 718, 0, 31, 785, 797, 6, 6, 12, 12, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7,126,126, 84, 84, 38, 38, 2, 2, 8, 17, 23, 1, 21, 4, 6, 12, 14, {66,68,84}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Chakma/Chakma/Bangladesh
- { 52, 21, 110, 0, 0, 175, 175, 6, 0, 1, 2, 50, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22, 3016, 3016, 3142, 3142, 3226, 3226, 0, 0, 302, 5, 22, 117, 739, 0, 31, 785, 811, 6, 6, 12, 12, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7,126,126, 84, 84, 38, 38, 2, 2, 8, 17, 23, 1, 27, 4, 6, 12, 10, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Chakma/Chakma/India
- { 54, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 3264, 3264, 3308, 3308, 3332, 3308, 0, 0, 0, 5, 22, 124, 766, 19, 0, 821, 828, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 44, 44, 24, 24, 16, 24, 2, 2, 4, 17, 23, 1, 11, 5, 0, 7, 5, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Chechen/Cyrillic/Russia
- { 55, 23, 248, 0, 0, 187, 196, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 3348, 3348, 3396, 3396, 3423, 3423, 146, 142, 310, 5, 22, 1, 777, 9, 13, 833, 836, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 27, 27, 13, 13, 3, 6, 6, 17, 23, 1, 6, 4, 6, 3, 15, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cherokee/Cherokee/United States
- { 56, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 140, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chickasaw/Latin/United States
- { 57, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 3436, 3436, 3509, 3509, 3536, 3536, 0, 0, 0, 5, 22, 143, 783, 9, 0, 851, 857, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 73, 73, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 6, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Chiga/Latin/Uganda
- { 58, 118, 50, 148, 148, 204, 204, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 454, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 316, 5, 22, 146, 660, 9, 13, 863, 867, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 1, 3, 4, 6, 4, 2, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/China
- { 58, 118, 107, 148, 148, 204, 204, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 87, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 316, 5, 22, 135, 802, 9, 13, 863, 869, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 6, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 3, 2, 4, 6, 4, 9, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Hong Kong
- { 58, 118, 139, 148, 148, 204, 204, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 87, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 316, 5, 22, 147, 804, 9, 13, 863, 878, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 6, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 4, 3, 4, 6, 4, 9, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Macao
- { 58, 118, 210, 148, 148, 204, 204, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 127, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 316, 5, 22, 1, 807, 9, 13, 863, 887, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 1, 4, 4, 6, 4, 3, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Singapore
- { 58, 137, 107, 148, 148, 209, 209, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 462, 87, 116, 27, 2598, 2598, 3549, 3549, 2625, 2625, 127, 122, 318, 5, 22, 135, 802, 9, 13, 890, 894, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 13, 6, 27, 27, 20, 20, 13, 13, 2, 2, 3, 17, 23, 3, 2, 4, 6, 4, 9, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Hong Kong
- { 58, 137, 139, 148, 148, 209, 209, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 462, 87, 116, 27, 2598, 2598, 3549, 3549, 2625, 2625, 127, 122, 318, 5, 22, 147, 811, 9, 13, 890, 903, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 13, 6, 27, 27, 20, 20, 13, 13, 2, 2, 3, 17, 23, 4, 3, 4, 6, 4, 9, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Macao
+ { 52, 21, 20, 0, 0, 175, 175, 6, 0, 1, 2, 50, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22, 3016, 3016, 3142, 3142, 3226, 3226, 0, 0, 290, 5, 22, 128, 718, 0, 31, 785, 797, 6, 6, 12, 12, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7,126,126, 84, 84, 38, 38, 2, 2, 8, 17, 23, 1, 21, 4, 6, 12, 14, {66,68,84}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Chakma/Chakma/Bangladesh
+ { 52, 21, 110, 0, 0, 175, 175, 6, 0, 1, 2, 50, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22, 3016, 3016, 3142, 3142, 3226, 3226, 0, 0, 290, 5, 22, 117, 739, 0, 31, 785, 811, 6, 6, 12, 12, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7,126,126, 84, 84, 38, 38, 2, 2, 8, 17, 23, 1, 27, 4, 6, 12, 10, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Chakma/Chakma/India
+ { 54, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 3264, 3264, 3308, 3308, 3332, 3308, 0, 0, 0, 5, 22, 129, 766, 19, 0, 821, 828, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 44, 44, 24, 24, 16, 24, 2, 2, 4, 17, 23, 1, 11, 5, 0, 7, 5, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Chechen/Cyrillic/Russia
+ { 55, 23, 248, 0, 0, 187, 196, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 3348, 3348, 3396, 3396, 3423, 3423, 146, 142, 298, 5, 22, 1, 777, 9, 13, 833, 836, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 27, 27, 13, 13, 3, 6, 6, 17, 23, 1, 6, 4, 6, 3, 15, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Cherokee/Cherokee/United States
+ { 56, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 145, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chickasaw/Latin/United States
+ { 57, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 3436, 3436, 3509, 3509, 3536, 3536, 0, 0, 0, 5, 22, 148, 783, 9, 0, 851, 857, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 73, 73, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 6, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Chiga/Latin/Uganda
+ { 58, 118, 50, 148, 148, 204, 204, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 454, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 304, 5, 22, 151, 660, 9, 13, 863, 867, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 1, 3, 4, 6, 4, 2, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/China
+ { 58, 118, 107, 148, 148, 204, 204, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 87, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 304, 5, 22, 140, 802, 9, 13, 863, 869, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 6, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 3, 2, 4, 6, 4, 9, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Hong Kong
+ { 58, 118, 139, 148, 148, 204, 204, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 87, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 304, 5, 22, 152, 804, 9, 13, 863, 878, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 6, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 4, 3, 4, 6, 4, 9, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Macao
+ { 58, 118, 210, 148, 148, 204, 204, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 462, 127, 129, 27, 2598, 2598, 2638, 2638, 2625, 2625, 127, 122, 304, 5, 22, 1, 807, 9, 13, 863, 887, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 11, 6, 27, 27, 20, 20, 13, 13, 2, 2, 2, 17, 23, 1, 4, 4, 6, 4, 3, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Simplified Han/Singapore
+ { 58, 137, 107, 148, 148, 209, 209, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 462, 87, 116, 27, 2598, 2598, 3549, 3549, 2625, 2625, 127, 122, 306, 5, 22, 140, 802, 9, 13, 890, 894, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 13, 6, 27, 27, 20, 20, 13, 13, 2, 2, 3, 17, 23, 3, 2, 4, 6, 4, 9, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Hong Kong
+ { 58, 137, 139, 148, 148, 209, 209, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 462, 87, 116, 27, 2598, 2598, 3549, 3549, 2625, 2625, 127, 122, 306, 5, 22, 152, 811, 9, 13, 890, 903, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 8, 13, 6, 27, 27, 20, 20, 13, 13, 2, 2, 3, 17, 23, 4, 3, 4, 6, 4, 9, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Macao
{ 58, 137, 228, 148, 148, 204, 204, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 440, 454, 116, 27, 2598, 2598, 3549, 3549, 2625, 2625, 127, 122, 0, 5, 22, 1, 814, 9, 13, 890, 912, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 8, 13, 6, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 3, 4, 6, 4, 2, {84,87,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Chinese/Traditional Han/Taiwan
- { 59, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 124, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Church/Cyrillic/Russia
- { 60, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 124, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Chuvash/Cyrillic/Russia
+ { 59, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 129, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Church/Cyrillic/Russia
+ { 60, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 129, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Chuvash/Cyrillic/Russia
{ 61, 66, 91, 0, 0, 214, 214, 6, 1, 14, 2, 3, 40, 5, 52, 15, 10, 16, 12, 475, 364, 0, 0, 3569, 3569, 3640, 3640, 3667, 3667, 149, 148, 0, 5, 22, 13, 73, 19, 0, 914, 920, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 23, 10, 10, 5, 71, 71, 27, 27, 13, 13, 16, 16, 4, 17, 23, 1, 4, 5, 0, 6, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Colognian/Latin/Germany
{ 63, 66, 246, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 127, 0, 0, 3680, 3680, 3740, 3740, 83, 83, 165, 164, 0, 5, 22, 91, 0, 9, 0, 931, 939, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 60, 60, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 0, 4, 0, 8, 14, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Cornish/Latin/United Kingdom
{ 64, 66, 84, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 13, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Corsican/Latin/France
- { 66, 66, 60, 0, 0, 110, 110, 6, 1, 0, 2, 3, 40, 5, 9, 15, 10, 16, 12, 345, 498, 54, 0, 2149, 2149, 2206, 2206, 2233, 2246, 0, 0, 228, 5, 22, 151, 817, 19, 0, 953, 961, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 13, 12, 5, 57, 57, 27, 27, 13, 13, 2, 2, 7, 17, 23, 3, 13, 5, 0, 8, 8, {72,82,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Croatian/Latin/Croatia
- { 66, 66, 29, 0, 0, 110, 110, 6, 1, 0, 2, 3, 40, 5, 9, 15, 10, 16, 12, 345, 511, 54, 0, 2149, 2149, 2206, 2206, 2246, 2246, 0, 0, 228, 5, 22, 128, 596, 19, 0, 953, 581, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 9, 12, 5, 57, 57, 27, 27, 13, 13, 2, 2, 7, 17, 23, 2, 19, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Croatian/Latin/Bosnia And Herzegovina
- { 67, 66, 64, 0, 0, 222, 222, 6, 1, 14, 2, 3, 4, 5, 9, 15, 10, 16, 12, 520, 184, 1, 1, 3767, 3767, 3815, 3815, 3835, 3835, 169, 168, 321, 5, 22, 154, 830, 19, 0, 969, 976, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 9, 4, 48, 48, 20, 20, 13, 13, 4, 4, 5, 17, 23, 2, 12, 5, 0, 7, 5, {67,90,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Czech/Latin/Czechia
- { 68, 66, 65, 0, 0, 229, 229, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 537, 560, 140, 140, 3848, 3848, 3898, 3925, 3959, 3959, 0, 0, 0, 5, 22, 156, 842, 19, 0, 981, 986, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 50, 50, 27, 34, 13, 13, 2, 2, 5, 17, 23, 3, 11, 5, 0, 5, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Danish/Latin/Denmark
- { 68, 66, 95, 0, 0, 229, 229, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 537, 560, 140, 140, 3848, 3848, 3898, 3925, 3959, 3959, 0, 0, 0, 5, 22, 156, 842, 19, 0, 981, 993, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 50, 50, 27, 34, 13, 13, 2, 2, 5, 17, 23, 3, 11, 5, 0, 5, 8, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Danish/Latin/Greenland
+ { 66, 66, 60, 0, 0, 110, 110, 6, 1, 0, 2, 3, 40, 5, 9, 15, 10, 16, 12, 345, 498, 54, 0, 2149, 2149, 2206, 2206, 2233, 2246, 0, 0, 216, 5, 22, 156, 817, 19, 0, 953, 961, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 13, 12, 5, 57, 57, 27, 27, 13, 13, 2, 2, 7, 17, 23, 3, 13, 5, 0, 8, 8, {72,82,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Croatian/Latin/Croatia
+ { 66, 66, 29, 0, 0, 110, 110, 6, 1, 0, 2, 3, 40, 5, 9, 15, 10, 16, 12, 345, 511, 54, 0, 2149, 2149, 2206, 2206, 2246, 2246, 0, 0, 216, 5, 22, 133, 596, 19, 0, 953, 581, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 9, 12, 5, 57, 57, 27, 27, 13, 13, 2, 2, 7, 17, 23, 2, 19, 5, 0, 8, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Croatian/Latin/Bosnia And Herzegovina
+ { 67, 66, 64, 0, 0, 222, 222, 6, 1, 14, 2, 3, 4, 5, 9, 15, 10, 16, 12, 520, 184, 1, 1, 3767, 3767, 3815, 3815, 3835, 3835, 169, 168, 309, 5, 22, 159, 830, 19, 0, 969, 976, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 9, 4, 48, 48, 20, 20, 13, 13, 4, 4, 5, 17, 23, 2, 12, 5, 0, 7, 5, {67,90,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Czech/Latin/Czechia
+ { 68, 66, 65, 0, 0, 229, 229, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 537, 560, 140, 140, 3848, 3848, 3898, 3925, 3959, 3959, 0, 0, 0, 5, 22, 161, 842, 19, 0, 981, 986, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 50, 50, 27, 34, 13, 13, 2, 2, 5, 17, 23, 3, 11, 5, 0, 5, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Danish/Latin/Denmark
+ { 68, 66, 95, 0, 0, 229, 229, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 537, 560, 140, 140, 3848, 3848, 3898, 3925, 3959, 3959, 0, 0, 0, 5, 22, 161, 842, 19, 0, 981, 993, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 50, 50, 27, 34, 13, 13, 2, 2, 5, 17, 23, 3, 11, 5, 0, 5, 8, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Danish/Latin/Greenland
{ 69, 132, 144, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {77,86,82}, 2, 1, 5, 6, 7, 1, 3, 3 }, // Divehi/Thaana/Maldives
{ 70, 29, 110, 0, 0, 237, 246, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 570, 87, 10, 22, 3972, 4022, 4072, 4072, 4101, 4123, 173, 172, 0, 5, 22, 117, 853, 9, 0, 1001, 569, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 50, 50, 29, 29, 22, 24, 4, 9, 4, 17, 23, 1, 10, 4, 0, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Dogri/Devanagari/India
{ 71, 66, 40, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 12, 13, 71, 87, 0, 0, 4147, 4147, 4191, 4191, 4218, 4218, 177, 181, 0, 5, 22, 2, 0, 19, 0, 1006, 1011, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 44, 44, 27, 27, 13, 13, 5, 6, 4, 17, 23, 4, 0, 5, 0, 5, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Duala/Latin/Cameroon
{ 72, 66, 165, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 432, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 13, 73, 4, 37, 1019, 1019, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 7, 10, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Netherlands
- { 72, 66, 13, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 432, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 159, 863, 4, 37, 1019, 1029, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 16, 5, 7, 10, 5, {65,87,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Aruba
+ { 72, 66, 13, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 432, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 164, 863, 4, 37, 1019, 1029, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 16, 5, 7, 10, 5, {65,87,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Aruba
{ 72, 66, 23, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 128, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 13, 73, 4, 37, 1019, 1034, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 7, 10, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Belgium
{ 72, 66, 44, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 432, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 1, 879, 4, 37, 1019, 1040, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 18, 5, 7, 10, 19, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Caribbean Netherlands
- { 72, 66, 62, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 432, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 163, 897, 4, 37, 1019, 1059, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 30, 5, 7, 10, 7, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Curacao
- { 72, 66, 211, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 432, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 163, 897, 4, 37, 1019, 1066, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 30, 5, 7, 10, 12, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Sint Maarten
+ { 72, 66, 62, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 432, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 168, 897, 4, 37, 1019, 1059, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 30, 5, 7, 10, 7, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Curacao
+ { 72, 66, 211, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 432, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 168, 897, 4, 37, 1019, 1066, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 4, 30, 5, 7, 10, 12, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Sint Maarten
{ 72, 66, 223, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 12, 13, 71, 432, 0, 0, 4231, 4231, 4289, 4289, 4309, 4309, 165, 164, 0, 5, 22, 1, 927, 4, 37, 1019, 1078, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 58, 58, 20, 20, 13, 13, 4, 4, 4, 17, 23, 1, 17, 5, 7, 10, 8, {83,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Dutch/Latin/Suriname
- { 73, 134, 27, 254, 254, 254, 254, 6, 0, 1, 2, 56, 4, 5, 9, 10, 11, 12, 13, 588, 44, 150, 177, 4322, 4322, 4400, 4400, 4433, 4433, 182, 187, 0, 5, 22, 167, 944, 9, 0, 1086, 1092, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 10, 27, 22, 78, 78, 33, 33, 26, 26, 5, 6, 4, 17, 23, 3, 8, 4, 0, 6, 5, {66,84,78}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Dzongkha/Tibetan/Bhutan
- { 74, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 4459, 4459, 4522, 4522, 4549, 4549, 187, 193, 0, 5, 22, 170, 952, 9, 13, 1097, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 63, 63, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Embu/Latin/Kenya
+ { 73, 134, 27, 254, 254, 254, 254, 6, 0, 1, 2, 56, 4, 5, 9, 10, 11, 12, 13, 588, 44, 150, 177, 4322, 4322, 4400, 4400, 4433, 4433, 182, 187, 0, 5, 22, 172, 944, 9, 0, 1086, 1092, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 10, 27, 22, 78, 78, 33, 33, 26, 26, 5, 6, 4, 17, 23, 3, 8, 4, 0, 6, 5, {66,84,78}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Dzongkha/Tibetan/Bhutan
+ { 74, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 4459, 4459, 4522, 4522, 4549, 4549, 187, 193, 0, 5, 22, 175, 952, 9, 13, 1097, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 63, 63, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Embu/Latin/Kenya
{ 75, 66, 248, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 969, 9, 13, 1108, 1124, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 16, 13, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/United States
- { 75, 28, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 140, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Deseret/United States
+ { 75, 28, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 145, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Deseret/United States
{ 75, 66, 5, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 969, 9, 13, 1117, 1137, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 14, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/American Samoa
{ 75, 66, 8, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 978, 9, 13, 1117, 1151, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 8, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Anguilla
{ 75, 66, 10, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 978, 9, 13, 1117, 1159, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 17, {88,67,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Antigua And Barbuda
@@ -1275,10 +1274,10 @@ static const QLocaleData locale_data[] = {
{ 75, 66, 23, 0, 0, 273, 273, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 13, 73, 19, 0, 1117, 1216, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Belgium
{ 75, 66, 24, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1047, 9, 13, 1117, 1223, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 13, 4, 6, 7, 6, {66,90,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Belize
{ 75, 66, 26, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1060, 9, 13, 1117, 1229, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 16, 4, 6, 7, 7, {66,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Bermuda
- { 75, 66, 30, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 149, 1076, 9, 13, 1117, 1236, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 8, {66,87,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Botswana
- { 75, 66, 33, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 140, 969, 9, 13, 1117, 1244, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 30, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/British Indian Ocean Territory
- { 75, 66, 34, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 140, 969, 9, 13, 1117, 1274, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 22, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/British Virgin Islands
- { 75, 66, 38, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 0, 0, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 173, 1090, 9, 13, 1117, 1296, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 15, 4, 6, 7, 7, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Burundi
+ { 75, 66, 30, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 154, 1076, 9, 13, 1117, 1236, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 8, {66,87,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Botswana
+ { 75, 66, 33, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 145, 969, 9, 13, 1117, 1244, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 30, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/British Indian Ocean Territory
+ { 75, 66, 34, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 145, 969, 9, 13, 1117, 1274, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 22, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/British Virgin Islands
+ { 75, 66, 38, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 0, 0, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 178, 1090, 9, 13, 1117, 1296, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 15, 4, 6, 7, 7, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Burundi
{ 75, 66, 40, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 2, 1105, 9, 13, 1117, 1303, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 25, 4, 6, 7, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cameroon
{ 75, 66, 41, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 321, 44, 10, 22, 0, 0, 4586, 4586, 83, 83, 165, 164, 0, 5, 22, 1, 1130, 9, 13, 1311, 1327, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 12, 7, 56, 56, 34, 34, 13, 13, 4, 4, 5, 17, 23, 1, 15, 4, 6, 16, 6, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // English/Latin/Canada
{ 75, 66, 45, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1145, 9, 13, 1117, 1333, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 14, {75,89,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cayman Islands
@@ -1286,16 +1285,16 @@ static const QLocaleData locale_data[] = {
{ 75, 66, 53, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 999, 9, 13, 1117, 1363, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 23, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cocos Islands
{ 75, 66, 58, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1166, 9, 13, 1117, 1386, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 12, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cook Islands
{ 75, 66, 63, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 13, 73, 9, 13, 1117, 1398, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 4, 6, 7, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Cyprus
- { 75, 66, 65, 0, 0, 273, 273, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 140, 140, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 156, 1184, 19, 0, 1117, 1404, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 12, 5, 0, 7, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Denmark
- { 75, 66, 66, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 140, 969, 9, 13, 1117, 1411, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 12, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Diego Garcia
+ { 75, 66, 65, 0, 0, 273, 273, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 140, 140, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 161, 1184, 19, 0, 1117, 1404, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 12, 5, 0, 7, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Denmark
+ { 75, 66, 66, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 145, 969, 9, 13, 1117, 1411, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 12, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Diego Garcia
{ 75, 66, 68, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 978, 9, 13, 1117, 1423, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 8, {88,67,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Dominica
{ 75, 66, 74, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 37, 1196, 9, 13, 1117, 1431, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 14, 4, 6, 7, 7, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Eritrea
- { 75, 66, 76, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 176, 1210, 9, 13, 1117, 1438, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 8, {83,90,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Eswatini
+ { 75, 66, 76, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 181, 1210, 9, 13, 1117, 1438, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 8, {83,90,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Eswatini
{ 75, 66, 78, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 0, 0, 19, 0, 1117, 1446, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 5, 0, 7, 6, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Europe
{ 75, 66, 80, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 91, 1225, 9, 13, 1117, 1452, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 22, 4, 6, 7, 16, {70,75,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Falkland Islands
{ 75, 66, 82, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1247, 9, 13, 1117, 1468, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 13, 4, 6, 7, 4, {70,74,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Fiji
{ 75, 66, 83, 0, 0, 273, 273, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 141, 141, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 13, 73, 19, 0, 1117, 1472, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 9, 4, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Finland
- { 75, 66, 89, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 177, 1260, 9, 13, 1117, 1479, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 6, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Gambia
+ { 75, 66, 89, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 182, 1260, 9, 13, 1117, 1479, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 6, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Gambia
{ 75, 66, 91, 0, 0, 273, 273, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 13, 73, 19, 0, 1117, 1485, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Germany
{ 75, 66, 92, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 6, 1274, 9, 13, 1117, 1492, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 13, 4, 6, 7, 5, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Ghana
{ 75, 66, 93, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 91, 1287, 9, 13, 1117, 1497, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 9, {71,73,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Gibraltar
@@ -1303,25 +1302,25 @@ static const QLocaleData locale_data[] = {
{ 75, 66, 98, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 969, 9, 13, 1117, 1513, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 4, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Guam
{ 75, 66, 100, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 91, 1302, 9, 13, 1117, 1517, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 8, 4, 6, 7, 8, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Guernsey
{ 75, 66, 103, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1310, 9, 13, 1117, 1525, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 16, 4, 6, 7, 6, {71,89,68}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Guyana
- { 75, 66, 107, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 135, 1326, 9, 13, 1117, 1531, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 16, 4, 6, 7, 19, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Hong Kong
+ { 75, 66, 107, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 140, 1326, 9, 13, 1117, 1531, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 16, 4, 6, 7, 19, {72,75,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Hong Kong
{ 75, 66, 110, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 117, 1342, 9, 13, 1117, 1252, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 12, 4, 6, 7, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // English/Latin/India
{ 75, 66, 114, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 127, 0, 0, 0, 0, 56, 56, 83, 83, 165, 164, 0, 5, 22, 13, 73, 9, 13, 1117, 1550, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 56, 56, 27, 27, 13, 13, 4, 4, 5, 17, 23, 1, 4, 4, 6, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Ireland
{ 75, 66, 115, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 91, 1302, 9, 13, 1117, 1557, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 8, 4, 6, 7, 11, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Isle Of Man
{ 75, 66, 116, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 1, 1, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 45, 1354, 9, 13, 1117, 1568, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 9, 4, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 6, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // English/Latin/Israel
{ 75, 66, 119, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1372, 9, 13, 1117, 1574, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 7, {74,77,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Jamaica
{ 75, 66, 121, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 91, 1302, 9, 13, 1117, 1581, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 8, 4, 6, 7, 6, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Jersey
- { 75, 66, 124, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 170, 1387, 9, 13, 1117, 1103, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 15, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Kenya
+ { 75, 66, 124, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 175, 1387, 9, 13, 1117, 1103, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 15, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Kenya
{ 75, 66, 125, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 999, 9, 13, 1117, 1587, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 8, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Kiribati
{ 75, 66, 133, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 0, 1402, 9, 13, 1117, 1595, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 7, {90,65,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Lesotho
{ 75, 66, 134, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1420, 9, 13, 1117, 1602, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 7, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Liberia
- { 75, 66, 139, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 147, 1435, 9, 13, 1117, 1609, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 15, 4, 6, 7, 15, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Macao
- { 75, 66, 141, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 178, 1450, 9, 13, 1117, 1624, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 10, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Madagascar
- { 75, 66, 142, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 180, 1465, 9, 13, 1117, 1634, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 6, {77,87,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Malawi
- { 75, 66, 143, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 182, 1480, 9, 13, 1117, 1640, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 17, 4, 6, 7, 8, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Malaysia
+ { 75, 66, 139, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 152, 1435, 9, 13, 1117, 1609, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 15, 4, 6, 7, 15, {77,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Macao
+ { 75, 66, 141, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 183, 1450, 9, 13, 1117, 1624, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 10, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Madagascar
+ { 75, 66, 142, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 185, 1465, 9, 13, 1117, 1634, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 6, {77,87,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Malawi
+ { 75, 66, 143, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 187, 1480, 9, 13, 1117, 1640, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 17, 4, 6, 7, 8, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Malaysia
{ 75, 66, 146, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 13, 73, 9, 13, 1117, 1648, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 4, 6, 7, 5, {69,85,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Malta
{ 75, 66, 147, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 969, 9, 13, 1117, 1653, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 16, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Marshall Islands
- { 75, 66, 150, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 184, 1497, 9, 13, 1117, 1669, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 9, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Mauritius
- { 75, 66, 153, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 140, 969, 9, 13, 1117, 1678, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 10, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Micronesia
+ { 75, 66, 150, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 189, 1497, 9, 13, 1117, 1669, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 9, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Mauritius
+ { 75, 66, 153, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 145, 969, 9, 13, 1117, 1678, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 10, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Micronesia
{ 75, 66, 158, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 978, 9, 13, 1117, 1688, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 10, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Montserrat
{ 75, 66, 162, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1512, 9, 13, 1117, 1698, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 7, {78,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Namibia
{ 75, 66, 163, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 999, 9, 13, 1117, 1705, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 5, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Nauru
@@ -1331,443 +1330,443 @@ static const QLocaleData locale_data[] = {
{ 75, 66, 171, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1166, 9, 13, 1117, 1739, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 4, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Niue
{ 75, 66, 172, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 999, 9, 13, 1117, 1743, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 14, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Norfolk Island
{ 75, 66, 173, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 969, 9, 13, 1117, 1757, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 24, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Northern Mariana Islands
- { 75, 66, 178, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 184, 1541, 9, 13, 1117, 1781, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 8, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // English/Latin/Pakistan
- { 75, 66, 179, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 140, 969, 9, 13, 1117, 1789, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 5, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Palau
- { 75, 66, 182, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 127, 1556, 9, 13, 1117, 1794, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 22, 4, 6, 7, 16, {80,71,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Papua New Guinea
- { 75, 66, 185, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 139, 1578, 9, 13, 1117, 1810, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 11, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Philippines
+ { 75, 66, 178, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 189, 1541, 9, 13, 1117, 1781, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 15, 4, 6, 7, 8, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // English/Latin/Pakistan
+ { 75, 66, 179, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 145, 969, 9, 13, 1117, 1789, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 5, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Palau
+ { 75, 66, 182, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 132, 1556, 9, 13, 1117, 1794, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 22, 4, 6, 7, 16, {80,71,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Papua New Guinea
+ { 75, 66, 185, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 144, 1578, 9, 13, 1117, 1810, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 11, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Philippines
{ 75, 66, 186, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1166, 9, 13, 1117, 1821, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 16, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Pitcairn
{ 75, 66, 189, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 969, 9, 13, 1117, 1837, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Puerto Rico
- { 75, 66, 194, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 186, 1593, 9, 13, 1117, 1848, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 13, 4, 6, 7, 6, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Rwanda
+ { 75, 66, 194, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 191, 1593, 9, 13, 1117, 1848, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 13, 4, 6, 7, 6, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Rwanda
{ 75, 66, 196, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 91, 1606, 9, 13, 1117, 1854, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 15, 4, 6, 7, 10, {83,72,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Helena
{ 75, 66, 197, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 978, 9, 13, 1117, 1864, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 17, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Kitts And Nevis
{ 75, 66, 198, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 978, 9, 13, 1117, 1881, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 9, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Lucia
{ 75, 66, 201, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 978, 9, 13, 1117, 1890, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 21, 4, 6, 7, 24, {88,67,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Saint Vincent And Grenadines
- { 75, 66, 202, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 188, 1621, 9, 13, 1117, 1146, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 11, 4, 6, 7, 5, {87,83,84}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Samoa
- { 75, 66, 208, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 191, 1632, 9, 13, 1117, 1914, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 17, 4, 6, 7, 10, {83,67,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Seychelles
+ { 75, 66, 202, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 193, 1621, 9, 13, 1117, 1146, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 11, 4, 6, 7, 5, {87,83,84}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Samoa
+ { 75, 66, 208, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 196, 1632, 9, 13, 1117, 1914, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 17, 4, 6, 7, 10, {83,67,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Seychelles
{ 75, 66, 209, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 9, 1649, 9, 13, 1117, 1924, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 20, 4, 6, 7, 12, {83,76,76}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sierra Leone
{ 75, 66, 210, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1669, 9, 13, 1117, 1936, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 16, 4, 6, 7, 9, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Singapore
- { 75, 66, 211, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 163, 1685, 9, 13, 1117, 1945, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 29, 4, 6, 7, 12, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sint Maarten
+ { 75, 66, 211, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 168, 1685, 9, 13, 1117, 1945, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 4, 29, 4, 6, 7, 12, {65,78,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sint Maarten
{ 75, 66, 213, 0, 0, 273, 273, 6, 1, 0, 2, 3, 4, 5, 6, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 13, 73, 19, 24, 1117, 1957, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 7, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Slovenia
{ 75, 66, 214, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1714, 9, 13, 1117, 1965, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 22, 4, 6, 7, 15, {83,66,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Solomon Islands
{ 75, 66, 216, 0, 0, 273, 273, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 636, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 0, 1402, 9, 13, 1117, 1980, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 12, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/South Africa
{ 75, 66, 219, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 91, 1736, 9, 13, 1117, 1992, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 20, 4, 6, 7, 11, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/South Sudan
{ 75, 66, 222, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 0, 1756, 9, 13, 1117, 2003, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 14, 4, 6, 7, 5, {83,68,71}, 2, 1, 6, 5, 6, 1, 3, 3 }, // English/Latin/Sudan
- { 75, 66, 225, 0, 0, 273, 273, 6, 1, 14, 2, 3, 4, 5, 52, 10, 11, 12, 13, 0, 44, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 156, 1770, 19, 0, 1117, 2008, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 13, 5, 0, 7, 6, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sweden
+ { 75, 66, 225, 0, 0, 273, 273, 6, 1, 14, 2, 3, 4, 5, 52, 10, 11, 12, 13, 0, 44, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 161, 1770, 19, 0, 1117, 2008, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 13, 5, 0, 7, 6, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Sweden
{ 75, 66, 226, 0, 0, 273, 273, 6, 0, 13, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 0, 1783, 4, 44, 1117, 2014, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 11, 5, 5, 7, 11, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Switzerland
{ 75, 66, 230, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 118, 1794, 9, 13, 1117, 2025, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 18, 4, 6, 7, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tanzania
{ 75, 66, 234, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1166, 9, 13, 1117, 2033, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 18, 4, 6, 7, 7, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tokelau
- { 75, 66, 235, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 193, 1812, 9, 13, 1117, 2040, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 14, 4, 6, 7, 5, {84,79,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tonga
+ { 75, 66, 235, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 198, 1812, 9, 13, 1117, 2040, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 14, 4, 6, 7, 5, {84,79,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tonga
{ 75, 66, 236, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 1826, 9, 13, 1117, 2045, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 24, 4, 6, 7, 17, {84,84,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Trinidad And Tobago
- { 75, 66, 241, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 140, 969, 9, 13, 1117, 2062, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 22, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Turks And Caicos Islands
+ { 75, 66, 241, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 145, 969, 9, 13, 1117, 2062, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 22, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Turks And Caicos Islands
{ 75, 66, 242, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 1, 999, 9, 13, 1117, 2084, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 17, 4, 6, 7, 6, {65,85,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Tuvalu
- { 75, 66, 243, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 143, 1850, 9, 13, 1117, 857, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 16, 4, 6, 7, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // English/Latin/Uganda
- { 75, 66, 245, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 195, 1866, 9, 13, 1117, 2090, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 27, 4, 6, 7, 20, {65,69,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // English/Latin/United Arab Emirates
+ { 75, 66, 243, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 148, 1850, 9, 13, 1117, 857, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 16, 4, 6, 7, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // English/Latin/Uganda
+ { 75, 66, 245, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 200, 1866, 9, 13, 1117, 2090, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 27, 4, 6, 7, 20, {65,69,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // English/Latin/United Arab Emirates
{ 75, 66, 246, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 91, 1893, 9, 13, 2110, 2125, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 13, 4, 6, 15, 14, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/United Kingdom
{ 75, 66, 247, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 969, 9, 13, 1117, 2139, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 21, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/United States Outlying Islands
{ 75, 66, 249, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 0, 0, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 969, 9, 13, 1117, 2160, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 9, 4, 6, 7, 19, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/United States Virgin Islands
- { 75, 66, 252, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 198, 1906, 9, 13, 1117, 2179, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 12, 4, 6, 7, 7, {86,85,86}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Vanuatu
+ { 75, 66, 252, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 203, 1906, 9, 13, 1117, 2179, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 2, 12, 4, 6, 7, 7, {86,85,86}, 0, 0, 1, 6, 7, 1, 3, 3 }, // English/Latin/Vanuatu
{ 75, 66, 258, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 0, 0, 9, 13, 1117, 2186, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 4, 6, 7, 5, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/World
- { 75, 66, 260, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 127, 1918, 9, 13, 1117, 543, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 6, {90,77,87}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Zambia
- { 75, 66, 261, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 87, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 140, 969, 9, 13, 1117, 2191, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Zimbabwe
- { 76, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 124, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Erzya/Cyrillic/Russia
- { 77, 66, 258, 0, 0, 282, 282, 6, 1, 14, 2, 3, 40, 5, 9, 10, 11, 12, 13, 646, 46, 199, 0, 4620, 4620, 4670, 4670, 4690, 4690, 189, 197, 326, 5, 22, 0, 0, 4, 0, 2199, 2208, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 8, 25, 5, 50, 50, 20, 20, 13, 13, 3, 3, 6, 17, 23, 0, 0, 5, 0, 9, 5, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Esperanto/Latin/World
- { 78, 66, 75, 0, 0, 291, 291, 6, 1, 14, 2, 3, 40, 5, 52, 15, 10, 16, 12, 345, 184, 0, 0, 4703, 4703, 4765, 4765, 4765, 4765, 0, 0, 332, 5, 22, 13, 420, 19, 24, 2213, 2218, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 13, 13, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 5, 5, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Estonian/Latin/Estonia
+ { 75, 66, 260, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 132, 1918, 9, 13, 1117, 543, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 14, 4, 6, 7, 6, {90,77,87}, 2, 1, 1, 6, 7, 1, 3, 3 }, // English/Latin/Zambia
+ { 75, 66, 261, 0, 0, 273, 273, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 87, 0, 0, 0, 0, 56, 56, 83, 83, 82, 195, 0, 5, 22, 145, 969, 9, 13, 1117, 2191, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 3, 9, 4, 6, 7, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // English/Latin/Zimbabwe
+ { 76, 27, 193, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 129, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Erzya/Cyrillic/Russia
+ { 77, 66, 258, 0, 0, 282, 282, 6, 1, 14, 2, 3, 40, 5, 9, 10, 11, 12, 13, 646, 46, 199, 0, 4620, 4620, 4670, 4670, 4690, 4690, 189, 197, 314, 5, 22, 0, 0, 4, 0, 2199, 2208, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 8, 25, 5, 50, 50, 20, 20, 13, 13, 3, 3, 6, 17, 23, 0, 0, 5, 0, 9, 5, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Esperanto/Latin/World
+ { 78, 66, 75, 0, 0, 291, 291, 6, 1, 14, 2, 3, 40, 5, 52, 15, 10, 16, 12, 345, 184, 0, 0, 4703, 4703, 4765, 4765, 4765, 4765, 0, 0, 320, 5, 22, 13, 420, 19, 24, 2213, 2218, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 13, 13, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 5, 5, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Estonian/Latin/Estonia
{ 79, 66, 92, 0, 0, 299, 310, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 672, 339, 224, 224, 4778, 4778, 4821, 4821, 4848, 4848, 192, 200, 0, 5, 22, 6, 1932, 9, 13, 2223, 2229, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 17, 12, 43, 43, 27, 27, 13, 13, 3, 5, 4, 17, 23, 3, 10, 4, 6, 6, 12, {71,72,83}, 2, 1, 1, 6, 7, 3, 3, 3 }, // Ewe/Latin/Ghana
- { 79, 66, 233, 0, 0, 299, 310, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 672, 339, 0, 0, 4778, 4778, 4821, 4821, 4848, 4848, 192, 200, 0, 5, 22, 3, 1942, 9, 13, 2223, 2241, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 10, 5, 43, 43, 27, 27, 13, 13, 3, 5, 4, 17, 23, 3, 33, 4, 6, 6, 11, {88,79,70}, 0, 0, 1, 6, 7, 3, 3, 3 }, // Ewe/Latin/Togo
+ { 79, 66, 233, 0, 0, 299, 310, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 672, 339, 0, 0, 4778, 4778, 4821, 4821, 4848, 4848, 192, 200, 0, 5, 22, 123, 1942, 9, 13, 2223, 2241, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 10, 5, 43, 43, 27, 27, 13, 13, 3, 5, 4, 17, 23, 5, 33, 4, 6, 6, 11, {88,79,70}, 0, 0, 1, 6, 7, 3, 3, 3 }, // Ewe/Latin/Togo
{ 80, 66, 40, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 87, 0, 0, 4861, 4861, 4945, 4945, 4974, 4974, 195, 205, 0, 5, 22, 2, 1975, 19, 0, 2252, 2258, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 84, 84, 29, 29, 13, 13, 7, 9, 4, 17, 23, 4, 16, 5, 0, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Ewondo/Latin/Cameroon
- { 81, 66, 81, 0, 0, 229, 229, 6, 1, 0, 2, 3, 40, 5, 9, 10, 11, 12, 13, 345, 184, 0, 0, 4987, 4987, 5060, 5087, 5121, 5121, 0, 0, 338, 5, 22, 156, 1991, 19, 24, 2265, 2273, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 73, 73, 27, 34, 13, 13, 2, 2, 3, 17, 23, 2, 11, 5, 7, 8, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Faroese/Latin/Faroe Islands
- { 81, 66, 65, 0, 0, 229, 229, 6, 1, 0, 2, 3, 40, 5, 9, 10, 11, 12, 13, 345, 184, 0, 0, 4987, 4987, 5060, 5087, 5121, 5121, 0, 0, 338, 5, 22, 156, 1991, 19, 24, 2265, 986, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 73, 73, 27, 34, 13, 13, 2, 2, 3, 17, 23, 3, 11, 5, 7, 8, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Faroese/Latin/Denmark
- { 83, 66, 185, 0, 0, 320, 329, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 5134, 5134, 5188, 5188, 5188, 5188, 0, 0, 0, 5, 22, 139, 2002, 9, 13, 2280, 729, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 54, 54, 27, 27, 27, 27, 2, 2, 5, 17, 23, 1, 17, 4, 6, 8, 9, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Filipino/Latin/Philippines
- { 84, 66, 83, 0, 0, 291, 291, 6, 1, 14, 2, 3, 40, 5, 9, 11, 11, 13, 13, 520, 695, 141, 141, 5215, 5281, 5361, 5361, 5381, 5381, 202, 214, 341, 346, 363, 13, 420, 19, 0, 2288, 2293, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 9, 4, 66, 80, 20, 20, 13, 13, 3, 3, 5, 17, 23, 1, 4, 5, 0, 5, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Finnish/Latin/Finland
- { 85, 66, 84, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2306, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/France
- { 85, 66, 4, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 177, 2019, 19, 24, 2298, 2312, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // French/Latin/Algeria
- { 85, 66, 23, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 128, 241, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2319, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 23, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Belgium
- { 85, 66, 25, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 3, 2033, 19, 24, 2298, 2327, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 17, 5, 7, 8, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Benin
- { 85, 66, 37, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 3, 2033, 19, 24, 2298, 2332, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 17, 5, 7, 8, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Burkina Faso
- { 85, 66, 38, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 173, 2050, 19, 24, 2298, 1296, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 15, 5, 7, 8, 7, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Burundi
- { 85, 66, 40, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 205, 217, 386, 242, 259, 2, 2065, 19, 24, 2298, 1011, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 5, 4, 6, 17, 23, 4, 16, 5, 7, 8, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Cameroon
- { 85, 66, 41, 0, 0, 337, 337, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 11, 10, 71, 44, 264, 264, 5394, 5394, 5445, 5445, 5479, 5479, 165, 164, 386, 242, 259, 200, 2081, 19, 24, 2344, 1327, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 24, 9, 51, 51, 34, 34, 13, 13, 4, 4, 6, 17, 23, 4, 15, 5, 7, 17, 6, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // French/Latin/Canada
- { 85, 66, 46, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 2, 2065, 19, 24, 2298, 2361, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 25, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Central African Republic
- { 85, 66, 48, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 2, 2065, 19, 24, 2298, 2386, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Chad
- { 85, 66, 55, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 3, 2096, 19, 24, 2298, 2391, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {75,77,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Comoros
- { 85, 66, 56, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 2, 2065, 19, 24, 2298, 2398, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 17, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Congo Brazzaville
- { 85, 66, 57, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 2, 2110, 19, 24, 2298, 2415, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 15, 5, 7, 8, 14, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Congo Kinshasa
- { 85, 66, 67, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 34, 2125, 19, 24, 2298, 2429, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 16, 5, 7, 8, 8, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // French/Latin/Djibouti
- { 85, 66, 73, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 2, 2065, 19, 24, 2298, 2437, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 18, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Equatorial Guinea
- { 85, 66, 85, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2455, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 16, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/French Guiana
- { 85, 66, 86, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 204, 2141, 19, 24, 2298, 2471, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 9, 5, 7, 8, 19, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/French Polynesia
- { 85, 66, 88, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 2, 2065, 19, 24, 2298, 2490, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Gabon
- { 85, 66, 97, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2495, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Guadeloupe
- { 85, 66, 102, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 208, 2150, 19, 24, 2298, 2437, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 13, 5, 7, 8, 6, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Guinea
- { 85, 66, 104, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 6, 2163, 19, 24, 2298, 2505, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 16, 5, 7, 8, 5, {72,84,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Haiti
- { 85, 66, 118, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 3, 2033, 19, 24, 2298, 2510, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 17, 5, 7, 8, 13, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Ivory Coast
- { 85, 66, 138, 0, 0, 337, 337, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2523, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Luxembourg
- { 85, 66, 141, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 178, 2179, 19, 24, 2298, 1624, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 15, 5, 7, 8, 10, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Madagascar
- { 85, 66, 145, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 3, 2033, 19, 24, 2298, 467, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 17, 5, 7, 8, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mali
- { 85, 66, 148, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2533, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Martinique
- { 85, 66, 149, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 210, 2194, 19, 24, 2298, 2543, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 19, 5, 7, 8, 10, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mauritania
- { 85, 66, 150, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 184, 2213, 19, 24, 2298, 2553, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 18, 5, 7, 8, 7, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mauritius
- { 85, 66, 151, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2560, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mayotte
- { 85, 66, 155, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2567, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Monaco
- { 85, 66, 159, 0, 0, 337, 337, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 165, 164, 386, 242, 259, 212, 2231, 19, 24, 2298, 2573, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 4, 4, 6, 17, 23, 3, 15, 5, 7, 8, 5, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Morocco
- { 85, 66, 166, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 204, 2141, 19, 24, 2298, 2578, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 9, 5, 7, 8, 18, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/New Caledonia
- { 85, 66, 170, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 3, 2033, 19, 24, 2298, 1732, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 17, 5, 7, 8, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Niger
- { 85, 66, 191, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2596, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Reunion
- { 85, 66, 194, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 186, 2246, 19, 24, 2298, 1848, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 6, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Rwanda
- { 85, 66, 195, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2606, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 16, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Barthelemy
- { 85, 66, 199, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2622, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 12, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Martin
- { 85, 66, 200, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 13, 420, 19, 24, 2298, 2634, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 24, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Pierre And Miquelon
- { 85, 66, 206, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 3, 2033, 19, 24, 2298, 2658, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 17, 5, 7, 8, 7, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Senegal
- { 85, 66, 208, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 191, 2260, 19, 24, 2298, 1914, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 21, 5, 7, 8, 10, {83,67,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Seychelles
- { 85, 66, 226, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 19, 20, 0, 184, 288, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 215, 2281, 19, 24, 2665, 2680, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 14, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 12, 5, 7, 15, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Switzerland
- { 85, 66, 227, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 218, 2293, 19, 24, 2298, 2686, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 5, {83,89,80}, 0, 0, 6, 5, 6, 1, 3, 3 }, // French/Latin/Syria
- { 85, 66, 233, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 3, 2033, 19, 24, 2298, 2241, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 17, 5, 7, 8, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Togo
- { 85, 66, 238, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 220, 2307, 19, 24, 2298, 2691, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {84,78,68}, 3, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Tunisia
- { 85, 66, 252, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 198, 2321, 19, 24, 2298, 2179, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {86,85,86}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Vanuatu
- { 85, 66, 256, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 386, 242, 259, 204, 2141, 19, 24, 2298, 2698, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 9, 5, 7, 8, 16, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Wallis And Futuna
+ { 81, 66, 81, 0, 0, 229, 229, 6, 1, 0, 2, 3, 40, 5, 9, 10, 11, 12, 13, 345, 184, 0, 0, 4987, 4987, 5060, 5087, 5121, 5121, 0, 0, 326, 5, 22, 161, 1991, 19, 24, 2265, 2273, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 73, 73, 27, 34, 13, 13, 2, 2, 3, 17, 23, 2, 11, 5, 7, 8, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Faroese/Latin/Faroe Islands
+ { 81, 66, 65, 0, 0, 229, 229, 6, 1, 0, 2, 3, 40, 5, 9, 10, 11, 12, 13, 345, 184, 0, 0, 4987, 4987, 5060, 5087, 5121, 5121, 0, 0, 326, 5, 22, 161, 1991, 19, 24, 2265, 986, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 73, 73, 27, 34, 13, 13, 2, 2, 3, 17, 23, 3, 11, 5, 7, 8, 7, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Faroese/Latin/Denmark
+ { 83, 66, 185, 0, 0, 320, 329, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22, 5134, 5134, 5188, 5188, 5188, 5188, 0, 0, 0, 5, 22, 144, 2002, 9, 13, 2280, 729, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 54, 54, 27, 27, 27, 27, 2, 2, 5, 17, 23, 1, 17, 4, 6, 8, 9, {80,72,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Filipino/Latin/Philippines
+ { 84, 66, 83, 0, 0, 291, 291, 6, 1, 14, 2, 3, 40, 5, 9, 11, 11, 13, 13, 520, 695, 141, 141, 5215, 5281, 5361, 5361, 5381, 5381, 202, 214, 329, 334, 351, 13, 420, 19, 0, 2288, 2293, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 9, 4, 66, 80, 20, 20, 13, 13, 3, 3, 5, 17, 23, 1, 4, 5, 0, 5, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Finnish/Latin/Finland
+ { 85, 66, 84, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2306, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/France
+ { 85, 66, 4, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 182, 2019, 19, 24, 2298, 2312, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // French/Latin/Algeria
+ { 85, 66, 23, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 128, 241, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2319, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 23, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Belgium
+ { 85, 66, 25, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 123, 2033, 19, 24, 2298, 2327, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Benin
+ { 85, 66, 37, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 123, 2033, 19, 24, 2298, 2332, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Burkina Faso
+ { 85, 66, 38, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 178, 2050, 19, 24, 2298, 1296, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 15, 5, 7, 8, 7, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Burundi
+ { 85, 66, 40, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 205, 217, 374, 230, 247, 2, 2065, 19, 24, 2298, 1011, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 5, 4, 6, 17, 23, 4, 16, 5, 7, 8, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Cameroon
+ { 85, 66, 41, 0, 0, 337, 337, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 11, 10, 71, 44, 264, 264, 5394, 5394, 5445, 5445, 5479, 5479, 165, 164, 374, 230, 247, 205, 2081, 19, 24, 2344, 1327, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 24, 9, 51, 51, 34, 34, 13, 13, 4, 4, 6, 17, 23, 4, 15, 5, 7, 17, 6, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // French/Latin/Canada
+ { 85, 66, 46, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 2, 2065, 19, 24, 2298, 2361, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 25, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Central African Republic
+ { 85, 66, 48, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 2, 2065, 19, 24, 2298, 2386, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Chad
+ { 85, 66, 55, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 3, 2096, 19, 24, 2298, 2391, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {75,77,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Comoros
+ { 85, 66, 56, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 2, 2065, 19, 24, 2298, 2398, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 17, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Congo Brazzaville
+ { 85, 66, 57, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 2, 2110, 19, 24, 2298, 2415, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 15, 5, 7, 8, 14, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Congo Kinshasa
+ { 85, 66, 67, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 34, 2125, 19, 24, 2298, 2429, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 16, 5, 7, 8, 8, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // French/Latin/Djibouti
+ { 85, 66, 73, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 2, 2065, 19, 24, 2298, 2437, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 18, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Equatorial Guinea
+ { 85, 66, 85, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2455, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 16, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/French Guiana
+ { 85, 66, 86, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 209, 2141, 19, 24, 2298, 2471, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 9, 5, 7, 8, 19, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/French Polynesia
+ { 85, 66, 88, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 2, 2065, 19, 24, 2298, 2490, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 16, 5, 7, 8, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Gabon
+ { 85, 66, 97, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2495, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Guadeloupe
+ { 85, 66, 102, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 213, 2150, 19, 24, 2298, 2437, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 13, 5, 7, 8, 6, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Guinea
+ { 85, 66, 104, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 6, 2163, 19, 24, 2298, 2505, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 16, 5, 7, 8, 5, {72,84,71}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Haiti
+ { 85, 66, 118, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 123, 2033, 19, 24, 2298, 2510, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 13, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Ivory Coast
+ { 85, 66, 138, 0, 0, 337, 337, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2523, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Luxembourg
+ { 85, 66, 141, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 183, 2179, 19, 24, 2298, 1624, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 15, 5, 7, 8, 10, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Madagascar
+ { 85, 66, 145, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 123, 2033, 19, 24, 2298, 467, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mali
+ { 85, 66, 148, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2533, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Martinique
+ { 85, 66, 149, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 215, 2194, 19, 24, 2298, 2543, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 19, 5, 7, 8, 10, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mauritania
+ { 85, 66, 150, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 189, 2213, 19, 24, 2298, 2553, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 18, 5, 7, 8, 7, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mauritius
+ { 85, 66, 151, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2560, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Mayotte
+ { 85, 66, 155, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2567, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Monaco
+ { 85, 66, 159, 0, 0, 337, 337, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 165, 164, 374, 230, 247, 217, 2231, 19, 24, 2298, 2573, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 4, 4, 6, 17, 23, 3, 15, 5, 7, 8, 5, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Morocco
+ { 85, 66, 166, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 209, 2141, 19, 24, 2298, 2578, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 9, 5, 7, 8, 18, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/New Caledonia
+ { 85, 66, 170, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 123, 2033, 19, 24, 2298, 1732, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Niger
+ { 85, 66, 191, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2596, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Reunion
+ { 85, 66, 194, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 191, 2246, 19, 24, 2298, 1848, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 6, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Rwanda
+ { 85, 66, 195, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2606, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 16, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Barthelemy
+ { 85, 66, 199, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2622, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 12, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Martin
+ { 85, 66, 200, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 13, 420, 19, 24, 2298, 2634, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 1, 4, 5, 7, 8, 24, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Saint Pierre And Miquelon
+ { 85, 66, 206, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 123, 2033, 19, 24, 2298, 2658, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 7, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Senegal
+ { 85, 66, 208, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 196, 2260, 19, 24, 2298, 1914, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 21, 5, 7, 8, 10, {83,67,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // French/Latin/Seychelles
+ { 85, 66, 226, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 19, 20, 0, 184, 288, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 220, 2281, 19, 24, 2665, 2680, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 14, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 3, 12, 5, 7, 15, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Switzerland
+ { 85, 66, 227, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 223, 2293, 19, 24, 2298, 2686, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 5, {83,89,80}, 0, 0, 6, 5, 6, 1, 3, 3 }, // French/Latin/Syria
+ { 85, 66, 233, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 123, 2033, 19, 24, 2298, 2241, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 5, 17, 5, 7, 8, 4, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Togo
+ { 85, 66, 238, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 225, 2307, 19, 24, 2298, 2691, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {84,78,68}, 3, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Tunisia
+ { 85, 66, 252, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 10, 22, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 203, 2321, 19, 24, 2298, 2179, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 12, 7, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 2, 14, 5, 7, 8, 7, {86,85,86}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Vanuatu
+ { 85, 66, 256, 0, 0, 337, 337, 6, 1, 57, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 127, 0, 0, 5394, 5394, 5445, 5445, 5479, 5479, 0, 0, 374, 230, 247, 209, 2141, 19, 24, 2298, 2698, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 51, 51, 34, 34, 13, 13, 2, 2, 6, 17, 23, 4, 9, 5, 7, 8, 16, {88,80,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // French/Latin/Wallis And Futuna
{ 86, 66, 117, 0, 0, 345, 345, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 703, 127, 0, 0, 5492, 5492, 5541, 5541, 5479, 5479, 5, 124, 0, 5, 22, 13, 420, 4, 0, 2714, 2720, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Friulian/Latin/Italy
- { 87, 66, 206, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 3, 2335, 19, 0, 2726, 2732, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 19, 5, 0, 6, 8, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Senegal
- { 87, 1, 37, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 222, 2354, 4, 0, 2740, 2750, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 25, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Burkina Faso
- { 87, 1, 40, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 228, 2405, 4, 0, 2740, 2775, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 8, 44, 5, 0, 10, 16, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Cameroon
- { 87, 1, 89, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 177, 2449, 4, 0, 2740, 2791, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 1, 29, 5, 0, 10, 14, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Gambia
- { 87, 1, 92, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 6, 2478, 4, 0, 2740, 2805, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 3, 23, 5, 0, 10, 8, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Ghana
- { 87, 1, 101, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 222, 2354, 4, 0, 2740, 2813, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 23, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Guinea Bissau
- { 87, 1, 102, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 208, 2501, 4, 0, 2740, 2813, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 2, 25, 5, 0, 10, 8, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Guinea
- { 87, 1, 134, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 1, 2526, 4, 0, 2740, 2836, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 1, 31, 5, 0, 10, 18, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Liberia
- { 87, 1, 149, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 210, 2557, 4, 0, 2740, 2854, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 2, 37, 5, 0, 10, 16, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Mauritania
- { 87, 1, 169, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 121, 2594, 4, 0, 2740, 2870, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 1, 33, 5, 0, 10, 18, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Nigeria
- { 87, 1, 170, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 222, 2354, 4, 0, 2740, 2888, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Niger
- { 87, 1, 206, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 222, 2354, 4, 0, 2740, 2900, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 16, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Senegal
- { 87, 1, 209, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 392, 404, 22, 9, 2627, 4, 0, 2740, 2916, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 2, 33, 5, 0, 10, 14, {83,76,76}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Sierra Leone
- { 87, 66, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 3, 2335, 19, 0, 2726, 2930, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 19, 5, 0, 6, 14, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Burkina Faso
+ { 87, 66, 206, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 123, 2335, 19, 0, 2726, 2732, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 5, 19, 5, 0, 6, 8, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Senegal
+ { 87, 1, 37, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 227, 2354, 4, 0, 2740, 2750, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 25, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Burkina Faso
+ { 87, 1, 40, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 233, 2405, 4, 0, 2740, 2775, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 8, 44, 5, 0, 10, 16, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Cameroon
+ { 87, 1, 89, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 182, 2449, 4, 0, 2740, 2791, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 1, 29, 5, 0, 10, 14, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Gambia
+ { 87, 1, 92, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 6, 2478, 4, 0, 2740, 2805, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 3, 23, 5, 0, 10, 8, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Ghana
+ { 87, 1, 101, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 227, 2354, 4, 0, 2740, 2813, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 23, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Guinea Bissau
+ { 87, 1, 102, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 213, 2501, 4, 0, 2740, 2813, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 2, 25, 5, 0, 10, 8, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Guinea
+ { 87, 1, 134, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 1, 2526, 4, 0, 2740, 2836, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 1, 31, 5, 0, 10, 18, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Liberia
+ { 87, 1, 149, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 215, 2557, 4, 0, 2740, 2854, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 2, 37, 5, 0, 10, 16, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Mauritania
+ { 87, 1, 169, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 121, 2594, 4, 0, 2740, 2870, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 1, 33, 5, 0, 10, 18, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Nigeria
+ { 87, 1, 170, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 227, 2354, 4, 0, 2740, 2888, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Niger
+ { 87, 1, 206, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 227, 2354, 4, 0, 2740, 2900, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 6, 51, 5, 0, 10, 16, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Senegal
+ { 87, 1, 209, 352, 352, 352, 358, 6, 0, 58, 2, 59, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22, 5666, 5666, 5784, 5784, 5836, 5836, 216, 228, 380, 392, 22, 9, 2627, 4, 0, 2740, 2916, 6, 6, 6, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7,118,118, 52, 52, 22, 22, 4, 4, 12, 27, 23, 2, 33, 5, 0, 10, 14, {83,76,76}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Adlam/Sierra Leone
+ { 87, 66, 37, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 123, 2335, 19, 0, 2726, 2930, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 5, 19, 5, 0, 6, 14, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Burkina Faso
{ 87, 66, 40, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 2, 2660, 19, 0, 2726, 2944, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 4, 18, 5, 0, 6, 8, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Cameroon
- { 87, 66, 89, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 10, 22, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 177, 2678, 19, 0, 2726, 2952, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 13, 5, 0, 6, 6, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Gambia
+ { 87, 66, 89, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 10, 22, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 182, 2678, 19, 0, 2726, 2952, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 13, 5, 0, 6, 6, {71,77,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Gambia
{ 87, 66, 92, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 10, 22, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 6, 0, 19, 0, 2726, 2958, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 0, 5, 0, 6, 5, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Ghana
- { 87, 66, 101, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 3, 2335, 19, 0, 2726, 2963, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 19, 5, 0, 6, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Guinea Bissau
- { 87, 66, 102, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 208, 0, 19, 0, 2726, 2963, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 0, 5, 0, 6, 4, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Guinea
+ { 87, 66, 101, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 123, 2335, 19, 0, 2726, 2963, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 5, 19, 5, 0, 6, 12, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Guinea Bissau
+ { 87, 66, 102, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 213, 0, 19, 0, 2726, 2963, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 0, 5, 0, 6, 4, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Guinea
{ 87, 66, 134, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 10, 22, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 1, 2691, 19, 0, 2726, 2975, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 16, 5, 0, 6, 9, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Liberia
- { 87, 66, 149, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 10, 22, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 210, 2707, 19, 0, 2726, 2984, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 15, 5, 0, 6, 8, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Mauritania
+ { 87, 66, 149, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 10, 22, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 215, 2707, 19, 0, 2726, 2984, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 15, 5, 0, 6, 8, {77,82,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Mauritania
{ 87, 66, 169, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 121, 2722, 19, 0, 2726, 2992, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 1, 16, 5, 0, 6, 9, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Nigeria
- { 87, 66, 170, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 3, 2335, 19, 0, 2726, 3001, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 3, 19, 5, 0, 6, 6, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Niger
+ { 87, 66, 170, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 0, 0, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 123, 2335, 19, 0, 2726, 3001, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 5, 19, 5, 0, 6, 6, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Niger
{ 87, 66, 209, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 16, 13, 71, 87, 10, 22, 5568, 5568, 5626, 5626, 5653, 5653, 210, 221, 0, 5, 22, 9, 2738, 19, 0, 2726, 3007, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 58, 58, 27, 27, 13, 13, 6, 7, 4, 17, 23, 2, 18, 5, 0, 6, 11, {83,76,76}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Fulah/Latin/Sierra Leone
- { 88, 66, 246, 0, 0, 366, 366, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 730, 127, 0, 0, 5858, 5858, 5926, 5926, 5953, 5953, 3, 131, 431, 5, 22, 91, 2756, 9, 13, 3018, 3026, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 10, 10, 5, 68, 68, 27, 27, 13, 13, 1, 1, 6, 17, 23, 1, 15, 4, 6, 8, 22, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Gaelic/Latin/United Kingdom
+ { 88, 66, 246, 0, 0, 366, 366, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 730, 127, 0, 0, 5858, 5858, 5926, 5926, 5953, 5953, 3, 131, 419, 5, 22, 91, 2756, 9, 13, 3018, 3026, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 10, 10, 5, 68, 68, 27, 27, 13, 13, 1, 1, 6, 17, 23, 1, 15, 4, 6, 8, 22, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Gaelic/Latin/United Kingdom
{ 89, 66, 92, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 6, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ga/Latin/Ghana
{ 90, 66, 220, 0, 0, 345, 345, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 127, 0, 0, 5966, 6014, 6062, 6096, 942, 6130, 165, 164, 0, 5, 22, 13, 420, 19, 0, 3048, 386, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 48, 48, 34, 34, 13, 20, 4, 4, 5, 17, 23, 1, 4, 5, 0, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Galician/Latin/Spain
- { 91, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 6150, 6150, 6215, 6215, 6242, 6242, 0, 0, 0, 5, 22, 143, 2771, 0, 0, 3054, 3061, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 65, 65, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 7, 7, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Ganda/Latin/Uganda
+ { 91, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 6150, 6150, 6215, 6215, 6242, 6242, 0, 0, 0, 5, 22, 148, 2771, 0, 0, 3054, 3061, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 65, 65, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 7, 7, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Ganda/Latin/Uganda
{ 92, 33, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Geez/Ethiopic/Ethiopia
- { 93, 35, 90, 0, 0, 376, 376, 6, 1, 14, 2, 3, 4, 5, 9, 15, 10, 17, 18, 778, 184, 0, 0, 6255, 6255, 6316, 6316, 6343, 6343, 0, 0, 437, 442, 22, 236, 2790, 19, 0, 3068, 3075, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 10, 5, 61, 61, 27, 27, 13, 13, 2, 2, 5, 37, 23, 1, 12, 5, 0, 7, 10, {71,69,76}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Georgian/Georgian/Georgia
- { 94, 66, 91, 0, 0, 384, 384, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 479, 5, 22, 13, 73, 19, 0, 3085, 3092, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Germany
- { 94, 66, 16, 0, 0, 384, 384, 6, 1, 14, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 479, 5, 22, 13, 73, 19, 0, 3103, 3103, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 24, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Austria
- { 94, 66, 23, 0, 0, 384, 384, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 479, 5, 22, 13, 73, 19, 0, 3085, 3127, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Belgium
- { 94, 66, 117, 0, 0, 384, 384, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 479, 5, 22, 13, 73, 19, 0, 3085, 3134, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Italy
- { 94, 66, 136, 0, 0, 384, 384, 6, 0, 13, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 479, 5, 22, 215, 2802, 19, 0, 3085, 3141, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 3, 17, 5, 0, 7, 13, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // German/Latin/Liechtenstein
- { 94, 66, 138, 0, 0, 384, 384, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 479, 5, 22, 13, 73, 19, 0, 3085, 3154, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Luxembourg
- { 94, 66, 226, 0, 0, 384, 384, 6, 0, 13, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 479, 5, 22, 215, 2802, 19, 0, 3163, 3163, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 3, 17, 5, 0, 21, 7, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // German/Latin/Switzerland
+ { 93, 35, 90, 0, 0, 376, 376, 6, 1, 14, 2, 3, 4, 5, 9, 15, 10, 17, 18, 778, 184, 0, 0, 6255, 6255, 6316, 6316, 6343, 6343, 0, 0, 425, 430, 22, 241, 2790, 19, 0, 3068, 3075, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 10, 5, 61, 61, 27, 27, 13, 13, 2, 2, 5, 29, 23, 1, 12, 5, 0, 7, 10, {71,69,76}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Georgian/Georgian/Georgia
+ { 94, 66, 91, 0, 0, 384, 384, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 459, 5, 22, 13, 73, 19, 0, 3085, 3092, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Germany
+ { 94, 66, 16, 0, 0, 384, 384, 6, 1, 14, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 459, 5, 22, 13, 73, 19, 0, 3103, 3103, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 24, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Austria
+ { 94, 66, 23, 0, 0, 384, 384, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 459, 5, 22, 13, 73, 19, 0, 3085, 3127, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Belgium
+ { 94, 66, 117, 0, 0, 384, 384, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 459, 5, 22, 13, 73, 19, 0, 3085, 3134, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Italy
+ { 94, 66, 136, 0, 0, 384, 384, 6, 0, 13, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 459, 5, 22, 220, 2802, 19, 0, 3085, 3141, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 3, 17, 5, 0, 7, 13, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // German/Latin/Liechtenstein
+ { 94, 66, 138, 0, 0, 384, 384, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 459, 5, 22, 13, 73, 19, 0, 3085, 3154, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 0, 7, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // German/Latin/Luxembourg
+ { 94, 66, 226, 0, 0, 384, 384, 6, 0, 13, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0, 6356, 6356, 6415, 6435, 3667, 3667, 0, 0, 459, 5, 22, 220, 2802, 19, 0, 3163, 3163, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 59, 59, 20, 27, 13, 13, 2, 2, 5, 17, 23, 3, 17, 5, 0, 21, 7, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // German/Latin/Switzerland
{ 96, 39, 94, 0, 0, 393, 393, 6, 1, 0, 2, 3, 4, 5, 6, 17, 18, 10, 11, 0, 87, 10, 22, 6462, 6462, 6516, 6516, 6543, 6543, 220, 232, 0, 5, 22, 13, 2819, 19, 0, 3184, 3192, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 54, 54, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 0, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Greek/Greek/Greece
{ 96, 39, 63, 0, 0, 393, 393, 6, 1, 0, 2, 3, 4, 5, 6, 17, 18, 10, 11, 0, 87, 10, 22, 6462, 6462, 6516, 6516, 6543, 6543, 220, 232, 0, 5, 22, 13, 2819, 19, 0, 3184, 3198, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 54, 54, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 0, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Greek/Greek/Cyprus
- { 97, 66, 183, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 237, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {80,89,71}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Guarani/Latin/Paraguay
- { 98, 40, 110, 0, 0, 402, 402, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 302, 315, 6556, 6556, 6608, 6608, 6639, 6639, 0, 0, 484, 5, 22, 117, 2823, 9, 13, 3204, 3211, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 8, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 13, 4, 6, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Gujarati/Gujarati/India
- { 99, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 6657, 6657, 6718, 6718, 6745, 6745, 224, 236, 0, 5, 22, 170, 952, 9, 13, 3215, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 27, 27, 13, 13, 6, 3, 4, 17, 23, 3, 17, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Gusii/Latin/Kenya
- { 101, 66, 169, 0, 0, 411, 420, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 797, 87, 0, 0, 6758, 6758, 6809, 6809, 6836, 6836, 230, 239, 0, 488, 529, 121, 2836, 4, 0, 3223, 3228, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 51, 51, 27, 27, 13, 13, 6, 5, 5, 41, 47, 1, 15, 5, 0, 5, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Nigeria
+ { 97, 66, 183, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 242, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {80,89,71}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Guarani/Latin/Paraguay
+ { 98, 40, 110, 0, 0, 402, 402, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 302, 315, 6556, 6556, 6608, 6608, 6639, 6639, 0, 0, 464, 5, 22, 117, 2823, 9, 13, 3204, 3211, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 8, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 13, 4, 6, 7, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Gujarati/Gujarati/India
+ { 99, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 6657, 6657, 6718, 6718, 6745, 6745, 224, 236, 0, 5, 22, 175, 952, 9, 13, 3215, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 27, 27, 13, 13, 6, 3, 4, 17, 23, 3, 17, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Gusii/Latin/Kenya
+ { 101, 66, 169, 0, 0, 411, 420, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 797, 87, 0, 0, 6758, 6758, 6809, 6809, 6836, 6836, 230, 239, 0, 468, 509, 121, 2836, 4, 0, 3223, 3228, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 51, 51, 27, 27, 13, 13, 6, 5, 5, 41, 47, 1, 15, 5, 0, 5, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Nigeria
{ 101, 4, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 121, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Arabic/Nigeria
- { 101, 66, 92, 0, 0, 411, 420, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 797, 87, 10, 22, 6758, 6758, 6809, 6809, 6836, 6836, 230, 239, 0, 488, 529, 6, 2851, 4, 0, 3223, 2958, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 51, 51, 27, 27, 13, 13, 6, 5, 5, 41, 47, 3, 13, 5, 0, 5, 4, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Ghana
- { 101, 66, 170, 0, 0, 411, 420, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 797, 87, 0, 0, 6758, 6758, 6809, 6809, 6836, 6836, 230, 239, 0, 488, 529, 3, 2864, 4, 0, 3223, 3236, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 51, 51, 27, 27, 13, 13, 6, 5, 5, 41, 47, 3, 29, 5, 0, 5, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Niger
+ { 101, 66, 92, 0, 0, 411, 420, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 797, 87, 10, 22, 6758, 6758, 6809, 6809, 6836, 6836, 230, 239, 0, 468, 509, 6, 2851, 4, 0, 3223, 2958, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 51, 51, 27, 27, 13, 13, 6, 5, 5, 41, 47, 3, 13, 5, 0, 5, 4, {71,72,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Ghana
+ { 101, 66, 170, 0, 0, 411, 420, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 797, 87, 0, 0, 6758, 6758, 6809, 6809, 6836, 6836, 230, 239, 0, 468, 509, 123, 2864, 4, 0, 3223, 3236, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 51, 51, 27, 27, 13, 13, 6, 5, 5, 41, 47, 5, 29, 5, 0, 5, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Hausa/Latin/Niger
{ 102, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22, 6849, 6849, 6905, 6905, 83, 83, 0, 0, 0, 5, 22, 1, 0, 9, 13, 3241, 3255, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 6, 14, 19, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Hawaiian/Latin/United States
- { 103, 47, 116, 0, 0, 428, 428, 6, 0, 1, 2, 3, 35, 37, 9, 11, 11, 13, 13, 814, 695, 1, 1, 6925, 6925, 6989, 6989, 7034, 7034, 236, 244, 576, 5, 22, 45, 2893, 19, 0, 3274, 3279, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 18, 8, 9, 4, 64, 64, 45, 45, 20, 20, 6, 5, 4, 17, 23, 1, 7, 5, 0, 5, 5, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Hebrew/Hebrew/Israel
- { 105, 29, 110, 0, 0, 434, 443, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22, 7054, 7054, 7106, 7106, 7137, 7137, 82, 195, 580, 5, 22, 117, 2900, 9, 0, 3284, 569, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 12, 4, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Hindi/Devanagari/India
+ { 103, 47, 116, 0, 0, 428, 428, 6, 0, 1, 2, 3, 35, 37, 9, 11, 11, 13, 13, 814, 695, 1, 1, 6925, 6925, 6989, 6989, 7034, 7034, 236, 244, 556, 5, 22, 45, 2893, 19, 0, 3274, 3279, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 18, 8, 9, 4, 64, 64, 45, 45, 20, 20, 6, 5, 4, 17, 23, 1, 7, 5, 0, 5, 5, {73,76,83}, 2, 1, 7, 5, 6, 1, 3, 3 }, // Hebrew/Hebrew/Israel
+ { 105, 29, 110, 0, 0, 434, 443, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22, 7054, 7054, 7106, 7106, 7137, 7137, 82, 195, 560, 5, 22, 117, 2900, 9, 0, 3284, 569, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 12, 4, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Hindi/Devanagari/India
{ 105, 66, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 117, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Hindi/Latin/India
- { 107, 66, 108, 0, 0, 451, 451, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 18, 17, 832, 851, 1, 1, 7155, 7155, 7206, 7206, 7224, 7224, 242, 249, 584, 5, 22, 238, 2912, 19, 0, 3290, 3296, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 13, 9, 4, 51, 51, 18, 18, 16, 16, 3, 3, 4, 17, 23, 2, 13, 5, 0, 6, 12, {72,85,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Hungarian/Latin/Hungary
- { 108, 66, 109, 0, 0, 229, 229, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 695, 0, 0, 7240, 7240, 7320, 7320, 7354, 7354, 245, 252, 588, 5, 22, 240, 2925, 19, 0, 3308, 3316, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 80, 80, 34, 34, 13, 13, 4, 4, 4, 17, 23, 3, 13, 5, 0, 8, 6, {73,83,75}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Icelandic/Latin/Iceland
+ { 107, 66, 108, 0, 0, 451, 451, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 18, 17, 832, 851, 1, 1, 7155, 7155, 7206, 7206, 7224, 7224, 242, 249, 564, 5, 22, 243, 2912, 19, 0, 3290, 3296, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 13, 9, 4, 51, 51, 18, 18, 16, 16, 3, 3, 4, 17, 23, 2, 13, 5, 0, 6, 12, {72,85,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Hungarian/Latin/Hungary
+ { 108, 66, 109, 0, 0, 229, 229, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 695, 0, 0, 7240, 7240, 7320, 7320, 7354, 7354, 245, 252, 568, 5, 22, 245, 2925, 19, 0, 3308, 3316, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 80, 80, 34, 34, 13, 13, 4, 4, 4, 17, 23, 3, 13, 5, 0, 8, 6, {73,83,75}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Icelandic/Latin/Iceland
{ 109, 66, 258, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ido/Latin/World
{ 110, 66, 169, 0, 0, 459, 468, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 0, 0, 7367, 7367, 7420, 7420, 83, 83, 249, 256, 0, 5, 22, 121, 2938, 9, 13, 3322, 3326, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 53, 53, 28, 28, 13, 13, 7, 7, 4, 17, 23, 1, 5, 4, 6, 4, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Igbo/Latin/Nigeria
{ 111, 66, 83, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 864, 695, 141, 141, 7448, 7517, 7589, 7589, 83, 7616, 256, 263, 0, 5, 22, 13, 420, 19, 0, 3334, 3345, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 9, 4, 69, 72, 27, 27, 13, 13, 3, 3, 4, 17, 23, 1, 4, 5, 0, 11, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Inari Sami/Latin/Finland
- { 112, 66, 111, 0, 0, 476, 486, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 127, 140, 140, 7629, 7629, 7671, 7671, 7698, 7698, 0, 0, 0, 5, 22, 243, 2943, 9, 0, 3350, 3350, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 42, 42, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 16, 4, 0, 9, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Indonesian/Latin/Indonesia
+ { 112, 66, 111, 0, 0, 476, 486, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 127, 140, 140, 7629, 7629, 7671, 7671, 7698, 7698, 0, 0, 0, 5, 22, 248, 2943, 9, 0, 3350, 3350, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 42, 42, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 16, 4, 0, 9, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Indonesian/Latin/Indonesia
{ 114, 66, 258, 0, 0, 345, 345, 6, 1, 0, 2, 3, 4, 5, 9, 12, 13, 10, 11, 882, 432, 0, 0, 7711, 7711, 7767, 7767, 7794, 7794, 0, 0, 0, 5, 22, 0, 0, 4, 37, 3359, 3370, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 10, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 5, 17, 23, 0, 0, 5, 7, 11, 5, {0,0,0}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Interlingua/Latin/World
- { 116, 18, 41, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 245, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Inuktitut/Canadian Aboriginal/Canada
- { 116, 66, 41, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 245, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Inuktitut/Latin/Canada
- { 118, 66, 114, 0, 0, 366, 366, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 127, 0, 0, 7807, 7807, 7881, 7881, 7917, 7917, 259, 266, 592, 5, 22, 13, 73, 9, 13, 3375, 3382, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 74, 74, 36, 36, 13, 13, 4, 4, 6, 17, 23, 1, 4, 4, 6, 7, 4, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Irish/Latin/Ireland
- { 118, 66, 246, 0, 0, 366, 366, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 127, 0, 0, 7807, 7807, 7881, 7881, 7917, 7917, 259, 266, 592, 5, 22, 91, 2959, 9, 13, 3375, 3386, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 74, 74, 36, 36, 13, 13, 4, 4, 6, 17, 23, 1, 14, 4, 6, 7, 19, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Irish/Latin/United Kingdom
+ { 116, 18, 41, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 250, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Inuktitut/Canadian Aboriginal/Canada
+ { 116, 66, 41, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 250, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Inuktitut/Latin/Canada
+ { 118, 66, 114, 0, 0, 366, 366, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 127, 0, 0, 7807, 7807, 7881, 7881, 7917, 7917, 259, 266, 572, 5, 22, 13, 73, 9, 13, 3375, 3382, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 74, 74, 36, 36, 13, 13, 4, 4, 6, 17, 23, 1, 4, 4, 6, 7, 4, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Irish/Latin/Ireland
+ { 118, 66, 246, 0, 0, 366, 366, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 127, 0, 0, 7807, 7807, 7881, 7881, 7917, 7917, 259, 266, 572, 5, 22, 91, 2959, 9, 13, 3375, 3386, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 74, 74, 36, 36, 13, 13, 4, 4, 6, 17, 23, 1, 14, 4, 6, 7, 19, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Irish/Latin/United Kingdom
{ 119, 66, 117, 0, 0, 345, 345, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 127, 0, 0, 7930, 7930, 7986, 7986, 8013, 8013, 0, 0, 0, 5, 22, 13, 420, 19, 0, 3405, 3413, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 8, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/Italy
{ 119, 66, 203, 0, 0, 345, 345, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 127, 0, 0, 7930, 7930, 7986, 7986, 8013, 8013, 0, 0, 0, 5, 22, 13, 420, 19, 0, 3405, 3419, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 8, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/San Marino
{ 119, 66, 226, 0, 0, 345, 345, 6, 0, 13, 2, 3, 4, 5, 9, 17, 18, 19, 20, 0, 184, 0, 0, 7930, 7930, 7986, 7986, 8013, 8013, 0, 0, 0, 5, 22, 0, 2973, 19, 0, 3405, 3429, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 15, 5, 0, 8, 8, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/Switzerland
{ 119, 66, 253, 0, 0, 345, 345, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 127, 0, 0, 7930, 7930, 7986, 7986, 8013, 8013, 0, 0, 0, 5, 22, 13, 420, 19, 0, 3405, 3437, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 56, 56, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 8, 18, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Italian/Latin/Vatican City
- { 120, 53, 120, 148, 148, 148, 148, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 462, 636, 323, 1, 8026, 8026, 8053, 8053, 8053, 8053, 263, 270, 598, 601, 22, 138, 2988, 9, 13, 3455, 3455, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 10, 10, 4, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 1, 3, 4, 6, 3, 2, {74,80,89}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Japanese/Japanese/Japan
- { 121, 66, 111, 0, 0, 495, 505, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 432, 0, 0, 8066, 8066, 8106, 8106, 8134, 8134, 265, 272, 618, 5, 22, 243, 2943, 4, 0, 3458, 3462, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 40, 40, 28, 28, 13, 13, 4, 5, 4, 17, 23, 2, 16, 5, 0, 4, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Javanese/Latin/Indonesia
+ { 120, 53, 120, 148, 148, 148, 148, 6, 0, 1, 2, 3, 4, 5, 9, 42, 43, 44, 45, 462, 636, 323, 1, 8026, 8026, 8053, 8053, 8053, 8053, 263, 270, 578, 581, 22, 143, 2988, 9, 13, 3455, 3455, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 10, 10, 4, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 1, 3, 4, 6, 3, 2, {74,80,89}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Japanese/Japanese/Japan
+ { 121, 66, 111, 0, 0, 495, 505, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 432, 0, 0, 8066, 8066, 8106, 8106, 8134, 8134, 265, 272, 598, 5, 22, 248, 2943, 4, 0, 3458, 3462, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 40, 40, 28, 28, 13, 13, 4, 5, 4, 17, 23, 2, 16, 5, 0, 4, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Javanese/Latin/Indonesia
{ 122, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 121, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Jju/Latin/Nigeria
- { 123, 66, 206, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 87, 0, 0, 8147, 8147, 8196, 8196, 8223, 8223, 0, 0, 0, 5, 22, 3, 2991, 19, 0, 3471, 3476, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 16, 5, 0, 5, 7, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Jola Fonyi/Latin/Senegal
- { 124, 66, 43, 0, 0, 110, 110, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 908, 127, 0, 0, 8236, 8236, 8308, 8308, 8335, 8335, 82, 195, 0, 5, 22, 248, 3007, 19, 24, 3483, 3495, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 10, 10, 5, 72, 72, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 7, 12, 10, {67,86,69}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kabuverdianu/Latin/Cape Verde
- { 125, 66, 4, 0, 0, 514, 522, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 87, 10, 22, 8348, 8381, 8431, 8458, 8487, 8500, 269, 277, 622, 629, 22, 177, 3025, 0, 0, 3505, 3514, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 33, 50, 27, 29, 13, 13, 7, 9, 7, 21, 23, 2, 14, 4, 0, 9, 8, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Kabyle/Latin/Algeria
+ { 123, 66, 206, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 87, 0, 0, 8147, 8147, 8196, 8196, 8223, 8223, 0, 0, 0, 5, 22, 123, 2991, 19, 0, 3471, 3476, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 5, 16, 5, 0, 5, 7, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Jola Fonyi/Latin/Senegal
+ { 124, 66, 43, 0, 0, 110, 110, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 908, 127, 0, 0, 8236, 8236, 8308, 8308, 8335, 8335, 82, 195, 0, 5, 22, 253, 3007, 19, 24, 3483, 3495, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 10, 10, 5, 72, 72, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 18, 5, 7, 12, 10, {67,86,69}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kabuverdianu/Latin/Cape Verde
+ { 125, 66, 4, 0, 0, 514, 522, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 87, 10, 22, 8348, 8381, 8431, 8458, 8487, 8500, 269, 277, 602, 609, 22, 182, 3025, 0, 0, 3505, 3514, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 12, 7, 33, 50, 27, 29, 13, 13, 7, 9, 7, 21, 23, 2, 14, 4, 0, 9, 8, {68,90,68}, 2, 1, 6, 5, 6, 1, 3, 3 }, // Kabyle/Latin/Algeria
{ 126, 66, 40, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 19, 20, 54, 935, 0, 0, 8513, 8513, 8513, 8513, 8566, 8566, 0, 0, 0, 5, 22, 2, 3039, 4, 0, 3522, 3526, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 53, 53, 53, 53, 20, 20, 2, 2, 4, 17, 23, 4, 9, 5, 0, 4, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kako/Latin/Cameroon
- { 127, 66, 95, 0, 0, 529, 529, 6, 1, 0, 2, 3, 40, 5, 52, 18, 17, 20, 19, 54, 44, 140, 140, 8586, 8586, 8683, 8683, 8710, 8710, 0, 0, 0, 5, 22, 156, 3048, 9, 49, 3533, 3544, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 97, 97, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 5, 11, 16, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Kalaallisut/Latin/Greenland
- { 128, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 8723, 8723, 8775, 8775, 8802, 8802, 276, 286, 0, 5, 22, 170, 3067, 9, 13, 3560, 3568, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 52, 52, 27, 27, 13, 13, 6, 10, 4, 17, 23, 3, 19, 4, 6, 8, 12, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kalenjin/Latin/Kenya
- { 129, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 8815, 8815, 8888, 8888, 8915, 8915, 282, 296, 0, 5, 22, 170, 3086, 9, 13, 3580, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 73, 73, 27, 27, 13, 13, 9, 7, 4, 17, 23, 3, 16, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kamba/Latin/Kenya
- { 130, 56, 110, 0, 0, 540, 552, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 87, 302, 315, 8928, 8928, 8981, 8981, 9013, 9013, 291, 303, 650, 658, 22, 117, 3102, 9, 13, 3587, 3592, 6, 6, 12, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 8, 53, 53, 32, 32, 19, 19, 9, 7, 8, 35, 23, 1, 13, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Kannada/Kannada/India
+ { 127, 66, 95, 0, 0, 529, 529, 6, 1, 0, 2, 3, 40, 5, 52, 18, 17, 20, 19, 54, 44, 140, 140, 8586, 8586, 8683, 8683, 8710, 8710, 0, 0, 0, 5, 22, 161, 3048, 9, 49, 3533, 3544, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 97, 97, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 5, 11, 16, {68,75,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Kalaallisut/Latin/Greenland
+ { 128, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 8723, 8723, 8775, 8775, 8802, 8802, 276, 286, 0, 5, 22, 175, 3067, 9, 13, 3560, 3568, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 52, 52, 27, 27, 13, 13, 6, 10, 4, 17, 23, 3, 19, 4, 6, 8, 12, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kalenjin/Latin/Kenya
+ { 129, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 8815, 8815, 8888, 8888, 8915, 8915, 282, 296, 0, 5, 22, 175, 3086, 9, 13, 3580, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 73, 73, 27, 27, 13, 13, 9, 7, 4, 17, 23, 3, 16, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kamba/Latin/Kenya
+ { 130, 56, 110, 0, 0, 540, 552, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 87, 302, 315, 8928, 8928, 8981, 8981, 9013, 9013, 291, 303, 630, 638, 22, 117, 3102, 9, 13, 3587, 3592, 6, 6, 12, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 13, 8, 53, 53, 32, 32, 19, 19, 9, 7, 8, 35, 23, 1, 13, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Kannada/Kannada/India
{ 132, 4, 110, 0, 0, 0, 0, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 321, 339, 10, 22, 9032, 9032, 9083, 9083, 9132, 9132, 0, 0, 0, 5, 22, 117, 3115, 4, 0, 3596, 3601, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 6, 12, 7, 51, 51, 49, 49, 13, 13, 2, 2, 4, 17, 23, 1, 16, 5, 0, 5, 9, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Kashmiri/Arabic/India
{ 132, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 117, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Kashmiri/Devanagari/India
- { 133, 27, 123, 0, 0, 0, 563, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 945, 184, 0, 0, 9145, 9145, 9200, 9200, 9220, 9220, 0, 0, 206, 693, 710, 249, 3131, 19, 0, 3610, 3620, 6, 6, 6, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 10, 5, 55, 55, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 17, 5, 0, 10, 9, {75,90,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kazakh/Cyrillic/Kazakhstan
+ { 133, 27, 123, 0, 0, 0, 563, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 945, 184, 0, 0, 9145, 9145, 9200, 9200, 9220, 9220, 0, 0, 194, 673, 690, 254, 3131, 19, 0, 3610, 3620, 6, 6, 6, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 10, 5, 55, 55, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 17, 5, 0, 10, 9, {75,90,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kazakh/Cyrillic/Kazakhstan
{ 134, 66, 40, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 2, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 0, 5, 0, 0, 0, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kenyang/Latin/Cameroon
- { 135, 60, 39, 0, 0, 573, 582, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 10, 22, 9233, 9278, 9324, 9324, 9363, 9363, 0, 0, 733, 5, 22, 250, 3148, 0, 31, 3629, 3634, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 12, 7, 45, 46, 39, 39, 13, 13, 2, 2, 2, 17, 23, 1, 11, 4, 6, 5, 7, {75,72,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Khmer/Khmer/Cambodia
- { 136, 66, 99, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 251, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {71,84,81}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kiche/Latin/Guatemala
- { 137, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 9376, 9376, 9438, 9438, 9465, 9465, 300, 310, 0, 5, 22, 170, 3159, 9, 13, 3641, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 62, 62, 27, 27, 13, 13, 6, 8, 4, 17, 23, 3, 16, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kikuyu/Latin/Kenya
- { 138, 66, 194, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 12, 13, 27, 44, 0, 0, 9478, 9478, 9561, 9561, 83, 83, 0, 0, 0, 5, 22, 186, 0, 4, 0, 3647, 3658, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 83, 83, 34, 34, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 11, 8, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kinyarwanda/Latin/Rwanda
- { 141, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 210, 10, 22, 9595, 9595, 9595, 9595, 9645, 9663, 0, 0, 735, 5, 22, 117, 2900, 9, 13, 3666, 569, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 12, 7, 50, 50, 50, 50, 18, 19, 2, 2, 4, 17, 23, 1, 12, 4, 6, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Konkani/Devanagari/India
- { 142, 63, 218, 0, 0, 591, 591, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 967, 983, 333, 346, 9682, 9682, 9709, 9709, 9709, 9709, 306, 318, 739, 5, 22, 252, 3175, 9, 13, 3672, 3675, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 13, 7, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 1, 6, 4, 6, 3, 4, {75,82,87}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Korean/Korean/South Korea
- { 142, 63, 174, 0, 0, 591, 591, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 967, 983, 333, 346, 9682, 9682, 9709, 9709, 9709, 9709, 306, 318, 739, 5, 22, 253, 3181, 9, 13, 3672, 3679, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 13, 7, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 3, 16, 4, 6, 3, 11, {75,80,87}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Korean/Korean/North Korea
- { 144, 66, 145, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0, 9722, 9722, 9775, 9775, 9802, 9802, 308, 320, 0, 5, 22, 3, 3197, 0, 0, 3690, 3705, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 53, 53, 27, 27, 13, 13, 6, 6, 4, 17, 23, 3, 16, 4, 0, 15, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Koyraboro Senni/Latin/Mali
- { 145, 66, 145, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0, 9815, 9815, 9867, 9867, 9802, 9802, 308, 320, 0, 5, 22, 3, 3197, 0, 0, 3710, 3705, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 52, 52, 27, 27, 13, 13, 6, 6, 4, 17, 23, 3, 16, 4, 0, 11, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Koyra Chiini/Latin/Mali
+ { 135, 60, 39, 0, 0, 573, 582, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 10, 22, 9233, 9278, 9324, 9324, 9363, 9363, 0, 0, 713, 5, 22, 255, 3148, 0, 31, 3629, 3634, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 12, 7, 45, 46, 39, 39, 13, 13, 2, 2, 2, 17, 23, 1, 11, 4, 6, 5, 7, {75,72,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Khmer/Khmer/Cambodia
+ { 136, 66, 99, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 256, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {71,84,81}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kiche/Latin/Guatemala
+ { 137, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 9376, 9376, 9438, 9438, 9465, 9465, 300, 310, 0, 5, 22, 175, 3159, 9, 13, 3641, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 62, 62, 27, 27, 13, 13, 6, 8, 4, 17, 23, 3, 16, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Kikuyu/Latin/Kenya
+ { 138, 66, 194, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 12, 13, 27, 44, 0, 0, 9478, 9478, 9561, 9561, 83, 83, 0, 0, 0, 5, 22, 191, 0, 4, 0, 3647, 3658, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 83, 83, 34, 34, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 11, 8, {82,87,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kinyarwanda/Latin/Rwanda
+ { 141, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 210, 10, 22, 9595, 9595, 9595, 9595, 9645, 9663, 0, 0, 715, 5, 22, 117, 2900, 9, 13, 3666, 569, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 12, 7, 50, 50, 50, 50, 18, 19, 2, 2, 4, 17, 23, 1, 12, 4, 6, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Konkani/Devanagari/India
+ { 142, 63, 218, 0, 0, 591, 591, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 967, 983, 333, 346, 9682, 9682, 9709, 9709, 9709, 9709, 306, 318, 719, 5, 22, 257, 3175, 9, 13, 3672, 3675, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 13, 7, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 1, 6, 4, 6, 3, 4, {75,82,87}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Korean/Korean/South Korea
+ { 142, 63, 174, 0, 0, 591, 591, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 967, 983, 333, 346, 9682, 9682, 9709, 9709, 9709, 9709, 306, 318, 719, 5, 22, 258, 3181, 9, 13, 3672, 3679, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 13, 7, 27, 27, 13, 13, 13, 13, 2, 2, 3, 17, 23, 3, 16, 4, 6, 3, 11, {75,80,87}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Korean/Korean/North Korea
+ { 144, 66, 145, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0, 9722, 9722, 9775, 9775, 9802, 9802, 308, 320, 0, 5, 22, 123, 3197, 0, 0, 3690, 3705, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 53, 53, 27, 27, 13, 13, 6, 6, 4, 17, 23, 5, 16, 4, 0, 15, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Koyraboro Senni/Latin/Mali
+ { 145, 66, 145, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0, 9815, 9815, 9867, 9867, 9802, 9802, 308, 320, 0, 5, 22, 123, 3197, 0, 0, 3710, 3705, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 52, 52, 27, 27, 13, 13, 6, 6, 4, 17, 23, 5, 16, 4, 0, 11, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Koyra Chiini/Latin/Mali
{ 146, 66, 134, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kpelle/Latin/Liberia
- { 148, 66, 239, 0, 0, 598, 598, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 9894, 9894, 9935, 9935, 9954, 9954, 314, 326, 0, 5, 22, 256, 0, 19, 24, 3721, 3726, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 41, 41, 19, 19, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 7, 5, 7, {84,82,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kurdish/Latin/Turkey
+ { 148, 66, 239, 0, 0, 598, 598, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 9894, 9894, 9935, 9935, 9954, 9954, 314, 326, 0, 5, 22, 261, 0, 19, 24, 3721, 3726, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 41, 41, 19, 19, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 7, 5, 7, {84,82,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kurdish/Latin/Turkey
{ 149, 66, 40, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 17, 18, 71, 87, 0, 0, 9967, 9967,10055,10055,10084,10084, 316, 328, 0, 5, 22, 2, 3213, 19, 0, 3733, 3739, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 88, 88, 29, 29, 13, 13, 4, 4, 4, 17, 23, 4, 13, 5, 0, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Kwasio/Latin/Cameroon
- { 150, 27, 128, 0, 0, 605, 605, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 992, 87, 0, 0,10097,10097,10153,10153,10190,10190, 320, 332, 206, 742, 22, 257, 3226, 19, 0, 3746, 3754, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 10, 5, 56, 56, 37, 37, 13, 13, 5, 14, 4, 18, 23, 3, 15, 5, 0, 8, 10, {75,71,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kyrgyz/Cyrillic/Kyrgyzstan
+ { 150, 27, 128, 0, 0, 605, 605, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 992, 87, 0, 0,10097,10097,10153,10153,10190,10190, 320, 332, 194, 722, 22, 262, 3226, 19, 0, 3746, 3754, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 6, 10, 5, 56, 56, 37, 37, 13, 13, 5, 14, 4, 18, 23, 3, 15, 5, 0, 8, 10, {75,71,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Kyrgyz/Cyrillic/Kyrgyzstan
{ 151, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22,10203,10203,10203,10203, 83,10289, 0, 0, 0, 5, 22, 1, 0, 4, 0, 3764, 3776, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 86, 86, 86, 86, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 12, 22, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Lakota/Latin/United States
{ 152, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 11, 11, 13, 13, 0, 127, 0, 0,10302,10302,10364,10364,10399,10399, 325, 346, 0, 5, 22, 118, 3241, 4, 0, 3798, 3806, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 62, 62, 35, 35, 13, 13, 3, 3, 4, 17, 23, 3, 22, 5, 0, 8, 9, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Langi/Latin/Tanzania
- { 153, 65, 129, 0, 0, 0, 615, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1015, 87, 353, 1,10412,10412,10468,10468,10503,10503, 328, 349, 0, 5, 22, 260, 3263, 9, 44, 3815, 3815, 6, 6, 6, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 24, 4, 56, 56, 35, 35, 16, 16, 8, 8, 4, 17, 23, 1, 7, 4, 5, 3, 3, {76,65,75}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Lao/Lao/Laos
+ { 153, 65, 129, 0, 0, 0, 615, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1015, 87, 353, 1,10412,10412,10468,10468,10503,10503, 328, 349, 0, 5, 22, 265, 3263, 9, 44, 3815, 3815, 6, 6, 6, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 24, 4, 56, 56, 35, 35, 16, 16, 8, 8, 4, 17, 23, 1, 7, 4, 5, 3, 3, {76,65,75}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Lao/Lao/Laos
{ 154, 66, 253, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 13, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Latin/Latin/Vatican City
- { 155, 66, 131, 0, 0, 214, 214, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1034, 184, 0, 0,10519,10590,10661,10711,10761,10761, 336, 357, 760, 5, 22, 13, 3270, 19, 0, 3818, 3826, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 8, 10, 5, 71, 71, 50, 50, 13, 13, 14, 11, 5, 17, 23, 1, 4, 5, 0, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Latvian/Latin/Latvia
+ { 155, 66, 131, 0, 0, 214, 214, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1034, 184, 0, 0,10519,10590,10661,10711,10761,10761, 336, 357, 740, 5, 22, 13, 3270, 19, 0, 3818, 3826, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 8, 10, 5, 71, 71, 50, 50, 13, 13, 14, 11, 5, 17, 23, 1, 4, 5, 0, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Latvian/Latin/Latvia
{ 158, 66, 57, 0, 0, 624, 624, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,10774,10774,10873,10873,10900,10900, 350, 368, 0, 5, 22, 2, 3274, 19, 0, 3833, 3840, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 2, 16, 5, 0, 7, 30, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Congo Kinshasa
- { 158, 66, 7, 0, 0, 624, 624, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,10774,10774,10873,10873,10900,10900, 350, 368, 0, 5, 22, 261, 3290, 19, 0, 3833, 3870, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 2, 16, 5, 0, 7, 6, {65,79,65}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Angola
+ { 158, 66, 7, 0, 0, 624, 624, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,10774,10774,10873,10873,10900,10900, 350, 368, 0, 5, 22, 266, 3290, 19, 0, 3833, 3870, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 2, 16, 5, 0, 7, 6, {65,79,65}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Angola
{ 158, 66, 46, 0, 0, 624, 624, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,10774,10774,10873,10873,10900,10900, 350, 368, 0, 5, 22, 2, 3306, 19, 0, 3833, 3876, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 4, 16, 5, 0, 7, 26, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Central African Republic
{ 158, 66, 56, 0, 0, 624, 624, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,10774,10774,10873,10873,10900,10900, 350, 368, 0, 5, 22, 2, 3306, 19, 0, 3833, 3902, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 99, 99, 27, 27, 13, 13, 8, 6, 4, 17, 23, 4, 16, 5, 0, 7, 5, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Lingala/Latin/Congo Brazzaville
- { 160, 66, 137, 0, 0, 633, 633, 6, 1, 14, 2, 3, 40, 5, 52, 15, 10, 15, 10, 1060, 44, 0, 0,10913,10913,11001,11001,11021,11021, 358, 374, 765, 5, 22, 13, 3322, 19, 0, 3907, 3915, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 27, 10, 10, 5, 88, 88, 20, 20, 13, 13, 9, 6, 6, 17, 23, 1, 5, 5, 0, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lithuanian/Latin/Lithuania
+ { 160, 66, 137, 0, 0, 633, 633, 6, 1, 14, 2, 3, 40, 5, 52, 15, 10, 15, 10, 1060, 44, 0, 0,10913,10913,11001,11001,11021,11021, 358, 374, 745, 5, 22, 13, 3322, 19, 0, 3907, 3915, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 27, 10, 10, 5, 88, 88, 20, 20, 13, 13, 9, 6, 6, 17, 23, 1, 5, 5, 0, 8, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lithuanian/Latin/Lithuania
{ 161, 66, 258, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lojban/Latin/World
{ 162, 66, 91, 0, 0, 222, 222, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 121, 1, 1,11034,11034,11086,11086,11113,11113, 367, 380, 0, 5, 22, 13, 420, 19, 0, 3922, 3936, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 9, 4, 52, 52, 27, 27, 13, 13, 9, 10, 4, 17, 23, 1, 4, 5, 0, 14, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Lower Sorbian/Latin/Germany
{ 163, 66, 91, 0, 0, 214, 214, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 1087, 185, 377, 396,11126,11126,11190,11190, 3667, 3667, 0, 0, 0, 5, 22, 13, 73, 19, 0, 3942, 3956, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 7, 19, 10, 64, 64, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 14, 11, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Low German/Latin/Germany
{ 163, 66, 165, 0, 0, 214, 214, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 1087, 185, 377, 396,11126,11126,11190,11190, 3667, 3667, 0, 0, 0, 5, 22, 13, 73, 19, 0, 3942, 3967, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 7, 19, 10, 64, 64, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 14, 12, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Low German/Latin/Netherlands
{ 164, 66, 57, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,11217,11217,11266,11266,11293,11293, 376, 390, 0, 5, 22, 2, 3327, 0, 0, 3979, 3987, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 49, 49, 27, 27, 13, 13, 5, 6, 4, 17, 23, 2, 17, 4, 0, 8, 16, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Luba Katanga/Latin/Congo Kinshasa
- { 165, 66, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 156, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Lule Sami/Latin/Sweden
- { 166, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,11306,11306,11374,11374,11401,11401, 381, 396, 0, 5, 22, 170, 3344, 0, 0, 4003, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 68, 68, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 16, 4, 0, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Luo/Latin/Kenya
- { 167, 66, 138, 0, 0, 641, 641, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0,11414,11414,11478,11505, 3667, 3667, 383, 398, 479, 5, 22, 13, 73, 19, 0, 4009, 4009, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 64, 64, 27, 34, 13, 13, 5, 8, 5, 17, 23, 1, 4, 5, 0, 14, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Luxembourgish/Latin/Luxembourg
- { 168, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 15, 10, 16, 12, 0, 127, 0, 0,11539,11539,11613,11613, 83, 83, 165, 164, 0, 5, 22, 170, 3360, 9, 54, 4023, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 74, 74, 20, 20, 13, 13, 4, 4, 4, 17, 23, 3, 16, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Luyia/Latin/Kenya
- { 169, 27, 140, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 0, 121, 0, 0,11633,11633,11686,11720, 2519, 2519, 388, 406, 771, 5, 22, 263, 3376, 19, 0, 4030, 4040, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 53, 53, 34, 33, 13, 13, 10, 8, 5, 17, 23, 4, 16, 5, 0, 10, 18, {77,75,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Macedonian/Cyrillic/Macedonia
+ { 165, 66, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 161, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Lule Sami/Latin/Sweden
+ { 166, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,11306,11306,11374,11374,11401,11401, 381, 396, 0, 5, 22, 175, 3344, 0, 0, 4003, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 68, 68, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 16, 4, 0, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Luo/Latin/Kenya
+ { 167, 66, 138, 0, 0, 641, 641, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 184, 0, 0,11414,11414,11478,11505, 3667, 3667, 383, 398, 459, 5, 22, 13, 73, 19, 0, 4009, 4009, 6, 6, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 64, 64, 27, 34, 13, 13, 5, 8, 5, 17, 23, 1, 4, 5, 0, 14, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Luxembourgish/Latin/Luxembourg
+ { 168, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 15, 10, 16, 12, 0, 127, 0, 0,11539,11539,11613,11613, 83, 83, 165, 164, 0, 5, 22, 175, 3360, 9, 54, 4023, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 74, 74, 20, 20, 13, 13, 4, 4, 4, 17, 23, 3, 16, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Luyia/Latin/Kenya
+ { 169, 27, 140, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 0, 121, 0, 0,11633,11633,11686,11720, 2519, 2519, 388, 406, 751, 5, 22, 268, 3376, 19, 0, 4030, 4040, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 53, 53, 34, 33, 13, 13, 10, 8, 5, 17, 23, 4, 16, 5, 0, 10, 18, {77,75,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Macedonian/Cyrillic/Macedonia
{ 170, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,11753,11753,11814,11814, 1041, 1041, 398, 414, 0, 5, 22, 118, 3392, 9, 0, 4058, 2025, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 27, 27, 13, 13, 5, 9, 4, 17, 23, 3, 20, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Machame/Latin/Tanzania
{ 171, 29, 110, 0, 0, 434, 443, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22, 7054, 7054, 7106, 7106, 7137, 7137, 82, 195, 0, 5, 22, 117, 2900, 4, 0, 4067, 569, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 12, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Maithili/Devanagari/India
- { 172, 66, 160, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,11841,11841,11899,11899,11926,11926, 403, 423, 0, 5, 22, 267, 0, 4, 0, 4073, 4078, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 58, 58, 27, 27, 13, 13, 8, 10, 4, 17, 23, 3, 0, 5, 0, 5, 10, {77,90,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Makhuwa Meetto/Latin/Mozambique
+ { 172, 66, 160, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,11841,11841,11899,11899,11926,11926, 403, 423, 0, 5, 22, 272, 0, 4, 0, 4073, 4078, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 58, 58, 27, 27, 13, 13, 8, 10, 4, 17, 23, 3, 0, 5, 0, 5, 10, {77,90,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Makhuwa Meetto/Latin/Mozambique
{ 173, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,11939,11939,12071,12071,12098,12098, 411, 433, 0, 5, 22, 118, 3392, 9, 13, 4088, 2025, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,132,132, 27, 27, 13, 13, 4, 5, 4, 17, 23, 3, 20, 4, 6, 10, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Makonde/Latin/Tanzania
- { 174, 66, 141, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 44, 0, 0,12111,12111,12170,12170,12203,12203, 0, 0, 0, 5, 22, 178, 1459, 9, 0, 4098, 4106, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 59, 59, 33, 33, 13, 13, 2, 2, 4, 17, 23, 2, 6, 4, 0, 8, 12, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Malagasy/Latin/Madagascar
- { 175, 74, 110, 0, 0, 651, 664, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1110, 87, 10, 22,12216,12292,12367,12367,12407,12428, 0, 0, 776, 782, 22, 117, 3412, 9, 13, 4118, 4124, 6, 6, 13, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 76, 75, 40, 40, 21, 20, 2, 2, 6, 27, 23, 1, 11, 4, 6, 6, 6, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Malayalam/Malayalam/India
- { 176, 66, 143, 0, 0, 486, 486, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 128, 10, 22,12448,12448,12490,12490,12517,12517, 415, 438, 760, 5, 22, 182, 3423, 9, 13, 4130, 1640, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 12, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 2, 16, 4, 6, 6, 8, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Latin/Malaysia
- { 176, 4, 143, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 182, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Arabic/Malaysia
- { 176, 66, 35, 0, 0, 486, 486, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 59, 128, 10, 22,12448,12448,12490,12490,12517,12517, 415, 438, 760, 5, 22, 1, 3439, 9, 13, 4130, 4136, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 7, 12, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 1, 12, 4, 6, 6, 6, {66,78,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Latin/Brunei
- { 176, 66, 111, 0, 0, 486, 486, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 127, 140, 140,12448,12448,12490,12490,12517,12517, 415, 438, 760, 5, 22, 243, 2943, 9, 0, 4130, 3350, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 2, 16, 4, 0, 6, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Malay/Latin/Indonesia
- { 176, 66, 210, 0, 0, 486, 486, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 128, 10, 22,12448,12448,12490,12490,12517,12517, 415, 438, 760, 5, 22, 1, 3451, 9, 13, 4130, 4142, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 12, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 1, 15, 4, 6, 6, 9, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Malay/Latin/Singapore
+ { 174, 66, 141, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 44, 0, 0,12111,12111,12170,12170,12203,12203, 0, 0, 0, 5, 22, 183, 1459, 9, 0, 4098, 4106, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 59, 59, 33, 33, 13, 13, 2, 2, 4, 17, 23, 2, 6, 4, 0, 8, 12, {77,71,65}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Malagasy/Latin/Madagascar
+ { 175, 74, 110, 0, 0, 651, 664, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1110, 87, 10, 22,12216,12292,12367,12367,12407,12428, 0, 0, 756, 762, 22, 117, 3412, 9, 13, 4118, 4124, 6, 6, 13, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 76, 75, 40, 40, 21, 20, 2, 2, 6, 27, 23, 1, 11, 4, 6, 6, 6, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Malayalam/Malayalam/India
+ { 176, 66, 143, 0, 0, 486, 486, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 128, 10, 22,12448,12448,12490,12490,12517,12517, 415, 438, 740, 5, 22, 187, 3423, 9, 13, 4130, 1640, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 12, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 2, 16, 4, 6, 6, 8, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Latin/Malaysia
+ { 176, 4, 143, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 187, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Arabic/Malaysia
+ { 176, 66, 35, 0, 0, 486, 486, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 59, 128, 10, 22,12448,12448,12490,12490,12517,12517, 415, 438, 740, 5, 22, 1, 3439, 9, 13, 4130, 4136, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 7, 12, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 1, 12, 4, 6, 6, 6, {66,78,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Malay/Latin/Brunei
+ { 176, 66, 111, 0, 0, 486, 486, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 127, 140, 140,12448,12448,12490,12490,12517,12517, 415, 438, 740, 5, 22, 248, 2943, 9, 0, 4130, 3350, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 2, 16, 4, 0, 6, 9, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Malay/Latin/Indonesia
+ { 176, 66, 210, 0, 0, 486, 486, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 128, 10, 22,12448,12448,12490,12490,12517,12517, 415, 438, 740, 5, 22, 1, 3451, 9, 13, 4130, 4142, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 7, 12, 7, 42, 42, 27, 27, 13, 13, 2, 3, 4, 17, 23, 1, 15, 4, 6, 6, 9, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Malay/Latin/Singapore
{ 177, 66, 146, 0, 0, 676, 684, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1128, 127, 0, 0,12530,12530,12592,12592,12619,12639, 0, 0, 0, 5, 22, 13, 3466, 9, 0, 4151, 1648, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 10, 5, 62, 62, 27, 27, 20, 19, 2, 2, 4, 17, 23, 1, 4, 4, 0, 5, 5, {69,85,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Maltese/Latin/Malta
{ 179, 9, 110, 0, 0, 691, 691, 6, 0, 1, 2, 39, 4, 5, 9, 10, 11, 12, 13, 1151, 87, 10, 22,12658,12658,12658,12658,12716,12741, 417, 441, 0, 5, 22, 117, 3470, 4, 0, 4156, 4164, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 58, 58, 58, 58, 25, 26, 4, 5, 4, 17, 23, 1, 14, 5, 0, 8, 8, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Manipuri/Bangla/India
{ 179, 78, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 117, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Manipuri/Meitei Mayek/India
{ 180, 66, 115, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 54, 127, 0, 0,12767,12767,12823,12823, 83, 83, 165, 164, 0, 5, 22, 91, 0, 9, 0, 4172, 4177, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 56, 56, 29, 29, 13, 13, 4, 4, 4, 17, 23, 1, 0, 4, 0, 5, 12, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Manx/Latin/Isle Of Man
{ 181, 66, 167, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 432, 10, 22,12852,12852,12898,12898,12924,12924, 0, 0, 0, 5, 22, 1, 3484, 4, 0, 4189, 4201, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 46, 46, 26, 26, 13, 13, 2, 2, 4, 17, 23, 1, 15, 5, 0, 12, 8, {78,90,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Maori/Latin/New Zealand
{ 182, 66, 49, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 1, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {67,76,80}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Mapuche/Latin/Chile
- { 183, 29, 110, 0, 0, 702, 702, 6, 0, 1, 2, 69, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22,12937,12937,12989,12989, 7137, 7137, 0, 0, 580, 5, 22, 117, 2900, 9, 13, 4209, 569, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 12, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Marathi/Devanagari/India
- { 185, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,13020,13020,11814,11814,12098,12098, 421, 446, 0, 5, 22, 170, 3499, 9, 13, 1071, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 57, 57, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 18, 4, 6, 3, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Masai/Latin/Kenya
+ { 183, 29, 110, 0, 0, 702, 702, 6, 0, 1, 2, 69, 4, 5, 9, 10, 11, 12, 13, 192, 87, 10, 22,12937,12937,12989,12989, 7137, 7137, 0, 0, 560, 5, 22, 117, 2900, 9, 13, 4209, 569, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 52, 52, 31, 31, 18, 18, 2, 2, 4, 17, 23, 1, 12, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Marathi/Devanagari/India
+ { 185, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,13020,13020,11814,11814,12098,12098, 421, 446, 0, 5, 22, 175, 3499, 9, 13, 1071, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 57, 57, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 18, 4, 6, 3, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Masai/Latin/Kenya
{ 185, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,13020,13020,11814,11814,12098,12098, 421, 446, 0, 5, 22, 118, 3517, 9, 13, 1071, 4214, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 57, 57, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 21, 4, 6, 3, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Masai/Latin/Tanzania
- { 186, 4, 112, 0, 0, 0, 0, 53, 21, 22, 23, 61, 35, 62, 65, 17, 18, 19, 20, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 809, 813, 22, 270, 3538, 4, 0, 4222, 4229, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 39, 23, 3, 10, 5, 0, 7, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Mazanderani/Arabic/Iran
- { 188, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,13077,13077,13127,13127,13154,13154, 430, 452, 0, 5, 22, 170, 952, 9, 13, 4234, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 50, 50, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Meru/Latin/Kenya
+ { 186, 4, 112, 0, 0, 0, 0, 53, 21, 22, 23, 61, 35, 62, 65, 17, 18, 19, 20, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 789, 793, 22, 275, 3538, 4, 0, 4222, 4229, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 39, 23, 3, 10, 5, 0, 7, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Mazanderani/Arabic/Iran
+ { 188, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,13077,13077,13127,13127,13154,13154, 430, 452, 0, 5, 22, 175, 952, 9, 13, 4234, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 50, 50, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Meru/Latin/Kenya
{ 189, 66, 40, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 95, 44, 0, 0,13167,13167,13167,13167,13215,13215, 0, 0, 0, 5, 22, 2, 3548, 4, 0, 4240, 4245, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 48, 48, 48, 48, 20, 20, 2, 2, 4, 17, 23, 4, 5, 5, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Meta/Latin/Cameroon
- { 190, 66, 41, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 245, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Mohawk/Latin/Canada
- { 191, 27, 156, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1169, 1204, 54, 0,13235,13277,13319,13319,13319,13319, 432, 454, 206, 852, 22, 273, 3553, 4, 0, 4252, 4258, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 10, 12, 5, 42, 42, 20, 20, 20, 20, 4, 4, 4, 17, 23, 1, 13, 5, 0, 6, 6, {77,78,84}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Mongolian/Cyrillic/Mongolia
- { 191, 83, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 274, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Mongolian/Mongolian/China
- { 192, 66, 150, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,13339,13339,13386,13386,13412,13412, 0, 0, 0, 5, 22, 184, 3566, 4, 0, 4264, 4278, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 47, 47, 26, 26, 13, 13, 2, 2, 4, 17, 23, 2, 14, 5, 0, 14, 5, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Morisyen/Latin/Mauritius
+ { 190, 66, 41, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 250, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,65,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Mohawk/Latin/Canada
+ { 191, 27, 156, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1169, 1204, 54, 0,13235,13277,13319,13319,13319,13319, 432, 454, 194, 832, 22, 278, 3553, 4, 0, 4252, 4258, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 10, 12, 5, 42, 42, 20, 20, 20, 20, 4, 4, 4, 17, 23, 1, 13, 5, 0, 6, 6, {77,78,84}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Mongolian/Cyrillic/Mongolia
+ { 191, 83, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 279, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Mongolian/Mongolian/China
+ { 192, 66, 150, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,13339,13339,13386,13386,13412,13412, 0, 0, 0, 5, 22, 189, 3566, 4, 0, 4264, 4278, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 47, 47, 26, 26, 13, 13, 2, 2, 4, 17, 23, 2, 14, 5, 0, 14, 5, {77,85,82}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Morisyen/Latin/Mauritius
{ 193, 66, 40, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 87, 0, 0,13425,13425,13498,13498,13525,13525, 436, 458, 0, 5, 22, 2, 3580, 9, 13, 4283, 4289, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 73, 73, 27, 27, 13, 13, 5, 5, 4, 17, 23, 4, 10, 4, 6, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Mundang/Latin/Cameroon
- { 194, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 140, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Muscogee/Latin/United States
+ { 194, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 145, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Muscogee/Latin/United States
{ 195, 66, 162, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22,13538,13538,13629,13629,13651,13651, 441, 463, 0, 5, 22, 1, 3590, 9, 0, 4296, 4309, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 91, 91, 22, 22, 13, 13, 7, 5, 4, 17, 23, 1, 15, 4, 0, 13, 8, {78,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nama/Latin/Namibia
- { 197, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 140, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Navajo/Latin/United States
- { 199, 29, 164, 711, 0, 716, 716, 6, 0, 1, 2, 69, 4, 5, 9, 10, 11, 12, 13, 27, 293, 0, 0,13664,13664,13717,13717,13749,13749, 448, 468, 580, 869, 22, 277, 3605, 4, 0, 4317, 4317, 5, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 53, 53, 32, 32, 17, 17, 9, 7, 4, 19, 23, 4, 14, 5, 0, 6, 5, {78,80,82}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Nepali/Devanagari/Nepal
- { 199, 29, 110, 711, 0, 716, 716, 6, 0, 1, 2, 69, 4, 5, 9, 10, 11, 12, 13, 27, 293, 10, 22,13664,13664,13717,13717,13749,13749, 448, 468, 580, 869, 22, 117, 3619, 4, 0, 4317, 569, 5, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 53, 53, 32, 32, 17, 17, 9, 7, 4, 19, 23, 1, 14, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Nepali/Devanagari/India
+ { 197, 66, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 145, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Navajo/Latin/United States
+ { 199, 29, 164, 711, 0, 716, 716, 6, 0, 1, 2, 69, 4, 5, 9, 10, 11, 12, 13, 27, 293, 0, 0,13664,13664,13717,13717,13749,13749, 448, 468, 560, 849, 22, 282, 3605, 4, 0, 4317, 4317, 5, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 10, 5, 53, 53, 32, 32, 17, 17, 9, 7, 4, 19, 23, 4, 14, 5, 0, 6, 5, {78,80,82}, 2, 1, 7, 6, 7, 1, 2, 3 }, // Nepali/Devanagari/Nepal
+ { 199, 29, 110, 711, 0, 716, 716, 6, 0, 1, 2, 69, 4, 5, 9, 10, 11, 12, 13, 27, 293, 10, 22,13664,13664,13717,13717,13749,13749, 448, 468, 560, 849, 22, 117, 3619, 4, 0, 4317, 569, 5, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 53, 53, 32, 32, 17, 17, 9, 7, 4, 19, 23, 1, 14, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Nepali/Devanagari/India
{ 201, 66, 40, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 1214, 127, 0, 0,13766,13766,13766,13766, 83, 83, 457, 475, 0, 5, 22, 2, 3633, 4, 0, 4323, 4339, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 8, 10, 5,110,110,110,110, 13, 13, 9, 8, 4, 17, 23, 4, 9, 5, 0, 16, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Ngiemboon/Latin/Cameroon
{ 202, 66, 40, 723, 723, 734, 750, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 19, 20, 95, 44, 0, 0,13876,13876,13876,13876,13935,13935, 466, 483, 0, 5, 22, 2, 3642, 4, 0, 4346, 4351, 11, 11, 16, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 59, 59, 59, 59, 24, 24, 8, 13, 4, 17, 23, 4, 5, 5, 0, 5, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Ngomba/Latin/Cameroon
- { 203, 66, 169, 0, 0, 759, 768, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,13959,13959,14010,14010, 83, 83, 474, 496, 888, 5, 22, 121, 3647, 9, 0, 4358, 4372, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 51, 51, 32, 32, 13, 13, 9, 8, 8, 17, 23, 1, 14, 4, 0, 14, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nigerian Pidgin/Latin/Nigeria
- { 204, 90, 102, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 208, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Nko/Nko/Guinea
+ { 203, 66, 169, 0, 0, 759, 768, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,13959,13959,14010,14010, 83, 83, 474, 496, 868, 5, 22, 121, 3647, 9, 0, 4358, 4372, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 51, 51, 32, 32, 13, 13, 9, 8, 8, 17, 23, 1, 14, 4, 0, 14, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nigerian Pidgin/Latin/Nigeria
+ { 204, 90, 102, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 213, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {71,78,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Nko/Nko/Guinea
{ 205, 4, 112, 0, 0, 0, 0, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 4380, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 11, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Northern Luri/Arabic/Iran
{ 205, 4, 113, 0, 0, 0, 0, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 27, 44, 10, 22, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 40, 0, 4, 0, 4380, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 17, 10, 12, 7, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 5, 0, 5, 0, 11, 0, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Northern Luri/Arabic/Iraq
- { 206, 66, 175, 0, 0, 291, 291, 6, 1, 14, 2, 3, 40, 5, 70, 11, 11, 13, 13, 27, 44, 0, 0,14042,14042,14116,14116,14148,14148, 483, 504, 0, 5, 22, 156, 3661, 19, 0, 4391, 4406, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 74, 74, 32, 32, 13, 13, 11, 13, 4, 17, 23, 2, 14, 5, 0, 15, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Norway
+ { 206, 66, 175, 0, 0, 291, 291, 6, 1, 14, 2, 3, 40, 5, 70, 11, 11, 13, 13, 27, 44, 0, 0,14042,14042,14116,14116,14148,14148, 483, 504, 0, 5, 22, 161, 3661, 19, 0, 4391, 4406, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 74, 74, 32, 32, 13, 13, 11, 13, 4, 17, 23, 2, 14, 5, 0, 15, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Norway
{ 206, 66, 83, 0, 0, 291, 291, 6, 1, 14, 2, 3, 40, 5, 70, 11, 11, 13, 13, 71, 560, 0, 0,14161,14161,14230,14230,14250,14250, 494, 181, 0, 5, 22, 13, 420, 19, 0, 4391, 4411, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 10, 5, 69, 69, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 15, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Finland
- { 206, 66, 225, 0, 0, 291, 291, 6, 1, 14, 2, 3, 40, 5, 70, 11, 11, 13, 13, 27, 44, 0, 0,14042,14042,14116,14116,14148,14148, 483, 504, 0, 5, 22, 156, 3675, 19, 0, 4391, 4417, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 74, 74, 32, 32, 13, 13, 11, 13, 4, 17, 23, 2, 14, 5, 0, 15, 6, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Sweden
+ { 206, 66, 225, 0, 0, 291, 291, 6, 1, 14, 2, 3, 40, 5, 70, 11, 11, 13, 13, 27, 44, 0, 0,14042,14042,14116,14116,14148,14148, 483, 504, 0, 5, 22, 161, 3675, 19, 0, 4391, 4417, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 17, 10, 10, 5, 74, 74, 32, 32, 13, 13, 11, 13, 4, 17, 23, 2, 14, 5, 0, 15, 6, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Northern Sami/Latin/Sweden
{ 207, 66, 216, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Northern Sotho/Latin/South Africa
- { 208, 66, 261, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,14263,14263,14312,14312,14339,14339, 0, 0, 0, 5, 22, 140, 3689, 9, 13, 4423, 2191, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 10, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // North Ndebele/Latin/Zimbabwe
- { 209, 66, 175, 0, 0, 229, 229, 6, 1, 14, 2, 3, 40, 5, 9, 17, 18, 12, 13, 520, 560, 0, 0, 3848, 3848, 3925, 3925, 3959, 3959, 165, 164, 0, 5, 22, 156, 3706, 4, 0, 4433, 4445, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 50, 50, 34, 34, 13, 13, 4, 4, 4, 17, 23, 2, 13, 5, 0, 12, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Bokmal/Latin/Norway
- { 209, 66, 224, 0, 0, 229, 229, 6, 1, 14, 2, 3, 40, 5, 9, 17, 18, 12, 13, 520, 560, 0, 0, 3848, 3848, 3925, 3925, 3959, 3959, 165, 164, 0, 5, 22, 156, 3706, 4, 0, 4433, 4450, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 50, 50, 34, 34, 13, 13, 4, 4, 4, 17, 23, 2, 13, 5, 0, 12, 21, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Bokmal/Latin/Svalbard And Jan Mayen
- { 210, 66, 175, 0, 0, 229, 229, 6, 1, 14, 2, 3, 40, 5, 9, 17, 18, 12, 13, 520, 560, 406, 0,14352,14352,14402,14429, 3959, 3959, 496, 517, 0, 5, 22, 156, 3706, 19, 0, 4471, 4484, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 16, 5, 50, 50, 27, 27, 13, 13, 9, 11, 4, 17, 23, 2, 13, 5, 0, 13, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Nynorsk/Latin/Norway
+ { 208, 66, 261, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,14263,14263,14312,14312,14339,14339, 0, 0, 0, 5, 22, 145, 3689, 9, 13, 4423, 2191, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 49, 49, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 17, 4, 6, 10, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // North Ndebele/Latin/Zimbabwe
+ { 209, 66, 175, 0, 0, 229, 229, 6, 1, 14, 2, 3, 40, 5, 9, 17, 18, 12, 13, 520, 560, 0, 0, 3848, 3848, 3925, 3925, 3959, 3959, 165, 164, 0, 5, 22, 161, 3706, 4, 0, 4433, 4445, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 50, 50, 34, 34, 13, 13, 4, 4, 4, 17, 23, 2, 13, 5, 0, 12, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Bokmal/Latin/Norway
+ { 209, 66, 224, 0, 0, 229, 229, 6, 1, 14, 2, 3, 40, 5, 9, 17, 18, 12, 13, 520, 560, 0, 0, 3848, 3848, 3925, 3925, 3959, 3959, 165, 164, 0, 5, 22, 161, 3706, 4, 0, 4433, 4450, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 50, 50, 34, 34, 13, 13, 4, 4, 4, 17, 23, 2, 13, 5, 0, 12, 21, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Bokmal/Latin/Svalbard And Jan Mayen
+ { 210, 66, 175, 0, 0, 229, 229, 6, 1, 14, 2, 3, 40, 5, 9, 17, 18, 12, 13, 520, 560, 406, 0,14352,14352,14402,14429, 3959, 3959, 496, 517, 0, 5, 22, 161, 3706, 19, 0, 4471, 4484, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 16, 5, 50, 50, 27, 27, 13, 13, 9, 11, 4, 17, 23, 2, 13, 5, 0, 13, 5, {78,79,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Norwegian Nynorsk/Latin/Norway
{ 211, 66, 219, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 128, 422, 22,14456,14456,14534,14534,14571,14571, 505, 528, 0, 5, 22, 91, 0, 9, 13, 4489, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 12, 7, 78, 78, 37, 37, 13, 13, 2, 2, 4, 17, 23, 1, 0, 4, 6, 9, 0, {83,83,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nuer/Latin/South Sudan
{ 212, 66, 142, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {77,87,75}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Nyanja/Latin/Malawi
- { 213, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 3436, 3436, 3509, 3509, 3536, 3536, 0, 0, 0, 5, 22, 143, 783, 9, 0, 4498, 857, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 73, 73, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 10, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Nyankole/Latin/Uganda
+ { 213, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 3436, 3436, 3509, 3509, 3536, 3536, 0, 0, 0, 5, 22, 148, 783, 9, 0, 4498, 857, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 73, 73, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 19, 4, 0, 10, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Nyankole/Latin/Uganda
{ 214, 66, 84, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 13, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Occitan/Latin/France
- { 215, 91, 110, 0, 0, 776, 784, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22,14584,14584,14637,14637,14669,14669, 0, 0, 896, 5, 22, 117, 3719, 9, 13, 4508, 4513, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 53, 53, 32, 32, 17, 17, 2, 2, 5, 17, 23, 1, 12, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Odia/Odia/India
- { 220, 66, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 127, 10, 22,14686,14686,14740,14740, 83, 83, 507, 530, 0, 5, 22, 125, 3731, 9, 0, 4517, 4523, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 17, 4, 0, 6, 10, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Oromo/Latin/Ethiopia
- { 220, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 127, 0, 0,14686,14686,14740,14740,14767,14767, 507, 530, 0, 5, 22, 170, 0, 9, 0, 4517, 4533, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 4, 0, 6, 8, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Oromo/Latin/Kenya
- { 221, 101, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 140, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Osage/Osage/United States
- { 222, 27, 90, 0, 0, 791, 791, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 1246, 184, 0, 0,14780,14840,14900,14927,14954,14954, 509, 532, 0, 5, 22, 236, 3748, 4, 0, 4541, 4545, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 10, 5, 60, 60, 27, 27, 13, 13, 15, 15, 4, 17, 23, 1, 3, 5, 0, 4, 11, {71,69,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ossetic/Cyrillic/Georgia
- { 222, 27, 193, 0, 0, 791, 791, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 1246, 184, 0, 0,14780,14840,14900,14927,14954,14954, 509, 532, 0, 5, 22, 124, 3751, 4, 0, 4541, 4556, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 10, 5, 60, 60, 27, 27, 13, 13, 15, 15, 4, 17, 23, 1, 3, 5, 0, 4, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ossetic/Cyrillic/Russia
- { 227, 4, 1, 800, 800, 806, 815, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 1269, 454, 55, 1,14967,14967,14967,14967, 83, 83, 524, 547, 901, 5, 22, 281, 3754, 9, 13, 4562, 4566, 6, 6, 9, 8, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 20, 8, 11, 4, 38, 38, 38, 38, 13, 13, 4, 4, 5, 17, 23, 1, 6, 4, 6, 4, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Pashto/Arabic/Afghanistan
- { 227, 4, 178, 800, 800, 806, 815, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 1269, 454, 10, 22,14967,14967,14967,14967, 83, 83, 524, 547, 901, 5, 22, 184, 3760, 9, 13, 4562, 4575, 6, 6, 9, 8, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 20, 8, 12, 7, 38, 38, 38, 38, 13, 13, 4, 4, 5, 17, 23, 2, 15, 4, 6, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Pashto/Arabic/Pakistan
- { 228, 4, 112, 823, 823, 830, 838, 53, 21, 22, 23, 61, 74, 37, 65, 17, 18, 19, 20, 71, 454, 55, 1,15005,15005,15005,15005,15053,15053, 528, 551, 809, 906, 22, 282, 3775, 60, 66, 4582, 4229, 7, 7, 8, 7, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 1, 16, 8, 11, 4, 48, 48, 48, 48, 13, 13, 9, 8, 4, 42, 23, 4, 10, 6, 8, 5, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Persian/Arabic/Iran
- { 228, 4, 1, 823, 823, 830, 838, 53, 21, 22, 23, 61, 74, 37, 65, 17, 18, 19, 20, 71, 454, 55, 1,15005,15005,15005,15005,15053,15053, 528, 551, 809, 906, 22, 281, 3785, 4, 66, 4587, 4566, 7, 7, 8, 7, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 1, 16, 8, 11, 4, 48, 48, 48, 48, 13, 13, 9, 8, 4, 42, 23, 1, 16, 5, 8, 3, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Persian/Arabic/Afghanistan
- { 230, 66, 187, 0, 0, 110, 110, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 17, 18, 0, 560, 0, 0,15066,15066,15124,15124,15157,15170, 0, 0, 321, 5, 22, 286, 3801, 19, 24, 4590, 4596, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 58, 58, 33, 33, 13, 13, 2, 2, 5, 17, 23, 2, 12, 5, 7, 6, 6, {80,76,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Polish/Latin/Poland
+ { 215, 91, 110, 0, 0, 776, 784, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 10, 22,14584,14584,14637,14637,14669,14669, 0, 0, 876, 5, 22, 117, 3719, 9, 13, 4508, 4513, 6, 6, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 53, 53, 32, 32, 17, 17, 2, 2, 5, 17, 23, 1, 12, 4, 6, 5, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Odia/Odia/India
+ { 220, 66, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 127, 10, 22,14686,14686,14740,14740, 83, 83, 507, 530, 0, 5, 22, 130, 3731, 9, 0, 4517, 4523, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 17, 4, 0, 6, 10, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Oromo/Latin/Ethiopia
+ { 220, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 127, 0, 0,14686,14686,14740,14740,14767,14767, 507, 530, 0, 5, 22, 175, 0, 9, 0, 4517, 4533, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 4, 0, 6, 8, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Oromo/Latin/Kenya
+ { 221, 101, 248, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 145, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Osage/Osage/United States
+ { 222, 27, 90, 0, 0, 791, 791, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 1246, 184, 0, 0,14780,14840,14900,14927,14954,14954, 509, 532, 0, 5, 22, 241, 3748, 4, 0, 4541, 4545, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 10, 5, 60, 60, 27, 27, 13, 13, 15, 15, 4, 17, 23, 1, 3, 5, 0, 4, 11, {71,69,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ossetic/Cyrillic/Georgia
+ { 222, 27, 193, 0, 0, 791, 791, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 1246, 184, 0, 0,14780,14840,14900,14927,14954,14954, 509, 532, 0, 5, 22, 129, 3751, 4, 0, 4541, 4556, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 10, 5, 60, 60, 27, 27, 13, 13, 15, 15, 4, 17, 23, 1, 3, 5, 0, 4, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ossetic/Cyrillic/Russia
+ { 227, 4, 1, 800, 800, 806, 815, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 1269, 454, 55, 1,14967,14967,14967,14967, 83, 83, 524, 547, 881, 5, 22, 286, 3754, 9, 13, 4562, 4566, 6, 6, 9, 8, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 20, 8, 11, 4, 38, 38, 38, 38, 13, 13, 4, 4, 5, 17, 23, 1, 6, 4, 6, 4, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Pashto/Arabic/Afghanistan
+ { 227, 4, 178, 800, 800, 806, 815, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 1269, 454, 10, 22,14967,14967,14967,14967, 83, 83, 524, 547, 881, 5, 22, 189, 3760, 9, 13, 4562, 4575, 6, 6, 9, 8, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 20, 8, 12, 7, 38, 38, 38, 38, 13, 13, 4, 4, 5, 17, 23, 2, 15, 4, 6, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Pashto/Arabic/Pakistan
+ { 228, 4, 112, 823, 823, 830, 838, 53, 21, 22, 23, 61, 74, 37, 65, 17, 18, 19, 20, 71, 454, 55, 1,15005,15005,15005,15005,15053,15053, 528, 551, 789, 5, 22, 287, 3775, 60, 66, 4582, 4229, 7, 7, 8, 7, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 1, 16, 8, 11, 4, 48, 48, 48, 48, 13, 13, 9, 8, 4, 17, 23, 4, 10, 6, 8, 5, 5, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Persian/Arabic/Iran
+ { 228, 4, 1, 823, 823, 830, 838, 53, 21, 22, 23, 61, 74, 37, 65, 17, 18, 19, 20, 71, 454, 55, 1,15005,15005,15005,15005,15053,15053, 528, 551, 789, 5, 22, 286, 3785, 4, 66, 4587, 4566, 7, 7, 8, 7, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 1, 16, 8, 11, 4, 48, 48, 48, 48, 13, 13, 9, 8, 4, 17, 23, 1, 16, 5, 8, 3, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Persian/Arabic/Afghanistan
+ { 230, 66, 187, 0, 0, 110, 110, 6, 1, 14, 2, 3, 4, 5, 9, 15, 11, 17, 18, 0, 560, 0, 0,15066,15066,15124,15124,15157,15170, 0, 0, 309, 5, 22, 291, 3801, 19, 24, 4590, 4596, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 58, 58, 33, 33, 13, 13, 2, 2, 5, 17, 23, 2, 12, 5, 7, 6, 6, {80,76,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Polish/Latin/Poland
{ 231, 66, 32, 0, 0, 345, 345, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 127, 0, 0,15183,15183,15261,15261,15295,15295, 0, 0, 0, 5, 22, 0, 3813, 4, 0, 4602, 4611, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 10, 10, 5, 78, 78, 34, 34, 13, 13, 2, 2, 5, 17, 23, 2, 15, 5, 0, 9, 6, {66,82,76}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Portuguese/Latin/Brazil
- { 231, 66, 7, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 261, 3828, 19, 24, 4602, 4617, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 2, 15, 5, 7, 9, 6, {65,79,65}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Portuguese/Latin/Angola
- { 231, 66, 43, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 248, 3843, 19, 24, 4602, 4623, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 20, 5, 7, 9, 10, {67,86,69}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Cape Verde
+ { 231, 66, 7, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 266, 3828, 19, 24, 4602, 4617, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 2, 15, 5, 7, 9, 6, {65,79,65}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Portuguese/Latin/Angola
+ { 231, 66, 43, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 253, 3843, 19, 24, 4602, 4623, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 20, 5, 7, 9, 10, {67,86,69}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Cape Verde
{ 231, 66, 73, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 2, 3863, 19, 24, 4602, 4633, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 4, 17, 5, 7, 9, 16, {88,65,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Equatorial Guinea
- { 231, 66, 101, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 3, 3880, 19, 24, 4602, 4649, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 18, 5, 7, 9, 12, {88,79,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Guinea Bissau
+ { 231, 66, 101, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 123, 3880, 19, 24, 4602, 4649, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 5, 18, 5, 7, 9, 12, {88,79,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Guinea Bissau
{ 231, 66, 138, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 13, 420, 19, 24, 4602, 4661, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 4, 5, 7, 9, 10, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Luxembourg
- { 231, 66, 139, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 10, 22,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 147, 3898, 19, 24, 4602, 4671, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 4, 15, 5, 7, 9, 19, {77,79,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Macao
- { 231, 66, 160, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 267, 3913, 19, 24, 4602, 4690, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 19, 5, 7, 9, 10, {77,90,78}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Mozambique
+ { 231, 66, 139, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 10, 22,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 152, 3898, 19, 24, 4602, 4671, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 4, 15, 5, 7, 9, 19, {77,79,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Macao
+ { 231, 66, 160, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 272, 3913, 19, 24, 4602, 4690, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 19, 5, 7, 9, 10, {77,90,78}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Mozambique
{ 231, 66, 188, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 13, 420, 19, 24, 4700, 4717, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 1, 4, 5, 7, 17, 8, {69,85,82}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Portugal
- { 231, 66, 204, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 288, 3932, 19, 24, 4602, 4725, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 2, 28, 5, 7, 9, 19, {83,84,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Sao Tome And Principe
- { 231, 66, 226, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 215, 3960, 19, 24, 4602, 4744, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 12, 5, 7, 9, 5, {67,72,70}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Switzerland
- { 231, 66, 232, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 140, 3972, 19, 24, 4602, 4749, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 24, 5, 7, 9, 11, {85,83,68}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Timor-Leste
+ { 231, 66, 204, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 293, 3932, 19, 24, 4602, 4725, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 2, 28, 5, 7, 9, 19, {83,84,78}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Sao Tome And Principe
+ { 231, 66, 226, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 220, 3960, 19, 24, 4602, 4744, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 12, 5, 7, 9, 5, {67,72,70}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Switzerland
+ { 231, 66, 232, 0, 0, 345, 345, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 127, 0, 0,15183,15183,15308,15308,15295,15295, 537, 559, 0, 5, 22, 145, 3972, 19, 24, 4602, 4749, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 78, 78, 48, 48, 13, 13, 8, 8, 5, 17, 23, 3, 24, 5, 7, 9, 11, {85,83,68}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Portuguese/Latin/Timor-Leste
{ 232, 66, 258, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Prussian/Latin/World
- { 233, 41, 110, 0, 0, 845, 845, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22,15356,15356,15412,15412,15447,15447, 545, 567, 948, 5, 22, 117, 3996, 4, 0, 4760, 4766, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 35, 35, 22, 22, 6, 6, 4, 17, 23, 1, 11, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Punjabi/Gurmukhi/India
+ { 233, 41, 110, 0, 0, 845, 845, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22,15356,15356,15412,15412,15447,15447, 545, 567, 886, 5, 22, 117, 3996, 4, 0, 4760, 4766, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 56, 56, 35, 35, 22, 22, 6, 6, 4, 17, 23, 1, 11, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Punjabi/Gurmukhi/India
{ 233, 4, 178, 0, 0, 0, 0, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 618, 127, 10, 22,15469,15469,15469,15469, 83, 83, 0, 0, 0, 5, 22, 75, 4007, 4, 0, 4770, 4575, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 10, 12, 7, 36, 36, 36, 36, 13, 13, 2, 2, 4, 17, 23, 1, 6, 5, 0, 6, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Punjabi/Arabic/Pakistan
- { 234, 66, 184, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 127, 0, 0,15505,15505,15557,15557,15584,15584, 165, 164, 0, 5, 22, 290, 4013, 4, 0, 4776, 4784, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 2, 11, 5, 0, 8, 4, {80,69,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Quechua/Latin/Peru
- { 234, 66, 28, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 127, 0, 0,15505,15505,15557,15557,15584,15584, 165, 164, 0, 5, 22, 292, 4024, 4, 0, 4776, 4788, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 2, 9, 5, 0, 8, 7, {66,79,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Quechua/Latin/Bolivia
+ { 234, 66, 184, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 127, 0, 0,15505,15505,15557,15557,15584,15584, 165, 164, 0, 5, 22, 295, 4013, 4, 0, 4776, 4784, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 2, 11, 5, 0, 8, 4, {80,69,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Quechua/Latin/Peru
+ { 234, 66, 28, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 127, 0, 0,15505,15505,15557,15557,15584,15584, 165, 164, 0, 5, 22, 297, 4024, 4, 0, 4776, 4788, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 2, 9, 5, 0, 8, 7, {66,79,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Quechua/Latin/Bolivia
{ 234, 66, 70, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 127, 0, 0,15505,15505,15557,15557,15584,15584, 165, 164, 0, 5, 22, 1, 4033, 4, 0, 4776, 4795, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 4, 4, 4, 17, 23, 1, 15, 5, 0, 8, 7, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Quechua/Latin/Ecuador
- { 235, 66, 192, 0, 0, 854, 854, 6, 1, 0, 2, 3, 4, 5, 9, 15, 11, 17, 18, 0, 560, 0, 0,15597,15597,15644,15644, 5479, 5479, 165, 164, 952, 5, 22, 294, 4048, 19, 24, 4802, 4808, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 47, 47, 33, 33, 13, 13, 4, 4, 4, 17, 23, 3, 12, 5, 7, 6, 7, {82,79,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Romanian/Latin/Romania
- { 235, 66, 154, 0, 0, 854, 854, 6, 1, 0, 2, 3, 4, 5, 9, 15, 11, 17, 18, 0, 560, 0, 0,15597,15597,15677,15677,15704,15704, 165, 164, 952, 5, 22, 9, 4060, 19, 24, 4802, 4815, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 47, 47, 27, 27, 15, 15, 4, 4, 4, 17, 23, 1, 15, 5, 7, 6, 17, {77,68,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Romanian/Latin/Moldova
- { 236, 66, 226, 0, 0, 345, 345, 6, 0, 13, 2, 3, 40, 5, 9, 17, 18, 19, 20, 1289, 432, 0, 0,15719,15719,15774,15774,15796,15796, 0, 0, 0, 5, 22, 215, 4075, 19, 0, 4832, 4841, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 10, 5, 55, 55, 22, 22, 13, 13, 2, 2, 5, 17, 23, 3, 13, 5, 0, 9, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Romansh/Latin/Switzerland
+ { 235, 66, 192, 0, 0, 854, 854, 6, 1, 0, 2, 3, 4, 5, 9, 15, 11, 17, 18, 0, 560, 0, 0,15597,15597,15644,15644, 5479, 5479, 165, 164, 890, 5, 22, 299, 4048, 19, 24, 4802, 4808, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 47, 47, 33, 33, 13, 13, 4, 4, 4, 17, 23, 3, 12, 5, 7, 6, 7, {82,79,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Romanian/Latin/Romania
+ { 235, 66, 154, 0, 0, 854, 854, 6, 1, 0, 2, 3, 4, 5, 9, 15, 11, 17, 18, 0, 560, 0, 0,15597,15597,15677,15677,15704,15704, 165, 164, 890, 5, 22, 9, 4060, 19, 24, 4802, 4815, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 47, 47, 27, 27, 15, 15, 4, 4, 4, 17, 23, 1, 15, 5, 7, 6, 17, {77,68,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Romanian/Latin/Moldova
+ { 236, 66, 226, 0, 0, 345, 345, 6, 0, 13, 2, 3, 40, 5, 9, 17, 18, 19, 20, 1289, 432, 0, 0,15719,15719,15774,15774,15796,15796, 0, 0, 0, 5, 22, 220, 4075, 19, 0, 4832, 4841, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 10, 5, 55, 55, 22, 22, 13, 13, 2, 2, 5, 17, 23, 3, 13, 5, 0, 9, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Romansh/Latin/Switzerland
{ 237, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,15809,15809,15873,15873,12098,12098, 551, 573, 0, 5, 22, 118, 4088, 9, 0, 4847, 2025, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 64, 64, 28, 28, 13, 13, 8, 7, 4, 17, 23, 3, 18, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Rombo/Latin/Tanzania
- { 238, 66, 38, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 11, 11, 13, 13, 71, 87, 0, 0,15901,15901,15989,15989, 83, 83, 559, 580, 0, 5, 22, 173, 4106, 0, 0, 4856, 4864, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 88, 88, 33, 33, 13, 13, 5, 5, 4, 17, 23, 3, 20, 4, 0, 8, 8, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Rundi/Latin/Burundi
- { 239, 27, 193, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 206, 852, 22, 124, 4126, 19, 0, 4872, 4879, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 16, 5, 0, 7, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Russia
- { 239, 27, 22, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 206, 852, 22, 125, 4142, 19, 0, 4872, 526, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 2, 17, 5, 0, 7, 8, {66,89,78}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Belarus
- { 239, 27, 123, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 206, 852, 22, 249, 4159, 19, 0, 4872, 4885, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 15, 5, 0, 7, 9, {75,90,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Kazakhstan
- { 239, 27, 128, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 206, 852, 22, 257, 4174, 19, 0, 4872, 4894, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 3, 14, 5, 0, 7, 8, {75,71,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Kyrgyzstan
- { 239, 27, 154, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 206, 852, 22, 9, 4188, 19, 0, 4872, 4902, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 14, 5, 0, 7, 7, {77,68,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Moldova
- { 239, 27, 244, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 206, 852, 22, 297, 4202, 19, 0, 4872, 4909, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 17, 5, 0, 7, 7, {85,65,72}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Russian/Cyrillic/Ukraine
+ { 238, 66, 38, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 11, 11, 13, 13, 71, 87, 0, 0,15901,15901,15989,15989, 83, 83, 559, 580, 0, 5, 22, 178, 4106, 0, 0, 4856, 4864, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 88, 88, 33, 33, 13, 13, 5, 5, 4, 17, 23, 3, 20, 4, 0, 8, 8, {66,73,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Rundi/Latin/Burundi
+ { 239, 27, 193, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 194, 832, 22, 129, 4126, 19, 0, 4872, 4879, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 16, 5, 0, 7, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Russia
+ { 239, 27, 22, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 194, 832, 22, 130, 4142, 19, 0, 4872, 526, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 2, 17, 5, 0, 7, 8, {66,89,78}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Belarus
+ { 239, 27, 123, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 194, 832, 22, 254, 4159, 19, 0, 4872, 4885, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 15, 5, 0, 7, 9, {75,90,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Kazakhstan
+ { 239, 27, 128, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 194, 832, 22, 262, 4174, 19, 0, 4872, 4894, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 3, 14, 5, 0, 7, 8, {75,71,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Kyrgyzstan
+ { 239, 27, 154, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 194, 832, 22, 9, 4188, 19, 0, 4872, 4902, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 14, 5, 0, 7, 7, {77,68,76}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Russian/Cyrillic/Moldova
+ { 239, 27, 244, 0, 0, 117, 117, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 299, 560, 0, 0,16022,16022,16083,16083,16103,16083, 0, 0, 194, 832, 22, 302, 4202, 19, 0, 4872, 4909, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 10, 10, 5, 61, 61, 20, 20, 13, 20, 2, 2, 5, 17, 23, 1, 17, 5, 0, 7, 7, {85,65,72}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Russian/Cyrillic/Ukraine
{ 240, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,11753,11753,11814,11814, 1041, 1041, 398, 414, 0, 5, 22, 118, 3392, 0, 0, 4916, 2025, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 27, 27, 13, 13, 5, 9, 4, 17, 23, 3, 20, 4, 0, 6, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Rwa/Latin/Tanzania
{ 241, 66, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Saho/Latin/Eritrea
- { 242, 27, 193, 0, 0, 862, 862, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 1312, 293, 0, 0,16116,16116,16186,16186,16206,16206, 564, 585, 956, 961, 22, 124, 4219, 19, 0, 4922, 4931, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 6, 10, 5, 70, 70, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 20, 5, 0, 9, 9, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sakha/Cyrillic/Russia
- { 243, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,16219,16219,16323,16323,16350,16350, 566, 587, 0, 5, 22, 170, 4239, 9, 13, 4940, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,104,104, 27, 27, 13, 13, 7, 5, 4, 17, 23, 3, 18, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Samburu/Latin/Kenya
+ { 242, 27, 193, 0, 0, 862, 862, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 10, 1312, 293, 0, 0,16116,16116,16186,16186,16206,16206, 564, 585, 894, 899, 22, 129, 4219, 19, 0, 4922, 4931, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 6, 10, 5, 70, 70, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 20, 5, 0, 9, 9, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sakha/Cyrillic/Russia
+ { 243, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,16219,16219,16323,16323,16350,16350, 566, 587, 0, 5, 22, 175, 4239, 9, 13, 4940, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,104,104, 27, 27, 13, 13, 7, 5, 4, 17, 23, 3, 18, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Samburu/Latin/Kenya
{ 245, 66, 46, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 71, 87, 0, 0,16363,16363,16428,16428,16455,16455, 573, 592, 0, 5, 22, 2, 4257, 9, 44, 4948, 4953, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 65, 65, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 18, 4, 5, 5, 22, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Sango/Latin/Central African Republic
{ 246, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,16468,16468,16527,16527,16554,16554, 575, 594, 0, 5, 22, 118, 4275, 0, 0, 4975, 4984, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 27, 27, 13, 13, 9, 9, 4, 17, 23, 3, 18, 4, 0, 9, 9, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Sangu/Latin/Tanzania
{ 247, 29, 110, 0, 0, 873, 883, 6, 0, 1, 2, 69, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22,16567,16567, 7106, 7106, 7137, 7137, 448, 468, 0, 5, 22, 117, 4293, 4, 0, 4993, 5005, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 66, 66, 31, 31, 18, 18, 9, 7, 4, 17, 23, 1, 15, 5, 0, 12, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Sanskrit/Devanagari/India
{ 248, 93, 110, 0, 0, 0, 0, 6, 0, 1, 2, 76, 4, 5, 9, 10, 11, 12, 13, 0, 87, 10, 22,16633,16633,16674,16674,16699,16699, 584, 603, 0, 5, 22, 117, 4308, 4, 0, 5010, 5017, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 41, 41, 25, 25, 13, 13, 5, 5, 4, 17, 23, 1, 16, 5, 0, 7, 6, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Santali/Ol Chiki/India
{ 248, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 117, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Santali/Devanagari/India
{ 249, 66, 117, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 13, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sardinian/Latin/Italy
- { 251, 66, 160, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,16712,16712,16766,16766,16793,16793, 0, 0, 0, 5, 22, 267, 4324, 0, 0, 5023, 4690, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 21, 4, 0, 4, 10, {77,90,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sena/Latin/Mozambique
- { 252, 27, 207, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16806,16806,16857,16857, 2341, 2341, 589, 608, 978, 5, 22, 298, 4345, 19, 24, 5027, 5033, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 51, 51, 27, 27, 13, 13, 9, 8, 7, 17, 23, 3, 12, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Serbia
- { 252, 66, 29, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0, 2149, 2149, 2206,16884, 2233, 2233, 598, 616, 228, 5, 22, 128, 575, 19, 24, 5039, 581, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 57, 57, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Bosnia And Herzegovina
- { 252, 66, 207, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16911,16911,16884,16884, 2233, 2233, 609, 616, 228, 5, 22, 298, 4357, 19, 24, 5039, 5045, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 3, 12, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Serbia
- { 252, 27, 29, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0, 2259, 2259, 2314,16857, 2341, 2341, 101, 608, 978, 5, 22, 130, 4369, 19, 24, 5027, 608, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 55, 55, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Bosnia And Herzegovina
- { 252, 27, 126, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16806,16806,16857,16857, 2341, 2341, 589, 608, 978, 5, 22, 13, 4409, 19, 24, 5027, 5051, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 51, 51, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Kosovo
- { 252, 27, 157, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16964,16964,16857,16857, 2341, 2341, 101, 608, 978, 5, 22, 13, 4409, 19, 24, 5027, 5057, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 54, 54, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Montenegro
- { 252, 66, 126, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16911,16911,16884,16884, 2233, 2233, 609, 616, 228, 5, 22, 13, 4413, 19, 24, 5039, 5066, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Kosovo
- { 252, 66, 157, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,17018,17018,16884,16884, 2233, 2233, 598, 616, 228, 5, 22, 13, 4413, 19, 24, 5039, 5072, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 56, 56, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Montenegro
+ { 251, 66, 160, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,16712,16712,16766,16766,16793,16793, 0, 0, 0, 5, 22, 272, 4324, 0, 0, 5023, 4690, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 21, 4, 0, 4, 10, {77,90,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sena/Latin/Mozambique
+ { 252, 27, 207, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16806,16806,16857,16857, 2341, 2341, 589, 608, 916, 5, 22, 303, 4345, 19, 24, 5027, 5033, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 51, 51, 27, 27, 13, 13, 9, 8, 7, 17, 23, 3, 12, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Serbia
+ { 252, 66, 29, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0, 2149, 2149, 2206,16884, 2233, 2233, 598, 616, 216, 5, 22, 133, 575, 19, 24, 5039, 581, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 57, 57, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Bosnia And Herzegovina
+ { 252, 66, 207, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16911,16911,16884,16884, 2233, 2233, 609, 616, 216, 5, 22, 303, 4357, 19, 24, 5039, 5045, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 3, 12, 5, 7, 6, 6, {82,83,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Serbia
+ { 252, 27, 29, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0, 2259, 2259, 2314,16857, 2341, 2341, 101, 608, 916, 5, 22, 135, 4369, 19, 24, 5027, 608, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 55, 55, 27, 27, 13, 13, 11, 8, 7, 17, 23, 2, 40, 5, 7, 6, 19, {66,65,77}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Bosnia And Herzegovina
+ { 252, 27, 126, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16806,16806,16857,16857, 2341, 2341, 589, 608, 916, 5, 22, 13, 4409, 19, 24, 5027, 5051, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 51, 51, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Kosovo
+ { 252, 27, 157, 0, 0, 117, 117, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16964,16964,16857,16857, 2341, 2341, 101, 608, 916, 5, 22, 13, 4409, 19, 24, 5027, 5057, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 54, 54, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Cyrillic/Montenegro
+ { 252, 66, 126, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,16911,16911,16884,16884, 2233, 2233, 609, 616, 216, 5, 22, 13, 4413, 19, 24, 5039, 5066, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 53, 53, 27, 27, 13, 13, 9, 8, 7, 17, 23, 1, 4, 5, 7, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Kosovo
+ { 252, 66, 157, 0, 0, 110, 110, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 12, 12, 375, 395, 0, 0,17018,17018,16884,16884, 2233, 2233, 598, 616, 216, 5, 22, 13, 4413, 19, 24, 5039, 5072, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 7, 10, 5, 56, 56, 27, 27, 13, 13, 11, 8, 7, 17, 23, 1, 4, 5, 7, 6, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Serbian/Latin/Montenegro
{ 253, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,17074,17074,17136,17136,17163,17163, 618, 624, 0, 5, 22, 118, 4417, 0, 0, 5081, 2025, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 62, 62, 27, 27, 13, 13, 5, 8, 4, 17, 23, 3, 20, 4, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Shambala/Latin/Tanzania
- { 254, 66, 261, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 11, 11, 13, 13, 27, 44, 0, 0,17176,17176,17230,17230,17257,17257, 0, 0, 0, 5, 22, 140, 4437, 9, 13, 5090, 2191, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 15, 4, 6, 8, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Shona/Latin/Zimbabwe
- { 255, 141, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22,17270,17270,17297,17297,17317,17317, 623, 632, 0, 5, 22, 146, 0, 4, 0, 5098, 5101, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 3, 2, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sichuan Yi/Yi/China
+ { 254, 66, 261, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 11, 11, 13, 13, 27, 44, 0, 0,17176,17176,17230,17230,17257,17257, 0, 0, 0, 5, 22, 145, 4437, 9, 13, 5090, 2191, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 15, 4, 6, 8, 8, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Shona/Latin/Zimbabwe
+ { 255, 141, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 10, 22,17270,17270,17297,17297,17317,17317, 623, 632, 0, 5, 22, 151, 0, 4, 0, 5098, 5101, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 27, 27, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 3, 2, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sichuan Yi/Yi/China
{ 256, 66, 117, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 13, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sicilian/Latin/Italy
{ 257, 66, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Sidamo/Latin/Ethiopia
- { 258, 66, 187, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 286, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {80,76,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Silesian/Latin/Poland
- { 259, 4, 178, 0, 0, 892, 900, 53, 21, 22, 23, 25, 26, 28, 30, 10, 11, 12, 13, 27, 44, 10, 22,17330,17330,17330,17330,17364,17364, 625, 634, 985, 991, 22, 184, 4452, 19, 0, 5103, 5107, 6, 6, 8, 7, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 34, 34, 34, 34, 30, 30, 11, 11, 6, 25, 23, 2, 12, 5, 0, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Sindhi/Arabic/Pakistan
+ { 258, 66, 187, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 291, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {80,76,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Silesian/Latin/Poland
+ { 259, 4, 178, 0, 0, 892, 900, 53, 21, 22, 23, 25, 26, 28, 30, 10, 11, 12, 13, 27, 44, 10, 22,17330,17330,17330,17330,17364,17364, 625, 634, 923, 929, 22, 189, 4452, 19, 0, 5103, 5107, 6, 6, 8, 7, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 17, 10, 12, 7, 34, 34, 34, 34, 30, 30, 11, 11, 6, 25, 23, 2, 12, 5, 0, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Sindhi/Arabic/Pakistan
{ 259, 29, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 434, 346,17394,17420,17460,17484,17511,17530, 636, 645, 0, 5, 22, 117, 4464, 4, 0, 5114, 569, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 12, 7, 26, 40, 24, 27, 19, 18, 16, 13, 4, 17, 23, 1, 17, 5, 0, 6, 4, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Sindhi/Devanagari/India
- { 260, 119, 221, 0, 0, 907, 916, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 140, 140,17548,17548,17609,17609,17647,17647, 652, 658, 1016, 1021, 22, 301, 4481, 9, 13, 5120, 5125, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 38, 38, 18, 18, 5, 4, 5, 42, 23, 3, 17, 4, 6, 5, 11, {76,75,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sinhala/Sinhala/Sri Lanka
+ { 260, 119, 221, 0, 0, 907, 916, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 140, 140,17548,17548,17609,17609,17647,17647, 652, 658, 954, 959, 22, 306, 4481, 9, 13, 5120, 5125, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 38, 38, 18, 18, 5, 4, 5, 42, 23, 3, 17, 4, 6, 5, 11, {76,75,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Sinhala/Sinhala/Sri Lanka
{ 261, 66, 83, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 13, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Skolt Sami/Latin/Finland
- { 262, 66, 212, 0, 0, 222, 924, 6, 1, 14, 2, 3, 4, 5, 6, 15, 10, 16, 12, 520, 364, 1, 1,17665,17665,17716,17716,17736,17736, 0, 0, 321, 5, 22, 13, 420, 19, 24, 5136, 5146, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 9, 4, 51, 51, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 7, 10, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Slovak/Latin/Slovakia
+ { 262, 66, 212, 0, 0, 222, 924, 6, 1, 14, 2, 3, 4, 5, 6, 15, 10, 16, 12, 520, 364, 1, 1,17665,17665,17716,17716,17736,17736, 0, 0, 309, 5, 22, 13, 420, 19, 24, 5136, 5146, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 9, 4, 51, 51, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 4, 5, 7, 10, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Slovak/Latin/Slovakia
{ 263, 66, 213, 0, 0, 931, 931, 6, 1, 0, 2, 3, 40, 5, 6, 15, 10, 16, 12, 375, 499, 0, 0,17749,17749,17800,17800,17834,17834, 169, 662, 50, 5, 22, 13, 4498, 19, 24, 5155, 5166, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 9, 10, 5, 51, 51, 34, 34, 13, 13, 4, 4, 4, 17, 23, 1, 4, 5, 7, 11, 9, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Slovenian/Latin/Slovenia
- { 264, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,17847,17847,17911,17911,17945,17945, 657, 666, 0, 5, 22, 143, 2771, 19, 0, 5175, 3061, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 64, 64, 34, 34, 13, 13, 6, 6, 4, 17, 23, 3, 19, 5, 0, 7, 7, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Soga/Latin/Uganda
- { 265, 66, 215, 0, 0, 939, 939, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1342, 127, 10, 22,17958,17958,18004,18004,18035,18035, 663, 672, 1063, 1069, 22, 90, 4502, 9, 13, 5182, 5190, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 1, 20, 4, 6, 8, 10, {83,79,83}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Somali/Latin/Somalia
- { 265, 66, 67, 0, 0, 939, 939, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1342, 127, 10, 22,17958,17958,18004,18004,18035,18035, 663, 672, 1063, 1069, 22, 34, 4522, 9, 13, 5182, 5200, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 3, 13, 4, 6, 8, 7, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // Somali/Latin/Djibouti
- { 265, 66, 77, 0, 0, 939, 939, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1342, 127, 10, 22,17958,17958,18004,18004,18035,18035, 663, 672, 1063, 1069, 22, 125, 4535, 9, 13, 5182, 5207, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 2, 15, 4, 6, 8, 8, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Somali/Latin/Ethiopia
- { 265, 66, 124, 0, 0, 939, 939, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1342, 127, 0, 0,17958,17958,18004,18004,18035,18035, 663, 672, 1063, 1069, 22, 170, 4550, 9, 13, 5182, 1103, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 10, 5, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 3, 15, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Somali/Latin/Kenya
+ { 264, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,17847,17847,17911,17911,17945,17945, 657, 666, 0, 5, 22, 148, 2771, 19, 0, 5175, 3061, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 64, 64, 34, 34, 13, 13, 6, 6, 4, 17, 23, 3, 19, 5, 0, 7, 7, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Soga/Latin/Uganda
+ { 265, 66, 215, 0, 0, 939, 939, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1342, 127, 10, 22,17958,17958,18004,18004,18035,18035, 663, 672, 1001, 1007, 22, 90, 4502, 9, 13, 5182, 5190, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 1, 20, 4, 6, 8, 10, {83,79,83}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Somali/Latin/Somalia
+ { 265, 66, 67, 0, 0, 939, 939, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1342, 127, 10, 22,17958,17958,18004,18004,18035,18035, 663, 672, 1001, 1007, 22, 34, 4522, 9, 13, 5182, 5200, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 3, 13, 4, 6, 8, 7, {68,74,70}, 0, 0, 6, 6, 7, 1, 3, 3 }, // Somali/Latin/Djibouti
+ { 265, 66, 77, 0, 0, 939, 939, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1342, 127, 10, 22,17958,17958,18004,18004,18035,18035, 663, 672, 1001, 1007, 22, 130, 4535, 9, 13, 5182, 5207, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 7, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 2, 15, 4, 6, 8, 8, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Somali/Latin/Ethiopia
+ { 265, 66, 124, 0, 0, 939, 939, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1342, 127, 0, 0,17958,17958,18004,18004,18035,18035, 663, 672, 1001, 1007, 22, 175, 4550, 9, 13, 5182, 1103, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 10, 5, 46, 46, 31, 31, 14, 14, 2, 2, 6, 17, 23, 3, 15, 4, 6, 8, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Somali/Latin/Kenya
{ 266, 4, 112, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {73,82,82}, 0, 0, 6, 5, 5, 1, 3, 3 }, // Southern Kurdish/Arabic/Iran
- { 267, 66, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 156, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Southern Sami/Latin/Sweden
+ { 267, 66, 225, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 161, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Southern Sami/Latin/Sweden
{ 268, 66, 216, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Southern Sotho/Latin/South Africa
{ 269, 66, 216, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // South Ndebele/Latin/South Africa
{ 270, 66, 220, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 87, 55, 1,18049,18049,18101,18101,15584,15584, 129, 124, 0, 5, 22, 13, 420, 19, 0, 5215, 386, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 11, 4, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 4, 5, 0, 17, 6, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Spain
- { 270, 66, 11, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 5479, 129, 124, 0, 5, 22, 1, 4565, 4, 37, 5215, 5232, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 14, 5, 7, 7, 9, {65,82,83}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Argentina
- { 270, 66, 24, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4579, 9, 0, 5215, 5241, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 14, 4, 0, 7, 6, {66,90,68}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Belize
- { 270, 66, 28, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 292, 4593, 9, 0, 5215, 4788, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 2, 9, 4, 0, 7, 7, {66,79,66}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Bolivia
- { 270, 66, 32, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 0, 4602, 9, 0, 5215, 4611, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 2, 14, 4, 0, 7, 6, {66,82,76}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Brazil
+ { 270, 66, 11, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 5479, 129, 124, 0, 5, 22, 1, 4565, 4, 37, 5215, 5232, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 14, 5, 7, 7, 9, {65,82,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Argentina
+ { 270, 66, 24, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4579, 9, 0, 5215, 5241, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 14, 4, 0, 7, 6, {66,90,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Belize
+ { 270, 66, 28, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 297, 4593, 9, 0, 5215, 4788, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 2, 9, 4, 0, 7, 7, {66,79,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Bolivia
+ { 270, 66, 32, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 0, 4602, 9, 0, 5215, 4611, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 2, 14, 4, 0, 7, 6, {66,82,76}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Brazil
{ 270, 66, 42, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 87, 55, 1,18049,18049,18101,18101,15584,15584, 129, 124, 0, 5, 22, 13, 420, 19, 0, 5215, 5247, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 11, 4, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 4, 5, 0, 7, 8, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Canary Islands
{ 270, 66, 47, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 87, 55, 1,18049,18049,18101,18101,15584,15584, 129, 124, 0, 5, 22, 13, 420, 19, 0, 5215, 5255, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 11, 4, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 4, 5, 0, 7, 15, {69,85,82}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Ceuta And Melilla
- { 270, 66, 49, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 432, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4616, 9, 0, 5215, 5270, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 12, 4, 0, 7, 5, {67,76,80}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Chile
- { 270, 66, 54, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 128, 10, 22,18049,18049,18128,18101, 7794, 5479, 129, 124, 0, 5, 22, 1, 4628, 9, 0, 5215, 5275, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 15, 4, 0, 7, 8, {67,79,80}, 2, 0, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Colombia
- { 270, 66, 59, 0, 0, 70, 70, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 304, 4643, 9, 0, 5215, 5283, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 19, 4, 0, 7, 10, {67,82,67}, 2, 0, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Costa Rica
- { 270, 66, 61, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4662, 9, 0, 5215, 5293, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 11, 4, 0, 7, 4, {67,85,80}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Cuba
- { 270, 66, 69, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 10, 22,18049,18049,18128,18101, 5479, 5479, 129, 124, 0, 5, 22, 305, 4673, 9, 13, 5215, 5297, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 3, 15, 4, 6, 7, 20, {68,79,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Dominican Republic
- { 270, 66, 70, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4688, 9, 0, 5215, 4795, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 7, {85,83,68}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Ecuador
- { 270, 66, 72, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4688, 9, 0, 5215, 5317, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/El Salvador
+ { 270, 66, 49, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 432, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4616, 9, 0, 5215, 5270, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 12, 4, 0, 7, 5, {67,76,80}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Chile
+ { 270, 66, 54, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 128, 10, 22,18049,18049,18128,18101, 7794, 5479, 129, 124, 0, 5, 22, 1, 4628, 9, 0, 5215, 5275, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 15, 4, 0, 7, 8, {67,79,80}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Colombia
+ { 270, 66, 59, 0, 0, 70, 70, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 309, 4643, 9, 0, 5215, 5283, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 19, 4, 0, 7, 10, {67,82,67}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Costa Rica
+ { 270, 66, 61, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4662, 9, 0, 5215, 5293, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 11, 4, 0, 7, 4, {67,85,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Cuba
+ { 270, 66, 69, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 10, 22,18049,18049,18128,18101, 5479, 5479, 129, 124, 0, 5, 22, 310, 4673, 9, 13, 5215, 5297, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 3, 15, 4, 6, 7, 20, {68,79,80}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Dominican Republic
+ { 270, 66, 70, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4688, 9, 0, 5215, 4795, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 7, {85,83,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Ecuador
+ { 270, 66, 72, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4688, 9, 0, 5215, 5317, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/El Salvador
{ 270, 66, 73, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 87, 55, 1,18049,18049,18101,18101,15584,15584, 129, 124, 0, 5, 22, 2, 4708, 19, 0, 5215, 5328, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 11, 4, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 4, 28, 5, 0, 7, 17, {88,65,70}, 0, 0, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Equatorial Guinea
- { 270, 66, 99, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 128, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 251, 4736, 9, 0, 5215, 5345, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 7, 4, 0, 7, 9, {71,84,81}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Guatemala
- { 270, 66, 106, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1361, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 9, 4743, 9, 0, 5215, 5354, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 17, 4, 0, 7, 8, {72,78,76}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Honduras
- { 270, 66, 130, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 0, 0, 9, 0, 5362, 5385, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 0, 0, 4, 0, 23, 13, {0,0,0}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Latin America
- { 270, 66, 152, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 127, 0, 0,18049,18049,18128,18101, 5479, 5479, 129, 124, 0, 5, 22, 1, 4760, 9, 0, 5398, 5415, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 13, 4, 0, 17, 6, {77,88,78}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Mexico
- { 270, 66, 168, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 308, 4773, 9, 0, 5215, 5421, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 2, 20, 4, 0, 7, 9, {78,73,79}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Nicaragua
- { 270, 66, 181, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 1388, 10, 22,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 310, 4793, 9, 0, 5215, 5430, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 3, 15, 4, 0, 7, 6, {80,65,66}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Panama
- { 270, 66, 183, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 313, 4808, 9, 0, 5215, 5436, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 3, 17, 4, 0, 7, 8, {80,89,71}, 0, 0, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Paraguay
- { 270, 66, 184, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 128, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 290, 4825, 9, 0, 5215, 4784, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 2, 11, 4, 0, 7, 4, {80,69,78}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Peru
- { 270, 66, 185, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 87, 10, 22,18049,18049,18101,18101,15584,15584, 129, 124, 0, 5, 22, 139, 4836, 19, 0, 5215, 5444, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 12, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 13, 5, 0, 7, 9, {80,72,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Philippines
- { 270, 66, 189, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 1388, 10, 22,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4688, 9, 0, 5215, 1837, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Puerto Rico
- { 270, 66, 248, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 87, 10, 22,18049,18049,18128,18101, 5479, 5479, 129, 124, 0, 5, 22, 1, 4688, 9, 0, 5215, 5453, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 14, {85,83,68}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/United States
- { 270, 66, 250, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4849, 4, 37, 5215, 5467, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 13, 5, 7, 7, 7, {85,89,85}, 2, 1, 1, 6, 7, 2, 3, 3 }, // Spanish/Latin/Uruguay
- { 270, 66, 254, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 10, 22,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 316, 4862, 9, 0, 5215, 5474, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 4, 16, 4, 0, 7, 9, {86,69,83}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Venezuela
+ { 270, 66, 99, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 128, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 256, 4736, 9, 0, 5215, 5345, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 7, 4, 0, 7, 9, {71,84,81}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Guatemala
+ { 270, 66, 106, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1361, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 9, 4743, 9, 0, 5215, 5354, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 17, 4, 0, 7, 8, {72,78,76}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Honduras
+ { 270, 66, 130, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 0, 0, 9, 0, 5362, 5385, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 0, 0, 4, 0, 23, 13, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Latin America
+ { 270, 66, 152, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 127, 0, 0,18049,18049,18128,18101, 5479, 5479, 129, 124, 0, 5, 22, 1, 4760, 9, 0, 5398, 5415, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 13, 4, 0, 17, 6, {77,88,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Mexico
+ { 270, 66, 168, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 313, 4773, 9, 0, 5215, 5421, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 2, 20, 4, 0, 7, 9, {78,73,79}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Nicaragua
+ { 270, 66, 181, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 1388, 10, 22,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 315, 4793, 9, 0, 5215, 5430, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 3, 15, 4, 0, 7, 6, {80,65,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Panama
+ { 270, 66, 183, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 318, 4808, 9, 0, 5215, 5436, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 3, 17, 4, 0, 7, 8, {80,89,71}, 0, 0, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Paraguay
+ { 270, 66, 184, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 128, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 295, 4825, 9, 0, 5215, 4784, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 7, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 2, 11, 4, 0, 7, 4, {80,69,78}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Peru
+ { 270, 66, 185, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 87, 10, 22,18049,18049,18101,18101,15584,15584, 129, 124, 0, 5, 22, 144, 4836, 19, 0, 5215, 5444, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 12, 7, 52, 52, 27, 27, 13, 13, 5, 5, 5, 17, 23, 1, 13, 5, 0, 7, 9, {80,72,80}, 2, 1, 7, 6, 7, 2, 3, 3 }, // Spanish/Latin/Philippines
+ { 270, 66, 189, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 1388, 10, 22,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4688, 9, 0, 5215, 1837, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 11, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Puerto Rico
+ { 270, 66, 248, 0, 0, 70, 70, 6, 0, 1, 2, 3, 4, 5, 9, 17, 18, 10, 11, 751, 87, 10, 22,18049,18049,18128,18101, 5479, 5479, 129, 124, 0, 5, 22, 1, 4688, 9, 0, 5215, 5453, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 8, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 20, 4, 0, 7, 14, {85,83,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/United States
+ { 270, 66, 250, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 0, 0,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 1, 4849, 4, 37, 5215, 5467, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 10, 5, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 1, 13, 5, 7, 7, 7, {85,89,85}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Spanish/Latin/Uruguay
+ { 270, 66, 254, 0, 0, 70, 70, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 751, 87, 10, 22,18049,18049,18128,18101, 5479, 7794, 129, 124, 0, 5, 22, 321, 4862, 9, 0, 5215, 5474, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 6, 12, 7, 52, 52, 34, 27, 13, 13, 5, 5, 5, 17, 23, 4, 16, 4, 0, 7, 9, {86,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Spanish/Latin/Venezuela
{ 271, 135, 159, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 11, 71, 87, 0, 0,18162,18162,18209,18209, 83, 83, 665, 674, 0, 5, 22, 0, 4878, 0, 0, 5483, 5491, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 47, 47, 29, 29, 13, 13, 6, 8, 4, 17, 23, 0, 14, 4, 0, 8, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Standard Moroccan Tamazight/Tifinagh/Morocco
- { 272, 66, 111, 0, 0, 948, 961, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 141, 141,18238,18238,18281,18281, 7698, 7698, 0, 0, 0, 5, 22, 243, 4892, 9, 0, 5497, 0, 6, 6, 13, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 9, 4, 43, 43, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 15, 4, 0, 10, 0, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Sundanese/Latin/Indonesia
- { 273, 66, 230, 0, 0, 468, 468, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 955, 955, 955, 955, 83, 83, 0, 0, 760, 1086, 22, 118, 3392, 4, 0, 5507, 2025, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 20, 5, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swahili/Latin/Tanzania
- { 273, 66, 57, 0, 0, 468, 468, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 955, 955, 955, 955, 83, 83, 0, 0, 760, 1086, 22, 2, 4907, 4, 0, 5507, 5516, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 2, 16, 5, 0, 9, 32, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swahili/Latin/Congo Kinshasa
- { 273, 66, 124, 0, 0, 468, 468, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 955, 955, 955, 955, 83, 83, 0, 0, 760, 1086, 22, 170, 952, 4, 0, 5507, 1103, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 17, 5, 0, 9, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Swahili/Latin/Kenya
- { 273, 66, 243, 0, 0, 468, 468, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 955, 955, 955, 955, 83, 83, 0, 0, 760, 1086, 22, 143, 4923, 4, 0, 5507, 857, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 18, 5, 0, 9, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Swahili/Latin/Uganda
+ { 272, 66, 111, 0, 0, 948, 961, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 87, 141, 141,18238,18238,18281,18281, 7698, 7698, 0, 0, 0, 5, 22, 248, 4892, 9, 0, 5497, 0, 6, 6, 13, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 6, 9, 4, 43, 43, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 15, 4, 0, 10, 0, {73,68,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Sundanese/Latin/Indonesia
+ { 273, 66, 230, 0, 0, 468, 468, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 955, 955, 955, 955, 83, 83, 0, 0, 740, 1024, 22, 118, 3392, 4, 0, 5507, 2025, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 20, 5, 0, 9, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swahili/Latin/Tanzania
+ { 273, 66, 57, 0, 0, 468, 468, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 955, 955, 955, 955, 83, 83, 0, 0, 740, 1024, 22, 2, 4907, 4, 0, 5507, 5516, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 2, 16, 5, 0, 9, 32, {67,68,70}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swahili/Latin/Congo Kinshasa
+ { 273, 66, 124, 0, 0, 468, 468, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 955, 955, 955, 955, 83, 83, 0, 0, 740, 1024, 22, 175, 952, 4, 0, 5507, 1103, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 17, 5, 0, 9, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Swahili/Latin/Kenya
+ { 273, 66, 243, 0, 0, 468, 468, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0, 955, 955, 955, 955, 83, 83, 0, 0, 740, 1024, 22, 148, 4923, 4, 0, 5507, 857, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 59, 59, 59, 59, 13, 13, 2, 2, 5, 51, 23, 3, 18, 5, 0, 9, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Swahili/Latin/Uganda
{ 274, 66, 216, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Swati/Latin/South Africa
- { 275, 66, 225, 0, 0, 973, 973, 6, 1, 14, 2, 3, 40, 5, 52, 11, 11, 13, 13, 71, 44, 0, 0,18308,18308,18357,18357, 3959, 3959, 671, 682, 0, 5, 22, 156, 4941, 19, 0, 5548, 5555, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 10, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 2, 12, 5, 0, 7, 7, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Sweden
+ { 275, 66, 225, 0, 0, 973, 973, 6, 1, 14, 2, 3, 40, 5, 52, 11, 11, 13, 13, 71, 44, 0, 0,18308,18308,18357,18357, 3959, 3959, 671, 682, 0, 5, 22, 161, 4941, 19, 0, 5548, 5555, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 10, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 2, 12, 5, 0, 7, 7, {83,69,75}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Sweden
{ 275, 66, 2, 0, 0, 973, 973, 6, 1, 14, 2, 3, 40, 5, 52, 11, 11, 13, 13, 71, 44, 0, 0,18308,18308,18357,18357, 3959, 3959, 671, 682, 0, 5, 22, 13, 420, 19, 0, 5548, 5562, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 10, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 7, 5, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Aland Islands
{ 275, 66, 83, 0, 0, 973, 973, 6, 1, 14, 2, 3, 40, 5, 52, 11, 11, 13, 13, 71, 44, 0, 0,18308,18308,18357,18357, 3959, 3959, 671, 682, 0, 5, 22, 13, 420, 19, 0, 5548, 1472, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 16, 10, 10, 5, 49, 49, 28, 28, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 0, 7, 7, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swedish/Latin/Finland
- { 276, 66, 226, 0, 0, 384, 384, 6, 0, 13, 2, 3, 40, 5, 9, 17, 18, 19, 20, 345, 184, 0, 0,18385,18385,18447,18447, 3667, 3667, 673, 684, 0, 5, 22, 215, 4953, 19, 0, 5567, 5567, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 3, 16, 5, 0, 16, 7, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/Switzerland
+ { 276, 66, 226, 0, 0, 384, 384, 6, 0, 13, 2, 3, 40, 5, 9, 17, 18, 19, 20, 345, 184, 0, 0,18385,18385,18447,18447, 3667, 3667, 673, 684, 0, 5, 22, 220, 4953, 19, 0, 5567, 5567, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 3, 16, 5, 0, 16, 7, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/Switzerland
{ 276, 66, 84, 0, 0, 384, 384, 6, 0, 13, 2, 3, 40, 5, 9, 17, 18, 19, 20, 345, 184, 0, 0,18385,18385,18447,18447, 3667, 3667, 673, 684, 0, 5, 22, 13, 73, 19, 0, 5567, 5583, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 1, 4, 5, 0, 16, 10, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/France
- { 276, 66, 136, 0, 0, 384, 384, 6, 0, 13, 2, 3, 40, 5, 9, 17, 18, 19, 20, 345, 184, 0, 0,18385,18385,18447,18447, 3667, 3667, 673, 684, 0, 5, 22, 215, 4953, 19, 0, 5567, 5593, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 3, 16, 5, 0, 16, 13, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/Liechtenstein
+ { 276, 66, 136, 0, 0, 384, 384, 6, 0, 13, 2, 3, 40, 5, 9, 17, 18, 19, 20, 345, 184, 0, 0,18385,18385,18447,18447, 3667, 3667, 673, 684, 0, 5, 22, 220, 4953, 19, 0, 5567, 5593, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 62, 62, 27, 27, 13, 13, 12, 11, 4, 17, 23, 3, 16, 5, 0, 16, 13, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Swiss German/Latin/Liechtenstein
{ 277, 123, 113, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {73,81,68}, 0, 0, 6, 5, 6, 1, 3, 3 }, // Syriac/Syriac/Iraq
{ 278, 135, 159, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 11, 71, 87, 0, 0,18474,18474,18209,18209, 83, 83, 665, 674, 0, 5, 22, 0, 4878, 0, 0, 5606, 5491, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 46, 46, 29, 29, 13, 13, 6, 8, 4, 17, 23, 0, 14, 4, 0, 7, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tachelhit/Tifinagh/Morocco
{ 278, 66, 159, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 15, 11, 71, 87, 0, 0,18520,18520,18567,18567, 83, 83, 685, 695, 0, 5, 22, 0, 4969, 0, 0, 5613, 5623, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 47, 47, 29, 29, 13, 13, 6, 8, 4, 17, 23, 0, 14, 4, 0, 10, 6, {77,65,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tachelhit/Latin/Morocco
- { 280, 127, 255, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 320, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {86,78,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Tai Dam/Tai Viet/Vietnam
- { 281, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,18596,18596,18700,18700,18727,18727, 691, 703, 0, 5, 22, 170, 952, 9, 13, 5629, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,104,104, 27, 27, 13, 13, 10, 10, 4, 17, 23, 3, 17, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Taita/Latin/Kenya
- { 282, 27, 229, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 127, 0, 0,18740,18740,18794,18794,18821,18821, 0, 0, 0, 5, 22, 321, 4983, 19, 0, 5636, 5642, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 6, 5, 0, 6, 10, {84,74,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tajik/Cyrillic/Tajikistan
- { 283, 129, 110, 0, 0, 982, 982, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 434, 346,18834,18834,18882,18882,18920,18920, 701, 713, 1137, 5, 22, 117, 4989, 9, 13, 5652, 5657, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 1, 13, 4, 6, 5, 7, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Tamil/Tamil/India
- { 283, 129, 143, 0, 0, 982, 982, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 434, 346,18834,18834,18882,18882,18920,18920, 701, 713, 1137, 5, 22, 182, 5002, 9, 13, 5652, 5664, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 2, 17, 4, 6, 5, 7, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tamil/Tamil/Malaysia
- { 283, 129, 210, 0, 0, 982, 982, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 434, 346,18834,18834,18882,18882,18920,18920, 701, 713, 1137, 5, 22, 1, 5019, 9, 13, 5652, 5671, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 1, 17, 4, 6, 5, 11, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tamil/Tamil/Singapore
- { 283, 129, 221, 0, 0, 982, 982, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 0, 0,18834,18834,18882,18882,18920,18920, 701, 713, 1137, 5, 22, 325, 5036, 9, 13, 5652, 5682, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 10, 5, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 3, 13, 4, 6, 5, 6, {76,75,82}, 2, 1, 1, 6, 7, 1, 2, 3 }, // Tamil/Tamil/Sri Lanka
- { 284, 66, 228, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 328, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {84,87,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Taroko/Latin/Taiwan
- { 285, 66, 170, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0, 9722, 9722, 9775, 9775, 9802, 9802, 709, 721, 0, 5, 22, 3, 3197, 0, 0, 5688, 5701, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 53, 53, 27, 27, 13, 13, 8, 10, 4, 17, 23, 3, 16, 4, 0, 13, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Tasawaq/Latin/Niger
- { 286, 27, 193, 0, 0, 995, 995, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1396, 560, 1, 1,18939,18939,18994,18994,19029,19029, 0, 0, 0, 5, 22, 124, 5049, 19, 0, 5706, 4879, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 9, 4, 55, 55, 35, 35, 13, 13, 2, 2, 4, 17, 23, 1, 11, 5, 0, 5, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tatar/Cyrillic/Russia
- { 287, 131, 110, 0, 0, 1004, 1004, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1419, 432, 10, 22,19042,19042,19101,19101,19132,19132, 0, 0, 1144, 1151, 22, 117, 5060, 9, 13, 5711, 5717, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 59, 59, 31, 31, 17, 17, 2, 2, 7, 29, 23, 1, 6, 4, 6, 6, 8, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Telugu/Telugu/India
- { 288, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,19149,19149,19217,19217,19244,19244, 717, 731, 0, 5, 22, 143, 5066, 9, 13, 5725, 857, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 68, 68, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 21, 4, 6, 6, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Teso/Latin/Uganda
- { 288, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,19149,19149,19217,19217,19244,19244, 717, 731, 0, 5, 22, 170, 5087, 9, 13, 5725, 5731, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 68, 68, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 20, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Teso/Latin/Kenya
- { 289, 133, 231, 1015, 1015, 1020, 1028, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1437, 87, 446, 0,19257,19257,19324,19324,19346,19346, 726, 737, 1180, 5, 22, 331, 5107, 9, 13, 5736, 5736, 5, 5, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 6, 28, 5, 67, 67, 22, 22, 15, 15, 10, 10, 4, 17, 23, 1, 3, 4, 6, 3, 3, {84,72,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Thai/Thai/Thailand
- { 290, 134, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1456, 44, 10, 22,19361,19361,19439,19439,19489,19489, 736, 747, 0, 5, 22, 146, 5110, 4, 0, 5739, 5747, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 12, 7, 78, 78, 50, 50, 26, 26, 7, 8, 4, 17, 23, 1, 6, 5, 0, 8, 6, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tibetan/Tibetan/China
+ { 280, 127, 255, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 325, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {86,78,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Tai Dam/Tai Viet/Vietnam
+ { 281, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,18596,18596,18700,18700,18727,18727, 691, 703, 0, 5, 22, 175, 952, 9, 13, 5629, 1103, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5,104,104, 27, 27, 13, 13, 10, 10, 4, 17, 23, 3, 17, 4, 6, 7, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Taita/Latin/Kenya
+ { 282, 27, 229, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 618, 127, 0, 0,18740,18740,18794,18794,18821,18821, 0, 0, 0, 5, 22, 326, 4983, 19, 0, 5636, 5642, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 10, 5, 54, 54, 27, 27, 13, 13, 2, 2, 4, 17, 23, 4, 6, 5, 0, 6, 10, {84,74,83}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tajik/Cyrillic/Tajikistan
+ { 283, 129, 110, 0, 0, 982, 982, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 434, 346,18834,18834,18882,18882,18920,18920, 701, 713, 1075, 5, 22, 117, 4989, 9, 13, 5652, 5657, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 1, 13, 4, 6, 5, 7, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Tamil/Tamil/India
+ { 283, 129, 143, 0, 0, 982, 982, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 434, 346,18834,18834,18882,18882,18920,18920, 701, 713, 1075, 5, 22, 187, 5002, 9, 13, 5652, 5664, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 2, 17, 4, 6, 5, 7, {77,89,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tamil/Tamil/Malaysia
+ { 283, 129, 210, 0, 0, 982, 982, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 434, 346,18834,18834,18882,18882,18920,18920, 701, 713, 1075, 5, 22, 1, 5019, 9, 13, 5652, 5671, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 12, 7, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 1, 17, 4, 6, 5, 11, {83,71,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tamil/Tamil/Singapore
+ { 283, 129, 221, 0, 0, 982, 982, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 87, 0, 0,18834,18834,18882,18882,18920,18920, 701, 713, 1075, 5, 22, 330, 5036, 9, 13, 5652, 5682, 6, 6, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 10, 5, 48, 48, 38, 38, 19, 19, 8, 8, 7, 17, 23, 3, 13, 4, 6, 5, 6, {76,75,82}, 2, 1, 1, 6, 7, 1, 2, 3 }, // Tamil/Tamil/Sri Lanka
+ { 284, 66, 228, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 333, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 0, 5, 0, 0, 0, {84,87,68}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Taroko/Latin/Taiwan
+ { 285, 66, 170, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0, 9722, 9722, 9775, 9775, 9802, 9802, 709, 721, 0, 5, 22, 123, 3197, 0, 0, 5688, 5701, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 53, 53, 27, 27, 13, 13, 8, 10, 4, 17, 23, 5, 16, 4, 0, 13, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Tasawaq/Latin/Niger
+ { 286, 27, 193, 0, 0, 995, 995, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1396, 560, 1, 1,18939,18939,18994,18994,19029,19029, 0, 0, 0, 5, 22, 129, 5049, 19, 0, 5706, 4879, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 9, 4, 55, 55, 35, 35, 13, 13, 2, 2, 4, 17, 23, 1, 11, 5, 0, 5, 6, {82,85,66}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tatar/Cyrillic/Russia
+ { 287, 131, 110, 0, 0, 1004, 1004, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1419, 432, 10, 22,19042,19042,19101,19101,19132,19132, 0, 0, 1082, 1089, 22, 117, 5060, 9, 13, 5711, 5717, 6, 6, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 12, 7, 59, 59, 31, 31, 17, 17, 2, 2, 7, 29, 23, 1, 6, 4, 6, 6, 8, {73,78,82}, 2, 1, 7, 7, 7, 1, 2, 3 }, // Telugu/Telugu/India
+ { 288, 66, 243, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,19149,19149,19217,19217,19244,19244, 717, 731, 0, 5, 22, 148, 5066, 9, 13, 5725, 857, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 68, 68, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 21, 4, 6, 6, 6, {85,71,88}, 0, 0, 1, 7, 7, 1, 3, 3 }, // Teso/Latin/Uganda
+ { 288, 66, 124, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,19149,19149,19217,19217,19244,19244, 717, 731, 0, 5, 22, 175, 5087, 9, 13, 5725, 5731, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 68, 68, 27, 27, 13, 13, 9, 6, 4, 17, 23, 3, 20, 4, 6, 6, 5, {75,69,83}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Teso/Latin/Kenya
+ { 289, 133, 231, 1015, 1015, 1020, 1028, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1437, 87, 446, 0,19257,19257,19324,19324,19346,19346, 726, 737, 1118, 5, 22, 336, 5107, 9, 13, 5736, 5736, 5, 5, 8, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 6, 28, 5, 67, 67, 22, 22, 15, 15, 10, 10, 4, 17, 23, 1, 3, 4, 6, 3, 3, {84,72,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Thai/Thai/Thailand
+ { 290, 134, 50, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1456, 44, 10, 22,19361,19361,19439,19439,19489,19489, 736, 747, 0, 5, 22, 151, 5110, 4, 0, 5739, 5747, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 12, 7, 78, 78, 50, 50, 26, 26, 7, 8, 4, 17, 23, 1, 6, 5, 0, 8, 6, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tibetan/Tibetan/China
{ 290, 134, 110, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1456, 44, 10, 22,19361,19361,19439,19439,19489,19489, 736, 747, 0, 5, 22, 117, 5116, 4, 0, 5739, 5753, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 10, 12, 7, 78, 78, 50, 50, 26, 26, 7, 8, 4, 17, 23, 1, 12, 5, 0, 8, 7, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Tibetan/Tibetan/India
{ 291, 33, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tigre/Ethiopic/Eritrea
- { 292, 33, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1479, 127, 10, 22,19515,19515,19543,19543,19563,19576, 743, 755, 0, 5, 22, 125, 95, 9, 0, 5760, 89, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 12, 7, 28, 28, 20, 20, 13, 13, 12, 12, 4, 17, 23, 2, 9, 4, 0, 3, 5, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tigrinya/Ethiopic/Ethiopia
+ { 292, 33, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1479, 127, 10, 22,19515,19515,19543,19543,19563,19576, 743, 755, 0, 5, 22, 130, 95, 9, 0, 5760, 89, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 12, 7, 28, 28, 20, 20, 13, 13, 12, 12, 4, 17, 23, 2, 9, 4, 0, 3, 5, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tigrinya/Ethiopic/Ethiopia
{ 292, 33, 74, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 12, 13, 10, 11, 1479, 127, 10, 22,19515,19515,19543,19543,19576,19576, 743, 755, 0, 5, 22, 37, 0, 9, 0, 5760, 5763, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 8, 12, 7, 28, 28, 20, 20, 13, 13, 12, 12, 4, 17, 23, 3, 0, 4, 0, 3, 4, {69,82,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tigrinya/Ethiopic/Eritrea
- { 295, 66, 235, 1035, 1035, 1035, 1035, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 10, 22,19589,19589,19648,19648,19676,19676, 755, 767, 1184, 1189, 1248, 193, 5128, 4, 0, 5767, 2040, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 12, 7, 59, 59, 28, 28, 13, 13, 10, 6, 5, 59, 65, 2, 17, 5, 0, 13, 5, {84,79,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tongan/Latin/Tonga
+ { 295, 66, 235, 1035, 1035, 1035, 1035, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 10, 22,19589,19589,19648,19648,19676,19676, 755, 767, 1122, 1127, 1186, 198, 5128, 4, 0, 5767, 2040, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 6, 12, 7, 59, 59, 28, 28, 13, 13, 10, 6, 5, 59, 65, 2, 17, 5, 0, 13, 5, {84,79,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tongan/Latin/Tonga
{ 296, 66, 216, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tsonga/Latin/South Africa
{ 297, 66, 216, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Tswana/Latin/South Africa
- { 298, 66, 239, 0, 0, 1043, 1043, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1502, 561, 0, 0,19689,19689,19742,19742,19769,19769, 765, 773, 195, 5, 22, 256, 5145, 9, 13, 5780, 5786, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 10, 5, 53, 53, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 11, 4, 6, 6, 7, {84,82,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkish/Latin/Turkey
- { 298, 66, 63, 0, 0, 1043, 1043, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1502, 561, 10, 22,19689,19689,19742,19742,19769,19769, 765, 773, 195, 5, 22, 13, 73, 9, 13, 5780, 5793, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 12, 7, 53, 53, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 4, 6, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkish/Latin/Cyprus
- { 299, 66, 240, 0, 0, 1051, 1051, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 10, 11, 1502, 560, 0, 0,19782,19835,19888,19915,19942,19942, 767, 775, 1313, 5, 22, 332, 5156, 19, 0, 5799, 5811, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 53, 53, 27, 27, 13, 13, 13, 14, 4, 17, 23, 3, 14, 5, 0, 12, 12, {84,77,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkmen/Latin/Turkmenistan
+ { 298, 66, 239, 0, 0, 1043, 1043, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1502, 561, 0, 0,19689,19689,19742,19742,19769,19769, 765, 773, 183, 5, 22, 261, 5145, 9, 13, 5780, 5786, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 10, 5, 53, 53, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 11, 4, 6, 6, 7, {84,82,89}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkish/Latin/Turkey
+ { 298, 66, 63, 0, 0, 1043, 1043, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1502, 561, 10, 22,19689,19689,19742,19742,19769,19769, 765, 773, 183, 5, 22, 13, 73, 9, 13, 5780, 5793, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 9, 12, 7, 53, 53, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 4, 4, 6, 6, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkish/Latin/Cyprus
+ { 299, 66, 240, 0, 0, 1051, 1051, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 10, 11, 1502, 560, 0, 0,19782,19835,19888,19915,19942,19942, 767, 775, 1251, 5, 22, 337, 5156, 19, 0, 5799, 5811, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 10, 10, 5, 53, 53, 27, 27, 13, 13, 13, 14, 4, 17, 23, 3, 14, 5, 0, 12, 12, {84,77,84}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Turkmen/Latin/Turkmenistan
{ 301, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 121, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Tyap/Latin/Nigeria
- { 303, 27, 244, 0, 0, 103, 103, 6, 1, 14, 2, 3, 4, 5, 77, 17, 18, 15, 10, 1518, 184, 0, 0,19955,19955, 2499, 2499,20010,20010, 780, 789, 1317, 852, 22, 297, 5170, 19, 0, 5823, 5833, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 10, 5, 55, 55, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 17, 5, 0, 10, 7, {85,65,72}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ukrainian/Cyrillic/Ukraine
- { 304, 66, 91, 0, 0, 222, 222, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 121, 1, 474,20023,20023,20075,20075,20102,20102, 367, 791, 1322, 5, 22, 13, 420, 19, 0, 5840, 5855, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 9, 12, 52, 52, 27, 27, 13, 13, 9, 9, 5, 17, 23, 1, 4, 5, 0, 15, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Upper Sorbian/Latin/Germany
- { 305, 4, 178, 800, 800, 1059, 1069, 6, 0, 1, 2, 3, 35, 37, 9, 11, 10, 13, 12, 1540, 87, 10, 22,20115,20115,20115,20115, 83, 83, 0, 0, 1327, 1331, 22, 184, 5187, 9, 13, 5861, 4575, 6, 6, 10, 9, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 18, 6, 12, 7, 35, 35, 35, 35, 13, 13, 2, 2, 4, 20, 23, 2, 14, 4, 6, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Urdu/Arabic/Pakistan
- { 305, 4, 110, 800, 800, 1059, 1069, 6, 21, 22, 2, 61, 35, 62, 65, 11, 10, 13, 12, 1540, 87, 10, 22,20115,20115,20115,20115, 83, 83, 0, 0, 1327, 1331, 22, 117, 5201, 9, 13, 5861, 5865, 6, 6, 10, 9, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 6, 12, 7, 35, 35, 35, 35, 13, 13, 2, 2, 4, 20, 23, 1, 12, 4, 6, 4, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Urdu/Arabic/India
- { 306, 4, 50, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 18, 17, 20, 19, 1558, 44, 10, 22,20150,20150,20204,20204,20224,20224, 782, 800, 0, 5, 22, 138, 5213, 9, 13, 5870, 5878, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 54, 54, 20, 20, 13, 13, 12, 12, 4, 17, 23, 1, 11, 4, 6, 8, 5, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Uyghur/Arabic/China
- { 307, 66, 251, 0, 0, 1078, 1078, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 13, 12, 1575, 127, 55, 0,20237,20237,20297,20297,20328,20328, 325, 812, 195, 5, 22, 335, 5224, 19, 0, 5883, 5889, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 11, 5, 60, 60, 31, 31, 13, 13, 2, 2, 4, 17, 23, 4, 17, 5, 0, 6, 11, {85,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Uzbek/Latin/Uzbekistan
- { 307, 4, 1, 0, 0, 0, 0, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 1593, 454, 55, 1,15005,15005,20341,20341, 83, 83, 0, 0, 0, 5, 22, 281, 3785, 19, 0, 5900, 4566, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 33, 8, 11, 4, 48, 48, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 6, 5, 0, 6, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Uzbek/Arabic/Afghanistan
- { 307, 27, 251, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 778, 127, 54, 0,20361,20361,20413,20413,20440,20440, 794, 814, 0, 5, 22, 339, 5241, 19, 0, 5906, 5913, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 5, 52, 52, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 14, 5, 0, 7, 10, {85,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Uzbek/Cyrillic/Uzbekistan
+ { 303, 27, 244, 0, 0, 103, 103, 6, 1, 14, 2, 3, 4, 5, 77, 17, 18, 15, 10, 1518, 184, 0, 0,19955,19955, 2499, 2499,20010,20010, 780, 789, 1255, 832, 22, 302, 5170, 19, 0, 5823, 5833, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22, 8, 10, 5, 55, 55, 20, 20, 13, 13, 2, 2, 5, 17, 23, 1, 17, 5, 0, 10, 7, {85,65,72}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Ukrainian/Cyrillic/Ukraine
+ { 304, 66, 91, 0, 0, 222, 222, 6, 1, 0, 2, 3, 4, 5, 9, 15, 10, 16, 12, 345, 121, 1, 474,20023,20023,20075,20075,20102,20102, 367, 791, 1260, 5, 22, 13, 420, 19, 0, 5840, 5855, 6, 6, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 9, 12, 52, 52, 27, 27, 13, 13, 9, 9, 5, 17, 23, 1, 4, 5, 0, 15, 6, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Upper Sorbian/Latin/Germany
+ { 305, 4, 178, 800, 800, 1059, 1069, 6, 0, 1, 2, 3, 35, 37, 9, 11, 10, 13, 12, 1540, 87, 10, 22,20115,20115,20115,20115, 83, 83, 0, 0, 1265, 1269, 22, 189, 5187, 9, 13, 5861, 4575, 6, 6, 10, 9, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 18, 6, 12, 7, 35, 35, 35, 35, 13, 13, 2, 2, 4, 20, 23, 2, 14, 4, 6, 4, 7, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Urdu/Arabic/Pakistan
+ { 305, 4, 110, 800, 800, 1059, 1069, 6, 21, 22, 2, 61, 35, 62, 65, 11, 10, 13, 12, 1540, 87, 10, 22,20115,20115,20115,20115, 83, 83, 0, 0, 1265, 1269, 22, 117, 5201, 9, 13, 5861, 5865, 6, 6, 10, 9, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 18, 6, 12, 7, 35, 35, 35, 35, 13, 13, 2, 2, 4, 20, 23, 1, 12, 4, 6, 4, 5, {73,78,82}, 2, 1, 7, 7, 7, 1, 3, 3 }, // Urdu/Arabic/India
+ { 306, 4, 50, 0, 0, 263, 273, 6, 0, 1, 2, 3, 4, 5, 9, 18, 17, 20, 19, 1558, 44, 10, 22,20150,20150,20204,20204,20224,20224, 782, 800, 0, 5, 22, 143, 5213, 9, 13, 5870, 5878, 6, 6, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 54, 54, 20, 20, 13, 13, 12, 12, 4, 17, 23, 1, 11, 4, 6, 8, 5, {67,78,89}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Uyghur/Arabic/China
+ { 307, 66, 251, 0, 0, 1078, 1078, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 13, 12, 1575, 127, 55, 0,20237,20237,20297,20297,20328,20328, 325, 812, 183, 5, 22, 340, 5224, 19, 0, 5883, 5889, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 8, 11, 5, 60, 60, 31, 31, 13, 13, 2, 2, 4, 17, 23, 4, 17, 5, 0, 6, 11, {85,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Uzbek/Latin/Uzbekistan
+ { 307, 4, 1, 0, 0, 0, 0, 53, 21, 22, 23, 61, 35, 62, 65, 10, 11, 12, 13, 1593, 454, 55, 1,15005,15005,20341,20341, 83, 83, 0, 0, 0, 5, 22, 286, 3785, 19, 0, 5900, 4566, 6, 6, 6, 6, 1, 1, 1, 1, 1, 3, 3, 4, 1, 1, 1, 1, 33, 8, 11, 4, 48, 48, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 6, 5, 0, 6, 9, {65,70,78}, 0, 0, 6, 4, 5, 1, 3, 3 }, // Uzbek/Arabic/Afghanistan
+ { 307, 27, 251, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 778, 127, 54, 0,20361,20361,20413,20413,20440,20440, 794, 814, 0, 5, 22, 344, 5241, 19, 0, 5906, 5913, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 12, 5, 52, 52, 27, 27, 13, 13, 2, 2, 4, 17, 23, 3, 14, 5, 0, 7, 10, {85,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Uzbek/Cyrillic/Uzbekistan
{ 308, 139, 134, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22,20453,20453,20453,20453, 83, 83, 0, 0, 0, 5, 22, 1, 5255, 9, 13, 5923, 5925, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 29, 29, 29, 29, 13, 13, 2, 2, 4, 17, 23, 1, 8, 4, 6, 2, 4, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Vai/Vai/Liberia
{ 308, 66, 134, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 10, 22,20482,20482,20482,20482, 83, 83, 0, 0, 0, 5, 22, 1, 5263, 9, 13, 5929, 5932, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 12, 7, 47, 47, 47, 47, 13, 13, 2, 2, 4, 17, 23, 1, 13, 4, 6, 3, 8, {76,82,68}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Vai/Latin/Liberia
{ 309, 66, 216, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Venda/Latin/South Africa
- { 310, 66, 255, 0, 0, 1086, 1086, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 127, 0, 0,20529,20529,20583,20583,20615,20615, 796, 816, 0, 5, 22, 320, 5276, 19, 0, 5940, 5950, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 54, 54, 32, 32, 20, 20, 2, 2, 4, 17, 23, 1, 13, 5, 0, 10, 8, {86,78,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Vietnamese/Latin/Vietnam
+ { 310, 66, 255, 0, 0, 1086, 1086, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 192, 127, 0, 0,20529,20529,20583,20583,20615,20615, 796, 816, 0, 5, 22, 325, 5276, 19, 0, 5940, 5950, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 54, 54, 32, 32, 20, 20, 2, 2, 4, 17, 23, 1, 13, 5, 0, 10, 8, {86,78,68}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Vietnamese/Latin/Vietnam
{ 311, 66, 258, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Volapuk/Latin/World
{ 312, 66, 230, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,11753,11753,11814,11814, 1041, 1041, 398, 414, 0, 5, 22, 118, 3392, 9, 0, 5958, 2025, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 61, 61, 27, 27, 13, 13, 5, 9, 4, 17, 23, 3, 20, 4, 0, 8, 8, {84,90,83}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Vunjo/Latin/Tanzania
{ 313, 66, 23, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 13, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 0, 5, 0, 0, 0, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Walloon/Latin/Belgium
{ 314, 66, 226, 0, 0, 384, 384, 6, 1, 13, 2, 3, 4, 5, 9, 17, 18, 19, 20, 345, 44, 0, 0,20635,20635,20687,20687,20714,20714, 0, 0, 0, 5, 22, 0, 0, 4, 0, 5966, 5972, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 10, 10, 5, 52, 52, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 6, 6, {67,72,70}, 2, 0, 1, 6, 7, 1, 3, 3 }, // Walser/Latin/Switzerland
- { 315, 66, 15, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 246, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {65,85,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Warlpiri/Latin/Australia
- { 316, 66, 246, 0, 0, 1094, 1105, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,20727,20727,20803,20831,20860,20860, 798, 818, 1351, 5, 22, 91, 5289, 9, 13, 5978, 5985, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 76, 76, 28, 29, 14, 14, 2, 2, 7, 17, 23, 1, 12, 4, 6, 7, 16, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Welsh/Latin/United Kingdom
- { 317, 4, 178, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 184, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Western Balochi/Arabic/Pakistan
+ { 315, 66, 15, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 251, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {65,85,68}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Warlpiri/Latin/Australia
+ { 316, 66, 246, 0, 0, 1094, 1105, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 0, 127, 0, 0,20727,20727,20803,20831,20860,20860, 798, 818, 1289, 5, 22, 91, 5289, 9, 13, 5978, 5985, 6, 6, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 8, 10, 5, 76, 76, 28, 29, 14, 14, 2, 2, 7, 17, 23, 1, 12, 4, 6, 7, 16, {71,66,80}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Welsh/Latin/United Kingdom
+ { 317, 4, 178, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 189, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 2, 0, 5, 0, 0, 0, {80,75,82}, 2, 0, 7, 6, 7, 1, 3, 3 }, // Western Balochi/Arabic/Pakistan
{ 318, 66, 165, 0, 0, 7, 7, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 432, 0, 0,20874,20874,20927,20927, 83, 83, 0, 0, 0, 5, 22, 13, 73, 4, 37, 6001, 6006, 6, 6, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 53, 53, 20, 20, 13, 13, 2, 2, 4, 17, 23, 1, 4, 5, 7, 5, 8, {69,85,82}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Western Frisian/Latin/Netherlands
{ 319, 33, 77, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 27, 44, 0, 0, 56, 56, 56, 56, 83, 83, 0, 0, 0, 5, 22, 0, 0, 4, 0, 0, 0, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 27, 27, 27, 27, 13, 13, 2, 2, 4, 17, 23, 0, 0, 5, 0, 0, 0, {69,84,66}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Wolaytta/Ethiopic/Ethiopia
- { 320, 66, 206, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1626, 432, 0, 0,20947,20947,20996,20996,20996,20996, 709, 820, 0, 5, 22, 3, 5301, 4, 0, 6014, 2732, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 49, 49, 27, 27, 27, 27, 3, 3, 4, 17, 23, 3, 29, 5, 0, 5, 8, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Wolof/Latin/Senegal
+ { 320, 66, 206, 0, 0, 0, 0, 6, 1, 0, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1626, 432, 0, 0,20947,20947,20996,20996,20996,20996, 709, 820, 0, 5, 22, 123, 5301, 4, 0, 6014, 2732, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 49, 49, 27, 27, 27, 27, 3, 3, 4, 17, 23, 5, 29, 5, 0, 5, 8, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Wolof/Latin/Senegal
{ 321, 66, 216, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 12, 13, 10, 11, 27, 44, 0, 0,21023,21023,21083,21083, 83, 83, 0, 0, 0, 5, 22, 0, 5330, 9, 0, 6019, 6027, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 10, 10, 5, 60, 60, 27, 27, 13, 13, 2, 2, 4, 17, 23, 1, 24, 4, 0, 8, 15, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Xhosa/Latin/South Africa
{ 322, 66, 40, 0, 0, 0, 0, 6, 1, 14, 2, 3, 4, 5, 9, 17, 18, 17, 18, 71, 87, 0, 0,21110,21110,21180,21180,21200,21200, 800, 823, 0, 5, 22, 2, 0, 19, 24, 6042, 6048, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 70, 70, 20, 20, 13, 13, 8, 8, 4, 17, 23, 4, 0, 5, 7, 6, 7, {88,65,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Yangben/Latin/Cameroon
{ 323, 47, 258, 0, 0, 1115, 1115, 6, 0, 1, 2, 3, 4, 5, 9, 11, 11, 13, 13, 1643, 127, 0, 0,21213,21213,21213,21213, 83, 83, 808, 831, 0, 5, 22, 0, 0, 4, 0, 6055, 6061, 6, 6, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 8, 10, 5, 53, 53, 53, 53, 13, 13, 11, 10, 4, 17, 23, 0, 0, 5, 0, 6, 5, {0,0,0}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Yiddish/Hebrew/World
- { 324, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1662, 87, 0, 1,21266,21309,21377,21377,21409,21409, 819, 841, 1358, 1369, 22, 121, 5354, 9, 13, 6066, 6076, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 3, 43, 68, 32, 32, 13, 13, 5, 5, 11, 37, 23, 1, 14, 4, 6, 10, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Yoruba/Latin/Nigeria
- { 324, 66, 25, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1662, 87, 0, 1,21422,21465,21533,21533,21565,21565, 824, 846, 1406, 1369, 22, 3, 5368, 9, 13, 6066, 6084, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 3, 43, 68, 32, 32, 13, 13, 5, 5, 11, 37, 23, 3, 26, 4, 6, 10, 6, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Yoruba/Latin/Benin
- { 325, 66, 170, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,21578,21578, 9775, 9775,21630,21630, 709, 721, 0, 5, 22, 3, 3197, 0, 0, 6090, 5701, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 52, 52, 27, 27, 13, 13, 8, 10, 4, 17, 23, 3, 16, 4, 0, 10, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Zarma/Latin/Niger
+ { 324, 66, 169, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1662, 87, 0, 1,21266,21309,21377,21377,21409,21409, 819, 841, 1296, 1307, 22, 121, 5354, 9, 13, 6066, 6076, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 3, 43, 68, 32, 32, 13, 13, 5, 5, 11, 37, 23, 1, 14, 4, 6, 10, 8, {78,71,78}, 2, 1, 1, 6, 7, 1, 3, 3 }, // Yoruba/Latin/Nigeria
+ { 324, 66, 25, 0, 0, 0, 0, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 1662, 87, 0, 1,21422,21465,21533,21533,21565,21565, 824, 846, 1344, 1307, 22, 123, 5368, 9, 13, 6066, 6084, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 3, 43, 68, 32, 32, 13, 13, 5, 5, 11, 37, 23, 5, 26, 4, 6, 10, 6, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Yoruba/Latin/Benin
+ { 325, 66, 170, 0, 0, 0, 0, 6, 0, 14, 2, 3, 4, 5, 9, 10, 11, 12, 13, 71, 87, 0, 0,21578,21578, 9775, 9775,21630,21630, 709, 721, 0, 5, 22, 123, 3197, 0, 0, 6090, 5701, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 8, 10, 5, 52, 52, 27, 27, 13, 13, 8, 10, 4, 17, 23, 5, 16, 4, 0, 10, 5, {88,79,70}, 0, 0, 1, 6, 7, 1, 3, 3 }, // Zarma/Latin/Niger
{ 327, 66, 216, 0, 0, 1124, 1133, 6, 0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 321, 339, 0, 0,21643,21643,21716,21716,21743,21743, 0, 0, 0, 5, 22, 0, 5394, 9, 13, 6100, 6107, 6, 6, 9, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 6, 10, 5, 73, 73, 27, 27, 13, 13, 2, 2, 5, 17, 23, 1, 20, 4, 6, 7, 17, {90,65,82}, 2, 1, 7, 6, 7, 1, 3, 3 }, // Zulu/Latin/South Africa
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0,0,0}, 0, 0, 0, 0, 0, 0, 0, 0 } // trailing zeros
};
@@ -3051,26 +3050,25 @@ static const char16_t byte_unit_data[] = {
0x45, 0x42, 0x4b, 0x69, 0x42, 0x3b, 0x4d, 0x69, 0x42, 0x3b, 0x47, 0x69, 0x42, 0x3b, 0x54, 0x69, 0x42, 0x3b, 0x50, 0x69,
0x42, 0x3b, 0x45, 0x69, 0x42, 0x67, 0x72, 0x65, 0x65, 0x70, 0x62, 0x61, 0x6a, 0x74, 0x1263, 0x12ed, 0x1275, 0x12aa, 0x1263, 0x3b,
0x121c, 0x130b, 0x1263, 0x12ed, 0x1275, 0x3b, 0x130a, 0x1263, 0x3b, 0x1274, 0x122b, 0x1263, 0x12ed, 0x1275, 0x3b, 0x1354, 0x1263, 0x3b, 0x45, 0x42,
-0x628, 0x627, 0x64a, 0x62a, 0x643, 0x64a, 0x644, 0x648, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x645, 0x64a, 0x63a, 0x627, 0x628, 0x627, 0x64a,
-0x62a, 0x3b, 0x63a, 0x64a, 0x63a, 0x627, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x62a, 0x64a, 0x631, 0x627, 0x628, 0x627, 0x64a, 0x62a, 0x3b,
-0x628, 0x64a, 0x62a, 0x627, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x45, 0x42, 0x562, 0x561, 0x575, 0x569, 0x565, 0x580, 0x56f, 0x532, 0x3b,
-0x544, 0x532, 0x3b, 0x533, 0x532, 0x3b, 0x54f, 0x532, 0x3b, 0x54a, 0x532, 0x3b, 0x45, 0x42, 0x9ac, 0x9be, 0x987, 0x99f, 0x995, 0x9bf,
-0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x9ae, 0x9c7, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x997, 0x9bf, 0x983, 0x20, 0x9ac, 0x9be,
-0x983, 0x3b, 0x99f, 0x9c7, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x62, 0x61, 0x79, 0x74, 0x62,
-0x79, 0x74, 0x65, 0x2d, 0x61, 0x6b, 0x431, 0x430, 0x439, 0x442, 0x44b, 0x41a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x413, 0x411, 0x3b,
-0x422, 0x411, 0x3b, 0x41f, 0x411, 0x3b, 0x45, 0x42, 0x62, 0x61, 0x6a, 0x74, 0x6f, 0x76, 0x69, 0x6f, 0x6b, 0x74, 0x65, 0x64,
-0x6f, 0xf9, 0x6b, 0x6f, 0x3b, 0x4d, 0x6f, 0x3b, 0x47, 0x6f, 0x3b, 0x54, 0x6f, 0x3b, 0x50, 0x6f, 0x3b, 0x45, 0x6f, 0x4b,
-0x69, 0x6f, 0x3b, 0x4d, 0x69, 0x6f, 0x3b, 0x47, 0x69, 0x6f, 0x3b, 0x54, 0x69, 0x6f, 0x3b, 0x50, 0x69, 0x6f, 0x3b, 0x45,
-0x69, 0x6f, 0x431, 0x430, 0x439, 0x442, 0x43e, 0x432, 0x435, 0x1018, 0x102d, 0x102f, 0x1000, 0x103a, 0x6d, 0x67, 0x61, 0x20, 0x62, 0x79,
-0x74, 0x65, 0xd804, 0xdd1d, 0xd804, 0xdd2d, 0xd804, 0xdd16, 0xd804, 0xdd34, 0x13d7, 0x13d3, 0x13cd, 0x13a6, 0x13b5, 0x13a9, 0x5b57, 0x8282, 0x4f4d, 0x5143,
-0x7d44, 0x62, 0x61, 0x6a, 0x74, 0x79, 0x62, 0x61, 0x6a, 0x74, 0x6f, 0x6a, 0x62, 0x61, 0x69, 0x64, 0x69, 0x64, 0x62, 0xfd,
-0x74, 0x74, 0x61, 0x76, 0x75, 0x74, 0x6b, 0x74, 0x3b, 0x4d, 0x74, 0x3b, 0x47, 0x74, 0x3b, 0x54, 0x74, 0x3b, 0x50, 0x74,
-0x3b, 0x45, 0x74, 0x4b, 0x69, 0x74, 0x3b, 0x4d, 0x69, 0x74, 0x3b, 0x47, 0x69, 0x74, 0x3b, 0x54, 0x69, 0x74, 0x3b, 0x50,
-0x69, 0x74, 0x3b, 0x45, 0x69, 0x74, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0xd83a, 0xdd36, 0xd83a, 0xdd2b, 0xd83a, 0xdd45, 0xd83a, 0xdd3c,
-0xd83a, 0xdd46, 0xd83a, 0xdd2d, 0xd83a, 0xdd33, 0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd03, 0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd18, 0xd83a, 0xdd14, 0x3b, 0xd83a,
-0xdd1a, 0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd06, 0xd83a, 0xdd14, 0x3b, 0x45, 0x42, 0x62, 0x61, 0x69, 0x64, 0x68, 0x74, 0x10d1, 0x10d0, 0x10d8,
-0x10e2, 0x10d8, 0x10d9, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x10db, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x10d2, 0x10d1, 0x10d0, 0x10d8,
-0x10e2, 0x10d8, 0x3b, 0x10e2, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x10de, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x45, 0x42, 0x42,
+0x628, 0x627, 0x64a, 0x62a, 0x643, 0x64a, 0x644, 0x648, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x62a,
+0x64a, 0x631, 0x627, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x628, 0x64a, 0x62a, 0x627, 0x628, 0x627, 0x64a, 0x62a, 0x3b, 0x45, 0x42, 0x562,
+0x561, 0x575, 0x569, 0x565, 0x580, 0x56f, 0x532, 0x3b, 0x544, 0x532, 0x3b, 0x533, 0x532, 0x3b, 0x54f, 0x532, 0x3b, 0x54a, 0x532, 0x3b,
+0x45, 0x42, 0x9ac, 0x9be, 0x987, 0x99f, 0x995, 0x9bf, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x9ae, 0x9c7, 0x983, 0x20, 0x9ac, 0x9be,
+0x983, 0x3b, 0x997, 0x9bf, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x99f, 0x9c7, 0x983, 0x20, 0x9ac, 0x9be, 0x983, 0x3b, 0x50, 0x42,
+0x3b, 0x45, 0x42, 0x62, 0x61, 0x79, 0x74, 0x62, 0x79, 0x74, 0x65, 0x2d, 0x61, 0x6b, 0x431, 0x430, 0x439, 0x442, 0x44b, 0x41a,
+0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x422, 0x411, 0x3b, 0x41f, 0x411, 0x3b, 0x45, 0x42, 0x62, 0x61, 0x6a, 0x74,
+0x6f, 0x76, 0x69, 0x6f, 0x6b, 0x74, 0x65, 0x64, 0x6f, 0xf9, 0x6b, 0x6f, 0x3b, 0x4d, 0x6f, 0x3b, 0x47, 0x6f, 0x3b, 0x54,
+0x6f, 0x3b, 0x50, 0x6f, 0x3b, 0x45, 0x6f, 0x4b, 0x69, 0x6f, 0x3b, 0x4d, 0x69, 0x6f, 0x3b, 0x47, 0x69, 0x6f, 0x3b, 0x54,
+0x69, 0x6f, 0x3b, 0x50, 0x69, 0x6f, 0x3b, 0x45, 0x69, 0x6f, 0x431, 0x430, 0x439, 0x442, 0x43e, 0x432, 0x435, 0x1018, 0x102d, 0x102f,
+0x1000, 0x103a, 0x6d, 0x67, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0xd804, 0xdd1d, 0xd804, 0xdd2d, 0xd804, 0xdd16, 0xd804, 0xdd34, 0x13d7, 0x13d3,
+0x13cd, 0x13a6, 0x13b5, 0x13a9, 0x5b57, 0x8282, 0x4f4d, 0x5143, 0x7d44, 0x62, 0x61, 0x6a, 0x74, 0x79, 0x62, 0x61, 0x6a, 0x74, 0x6f, 0x6a,
+0x62, 0x61, 0x69, 0x64, 0x69, 0x64, 0x62, 0xfd, 0x74, 0x74, 0x61, 0x76, 0x75, 0x74, 0x6b, 0x74, 0x3b, 0x4d, 0x74, 0x3b,
+0x47, 0x74, 0x3b, 0x54, 0x74, 0x3b, 0x50, 0x74, 0x3b, 0x45, 0x74, 0x4b, 0x69, 0x74, 0x3b, 0x4d, 0x69, 0x74, 0x3b, 0x47,
+0x69, 0x74, 0x3b, 0x54, 0x69, 0x74, 0x3b, 0x50, 0x69, 0x74, 0x3b, 0x45, 0x69, 0x74, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73,
+0xd83a, 0xdd36, 0xd83a, 0xdd2b, 0xd83a, 0xdd45, 0xd83a, 0xdd3c, 0xd83a, 0xdd46, 0xd83a, 0xdd2d, 0xd83a, 0xdd33, 0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd03, 0xd83a,
+0xdd14, 0x3b, 0xd83a, 0xdd18, 0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd1a, 0xd83a, 0xdd14, 0x3b, 0xd83a, 0xdd06, 0xd83a, 0xdd14, 0x3b, 0x45, 0x42, 0x62,
+0x61, 0x69, 0x64, 0x68, 0x74, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x10d9, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x4d, 0x42, 0x3b,
+0x47, 0x42, 0x3b, 0x10e2, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x10de, 0x10d1, 0x10d0, 0x10d8, 0x10e2, 0x10d8, 0x3b, 0x45, 0x42, 0x42,
0x79, 0x74, 0x65, 0x73, 0xaac, 0xabe, 0xa87, 0xa9f, 0x6b, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x42, 0x20, 0x7b, 0x30,
0x7d, 0x3b, 0x47, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20, 0x7b,
0x30, 0x7d, 0x3b, 0x45, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x4b, 0x69, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x69, 0x42,
@@ -3092,32 +3090,30 @@ static const char16_t byte_unit_data[] = {
0x631, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x43a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x413, 0x411,
0x3b, 0x422, 0x411, 0x3b, 0x41f, 0x411, 0x3b, 0x45, 0x42, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42,
0x3b, 0x92a, 0x93f, 0x91f, 0x93e, 0x3b, 0x45, 0x42, 0x42, 0x61, 0x69, 0x74, 0x2d, 0x64, 0x1eb9, 0x6d, 0xb2c, 0xb3e, 0xb07, 0xb1f,
-0xb4d, 0x628, 0x627, 0x64a, 0x67c, 0x633, 0x3c, 0x4c, 0x52, 0x4d, 0x3e, 0x6b, 0x42, 0x3b, 0x3c, 0x4c, 0x52, 0x4d, 0x3e, 0x4d,
-0x42, 0x3b, 0x3c, 0x4c, 0x52, 0x4d, 0x3e, 0x47, 0x42, 0x3b, 0x3c, 0x4c, 0x52, 0x4d, 0x3e, 0x54, 0x42, 0x3b, 0x3c, 0x4c,
-0x52, 0x4d, 0x3e, 0x50, 0x42, 0x3b, 0x45, 0x42, 0xa2c, 0xa3e, 0xa07, 0xa1f, 0x62, 0x79, 0x21b, 0x69, 0x431, 0x430, 0x430, 0x439,
-0x442, 0x43a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x431, 0x430,
-0x458, 0x442, 0x43e, 0x432, 0x438, 0x628, 0x627, 0x626, 0x64a, 0x67d, 0x632, 0x6aa, 0x644, 0x648, 0x20, 0x628, 0x627, 0x626, 0x64a, 0x67d,
-0x632, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0xdb6, 0xdba, 0xdd2, 0xda7,
-0xdca, 0xd9a, 0xdd2, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xdb8, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xd9c, 0xdd2, 0xdb6,
-0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xda7, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xdb4, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d,
-0x3b, 0x45, 0x42, 0x62, 0x65, 0x79, 0x74, 0x69, 0x73, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42,
-0x3b, 0x42, 0x42, 0x3b, 0x45, 0x42, 0x6b, 0x69, 0x6c, 0x6f, 0x62, 0x61, 0x69, 0x74, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x3b,
-0x4d, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x74, 0x65, 0x72, 0x61, 0x62, 0x61,
-0x69, 0x74, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45, 0x42, 0xbaa, 0xbc8, 0xb9f,
-0xbcd, 0xb95, 0xbb3, 0xbcd, 0xc2c, 0xc48, 0xc1f, 0xc4d, 0x200c, 0xc32, 0xc41, 0xc15, 0xc47, 0xc2c, 0xc40, 0x3b, 0xc0e, 0xc2e, 0xc4d, 0x200c,
-0xc2c, 0xc3f, 0x3b, 0xc1c, 0xc40, 0xc2c, 0xc40, 0x3b, 0xc1f, 0xc40, 0xc2c, 0xc40, 0x3b, 0xc2a, 0xc40, 0xc2c, 0xc40, 0x3b, 0x45, 0x42,
-0xe44, 0xe1a, 0xe15, 0xe4c, 0x70, 0x61, 0x69, 0x74, 0x69, 0x6b, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d,
-0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54,
-0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45,
-0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x4b, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d,
-0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d,
-0x3b, 0x54, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b,
-0x30, 0x7d, 0x3b, 0x45, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x62, 0x61, 0xfd, 0x74, 0x431, 0x430, 0x439,
-0x442, 0x438, 0x62, 0x79, 0x74, 0x65, 0x79, 0x628, 0x627, 0x626, 0x679, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b,
-0x54, 0x42, 0x3b, 0x67e, 0x6cc, 0x20, 0x628, 0x6cc, 0x3b, 0x45, 0x42, 0x62, 0x65, 0x69, 0x74, 0x69, 0x61, 0x75, 0xe0, 0x77,
-0x1ecd, 0x301, 0x6e, 0x20, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x6b, 0xe9, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x3b, 0x4d, 0x42, 0x3b,
-0x6a, 0xed, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x3b, 0x54, 0xed, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x3b, 0x50, 0xed, 0x62, 0xe1,
-0xec, 0x74, 0xec, 0x3b, 0x45, 0x42, 0xe0, 0x77, 0x254, 0x301, 0x6e, 0x20, 0x62, 0xe1, 0xec, 0x74, 0xec
+0xb4d, 0x628, 0x627, 0x64a, 0x67c, 0x633, 0xa2c, 0xa3e, 0xa07, 0xa1f, 0x62, 0x79, 0x21b, 0x69, 0x431, 0x430, 0x430, 0x439, 0x442, 0x43a,
+0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x431, 0x430, 0x458, 0x442,
+0x43e, 0x432, 0x438, 0x628, 0x627, 0x626, 0x64a, 0x67d, 0x632, 0x6aa, 0x644, 0x648, 0x20, 0x628, 0x627, 0x626, 0x64a, 0x67d, 0x632, 0x3b,
+0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0xdb6, 0xdba, 0xdd2, 0xda7, 0xdca, 0xd9a,
+0xdd2, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xdb8, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xd9c, 0xdd2, 0xdb6, 0x20, 0x7b,
+0x30, 0x7d, 0x3b, 0xda7, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0xdb4, 0xdd9, 0xdb6, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45,
+0x42, 0x62, 0x65, 0x79, 0x74, 0x69, 0x73, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x42,
+0x42, 0x3b, 0x45, 0x42, 0x6b, 0x69, 0x6c, 0x6f, 0x62, 0x61, 0x69, 0x74, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x42,
+0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x74, 0x65, 0x72, 0x61, 0x62, 0x61, 0x69, 0x74,
+0x69, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45, 0x42, 0xbaa, 0xbc8, 0xb9f, 0xbcd, 0xb95,
+0xbb3, 0xbcd, 0xc2c, 0xc48, 0xc1f, 0xc4d, 0x200c, 0xc32, 0xc41, 0xc15, 0xc47, 0xc2c, 0xc40, 0x3b, 0xc0e, 0xc2e, 0xc4d, 0x200c, 0xc2c, 0xc3f,
+0x3b, 0xc1c, 0xc40, 0xc2c, 0xc40, 0x3b, 0xc1f, 0xc40, 0xc2c, 0xc40, 0x3b, 0xc2a, 0xc40, 0xc2c, 0xc40, 0x3b, 0x45, 0x42, 0xe44, 0xe1a,
+0xe15, 0xe4c, 0x70, 0x61, 0x69, 0x74, 0x69, 0x6b, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x42, 0x20,
+0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54, 0x42, 0x20,
+0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x45, 0x42, 0x20,
+0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x4b, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x4d, 0x69, 0x42,
+0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x47, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x54,
+0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x3b, 0x50, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d,
+0x3b, 0x45, 0x69, 0x42, 0x20, 0x2bb, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x62, 0x61, 0xfd, 0x74, 0x431, 0x430, 0x439, 0x442, 0x438,
+0x62, 0x79, 0x74, 0x65, 0x79, 0x628, 0x627, 0x626, 0x679, 0x6b, 0x42, 0x3b, 0x4d, 0x42, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42,
+0x3b, 0x67e, 0x6cc, 0x20, 0x628, 0x6cc, 0x3b, 0x45, 0x42, 0x62, 0x65, 0x69, 0x74, 0x69, 0x61, 0x75, 0xe0, 0x77, 0x1ecd, 0x301,
+0x6e, 0x20, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x6b, 0xe9, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x3b, 0x4d, 0x42, 0x3b, 0x6a, 0xed,
+0x62, 0xe1, 0xec, 0x74, 0xec, 0x3b, 0x54, 0xed, 0x62, 0xe1, 0xec, 0x74, 0xec, 0x3b, 0x50, 0xed, 0x62, 0xe1, 0xec, 0x74,
+0xec, 0x3b, 0x45, 0x42, 0xe0, 0x77, 0x254, 0x301, 0x6e, 0x20, 0x62, 0xe1, 0xec, 0x74, 0xec
};
static const char16_t am_data[] = {
@@ -3218,18 +3214,18 @@ static const char16_t currency_symbol_data[] = {
0x200f, 0x62f, 0x2e, 0x644, 0x2e, 0x200f, 0x623, 0x2e, 0x645, 0x2e, 0x62f, 0x2e, 0x645, 0x2e, 0x200f, 0x631, 0x2e, 0x639, 0x2e, 0x200f,
0x631, 0x2e, 0x642, 0x2e, 0x200f, 0x631, 0x2e, 0x633, 0x2e, 0x200f, 0x53, 0xa3, 0x62c, 0x2e, 0x633, 0x2e, 0x644, 0x2e, 0x633, 0x2e,
0x200f, 0x62f, 0x2e, 0x62a, 0x2e, 0x200f, 0x62f, 0x2e, 0x625, 0x2e, 0x200f, 0x631, 0x2e, 0x64a, 0x2e, 0x200f, 0x58f, 0x20b9, 0x54, 0x53,
-0x68, 0x20a6, 0x20bc, 0x9f3, 0x20bd, 0x42, 0x72, 0x4b, 0x4b, 0x4d, 0x41a, 0x41c, 0x43b, 0x432, 0x2e, 0x48, 0x4b, 0x24, 0xffe5, 0x20b1,
-0x55, 0x53, 0x24, 0x55, 0x53, 0x68, 0xa5, 0x4d, 0x4f, 0x50, 0x24, 0x48, 0x52, 0x4b, 0x4b, 0x10d, 0x6b, 0x72, 0x2e, 0x41,
-0x66, 0x6c, 0x2e, 0x4e, 0x41, 0x66, 0x2e, 0x4e, 0x75, 0x2e, 0x4b, 0x73, 0x68, 0x46, 0x42, 0x75, 0x45, 0x44, 0x41, 0x72,
-0x4d, 0x4b, 0x52, 0x4d, 0x52, 0x73, 0x52, 0x46, 0x57, 0x53, 0x24, 0x53, 0x52, 0x54, 0x24, 0x41, 0x45, 0x44, 0x56, 0x54,
-0x24, 0xa0, 0x43, 0x41, 0x46, 0x43, 0x46, 0x50, 0x46, 0x47, 0x55, 0x4d, 0x4d, 0x41, 0x44, 0x43, 0x48, 0x46, 0x4c, 0x53,
-0x44, 0x54, 0xd83a, 0xdd05, 0xd83a, 0xdd0a, 0xd83a, 0xdd00, 0xd83a, 0xdd0a, 0xd83a, 0xdd05, 0xd83a, 0xdd0a, 0xd83a, 0xdd00, 0x20be, 0x20b2, 0x46, 0x74,
-0x49, 0x53, 0x4b, 0x52, 0x70, 0x43, 0x41, 0x24, 0x200b, 0x20b8, 0x17db, 0x51, 0x20a9, 0x4b, 0x50, 0x57, 0x20ba, 0x441, 0x43e, 0x43c,
-0x20ad, 0x4b, 0x7a, 0x434, 0x435, 0x43d, 0x2e, 0x4d, 0x54, 0x6e, 0x49, 0x52, 0x52, 0x20ae, 0x43, 0x4e, 0xa5, 0x928, 0x947, 0x930,
-0x942, 0x60b, 0x631, 0x6cc, 0x627, 0x644, 0x7a, 0x142, 0x44, 0x62, 0x53, 0x2f, 0x42, 0x73, 0x52, 0x4f, 0x4e, 0x20b4, 0x52, 0x53,
-0x44, 0xdbb, 0xdd4, 0x2e, 0x20a1, 0x52, 0x44, 0x24, 0x43, 0x24, 0x42, 0x2f, 0x2e, 0x47, 0x73, 0x2e, 0x42, 0x73, 0x2e, 0x53,
-0x20ab, 0x441, 0x43e, 0x43c, 0x2e, 0x52, 0x73, 0x2e, 0x4e, 0x54, 0x24, 0xe3f, 0x54, 0x4d, 0x54, 0x73, 0x6f, 0x2bb, 0x6d, 0x441,
-0x45e, 0x43c
+0x68, 0x20a6, 0x20bc, 0x46, 0x202f, 0x43, 0x46, 0x41, 0x9f3, 0x20bd, 0x42, 0x72, 0x4b, 0x4b, 0x4d, 0x41a, 0x41c, 0x43b, 0x432, 0x2e,
+0x48, 0x4b, 0x24, 0xffe5, 0x20b1, 0x55, 0x53, 0x24, 0x55, 0x53, 0x68, 0xa5, 0x4d, 0x4f, 0x50, 0x24, 0x48, 0x52, 0x4b, 0x4b,
+0x10d, 0x6b, 0x72, 0x2e, 0x41, 0x66, 0x6c, 0x2e, 0x4e, 0x41, 0x66, 0x2e, 0x4e, 0x75, 0x2e, 0x4b, 0x73, 0x68, 0x46, 0x42,
+0x75, 0x45, 0x44, 0x41, 0x72, 0x4d, 0x4b, 0x52, 0x4d, 0x52, 0x73, 0x52, 0x46, 0x57, 0x53, 0x24, 0x53, 0x52, 0x54, 0x24,
+0x41, 0x45, 0x44, 0x56, 0x54, 0x24, 0xa0, 0x43, 0x41, 0x46, 0x43, 0x46, 0x50, 0x46, 0x47, 0x55, 0x4d, 0x4d, 0x41, 0x44,
+0x43, 0x48, 0x46, 0x4c, 0x53, 0x44, 0x54, 0xd83a, 0xdd05, 0xd83a, 0xdd0a, 0xd83a, 0xdd00, 0xd83a, 0xdd0a, 0xd83a, 0xdd05, 0xd83a, 0xdd0a, 0xd83a,
+0xdd00, 0x20be, 0x20b2, 0x46, 0x74, 0x49, 0x53, 0x4b, 0x52, 0x70, 0x43, 0x41, 0x24, 0x200b, 0x20b8, 0x17db, 0x51, 0x20a9, 0x4b, 0x50,
+0x57, 0x20ba, 0x441, 0x43e, 0x43c, 0x20ad, 0x4b, 0x7a, 0x434, 0x435, 0x43d, 0x2e, 0x4d, 0x54, 0x6e, 0x49, 0x52, 0x52, 0x20ae, 0x43,
+0x4e, 0xa5, 0x928, 0x947, 0x930, 0x942, 0x60b, 0x631, 0x6cc, 0x627, 0x644, 0x7a, 0x142, 0x44, 0x62, 0x53, 0x2f, 0x42, 0x73, 0x52,
+0x4f, 0x4e, 0x20b4, 0x52, 0x53, 0x44, 0xdbb, 0xdd4, 0x2e, 0x20a1, 0x52, 0x44, 0x24, 0x43, 0x24, 0x42, 0x2f, 0x2e, 0x47, 0x73,
+0x2e, 0x42, 0x73, 0x2e, 0x53, 0x20ab, 0x441, 0x43e, 0x43c, 0x2e, 0x52, 0x73, 0x2e, 0x4e, 0x54, 0x24, 0xe3f, 0x54, 0x4d, 0x54,
+0x73, 0x6f, 0x2bb, 0x6d, 0x441, 0x45e, 0x43c
};
static const char16_t currency_display_name_data[] = {
@@ -3623,7 +3619,7 @@ static const char16_t endonyms_data[] = {
0x67, 0x6c, 0x69, 0x73, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4b, 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x55,
0x2e, 0x53, 0x2e, 0x20, 0x4f, 0x75, 0x74, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73,
0x55, 0x2e, 0x53, 0x2e, 0x20, 0x56, 0x69, 0x72, 0x67, 0x69, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x56,
-0x61, 0x6e, 0x75, 0x61, 0x74, 0x75, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x5a, 0x69, 0x6d, 0x62, 0x61, 0x62, 0x77, 0x65, 0x65,
+0x61, 0x6e, 0x75, 0x61, 0x74, 0x75, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x5a, 0x69, 0x6d, 0x62, 0x61, 0x62, 0x77, 0x65, 0x65,
0x73, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x74, 0x6f, 0x4d, 0x6f, 0x6e, 0x64, 0x6f, 0x65, 0x65, 0x73, 0x74, 0x69, 0x45, 0x65,
0x73, 0x74, 0x69, 0x45, 0x28b, 0x65, 0x67, 0x62, 0x65, 0x47, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x6e, 0x75, 0x74, 0x6f, 0x6d,
0x65, 0x54, 0x6f, 0x67, 0x6f, 0x20, 0x6e, 0x75, 0x74, 0x6f, 0x6d, 0x65, 0x65, 0x77, 0x6f, 0x6e, 0x64, 0x6f, 0x4b, 0x61,
diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp
index 46d836e9ba..89957e5cb6 100644
--- a/src/corelib/text/qstring.cpp
+++ b/src/corelib/text/qstring.cpp
@@ -100,12 +100,6 @@
QT_BEGIN_NAMESPACE
-template <typename T, typename Cmp = std::less<>>
-static constexpr bool points_into_range(const T *p, const T *b, const T *e, Cmp less = {}) noexcept
-{
- return !less(p, b) && less(p, e);
-}
-
const char16_t QString::_empty = 0;
/*
@@ -2766,13 +2760,17 @@ QString &QString::insert(qsizetype i, QLatin1String str)
return *this;
qsizetype len = str.size();
+ qsizetype difference = 0;
if (Q_UNLIKELY(i > size()))
- resize(i + len, QLatin1Char(' '));
- else
- resize(size() + len);
+ difference = i - size();
+ d.detachAndGrow(Data::GrowsAtEnd, difference + len, nullptr, nullptr);
+ Q_CHECK_PTR(d.data());
+ d->copyAppend(difference, u' ');
+ d.size += len;
::memmove(d.data() + i + len, d.data() + i, (d.size - i - len) * sizeof(QChar));
qt_from_latin1(d.data() + i, s, size_t(len));
+ d.data()[d.size] = u'\0';
return *this;
}
@@ -2793,7 +2791,7 @@ QString& QString::insert(qsizetype i, const QChar *unicode, qsizetype size)
if (i < 0 || size <= 0)
return *this;
- const auto s = reinterpret_cast<const char16_t *>(unicode);
+ const char16_t *s = reinterpret_cast<const char16_t *>(unicode);
// handle this specially, as QArrayDataOps::insert() doesn't handle out of
// bounds positions
@@ -2802,19 +2800,15 @@ QString& QString::insert(qsizetype i, const QChar *unicode, qsizetype size)
// defer a call to free() so that it comes after we copied the data from
// the old memory:
DataPointer detached{}; // construction is free
- if (d->needsDetach() || i + size - d->size > d.freeSpaceAtEnd()) {
- detached = DataPointer::allocateGrow(d, i + size - d->size, Data::GrowsAtEnd);
- Q_CHECK_PTR(detached.data());
- detached->copyAppend(d.constBegin(), d.constEnd());
- d.swap(detached);
- }
+ d.detachAndGrow(Data::GrowsAtEnd, (i - d.size) + size, &s, &detached);
+ Q_CHECK_PTR(d.data());
d->copyAppend(i - d->size, u' ');
d->copyAppend(s, s + size);
d.data()[d.size] = u'\0';
return *this;
}
- if (!d->needsDetach() && points_into_range(s, d.data(), d.data() + d.size))
+ if (!d->needsDetach() && QtPrivate::q_points_into_range(s, d.data(), d.data() + d.size))
return insert(i, QStringView{QVarLengthArray(s, s + size)});
d->insert(i, s, size);
@@ -2863,11 +2857,8 @@ QString &QString::append(const QString &str)
if (!str.isNull()) {
if (isNull()) {
operator=(str);
- } else {
- if (d->needsDetach() || str.size() > d->freeSpaceAtEnd())
- reallocGrowData(str.size());
- d->copyAppend(str.d.data(), str.d.data() + str.d.size);
- d.data()[d.size] = '\0';
+ } else if (str.size()) {
+ append(str.constData(), str.size());
}
}
return *this;
@@ -2882,13 +2873,11 @@ QString &QString::append(const QString &str)
QString &QString::append(const QChar *str, qsizetype len)
{
if (str && len > 0) {
- if (d->needsDetach() || len > d->freeSpaceAtEnd())
- reallocGrowData(len);
static_assert(sizeof(QChar) == sizeof(char16_t), "Unexpected difference in sizes");
// the following should be safe as QChar uses char16_t as underlying data
const char16_t *char16String = reinterpret_cast<const char16_t *>(str);
- d->copyAppend(char16String, char16String + len);
- d.data()[d.size] = '\0';
+ d->growAppend(char16String, char16String + len);
+ d.data()[d.size] = u'\0';
}
return *this;
}
@@ -2901,16 +2890,17 @@ QString &QString::append(const QChar *str, qsizetype len)
QString &QString::append(QLatin1String str)
{
const char *s = str.latin1();
- if (s) {
- qsizetype len = str.size();
- if (d->needsDetach() || str.size() > d->freeSpaceAtEnd())
- reallocGrowData(len);
-
- Q_ASSERT(str.size() <= d->freeSpaceAtEnd());
+ const qsizetype len = str.size();
+ if (s && len > 0) {
+ d.detachAndGrow(Data::GrowsAtEnd, len, nullptr, nullptr);
+ Q_CHECK_PTR(d.data());
+ Q_ASSERT(len <= d->freeSpaceAtEnd());
char16_t *i = d.data() + d.size;
qt_from_latin1(i, s, size_t(len));
d.size += len;
d.data()[d.size] = '\0';
+ } else if (d.isNull() && !str.isNull()) { // special case
+ d = DataPointer::fromRawData(&_empty, 0);
}
return *this;
}
@@ -2948,8 +2938,7 @@ QString &QString::append(QLatin1String str)
*/
QString &QString::append(QChar ch)
{
- if (d->needsDetach() || !d->freeSpaceAtEnd())
- reallocGrowData(1);
+ d.detachAndGrow(QArrayData::GrowsAtEnd, 1, nullptr, nullptr);
d->copyAppend(1, ch.unicode());
d.data()[d.size] = '\0';
return *this;
@@ -3108,7 +3097,7 @@ static void removeStringImpl(QString &s, const T &needle, Qt::CaseSensitivity cs
QString &QString::remove(const QString &str, Qt::CaseSensitivity cs)
{
const auto s = str.d.data();
- if (points_into_range(s, d.data(), d.data() + d.size))
+ if (QtPrivate::q_points_into_range(s, d.data(), d.data() + d.size))
removeStringImpl(*this, QStringView{QVarLengthArray(s, s + str.size())}, cs);
else
removeStringImpl(*this, qToStringViewIgnoringNull(str), cs);
diff --git a/src/corelib/text/qunicodetables.cpp b/src/corelib/text/qunicodetables.cpp
index 0809d338a5..081b3181cc 100644
--- a/src/corelib/text/qunicodetables.cpp
+++ b/src/corelib/text/qunicodetables.cpp
@@ -88,106 +88,21 @@ static const unsigned short uc_property_trie[] = {
14288, 14320, 14352, 14384, 14416, 14448, 14480, 14512,
14544, 14576, 14608, 14640, 14672, 14704, 14736, 14768,
14544, 14544, 14544, 14544, 14800, 14832, 14864, 14896,
- 14928, 14960, 14544, 14992, 15024, 15056, 15088, 15120,
- 15152, 15184, 15216, 15248, 15280, 15312, 15344, 15376,
- 15408, 15408, 15408, 15408, 15408, 15408, 15408, 15408,
- 15440, 15440, 15440, 15440, 15472, 15504, 15536, 15568,
- 15600, 15632, 15440, 15664, 15696, 15728, 15760, 15792,
- 15824, 15856, 15888, 15920, 15952, 15984, 16016, 16048,
- 16080, 16112, 16144, 16176, 16208, 16208, 16208, 16240,
- 16272, 16304, 16336, 16368, 16400, 16432, 16432, 16464,
- 16496, 16528, 16560, 9936, 16592, 16624, 16624, 16656,
- 16688, 16688, 16688, 16688, 16688, 16688, 16720, 16752,
-
- 16784, 16816, 16848, 16880, 16912, 16944, 16976, 17008,
- 17040, 17072, 17104, 17104, 17136, 17168, 17200, 17232,
- 17264, 17296, 17328, 17360, 17296, 17392, 17424, 17456,
- 17488, 17488, 17520, 17552, 17584, 17584, 17616, 17648,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
-
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17680, 17680, 17680,
- 17680, 17680, 17680, 17680, 17680, 17712, 17744, 17744,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
-
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
-
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
-
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
-
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
+ 14928, 14960, 14992, 15024, 15056, 15088, 15120, 15152,
+ 15184, 15216, 15248, 15280, 15312, 15344, 15376, 15408,
+ 15440, 15440, 15440, 15440, 15440, 15440, 15440, 15440,
+ 15472, 15504, 15472, 15472, 15536, 15568, 15600, 15632,
+ 15664, 15696, 15472, 15728, 15760, 15792, 15824, 15856,
+ 15888, 15920, 15952, 15984, 16016, 16048, 16080, 16112,
+ 16144, 16176, 16208, 16240, 16272, 16272, 16272, 16304,
+ 16336, 16368, 16400, 16432, 16464, 16496, 16496, 16528,
+ 16560, 16592, 16624, 9936, 16656, 16688, 16688, 16720,
+ 16752, 16752, 16752, 16752, 16752, 16752, 16784, 16816,
+
+ 16848, 16880, 16912, 16944, 16976, 17008, 17040, 17072,
+ 17104, 17136, 17168, 17168, 17200, 17232, 17264, 17296,
+ 17328, 17360, 17392, 17424, 17456, 17488, 17520, 17552,
+ 17584, 17584, 17616, 17648, 17680, 17680, 17712, 17744,
17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
@@ -214,657 +129,742 @@ static const unsigned short uc_property_trie[] = {
17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17776, 17776, 17776,
- 17776, 17776, 17776, 17776, 17776, 17808, 17840, 17872,
-
- 17904, 17936, 17936, 17936, 17936, 17936, 17936, 17936,
- 17936, 17936, 17936, 17936, 17936, 17936, 17936, 17936,
- 17936, 17936, 17936, 17936, 17936, 17936, 17936, 17936,
- 17936, 17936, 17936, 17936, 17936, 17936, 17936, 17936,
- 17936, 17936, 17936, 17936, 17968, 18000, 18032, 18064,
- 18096, 18096, 18096, 18096, 18096, 18096, 18096, 18096,
- 18128, 18160, 18192, 18224, 18256, 18288, 18288, 18320,
- 18352, 18384, 18416, 18448, 18480, 18512, 18544, 18576,
- 18608, 18640, 18672, 18704, 18736, 18768, 18800, 18832,
- 18864, 18896, 18928, 18960, 18992, 19024, 19056, 19088,
- 19120, 19152, 19184, 19216, 19248, 19280, 19312, 19344,
- 19376, 19408, 19440, 19472, 19504, 19536, 19568, 19600,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
-
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
-
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
-
- 19664, 19696, 19728, 19760, 19792, 19824, 19632, 19664,
- 19696, 19728, 19760, 19792, 19824, 19632, 19664, 19696,
- 19728, 19760, 19792, 19824, 19632, 19664, 19696, 19728,
- 19760, 19792, 19824, 19632, 19664, 19696, 19728, 19760,
- 19792, 19824, 19632, 19664, 19696, 19728, 19760, 19792,
- 19824, 19632, 19664, 19696, 19728, 19760, 19792, 19824,
- 19632, 19664, 19696, 19728, 19760, 19792, 19824, 19632,
- 19664, 19696, 19728, 19760, 19792, 19856, 19888, 19920,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
- 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
-
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
-
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 19984, 19984, 19984, 19984, 19984, 19984, 19984, 19984,
- 20016, 20016, 20016, 20016, 20016, 20016, 20016, 20016,
- 20048, 20080, 20112, 20144, 20176, 20176, 20208, 20240,
- 20272, 20304, 20336, 20368, 20368, 20400, 20432, 20368,
- 20368, 20368, 20368, 20368, 20368, 20368, 20368, 20368,
- 20368, 20464, 20496, 20368, 20528, 20368, 20560, 20592,
- 20624, 20656, 20688, 20720, 20368, 20368, 20368, 20752,
- 20784, 20816, 20848, 20880, 20912, 20944, 20976, 21008,
-
- 21040, 21072, 21104, 9936, 21136, 21136, 21136, 21168,
- 21200, 21232, 21264, 21296, 21328, 21360, 21392, 21424,
- 9936, 9936, 9936, 9936, 21456, 21488, 21520, 21552,
- 21584, 21616, 21648, 21680, 21712, 21744, 21776, 9936,
- 21808, 21840, 21872, 21904, 21936, 21968, 22000, 22032,
- 22064, 22096, 22128, 22160, 9936, 9936, 9936, 9936,
- 22192, 22192, 22192, 22192, 22192, 22192, 22192, 22192,
- 22192, 22224, 22256, 22288, 9936, 9936, 9936, 9936,
- 22320, 22352, 22384, 22416, 22448, 22480, 8432, 22512,
- 22544, 22576, 8432, 8432, 22608, 22640, 22672, 22704,
- 22736, 22768, 22800, 22832, 22864, 8432, 22896, 22928,
- 22960, 22992, 23024, 23056, 23088, 23120, 8432, 8432,
- 23152, 23152, 23184, 8432, 23216, 23248, 23280, 23312,
- 23344, 23376, 8432, 8432, 8432, 8432, 8432, 8432,
- 8432, 8432, 8432, 23408, 23440, 23472, 8432, 8432,
- 23504, 23536, 23568, 8432, 8432, 23600, 23632, 23664,
+ 17776, 17776, 17776, 17776, 17776, 17808, 17840, 17840,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17872, 17872, 17872,
+ 17872, 17872, 17872, 17872, 17872, 17904, 17936, 17968,
+
+ 18000, 18032, 18032, 18032, 18032, 18032, 18032, 18032,
+ 18032, 18032, 18032, 18032, 18032, 18032, 18032, 18032,
+ 18032, 18032, 18032, 18032, 18032, 18032, 18032, 18032,
+ 18032, 18032, 18032, 18032, 18032, 18032, 18032, 18032,
+ 18032, 18032, 18032, 18032, 18064, 18096, 18128, 18160,
+ 18192, 18192, 18192, 18192, 18192, 18192, 18192, 18192,
+ 18224, 18256, 18288, 18320, 18352, 18384, 18384, 18416,
+ 18448, 18480, 18512, 18544, 18576, 18608, 18640, 18672,
+ 18704, 18736, 18768, 18800, 18832, 18864, 18896, 18928,
+ 18960, 18992, 19024, 19056, 19088, 19120, 19152, 19184,
+ 19216, 19248, 19280, 19312, 19344, 19376, 19408, 19440,
+ 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19696,
+ 19728, 19760, 19792, 19824, 19856, 19888, 19920, 19728,
+ 19760, 19792, 19824, 19856, 19888, 19920, 19728, 19760,
+ 19792, 19824, 19856, 19888, 19920, 19728, 19760, 19792,
+ 19824, 19856, 19888, 19920, 19728, 19760, 19792, 19824,
+
+ 19856, 19888, 19920, 19728, 19760, 19792, 19824, 19856,
+ 19888, 19920, 19728, 19760, 19792, 19824, 19856, 19888,
+ 19920, 19728, 19760, 19792, 19824, 19856, 19888, 19920,
+ 19728, 19760, 19792, 19824, 19856, 19888, 19920, 19728,
+ 19760, 19792, 19824, 19856, 19888, 19920, 19728, 19760,
+ 19792, 19824, 19856, 19888, 19920, 19728, 19760, 19792,
+ 19824, 19856, 19888, 19920, 19728, 19760, 19792, 19824,
+ 19856, 19888, 19920, 19728, 19760, 19792, 19824, 19856,
+ 19888, 19920, 19728, 19760, 19792, 19824, 19856, 19888,
+ 19920, 19728, 19760, 19792, 19824, 19856, 19888, 19920,
+ 19728, 19760, 19792, 19824, 19856, 19888, 19920, 19728,
+ 19760, 19792, 19824, 19856, 19888, 19920, 19728, 19760,
+ 19792, 19824, 19856, 19888, 19920, 19728, 19760, 19792,
+ 19824, 19856, 19888, 19920, 19728, 19760, 19792, 19824,
+ 19856, 19888, 19920, 19728, 19760, 19792, 19824, 19856,
+ 19888, 19920, 19728, 19760, 19792, 19824, 19856, 19888,
+
+ 19920, 19728, 19760, 19792, 19824, 19856, 19888, 19920,
+ 19728, 19760, 19792, 19824, 19856, 19888, 19920, 19728,
+ 19760, 19792, 19824, 19856, 19888, 19920, 19728, 19760,
+ 19792, 19824, 19856, 19888, 19920, 19728, 19760, 19792,
+ 19824, 19856, 19888, 19920, 19728, 19760, 19792, 19824,
+ 19856, 19888, 19920, 19728, 19760, 19792, 19824, 19856,
+ 19888, 19920, 19728, 19760, 19792, 19824, 19856, 19888,
+ 19920, 19728, 19760, 19792, 19824, 19856, 19888, 19920,
+ 19728, 19760, 19792, 19824, 19856, 19888, 19920, 19728,
+ 19760, 19792, 19824, 19856, 19888, 19920, 19728, 19760,
+ 19792, 19824, 19856, 19888, 19920, 19728, 19760, 19792,
+ 19824, 19856, 19888, 19920, 19728, 19760, 19792, 19824,
+ 19856, 19888, 19920, 19728, 19760, 19792, 19824, 19856,
+ 19888, 19920, 19728, 19760, 19792, 19824, 19856, 19888,
+ 19920, 19728, 19760, 19792, 19824, 19856, 19888, 19920,
+ 19728, 19760, 19792, 19824, 19856, 19888, 19920, 19728,
+
+ 19760, 19792, 19824, 19856, 19888, 19920, 19728, 19760,
+ 19792, 19824, 19856, 19888, 19920, 19728, 19760, 19792,
+ 19824, 19856, 19888, 19920, 19728, 19760, 19792, 19824,
+ 19856, 19888, 19920, 19728, 19760, 19792, 19824, 19856,
+ 19888, 19920, 19728, 19760, 19792, 19824, 19856, 19888,
+ 19920, 19728, 19760, 19792, 19824, 19856, 19888, 19920,
+ 19728, 19760, 19792, 19824, 19856, 19888, 19920, 19728,
+ 19760, 19792, 19824, 19856, 19888, 19952, 19984, 20016,
+ 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048,
+ 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048,
+ 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048,
+ 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048,
+ 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048,
+ 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048,
+ 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048,
+ 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048,
+
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20080, 20080, 20080, 20080, 20080, 20080, 20080, 20080,
+ 20112, 20112, 20112, 20112, 20112, 20112, 20112, 20112,
+ 20144, 20176, 20208, 20240, 20272, 20272, 20304, 20336,
+ 20368, 20400, 20432, 20464, 20464, 20496, 20528, 20464,
+ 20464, 20464, 20464, 20464, 20464, 20464, 20464, 20464,
+ 20464, 20560, 20592, 20464, 20624, 20464, 20656, 20688,
+ 20720, 20752, 20784, 20816, 20464, 20464, 20464, 20848,
+ 20880, 20912, 20944, 20976, 21008, 21040, 21072, 21104,
+
+ 21136, 21168, 21200, 9936, 21232, 21232, 21232, 21264,
+ 21296, 21328, 21360, 21392, 21424, 21456, 21488, 21520,
+ 9936, 9936, 9936, 9936, 21552, 21584, 21616, 21648,
+ 21680, 21712, 21744, 21776, 21808, 21840, 21872, 9936,
+ 21904, 21936, 21968, 22000, 22032, 22064, 22096, 22128,
+ 22160, 22192, 22224, 22256, 9936, 9936, 9936, 9936,
+ 22288, 22288, 22288, 22288, 22288, 22288, 22288, 22288,
+ 22288, 22320, 22352, 22384, 9936, 9936, 9936, 9936,
+ 22416, 22448, 22480, 22512, 22544, 22576, 8432, 22608,
+ 22640, 22672, 8432, 8432, 22704, 22736, 22768, 22800,
+ 22832, 22864, 22896, 22928, 22960, 8432, 22992, 23024,
+ 23056, 23088, 23120, 23152, 23184, 23216, 8432, 8432,
+ 23248, 23248, 23280, 8432, 23312, 23344, 23376, 23408,
+ 23440, 23472, 8432, 8432, 8432, 8432, 8432, 8432,
+ 8432, 8432, 8432, 23504, 23536, 23568, 8432, 8432,
+ 23600, 23632, 23664, 8432, 8432, 23696, 23728, 23760,
// [0x11000..0x110000)
- 23696, 23952, 24208, 24464, 24720, 24976, 25232, 25488,
- 25744, 26000, 26256, 26512, 26768, 27024, 27280, 27536,
- 27792, 27792, 27792, 28048, 28304, 28560, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 28816, 28816, 29072, 29328, 29584, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 29840, 30096, 30352, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 30608, 30608, 30864, 31120, 26512, 26512, 31376, 31632,
- 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888,
- 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888,
- 31888, 31888, 31888, 31888, 31888, 31888, 31888, 32144,
- 31888, 31888, 32400, 32656, 32912, 33168, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 33424, 33680, 33936, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 34192, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 34448, 34704, 34960, 35216, 35472, 35728, 35984, 36240,
- 36496, 36496, 36752, 26512, 26512, 26512, 26512, 26512,
- 37008, 37264, 37520, 26512, 26512, 26512, 26512, 26512,
- 37776, 38032, 38288, 38288, 38544, 38800, 39056, 38288,
- 39312, 39568, 39824, 40080, 40336, 40592, 40848, 41104,
- 41360, 41616, 41872, 42128, 42384, 42384, 42384, 42640,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
-
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 42896, 42896,
- 42896, 42896, 42896, 42896, 42896, 42896, 43152, 43408,
- 43408, 43408, 43408, 43408, 43408, 43408, 43408, 43408,
- 43408, 43408, 43408, 43408, 43408, 43408, 43408, 43664,
- 43920, 44176, 44176, 44176, 44176, 44176, 44176, 44176,
- 44176, 44176, 44176, 44176, 44176, 44176, 44176, 44176,
- 44176, 44176, 44176, 44176, 44176, 44176, 44432, 44688,
- 44688, 44688, 44688, 44688, 44688, 44688, 44688, 44688,
- 44688, 44688, 44688, 44688, 44688, 44688, 44688, 44688,
- 44688, 44688, 44688, 44688, 44688, 44688, 44688, 44688,
- 44688, 44688, 44688, 44944, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 45200, 45200, 45456, 42384, 42384, 42384, 42384, 42640,
- 45712, 45712, 45712, 45712, 45712, 45712, 45712, 45712,
- 45712, 45712, 45712, 45712, 45712, 45712, 45712, 45712,
- 45712, 45712, 45712, 45968, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
-
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42384,
- 42384, 42384, 42384, 42384, 42384, 42384, 42384, 42640,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 46480, 46736, 46992, 46992, 46992, 46992, 46992, 46992,
- 46992, 46992, 46992, 46992, 46992, 46992, 46992, 46992,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
-
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 26512,
- 26512, 26512, 26512, 26512, 26512, 26512, 26512, 46224,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
-
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47504,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
-
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47248,
- 47248, 47248, 47248, 47248, 47248, 47248, 47248, 47504,
+ 23792, 24048, 24304, 24560, 24816, 25072, 25328, 25584,
+ 25840, 26096, 26352, 26608, 26864, 27120, 27376, 27632,
+ 27888, 27888, 27888, 28144, 28400, 28656, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 28912, 28912, 29168, 29424, 29680, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 29936, 30192, 30448, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 30704, 30704, 30960, 31216, 26608, 26608, 31472, 31728,
+ 31984, 31984, 31984, 31984, 31984, 31984, 31984, 31984,
+ 31984, 31984, 31984, 31984, 31984, 31984, 31984, 31984,
+ 31984, 31984, 31984, 31984, 31984, 31984, 31984, 32240,
+ 31984, 31984, 32496, 32752, 33008, 33264, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 33520, 33776, 34032, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 34288, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 34544, 34800, 35056, 35312, 35568, 35824, 36080, 36336,
+ 36592, 36592, 36848, 26608, 26608, 26608, 26608, 26608,
+ 37104, 37360, 37616, 26608, 26608, 26608, 26608, 26608,
+ 37872, 38128, 38384, 38384, 38640, 38896, 39152, 38384,
+ 39408, 39664, 39920, 40176, 40432, 40688, 40944, 41200,
+ 41456, 41712, 41968, 42224, 42480, 42480, 42480, 42736,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 42992, 42992,
+ 42992, 42992, 42992, 42992, 42992, 42992, 43248, 43504,
+ 43504, 43504, 43504, 43504, 43504, 43504, 43504, 43504,
+ 43504, 43504, 43504, 43504, 43504, 43504, 43504, 43760,
+ 44016, 44272, 44272, 44272, 44272, 44272, 44272, 44272,
+ 44272, 44272, 44272, 44272, 44272, 44272, 44272, 44272,
+ 44272, 44272, 44272, 44272, 44272, 44272, 44528, 44784,
+ 44784, 44784, 44784, 44784, 44784, 44784, 44784, 44784,
+ 44784, 44784, 44784, 44784, 44784, 44784, 44784, 44784,
+ 44784, 44784, 44784, 44784, 44784, 44784, 44784, 44784,
+ 44784, 44784, 44784, 45040, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45552, 45552, 45808, 45296, 45296, 45296, 45296, 46064,
+ 46320, 46320, 46320, 46320, 46320, 46320, 46320, 46320,
+ 46320, 46320, 46320, 46320, 46320, 46320, 46320, 46320,
+ 46320, 46320, 46320, 46576, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 45296,
+ 45296, 45296, 45296, 45296, 45296, 45296, 45296, 46064,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 47088, 47344, 47600, 47600, 47600, 47600, 47600, 47600,
+ 47600, 47600, 47600, 47600, 47600, 47600, 47600, 47600,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 26608,
+ 26608, 26608, 26608, 26608, 26608, 26608, 26608, 46832,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 48112,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 47856,
+ 47856, 47856, 47856, 47856, 47856, 47856, 47856, 48112,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -893,1829 +893,1779 @@ static const unsigned short uc_property_trie[] = {
0, 0, 0, 0, 0, 0, 0, 0,
48, 49, 50, 12, 12, 12, 51, 14,
- 52, 51, 53, 54, 36, 55, 51, 52,
- 56, 57, 58, 59, 60, 61, 14, 62,
- 52, 63, 53, 64, 65, 65, 65, 49,
-
- 66, 66, 66, 66, 66, 66, 38, 66,
- 66, 66, 66, 66, 66, 66, 66, 66,
- 38, 66, 66, 66, 66, 66, 66, 36,
- 38, 66, 66, 66, 66, 66, 38, 67,
-
- 68, 68, 68, 68, 68, 68, 44, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 44, 68, 68, 68, 68, 68, 68, 36,
- 44, 68, 68, 68, 68, 68, 44, 69,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 72, 73, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
-
- 70, 71, 70, 71, 70, 71, 72, 73,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 74, 75, 76, 77, 70, 71, 70, 71,
- 78, 70, 71, 70, 71, 70, 71, 76,
-
- 77, 72, 73, 70, 71, 70, 71, 70,
- 71, 79, 72, 73, 70, 71, 70, 71,
- 70, 71, 72, 73, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
-
- 70, 71, 70, 71, 70, 71, 72, 73,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 80, 70, 71, 70, 71, 70, 71, 81,
-
- 82, 83, 72, 73, 72, 73, 84, 72,
- 73, 85, 85, 72, 73, 78, 86, 87,
- 88, 72, 73, 85, 89, 90, 91, 92,
- 72, 73, 93, 78, 91, 94, 95, 96,
-
- 70, 71, 72, 73, 72, 73, 97, 72,
- 73, 97, 78, 78, 72, 73, 97, 70,
- 71, 98, 98, 72, 73, 72, 73, 99,
- 72, 73, 78, 100, 72, 73, 78, 101,
-
- 100, 100, 100, 100, 102, 103, 104, 102,
- 103, 104, 102, 103, 104, 70, 71, 70,
- 71, 70, 71, 70, 71, 70, 71, 70,
- 71, 70, 71, 70, 71, 105, 70, 71,
-
- 70, 71, 70, 71, 72, 73, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 106, 102, 103, 104, 70, 71, 107, 108,
- 109, 110, 70, 71, 70, 71, 70, 71,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 109, 110, 109, 110, 111, 112, 109, 110,
-
- 113, 114, 111, 112, 111, 112, 109, 110,
- 109, 110, 109, 110, 109, 110, 109, 110,
- 109, 110, 109, 110, 114, 114, 114, 115,
- 115, 115, 116, 117, 118, 119, 120, 121,
-
- 122, 117, 123, 124, 125, 126, 127, 123,
- 127, 123, 127, 123, 127, 123, 127, 123,
- 128, 129, 130, 131, 132, 78, 133, 133,
- 78, 134, 78, 135, 136, 78, 78, 78,
-
- 133, 137, 78, 138, 78, 139, 140, 78,
- 141, 142, 143, 144, 145, 78, 78, 142,
- 78, 146, 147, 78, 78, 148, 78, 78,
- 78, 78, 78, 78, 78, 149, 78, 78,
-
- 150, 78, 151, 150, 78, 78, 78, 152,
- 150, 153, 154, 154, 155, 78, 78, 78,
- 78, 78, 156, 78, 100, 78, 78, 78,
- 78, 78, 78, 78, 78, 157, 158, 78,
-
- 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 159, 159, 159, 159, 159, 114, 114,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 161, 161, 162, 162, 162, 162, 162,
-
- 163, 163, 164, 164, 164, 164, 161, 161,
- 165, 161, 161, 161, 165, 161, 161, 161,
- 162, 162, 164, 164, 164, 164, 164, 164,
- 52, 52, 52, 52, 52, 52, 164, 166,
-
- 160, 160, 160, 160, 160, 164, 164, 164,
- 164, 164, 167, 167, 168, 169, 170, 171,
- 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171,
-
- 172, 172, 172, 172, 172, 173, 172, 172,
- 172, 172, 172, 172, 172, 173, 173, 172,
- 173, 172, 173, 172, 172, 174, 175, 175,
- 175, 175, 174, 176, 175, 175, 175, 175,
-
- 175, 177, 177, 178, 178, 178, 178, 179,
- 179, 175, 175, 175, 175, 178, 178, 175,
- 178, 178, 175, 175, 180, 180, 180, 180,
- 181, 175, 175, 175, 175, 173, 173, 173,
-
- 182, 182, 172, 182, 182, 183, 184, 185,
- 185, 185, 184, 184, 184, 185, 185, 186,
- 187, 187, 187, 188, 188, 188, 188, 187,
- 189, 190, 190, 191, 192, 193, 193, 194,
-
- 195, 195, 196, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 198, 199, 198, 199, 200, 201, 198, 199,
- 202, 202, 203, 204, 204, 204, 205, 206,
-
- 202, 202, 202, 202, 207, 208, 209, 210,
- 211, 211, 211, 202, 212, 202, 213, 213,
- 214, 215, 215, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 215, 215, 215,
-
- 215, 215, 202, 215, 215, 215, 215, 215,
- 215, 215, 216, 216, 217, 218, 218, 218,
- 219, 220, 220, 220, 220, 220, 220, 220,
- 220, 220, 220, 220, 220, 220, 220, 220,
-
- 220, 220, 221, 220, 220, 220, 220, 220,
- 220, 220, 222, 222, 223, 224, 224, 225,
- 226, 227, 228, 229, 229, 230, 231, 232,
- 233, 234, 235, 236, 235, 236, 235, 236,
-
- 235, 236, 237, 238, 237, 238, 237, 238,
- 237, 238, 237, 238, 237, 238, 237, 238,
- 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 246, 247, 249, 250, 250, 250,
-
- 251, 252, 253, 252, 253, 253, 253, 252,
- 253, 253, 253, 253, 252, 251, 252, 253,
- 254, 254, 254, 254, 254, 254, 254, 254,
- 254, 255, 254, 254, 254, 254, 254, 254,
-
- 254, 254, 254, 254, 254, 254, 254, 254,
- 254, 254, 254, 254, 254, 254, 254, 254,
- 256, 256, 256, 256, 256, 256, 256, 256,
- 256, 257, 256, 256, 256, 256, 256, 256,
-
- 256, 256, 256, 256, 256, 256, 256, 256,
- 256, 256, 256, 256, 256, 256, 256, 256,
- 258, 259, 260, 259, 260, 260, 260, 259,
- 260, 260, 260, 260, 259, 258, 259, 260,
-
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 263, 264,
- 261, 262, 261, 262, 261, 262, 261, 262,
-
- 261, 262, 265, 266, 266, 173, 173, 267,
- 268, 268, 269, 270, 271, 272, 271, 272,
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
-
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
- 261, 262, 261, 262, 261, 262, 261, 262,
-
- 273, 263, 264, 261, 262, 269, 270, 261,
- 262, 269, 270, 261, 262, 269, 270, 274,
- 263, 264, 263, 264, 261, 262, 263, 264,
- 261, 262, 263, 264, 263, 264, 263, 264,
-
- 261, 262, 263, 264, 263, 264, 263, 264,
- 261, 262, 263, 264, 275, 276, 263, 264,
- 263, 264, 263, 264, 263, 264, 277, 278,
- 263, 264, 279, 280, 279, 280, 279, 280,
-
- 269, 270, 269, 270, 269, 270, 269, 270,
- 269, 270, 269, 270, 269, 270, 269, 270,
- 279, 280, 279, 280, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
-
- 281, 282, 281, 282, 283, 284, 285, 286,
- 287, 288, 287, 288, 287, 288, 287, 288,
- 202, 289, 289, 289, 289, 289, 289, 289,
- 289, 289, 289, 289, 289, 289, 289, 289,
-
- 289, 289, 289, 289, 289, 289, 289, 289,
- 289, 289, 289, 289, 289, 289, 289, 289,
- 289, 289, 289, 289, 289, 289, 289, 202,
- 202, 290, 291, 291, 291, 292, 291, 293,
-
- 294, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 295, 295, 295, 295, 295,
-
- 295, 295, 295, 295, 295, 295, 295, 296,
- 294, 297, 298, 202, 202, 299, 299, 300,
- 301, 302, 303, 303, 303, 303, 302, 303,
- 303, 303, 304, 302, 303, 303, 303, 303,
-
- 303, 303, 305, 302, 302, 302, 302, 302,
- 303, 303, 302, 303, 303, 304, 306, 303,
- 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, 318, 319, 320, 321, 322,
-
- 323, 324, 325, 323, 303, 305, 326, 327,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 328, 328, 328, 328, 328, 328, 328, 328,
- 328, 328, 328, 328, 328, 328, 328, 328,
-
- 328, 328, 328, 328, 328, 328, 328, 328,
- 328, 328, 328, 301, 301, 301, 301, 329,
- 328, 328, 328, 330, 331, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 332, 332, 332, 332, 333, 334, 335, 335,
- 336, 337, 337, 338, 19, 339, 340, 340,
- 341, 341, 341, 341, 341, 341, 342, 342,
- 343, 344, 345, 346, 347, 348, 349, 350,
-
- 351, 352, 353, 353, 353, 353, 354, 355,
- 356, 355, 356, 356, 356, 356, 356, 355,
- 355, 355, 355, 356, 356, 356, 356, 356,
+ 52, 53, 54, 55, 36, 56, 53, 52,
+ 57, 58, 59, 60, 61, 62, 14, 63,
+ 52, 64, 54, 65, 66, 66, 66, 49,
+
+ 67, 67, 67, 67, 67, 67, 38, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67,
+ 38, 67, 67, 67, 67, 67, 67, 36,
+ 38, 67, 67, 67, 67, 67, 38, 68,
+
+ 69, 69, 69, 69, 69, 69, 44, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 44, 69, 69, 69, 69, 69, 69, 36,
+ 44, 69, 69, 69, 69, 69, 44, 70,
+
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 73, 74, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+
+ 71, 72, 71, 72, 71, 72, 73, 74,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 75, 76, 77, 78, 71, 72, 71, 72,
+ 79, 71, 72, 71, 72, 71, 72, 77,
+
+ 78, 73, 74, 71, 72, 71, 72, 71,
+ 72, 80, 73, 74, 71, 72, 71, 72,
+ 71, 72, 73, 74, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+
+ 71, 72, 71, 72, 71, 72, 73, 74,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 81, 71, 72, 71, 72, 71, 72, 82,
+
+ 83, 84, 73, 74, 73, 74, 85, 73,
+ 74, 86, 86, 73, 74, 79, 87, 88,
+ 89, 73, 74, 86, 90, 91, 92, 93,
+ 73, 74, 94, 79, 92, 95, 96, 97,
+
+ 71, 72, 73, 74, 73, 74, 98, 73,
+ 74, 98, 79, 79, 73, 74, 98, 71,
+ 72, 99, 99, 73, 74, 73, 74, 100,
+ 73, 74, 79, 101, 73, 74, 79, 102,
+
+ 101, 101, 101, 101, 103, 104, 105, 103,
+ 104, 105, 103, 104, 105, 71, 72, 71,
+ 72, 71, 72, 71, 72, 71, 72, 71,
+ 72, 71, 72, 71, 72, 106, 71, 72,
+
+ 71, 72, 71, 72, 73, 74, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 107, 103, 104, 105, 71, 72, 108, 109,
+ 110, 111, 71, 72, 71, 72, 71, 72,
+
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 110, 111, 110, 111, 112, 113, 110, 111,
+
+ 114, 115, 112, 113, 112, 113, 110, 111,
+ 110, 111, 110, 111, 110, 111, 110, 111,
+ 110, 111, 110, 111, 115, 115, 115, 116,
+ 116, 116, 117, 118, 119, 120, 121, 122,
+
+ 123, 118, 124, 125, 126, 127, 128, 124,
+ 128, 124, 128, 124, 128, 124, 128, 124,
+ 129, 130, 131, 132, 133, 79, 134, 134,
+ 79, 135, 79, 136, 137, 79, 79, 79,
+
+ 134, 138, 79, 139, 79, 140, 141, 79,
+ 142, 143, 144, 145, 146, 79, 79, 143,
+ 79, 147, 148, 79, 79, 149, 79, 79,
+ 79, 79, 79, 79, 79, 150, 79, 79,
+
+ 151, 79, 152, 151, 79, 79, 79, 153,
+ 151, 154, 155, 155, 156, 79, 79, 79,
+ 79, 79, 157, 79, 101, 79, 79, 79,
+ 79, 79, 79, 79, 79, 158, 159, 79,
+
+ 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 160, 160, 160, 160, 160, 115, 115,
+ 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 162, 162, 163, 163, 163, 163, 163,
+
+ 164, 164, 165, 165, 165, 165, 162, 162,
+ 166, 162, 162, 162, 166, 162, 162, 162,
+ 163, 163, 165, 165, 165, 165, 165, 165,
+ 52, 52, 52, 52, 52, 52, 165, 167,
+
+ 161, 161, 161, 161, 161, 165, 165, 165,
+ 165, 165, 168, 168, 169, 170, 171, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172,
+
+ 173, 173, 173, 173, 173, 174, 173, 173,
+ 173, 173, 173, 173, 173, 174, 174, 173,
+ 174, 173, 174, 173, 173, 175, 176, 176,
+ 176, 176, 175, 177, 176, 176, 176, 176,
+
+ 176, 178, 178, 179, 179, 179, 179, 180,
+ 180, 176, 176, 176, 176, 179, 179, 176,
+ 179, 179, 176, 176, 181, 181, 181, 181,
+ 182, 176, 176, 176, 176, 174, 174, 174,
+
+ 183, 183, 173, 183, 183, 184, 185, 186,
+ 186, 186, 185, 185, 185, 186, 186, 187,
+ 188, 188, 188, 189, 189, 189, 189, 188,
+ 190, 191, 191, 192, 193, 194, 194, 195,
+
+ 196, 196, 197, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 199, 200, 199, 200, 201, 202, 199, 200,
+ 203, 203, 204, 205, 205, 205, 206, 207,
+
+ 203, 203, 203, 203, 208, 209, 210, 211,
+ 212, 212, 212, 203, 213, 203, 214, 214,
+ 215, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216,
+
+ 216, 216, 203, 216, 216, 216, 216, 216,
+ 216, 216, 217, 217, 218, 219, 219, 219,
+ 220, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221,
+
+ 221, 221, 222, 221, 221, 221, 221, 221,
+ 221, 221, 223, 223, 224, 225, 225, 226,
+ 227, 228, 229, 230, 230, 231, 232, 233,
+ 234, 235, 236, 237, 236, 237, 236, 237,
+
+ 236, 237, 238, 239, 238, 239, 238, 239,
+ 238, 239, 238, 239, 238, 239, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 247, 248, 250, 251, 251, 251,
+
+ 252, 253, 254, 253, 254, 254, 254, 253,
+ 254, 254, 254, 254, 253, 252, 253, 254,
+ 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 256, 255, 255, 255, 255, 255, 255,
+
+ 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255,
+ 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 258, 257, 257, 257, 257, 257, 257,
+
+ 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257,
+ 259, 260, 261, 260, 261, 261, 261, 260,
+ 261, 261, 261, 261, 260, 259, 260, 261,
+
+ 262, 263, 262, 263, 262, 263, 262, 263,
+ 262, 263, 262, 263, 262, 263, 262, 263,
+ 262, 263, 262, 263, 262, 263, 264, 265,
+ 262, 263, 262, 263, 262, 263, 262, 263,
+
+ 262, 263, 266, 267, 267, 174, 174, 268,
+ 269, 269, 270, 271, 272, 273, 272, 273,
+ 262, 263, 262, 263, 262, 263, 262, 263,
+ 262, 263, 262, 263, 262, 263, 262, 263,
+
+ 262, 263, 262, 263, 262, 263, 262, 263,
+ 262, 263, 262, 263, 262, 263, 262, 263,
+ 262, 263, 262, 263, 262, 263, 262, 263,
+ 262, 263, 262, 263, 262, 263, 262, 263,
+
+ 274, 264, 265, 262, 263, 270, 271, 262,
+ 263, 270, 271, 262, 263, 270, 271, 275,
+ 264, 265, 264, 265, 262, 263, 264, 265,
+ 262, 263, 264, 265, 264, 265, 264, 265,
+
+ 262, 263, 264, 265, 264, 265, 264, 265,
+ 262, 263, 264, 265, 276, 277, 264, 265,
+ 264, 265, 264, 265, 264, 265, 278, 279,
+ 264, 265, 280, 281, 280, 281, 280, 281,
+
+ 270, 271, 270, 271, 270, 271, 270, 271,
+ 270, 271, 270, 271, 270, 271, 270, 271,
+ 280, 281, 280, 281, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+
+ 282, 283, 282, 283, 284, 285, 286, 287,
+ 288, 289, 288, 289, 288, 289, 288, 289,
+ 203, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290,
+
+ 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 203,
+ 203, 291, 292, 292, 292, 293, 292, 294,
+
+ 295, 296, 296, 296, 296, 296, 296, 296,
+ 296, 296, 296, 296, 296, 296, 296, 296,
+ 296, 296, 296, 296, 296, 296, 296, 296,
+ 296, 296, 296, 296, 296, 296, 296, 296,
+
+ 296, 296, 296, 296, 296, 296, 296, 297,
+ 295, 298, 299, 203, 203, 300, 300, 301,
+ 302, 303, 304, 304, 304, 304, 303, 304,
+ 304, 304, 305, 303, 304, 304, 304, 304,
+
+ 304, 304, 306, 303, 303, 303, 303, 303,
+ 304, 304, 303, 304, 304, 305, 307, 304,
+ 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, 318, 319, 320, 321, 322, 323,
+
+ 324, 325, 326, 324, 304, 306, 327, 328,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 329, 329, 329, 329, 329, 329, 329, 329,
+ 329, 329, 329, 329, 329, 329, 329, 329,
+
+ 329, 329, 329, 329, 329, 329, 329, 329,
+ 329, 329, 329, 302, 302, 302, 302, 330,
+ 329, 329, 329, 331, 332, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 333, 333, 333, 333, 334, 335, 336, 336,
+ 337, 338, 338, 339, 19, 340, 341, 341,
+ 342, 342, 342, 342, 342, 342, 343, 343,
+ 344, 345, 346, 347, 348, 349, 350, 351,
+
+ 352, 353, 354, 354, 354, 354, 355, 356,
+ 357, 356, 357, 357, 357, 357, 357, 356,
356, 356, 356, 357, 357, 357, 357, 357,
+ 357, 357, 357, 358, 358, 358, 358, 358,
- 358, 356, 356, 356, 356, 356, 356, 356,
- 355, 356, 356, 359, 360, 361, 362, 363,
- 364, 365, 366, 367, 367, 368, 369, 341,
- 341, 370, 370, 370, 371, 370, 370, 372,
+ 359, 357, 357, 357, 357, 357, 357, 357,
+ 356, 357, 357, 360, 361, 362, 363, 364,
+ 365, 366, 367, 368, 368, 369, 370, 342,
+ 342, 371, 371, 371, 372, 371, 371, 373,
- 373, 374, 375, 376, 377, 378, 379, 380,
- 381, 382, 383, 384, 385, 386, 387, 387,
- 388, 355, 355, 355, 352, 389, 389, 389,
- 390, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356,
- 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 355, 355, 355, 355,
- 355, 355, 356, 356, 356, 356, 356, 356,
+ 374, 375, 376, 377, 378, 379, 380, 381,
+ 382, 383, 384, 385, 386, 387, 388, 388,
+ 389, 356, 356, 356, 353, 390, 390, 390,
+ 391, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
356, 356, 356, 356, 356, 356, 356, 356,
356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356,
- 391, 391, 356, 356, 356, 356, 356, 391,
-
- 353, 356, 354, 355, 355, 355, 355, 355,
- 355, 355, 355, 355, 356, 355, 356, 392,
- 356, 356, 355, 353, 393, 355, 394, 394,
- 394, 394, 394, 394, 394, 395, 396, 394,
-
- 394, 394, 394, 397, 394, 398, 398, 394,
- 394, 396, 397, 394, 394, 397, 399, 399,
- 400, 401, 402, 403, 404, 405, 406, 407,
- 408, 409, 391, 391, 391, 410, 410, 411,
-
- 412, 412, 412, 413, 413, 413, 413, 413,
- 413, 413, 413, 413, 413, 413, 348, 414,
- 415, 416, 417, 417, 417, 415, 415, 415,
- 415, 415, 417, 417, 417, 417, 415, 417,
-
- 417, 417, 417, 417, 417, 417, 417, 417,
- 415, 417, 415, 417, 415, 418, 418, 419,
- 420, 421, 420, 420, 421, 420, 420, 421,
- 421, 421, 420, 421, 421, 420, 421, 420,
-
- 420, 420, 421, 420, 421, 420, 421, 420,
- 421, 420, 420, 348, 348, 419, 418, 418,
- 422, 422, 422, 422, 422, 422, 422, 422,
- 422, 423, 423, 423, 422, 422, 422, 422,
-
- 422, 422, 422, 422, 422, 422, 422, 422,
- 422, 422, 422, 423, 423, 422, 357, 357,
- 357, 424, 357, 424, 424, 357, 357, 357,
- 424, 424, 357, 357, 357, 357, 357, 357,
-
- 425, 425, 425, 425, 425, 425, 425, 425,
- 425, 425, 425, 425, 425, 425, 425, 425,
- 425, 425, 425, 425, 425, 425, 425, 425,
- 425, 425, 425, 425, 425, 425, 425, 425,
-
- 425, 425, 425, 425, 425, 425, 426, 426,
+ 356, 356, 357, 357, 357, 357, 357, 357,
+
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 392, 392, 357, 357, 357, 357, 357, 392,
+
+ 354, 357, 355, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 357, 356, 357, 393,
+ 357, 357, 356, 354, 394, 356, 395, 395,
+ 395, 395, 395, 395, 395, 396, 397, 395,
+
+ 395, 395, 395, 398, 395, 399, 399, 395,
+ 395, 397, 398, 395, 395, 398, 400, 400,
+ 401, 402, 403, 404, 405, 406, 407, 408,
+ 409, 410, 392, 392, 392, 411, 411, 412,
+
+ 413, 413, 413, 414, 414, 414, 414, 414,
+ 414, 414, 414, 414, 414, 414, 349, 415,
+ 416, 417, 418, 418, 418, 416, 416, 416,
+ 416, 416, 418, 418, 418, 418, 416, 418,
+
+ 418, 418, 418, 418, 418, 418, 418, 418,
+ 416, 418, 416, 418, 416, 419, 419, 420,
+ 421, 422, 421, 421, 422, 421, 421, 422,
+ 422, 422, 421, 422, 422, 421, 422, 421,
+
+ 421, 421, 422, 421, 422, 421, 422, 421,
+ 422, 421, 421, 349, 349, 420, 419, 419,
+ 423, 423, 423, 423, 423, 423, 423, 423,
+ 423, 424, 424, 424, 423, 423, 423, 423,
+
+ 423, 423, 423, 423, 423, 423, 423, 423,
+ 423, 423, 423, 424, 424, 423, 358, 358,
+ 358, 425, 358, 425, 425, 358, 358, 358,
+ 425, 425, 358, 358, 358, 358, 358, 358,
+
426, 426, 426, 426, 426, 426, 426, 426,
- 426, 427, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
-
- 428, 429, 430, 431, 432, 433, 434, 435,
- 436, 437, 438, 438, 438, 438, 438, 438,
- 438, 438, 438, 438, 438, 438, 438, 438,
- 438, 438, 438, 438, 438, 438, 438, 438,
-
- 438, 438, 438, 438, 438, 438, 438, 438,
- 438, 438, 438, 439, 439, 439, 439, 439,
- 439, 439, 440, 439, 441, 441, 442, 443,
- 444, 445, 446, 301, 301, 447, 448, 448,
-
- 449, 449, 449, 449, 449, 449, 449, 449,
- 449, 449, 449, 449, 449, 449, 449, 449,
- 449, 449, 449, 449, 449, 449, 450, 450,
- 450, 450, 451, 450, 450, 450, 450, 450,
-
- 450, 450, 450, 450, 451, 450, 450, 450,
- 451, 450, 450, 450, 450, 450, 301, 301,
- 452, 452, 452, 452, 452, 452, 452, 453,
- 452, 453, 452, 452, 452, 453, 453, 301,
-
- 454, 455, 455, 455, 455, 455, 454, 454,
- 455, 454, 455, 455, 455, 455, 455, 455,
- 455, 455, 455, 455, 454, 455, 454, 454,
- 454, 456, 456, 456, 301, 301, 457, 301,
-
- 458, 459, 458, 458, 458, 458, 459, 460,
- 458, 460, 460, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 461, 462, 461, 461, 461, 461, 461, 461,
- 461, 461, 463, 463, 463, 464, 465, 462,
- 462, 465, 465, 466, 466, 348, 467, 467,
- 467, 468, 467, 467, 467, 467, 469, 469,
-
- 469, 469, 469, 469, 469, 469, 469, 469,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 470, 471, 471, 471, 471,
- 471, 471, 471, 471, 471, 471, 471, 471,
-
- 471, 471, 472, 473, 474, 474, 475, 474,
- 474, 475, 474, 474, 474, 475, 475, 475,
- 476, 477, 478, 474, 474, 474, 475, 474,
- 474, 475, 475, 474, 474, 474, 474, 479,
-
- 480, 481, 481, 482, 483, 484, 484, 484,
- 484, 484, 484, 484, 484, 484, 484, 484,
- 484, 484, 484, 484, 484, 484, 484, 484,
- 484, 484, 484, 484, 484, 484, 484, 484,
-
- 484, 484, 484, 484, 484, 484, 484, 484,
- 484, 485, 484, 484, 484, 484, 484, 484,
- 484, 485, 484, 484, 485, 484, 484, 484,
- 484, 484, 486, 487, 488, 484, 482, 482,
-
- 482, 481, 481, 481, 481, 481, 481, 481,
- 481, 482, 482, 482, 482, 489, 490, 487,
- 484, 173, 175, 173, 173, 480, 486, 486,
- 491, 491, 491, 491, 491, 491, 491, 491,
-
- 484, 484, 481, 481, 492, 492, 493, 494,
- 495, 496, 497, 498, 499, 500, 501, 502,
- 503, 504, 505, 506, 506, 506, 506, 506,
- 507, 508, 508, 509, 509, 510, 509, 509,
-
- 511, 512, 513, 513, 202, 514, 514, 514,
- 514, 514, 514, 514, 514, 202, 202, 514,
- 514, 202, 202, 514, 514, 514, 514, 514,
- 514, 514, 514, 514, 514, 514, 514, 514,
-
- 514, 514, 514, 514, 514, 514, 514, 514,
- 514, 202, 514, 514, 514, 514, 514, 514,
- 514, 202, 514, 202, 202, 202, 514, 514,
- 514, 514, 202, 202, 515, 516, 517, 513,
-
- 513, 512, 512, 512, 512, 202, 202, 513,
- 513, 202, 202, 518, 518, 519, 520, 202,
- 202, 202, 202, 202, 202, 202, 202, 517,
- 202, 202, 202, 202, 521, 521, 202, 521,
-
- 514, 514, 512, 512, 202, 202, 522, 523,
- 524, 525, 526, 527, 528, 529, 530, 531,
- 514, 514, 532, 532, 533, 533, 533, 533,
- 533, 534, 535, 536, 537, 538, 539, 202,
-
- 202, 540, 541, 542, 202, 543, 543, 543,
- 543, 543, 543, 202, 202, 202, 202, 543,
- 543, 202, 202, 543, 543, 543, 543, 543,
- 543, 543, 543, 543, 543, 543, 543, 543,
-
- 543, 543, 543, 543, 543, 543, 543, 543,
- 543, 202, 543, 543, 543, 543, 543, 543,
- 543, 202, 543, 544, 202, 543, 544, 202,
- 543, 543, 202, 202, 545, 202, 546, 546,
-
- 546, 541, 541, 202, 202, 202, 202, 541,
- 541, 202, 202, 541, 541, 547, 202, 202,
- 202, 548, 202, 202, 202, 202, 202, 202,
- 202, 544, 544, 544, 543, 202, 544, 202,
-
- 202, 202, 202, 202, 202, 202, 549, 550,
- 551, 552, 553, 554, 555, 556, 557, 558,
- 541, 541, 543, 543, 543, 548, 559, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 560, 560, 561, 202, 562, 562, 562,
- 562, 562, 562, 562, 563, 562, 202, 562,
- 562, 562, 202, 562, 562, 562, 562, 562,
- 562, 562, 562, 562, 562, 562, 562, 562,
-
- 562, 562, 562, 562, 562, 562, 562, 562,
- 562, 202, 562, 562, 562, 562, 562, 562,
- 562, 202, 562, 562, 202, 562, 562, 562,
- 562, 562, 202, 202, 564, 562, 561, 561,
-
- 561, 560, 560, 560, 560, 560, 202, 560,
- 560, 561, 202, 561, 561, 565, 202, 202,
- 562, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 562, 563, 566, 566, 202, 202, 567, 568,
- 569, 570, 571, 572, 573, 574, 575, 576,
- 577, 578, 202, 202, 202, 202, 202, 202,
- 202, 579, 580, 580, 580, 580, 580, 580,
-
- 202, 581, 582, 582, 202, 583, 583, 583,
- 583, 583, 583, 583, 583, 202, 202, 583,
- 583, 202, 202, 583, 583, 583, 583, 583,
- 583, 583, 583, 583, 583, 583, 583, 583,
-
- 583, 583, 583, 583, 583, 583, 583, 583,
- 583, 202, 583, 583, 583, 583, 583, 583,
- 583, 202, 583, 583, 202, 584, 583, 583,
- 583, 583, 202, 202, 585, 583, 586, 581,
-
- 582, 581, 581, 581, 587, 202, 202, 582,
- 588, 202, 202, 588, 588, 589, 202, 202,
- 202, 202, 202, 202, 202, 590, 591, 586,
- 202, 202, 202, 202, 592, 592, 202, 583,
-
- 583, 583, 587, 587, 202, 202, 593, 594,
- 595, 596, 597, 598, 599, 600, 601, 602,
- 603, 584, 604, 604, 604, 604, 604, 604,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 605, 606, 202, 606, 606, 606,
- 606, 606, 606, 202, 202, 202, 606, 606,
- 606, 202, 606, 606, 607, 606, 202, 202,
- 202, 606, 606, 202, 606, 202, 606, 606,
-
- 202, 202, 202, 606, 606, 202, 202, 202,
- 606, 606, 606, 202, 202, 202, 606, 606,
- 606, 606, 606, 606, 606, 606, 608, 606,
- 606, 606, 202, 202, 202, 202, 609, 610,
-
- 605, 610, 610, 202, 202, 202, 610, 610,
- 610, 202, 611, 611, 611, 612, 202, 202,
- 613, 202, 202, 202, 202, 202, 202, 609,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 614, 615,
- 616, 617, 618, 619, 620, 621, 622, 623,
- 624, 624, 624, 625, 625, 625, 625, 625,
- 625, 626, 625, 202, 202, 202, 202, 202,
-
- 627, 628, 628, 628, 629, 630, 630, 630,
- 630, 630, 630, 630, 630, 202, 630, 630,
- 630, 202, 630, 630, 630, 630, 630, 630,
- 630, 630, 630, 630, 630, 630, 630, 630,
-
- 630, 630, 630, 630, 630, 630, 630, 630,
- 630, 202, 630, 630, 630, 630, 630, 630,
- 630, 630, 630, 630, 631, 630, 630, 630,
- 630, 630, 202, 202, 202, 632, 633, 633,
-
- 633, 628, 628, 628, 628, 202, 633, 633,
- 634, 202, 633, 633, 633, 635, 202, 202,
- 202, 202, 202, 202, 202, 636, 637, 202,
- 632, 632, 638, 202, 202, 202, 202, 202,
-
- 630, 630, 639, 639, 202, 202, 640, 641,
- 642, 643, 644, 645, 646, 647, 648, 649,
- 202, 202, 202, 202, 202, 202, 202, 650,
- 651, 651, 651, 651, 651, 651, 651, 652,
-
- 653, 654, 655, 655, 656, 657, 657, 657,
- 657, 657, 657, 657, 657, 202, 657, 657,
- 657, 202, 657, 657, 657, 657, 657, 657,
- 657, 657, 657, 657, 657, 657, 657, 657,
-
- 657, 657, 657, 657, 657, 657, 657, 657,
- 657, 202, 657, 657, 657, 657, 657, 657,
- 657, 657, 657, 657, 202, 657, 657, 657,
- 657, 657, 202, 202, 658, 659, 655, 660,
-
- 661, 655, 662, 655, 655, 202, 660, 661,
- 661, 202, 661, 661, 663, 664, 202, 202,
- 202, 202, 202, 202, 202, 662, 662, 202,
- 202, 202, 202, 202, 202, 202, 657, 202,
-
- 657, 657, 665, 665, 202, 202, 666, 667,
- 668, 669, 670, 671, 672, 673, 674, 675,
- 202, 676, 676, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 677, 678, 679, 679, 680, 681, 681, 681,
- 681, 681, 681, 681, 681, 202, 681, 681,
- 681, 202, 681, 681, 681, 681, 681, 681,
- 681, 681, 681, 681, 681, 681, 681, 681,
-
- 681, 681, 681, 681, 681, 681, 681, 681,
- 681, 682, 681, 681, 681, 681, 681, 681,
- 681, 681, 681, 681, 681, 681, 681, 681,
- 681, 681, 682, 683, 683, 684, 685, 679,
-
- 679, 686, 686, 686, 687, 202, 679, 679,
- 679, 202, 688, 688, 688, 689, 690, 691,
- 202, 202, 202, 202, 692, 692, 692, 685,
- 693, 693, 693, 693, 693, 693, 693, 694,
-
- 681, 681, 687, 687, 202, 202, 695, 696,
- 697, 698, 699, 700, 701, 702, 703, 704,
- 705, 705, 705, 705, 705, 705, 693, 693,
- 693, 706, 684, 684, 684, 684, 684, 684,
-
- 202, 707, 708, 708, 202, 709, 709, 709,
- 709, 709, 709, 709, 709, 709, 709, 709,
- 709, 709, 709, 709, 709, 709, 709, 202,
- 202, 202, 709, 709, 709, 709, 709, 709,
-
- 709, 709, 709, 709, 709, 709, 709, 709,
- 709, 709, 709, 709, 709, 709, 709, 709,
- 709, 709, 202, 709, 709, 709, 709, 709,
- 709, 709, 709, 709, 202, 709, 202, 202,
-
- 709, 709, 709, 709, 709, 709, 709, 202,
- 202, 202, 710, 202, 202, 202, 202, 711,
- 708, 708, 712, 712, 712, 202, 712, 202,
- 708, 708, 713, 708, 713, 713, 713, 711,
-
- 202, 202, 202, 202, 202, 202, 714, 715,
- 716, 717, 718, 719, 720, 721, 722, 723,
- 202, 202, 708, 708, 724, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 725, 725, 725, 725, 725, 725, 725,
- 725, 725, 725, 725, 725, 725, 725, 725,
- 725, 725, 725, 725, 725, 725, 725, 725,
- 725, 725, 725, 725, 725, 725, 725, 725,
-
- 725, 725, 725, 725, 725, 725, 725, 725,
- 725, 725, 725, 725, 725, 725, 725, 725,
- 725, 726, 725, 727, 726, 726, 726, 726,
- 728, 728, 729, 202, 202, 202, 202, 12,
-
- 725, 725, 725, 725, 725, 725, 730, 726,
- 731, 731, 731, 731, 726, 726, 726, 732,
- 733, 734, 735, 736, 737, 738, 739, 740,
- 741, 742, 743, 743, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 744, 744, 202, 744, 202, 745, 744,
- 744, 745, 744, 202, 745, 744, 745, 745,
- 745, 745, 745, 745, 744, 744, 744, 744,
- 745, 744, 744, 744, 744, 744, 744, 744,
-
- 745, 744, 744, 744, 202, 744, 202, 744,
- 745, 745, 744, 744, 745, 744, 744, 744,
- 744, 746, 744, 747, 746, 746, 746, 746,
- 748, 748, 749, 746, 746, 744, 202, 202,
-
- 744, 744, 744, 744, 744, 202, 750, 202,
- 751, 751, 751, 751, 746, 746, 202, 202,
- 752, 753, 754, 755, 756, 757, 758, 759,
- 760, 761, 202, 202, 762, 762, 763, 763,
-
- 764, 765, 765, 765, 766, 767, 766, 766,
- 768, 766, 766, 769, 770, 771, 771, 771,
- 771, 771, 768, 772, 771, 772, 772, 772,
- 773, 773, 772, 772, 772, 772, 772, 772,
-
- 774, 775, 776, 777, 778, 779, 780, 781,
- 782, 783, 784, 784, 784, 784, 784, 784,
- 784, 784, 784, 784, 785, 773, 772, 773,
- 772, 786, 787, 788, 787, 788, 789, 789,
-
- 764, 764, 764, 790, 764, 764, 764, 764,
- 202, 764, 764, 764, 764, 790, 764, 764,
- 764, 764, 790, 764, 764, 764, 764, 790,
- 764, 764, 764, 764, 790, 764, 764, 764,
-
- 764, 764, 764, 764, 764, 764, 764, 764,
- 764, 790, 791, 792, 792, 202, 202, 202,
- 202, 793, 794, 795, 796, 795, 795, 797,
- 795, 797, 794, 794, 794, 794, 798, 799,
-
- 794, 795, 800, 800, 801, 769, 800, 800,
- 764, 764, 764, 764, 802, 803, 803, 803,
- 798, 798, 798, 795, 798, 798, 804, 798,
- 202, 798, 798, 798, 798, 795, 798, 798,
-
- 798, 798, 795, 798, 798, 798, 798, 795,
- 798, 798, 798, 798, 795, 798, 804, 804,
- 804, 798, 798, 798, 798, 798, 798, 798,
- 804, 795, 804, 804, 804, 202, 805, 805,
-
- 806, 806, 806, 806, 806, 806, 807, 806,
- 806, 806, 806, 806, 806, 202, 808, 806,
- 809, 809, 810, 811, 812, 813, 813, 813,
- 813, 814, 814, 202, 202, 202, 202, 202,
-
- 815, 815, 815, 815, 815, 815, 815, 815,
- 815, 815, 815, 815, 815, 815, 815, 815,
- 815, 815, 815, 815, 815, 815, 815, 815,
- 815, 815, 815, 815, 815, 815, 815, 815,
-
- 815, 815, 816, 815, 815, 815, 817, 815,
- 816, 815, 815, 818, 819, 820, 821, 820,
- 820, 822, 820, 823, 823, 823, 820, 824,
- 819, 825, 826, 827, 827, 823, 823, 816,
-
- 828, 829, 830, 831, 832, 833, 834, 835,
- 836, 837, 838, 838, 839, 839, 839, 839,
- 815, 815, 815, 815, 815, 815, 822, 822,
- 820, 820, 816, 816, 816, 816, 823, 823,
-
- 823, 816, 818, 818, 818, 816, 816, 818,
- 818, 818, 818, 818, 818, 818, 816, 816,
- 816, 823, 823, 823, 823, 816, 816, 816,
+ 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 426,
+
+ 426, 426, 426, 426, 426, 426, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 427,
+ 427, 428, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+
+ 429, 430, 431, 432, 433, 434, 435, 436,
+ 437, 438, 439, 439, 439, 439, 439, 439,
+ 439, 439, 439, 439, 439, 439, 439, 439,
+ 439, 439, 439, 439, 439, 439, 439, 439,
+
+ 439, 439, 439, 439, 439, 439, 439, 439,
+ 439, 439, 439, 440, 440, 440, 440, 440,
+ 440, 440, 441, 440, 442, 442, 443, 444,
+ 445, 446, 447, 302, 302, 448, 449, 449,
+
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 450, 450, 451, 451,
+ 451, 451, 452, 451, 451, 451, 451, 451,
+
+ 451, 451, 451, 451, 452, 451, 451, 451,
+ 452, 451, 451, 451, 451, 451, 302, 302,
+ 453, 453, 453, 453, 453, 453, 453, 454,
+ 453, 454, 453, 453, 453, 454, 454, 302,
+
+ 455, 456, 456, 456, 456, 456, 455, 455,
+ 456, 455, 456, 456, 456, 456, 456, 456,
+ 456, 456, 456, 456, 455, 456, 455, 455,
+ 455, 457, 457, 457, 302, 302, 458, 302,
+
+ 459, 460, 459, 459, 459, 459, 460, 461,
+ 459, 461, 461, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 462, 463, 462, 462, 462, 462, 462, 462,
+ 462, 462, 464, 464, 464, 465, 466, 463,
+ 463, 466, 466, 467, 467, 349, 468, 468,
+ 468, 469, 468, 468, 468, 468, 470, 470,
+
+ 470, 470, 470, 470, 470, 470, 470, 470,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 471, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472,
+
+ 472, 472, 473, 474, 475, 475, 476, 475,
+ 475, 476, 475, 475, 475, 476, 476, 476,
+ 477, 478, 479, 475, 475, 475, 476, 475,
+ 475, 476, 476, 475, 475, 475, 475, 480,
+
+ 481, 482, 482, 483, 484, 485, 485, 485,
+ 485, 485, 485, 485, 485, 485, 485, 485,
+ 485, 485, 485, 485, 485, 485, 485, 485,
+ 485, 485, 485, 485, 485, 485, 485, 485,
+
+ 485, 485, 485, 485, 485, 485, 485, 485,
+ 485, 486, 485, 485, 485, 485, 485, 485,
+ 485, 486, 485, 485, 486, 485, 485, 485,
+ 485, 485, 487, 488, 489, 485, 483, 483,
+
+ 483, 482, 482, 482, 482, 482, 482, 482,
+ 482, 483, 483, 483, 483, 490, 491, 488,
+ 485, 174, 176, 174, 174, 481, 487, 487,
+ 492, 492, 492, 492, 492, 492, 492, 492,
+
+ 485, 485, 482, 482, 493, 493, 494, 495,
+ 496, 497, 498, 499, 500, 501, 502, 503,
+ 504, 505, 506, 507, 507, 507, 507, 507,
+ 508, 509, 509, 510, 510, 511, 510, 510,
+
+ 512, 513, 514, 514, 203, 515, 515, 515,
+ 515, 515, 515, 515, 515, 203, 203, 515,
+ 515, 203, 203, 515, 515, 515, 515, 515,
+ 515, 515, 515, 515, 515, 515, 515, 515,
+
+ 515, 515, 515, 515, 515, 515, 515, 515,
+ 515, 203, 515, 515, 515, 515, 515, 515,
+ 515, 203, 515, 203, 203, 203, 515, 515,
+ 515, 515, 203, 203, 516, 517, 518, 514,
+
+ 514, 513, 513, 513, 513, 203, 203, 514,
+ 514, 203, 203, 519, 519, 520, 521, 203,
+ 203, 203, 203, 203, 203, 203, 203, 518,
+ 203, 203, 203, 203, 522, 522, 203, 522,
+
+ 515, 515, 513, 513, 203, 203, 523, 524,
+ 525, 526, 527, 528, 529, 530, 531, 532,
+ 515, 515, 533, 533, 534, 534, 534, 534,
+ 534, 535, 536, 537, 538, 539, 540, 203,
+
+ 203, 541, 542, 543, 203, 544, 544, 544,
+ 544, 544, 544, 203, 203, 203, 203, 544,
+ 544, 203, 203, 544, 544, 544, 544, 544,
+ 544, 544, 544, 544, 544, 544, 544, 544,
+
+ 544, 544, 544, 544, 544, 544, 544, 544,
+ 544, 203, 544, 544, 544, 544, 544, 544,
+ 544, 203, 544, 545, 203, 544, 545, 203,
+ 544, 544, 203, 203, 546, 203, 547, 547,
+
+ 547, 542, 542, 203, 203, 203, 203, 542,
+ 542, 203, 203, 542, 542, 548, 203, 203,
+ 203, 549, 203, 203, 203, 203, 203, 203,
+ 203, 545, 545, 545, 544, 203, 545, 203,
+
+ 203, 203, 203, 203, 203, 203, 550, 551,
+ 552, 553, 554, 555, 556, 557, 558, 559,
+ 542, 542, 544, 544, 544, 549, 560, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 561, 561, 562, 203, 563, 563, 563,
+ 563, 563, 563, 563, 564, 563, 203, 563,
+ 563, 563, 203, 563, 563, 563, 563, 563,
+ 563, 563, 563, 563, 563, 563, 563, 563,
+
+ 563, 563, 563, 563, 563, 563, 563, 563,
+ 563, 203, 563, 563, 563, 563, 563, 563,
+ 563, 203, 563, 563, 203, 563, 563, 563,
+ 563, 563, 203, 203, 565, 563, 562, 562,
+
+ 562, 561, 561, 561, 561, 561, 203, 561,
+ 561, 562, 203, 562, 562, 566, 203, 203,
+ 563, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 563, 564, 567, 567, 203, 203, 568, 569,
+ 570, 571, 572, 573, 574, 575, 576, 577,
+ 578, 579, 203, 203, 203, 203, 203, 203,
+ 203, 580, 581, 581, 581, 581, 581, 581,
+
+ 203, 582, 583, 583, 203, 584, 584, 584,
+ 584, 584, 584, 584, 584, 203, 203, 584,
+ 584, 203, 203, 584, 584, 584, 584, 584,
+ 584, 584, 584, 584, 584, 584, 584, 584,
+
+ 584, 584, 584, 584, 584, 584, 584, 584,
+ 584, 203, 584, 584, 584, 584, 584, 584,
+ 584, 203, 584, 584, 203, 585, 584, 584,
+ 584, 584, 203, 203, 586, 584, 587, 582,
+
+ 583, 582, 582, 582, 588, 203, 203, 583,
+ 589, 203, 203, 589, 589, 590, 203, 203,
+ 203, 203, 203, 203, 203, 591, 592, 587,
+ 203, 203, 203, 203, 593, 593, 203, 584,
+
+ 584, 584, 588, 588, 203, 203, 594, 595,
+ 596, 597, 598, 599, 600, 601, 602, 603,
+ 604, 585, 605, 605, 605, 605, 605, 605,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 606, 607, 203, 607, 607, 607,
+ 607, 607, 607, 203, 203, 203, 607, 607,
+ 607, 203, 607, 607, 608, 607, 203, 203,
+ 203, 607, 607, 203, 607, 203, 607, 607,
+
+ 203, 203, 203, 607, 607, 203, 203, 203,
+ 607, 607, 607, 203, 203, 203, 607, 607,
+ 607, 607, 607, 607, 607, 607, 609, 607,
+ 607, 607, 203, 203, 203, 203, 610, 611,
+
+ 606, 611, 611, 203, 203, 203, 611, 611,
+ 611, 203, 612, 612, 612, 613, 203, 203,
+ 614, 203, 203, 203, 203, 203, 203, 610,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 615, 616,
+ 617, 618, 619, 620, 621, 622, 623, 624,
+ 625, 625, 625, 626, 626, 626, 626, 626,
+ 626, 627, 626, 203, 203, 203, 203, 203,
+
+ 628, 629, 629, 629, 630, 631, 631, 631,
+ 631, 631, 631, 631, 631, 203, 631, 631,
+ 631, 203, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631,
+
+ 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 203, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 632, 631, 631, 631,
+ 631, 631, 203, 203, 203, 633, 634, 634,
+
+ 634, 629, 629, 629, 629, 203, 634, 634,
+ 635, 203, 634, 634, 634, 636, 203, 203,
+ 203, 203, 203, 203, 203, 637, 638, 203,
+ 633, 633, 639, 203, 203, 203, 203, 203,
+
+ 631, 631, 640, 640, 203, 203, 641, 642,
+ 643, 644, 645, 646, 647, 648, 649, 650,
+ 203, 203, 203, 203, 203, 203, 203, 651,
+ 652, 652, 652, 652, 652, 652, 652, 653,
+
+ 654, 655, 656, 656, 657, 658, 658, 658,
+ 658, 658, 658, 658, 658, 203, 658, 658,
+ 658, 203, 658, 658, 658, 658, 658, 658,
+ 658, 658, 658, 658, 658, 658, 658, 658,
+
+ 658, 658, 658, 658, 658, 658, 658, 658,
+ 658, 203, 658, 658, 658, 658, 658, 658,
+ 658, 658, 658, 658, 203, 658, 658, 658,
+ 658, 658, 203, 203, 659, 660, 656, 661,
+
+ 662, 656, 663, 656, 656, 203, 661, 662,
+ 662, 203, 662, 662, 664, 665, 203, 203,
+ 203, 203, 203, 203, 203, 663, 663, 203,
+ 203, 203, 203, 203, 203, 203, 658, 203,
+
+ 658, 658, 666, 666, 203, 203, 667, 668,
+ 669, 670, 671, 672, 673, 674, 675, 676,
+ 203, 677, 677, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 678, 679, 680, 680, 681, 682, 682, 682,
+ 682, 682, 682, 682, 682, 203, 682, 682,
+ 682, 203, 682, 682, 682, 682, 682, 682,
+ 682, 682, 682, 682, 682, 682, 682, 682,
+
+ 682, 682, 682, 682, 682, 682, 682, 682,
+ 682, 683, 682, 682, 682, 682, 682, 682,
+ 682, 682, 682, 682, 682, 682, 682, 682,
+ 682, 682, 683, 684, 684, 685, 686, 680,
+
+ 680, 687, 687, 687, 688, 203, 680, 680,
+ 680, 203, 689, 689, 689, 690, 691, 692,
+ 203, 203, 203, 203, 693, 693, 693, 686,
+ 694, 694, 694, 694, 694, 694, 694, 695,
+
+ 682, 682, 688, 688, 203, 203, 696, 697,
+ 698, 699, 700, 701, 702, 703, 704, 705,
+ 706, 706, 706, 706, 706, 706, 694, 694,
+ 694, 707, 685, 685, 685, 685, 685, 685,
+
+ 203, 708, 709, 709, 203, 710, 710, 710,
+ 710, 710, 710, 710, 710, 710, 710, 710,
+ 710, 710, 710, 710, 710, 710, 710, 203,
+ 203, 203, 710, 710, 710, 710, 710, 710,
+
+ 710, 710, 710, 710, 710, 710, 710, 710,
+ 710, 710, 710, 710, 710, 710, 710, 710,
+ 710, 710, 203, 710, 710, 710, 710, 710,
+ 710, 710, 710, 710, 203, 710, 203, 203,
+
+ 710, 710, 710, 710, 710, 710, 710, 203,
+ 203, 203, 711, 203, 203, 203, 203, 712,
+ 709, 709, 713, 713, 713, 203, 713, 203,
+ 709, 709, 714, 709, 714, 714, 714, 712,
+
+ 203, 203, 203, 203, 203, 203, 715, 716,
+ 717, 718, 719, 720, 721, 722, 723, 724,
+ 203, 203, 709, 709, 725, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 726, 726, 726, 726, 726, 726, 726,
+ 726, 726, 726, 726, 726, 726, 726, 726,
+ 726, 726, 726, 726, 726, 726, 726, 726,
+ 726, 726, 726, 726, 726, 726, 726, 726,
+
+ 726, 726, 726, 726, 726, 726, 726, 726,
+ 726, 726, 726, 726, 726, 726, 726, 726,
+ 726, 727, 726, 728, 727, 727, 727, 727,
+ 729, 729, 730, 203, 203, 203, 203, 12,
+
+ 726, 726, 726, 726, 726, 726, 731, 727,
+ 732, 732, 732, 732, 727, 727, 727, 733,
+ 734, 735, 736, 737, 738, 739, 740, 741,
+ 742, 743, 744, 744, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 745, 745, 203, 745, 203, 746, 745,
+ 745, 746, 745, 203, 746, 745, 746, 746,
+ 746, 746, 746, 746, 745, 745, 745, 745,
+ 746, 745, 745, 745, 745, 745, 745, 745,
+
+ 746, 745, 745, 745, 203, 745, 203, 745,
+ 746, 746, 745, 745, 746, 745, 745, 745,
+ 745, 747, 745, 748, 747, 747, 747, 747,
+ 749, 749, 750, 747, 747, 745, 203, 203,
+
+ 745, 745, 745, 745, 745, 203, 751, 203,
+ 752, 752, 752, 752, 747, 747, 203, 203,
+ 753, 754, 755, 756, 757, 758, 759, 760,
+ 761, 762, 203, 203, 763, 763, 764, 764,
+
+ 765, 766, 766, 766, 767, 768, 767, 767,
+ 769, 767, 767, 770, 771, 772, 772, 772,
+ 772, 772, 769, 773, 772, 773, 773, 773,
+ 774, 774, 773, 773, 773, 773, 773, 773,
+
+ 775, 776, 777, 778, 779, 780, 781, 782,
+ 783, 784, 785, 785, 785, 785, 785, 785,
+ 785, 785, 785, 785, 786, 774, 773, 774,
+ 773, 787, 788, 789, 788, 789, 790, 790,
+
+ 765, 765, 765, 791, 765, 765, 765, 765,
+ 203, 765, 765, 765, 765, 791, 765, 765,
+ 765, 765, 791, 765, 765, 765, 765, 791,
+ 765, 765, 765, 765, 791, 765, 765, 765,
+
+ 765, 765, 765, 765, 765, 765, 765, 765,
+ 765, 791, 792, 793, 793, 203, 203, 203,
+ 203, 794, 795, 796, 797, 796, 796, 798,
+ 796, 798, 795, 795, 795, 795, 799, 800,
+
+ 795, 796, 801, 801, 802, 770, 801, 801,
+ 765, 765, 765, 765, 803, 804, 804, 804,
+ 799, 799, 799, 796, 799, 799, 805, 799,
+ 203, 799, 799, 799, 799, 796, 799, 799,
+
+ 799, 799, 796, 799, 799, 799, 799, 796,
+ 799, 799, 799, 799, 796, 799, 805, 805,
+ 805, 799, 799, 799, 799, 799, 799, 799,
+ 805, 796, 805, 805, 805, 203, 806, 806,
+
+ 807, 807, 807, 807, 807, 807, 808, 807,
+ 807, 807, 807, 807, 807, 203, 809, 807,
+ 810, 810, 811, 812, 813, 814, 814, 814,
+ 814, 815, 815, 203, 203, 203, 203, 203,
+
+ 816, 816, 816, 816, 816, 816, 816, 816,
+ 816, 816, 816, 816, 816, 816, 816, 816,
+ 816, 816, 816, 816, 816, 816, 816, 816,
816, 816, 816, 816, 816, 816, 816, 816,
- 816, 816, 823, 818, 827, 823, 823, 818,
- 818, 818, 818, 818, 818, 840, 816, 818,
- 841, 842, 843, 844, 845, 846, 847, 848,
- 849, 850, 851, 851, 851, 852, 853, 853,
-
- 854, 854, 854, 854, 854, 854, 854, 854,
- 854, 854, 854, 854, 854, 854, 854, 854,
- 854, 854, 854, 854, 854, 854, 854, 854,
- 854, 854, 854, 854, 854, 854, 854, 854,
-
- 854, 854, 854, 854, 854, 854, 202, 855,
- 202, 202, 202, 202, 202, 855, 202, 202,
- 856, 856, 856, 856, 856, 856, 856, 856,
- 856, 856, 856, 856, 856, 856, 856, 856,
-
- 856, 856, 856, 856, 856, 856, 856, 856,
- 856, 856, 856, 856, 856, 856, 856, 856,
- 856, 856, 856, 856, 856, 856, 856, 857,
- 857, 858, 858, 859, 860, 861, 861, 861,
-
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
-
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 863, 863, 863, 863, 863, 862,
-
- 864, 865, 865, 865, 865, 865, 865, 865,
- 865, 865, 865, 865, 865, 865, 865, 865,
- 865, 865, 865, 865, 865, 865, 864, 864,
- 864, 864, 864, 864, 864, 864, 864, 864,
+ 816, 816, 817, 816, 816, 816, 818, 816,
+ 817, 816, 816, 819, 820, 821, 822, 821,
+ 821, 823, 821, 824, 824, 824, 821, 825,
+ 820, 826, 827, 828, 828, 824, 824, 817,
+
+ 829, 830, 831, 832, 833, 834, 835, 836,
+ 837, 838, 839, 839, 840, 840, 840, 840,
+ 816, 816, 816, 816, 816, 816, 823, 823,
+ 821, 821, 817, 817, 817, 817, 824, 824,
+
+ 824, 817, 819, 819, 819, 817, 817, 819,
+ 819, 819, 819, 819, 819, 819, 817, 817,
+ 817, 824, 824, 824, 824, 817, 817, 817,
+ 817, 817, 817, 817, 817, 817, 817, 817,
+
+ 817, 817, 824, 819, 828, 824, 824, 819,
+ 819, 819, 819, 819, 819, 841, 817, 819,
+ 842, 843, 844, 845, 846, 847, 848, 849,
+ 850, 851, 852, 852, 852, 853, 854, 854,
+
+ 855, 855, 855, 855, 855, 855, 855, 855,
+ 855, 855, 855, 855, 855, 855, 855, 855,
+ 855, 855, 855, 855, 855, 855, 855, 855,
+ 855, 855, 855, 855, 855, 855, 855, 855,
+
+ 855, 855, 855, 855, 855, 855, 203, 856,
+ 203, 203, 203, 203, 203, 856, 203, 203,
+ 857, 857, 857, 857, 857, 857, 857, 857,
+ 857, 857, 857, 857, 857, 857, 857, 857,
+
+ 857, 857, 857, 857, 857, 857, 857, 857,
+ 857, 857, 857, 857, 857, 857, 857, 857,
+ 857, 857, 857, 857, 857, 857, 857, 858,
+ 858, 859, 859, 860, 861, 862, 862, 862,
- 864, 864, 864, 864, 864, 864, 864, 864,
- 864, 864, 864, 864, 864, 864, 864, 864,
- 864, 864, 864, 864, 864, 864, 864, 864,
- 864, 864, 864, 864, 864, 864, 864, 864,
+ 863, 863, 863, 863, 863, 863, 863, 863,
+ 863, 863, 863, 863, 863, 863, 863, 863,
+ 863, 863, 863, 863, 863, 863, 863, 863,
+ 863, 863, 863, 863, 863, 863, 863, 863,
- 864, 864, 864, 866, 866, 866, 866, 866,
- 867, 867, 867, 867, 867, 867, 867, 867,
- 867, 867, 867, 867, 867, 867, 867, 867,
- 867, 867, 867, 867, 867, 867, 867, 867,
+ 863, 863, 863, 863, 863, 863, 863, 863,
+ 863, 863, 863, 863, 863, 863, 863, 863,
+ 863, 863, 863, 863, 863, 863, 863, 863,
+ 863, 863, 864, 864, 864, 864, 864, 863,
- 867, 867, 867, 868, 868, 868, 868, 868,
- 868, 868, 868, 868, 868, 868, 868, 868,
- 868, 868, 868, 868, 868, 868, 868, 868,
- 868, 868, 868, 868, 868, 868, 868, 868,
+ 865, 866, 866, 866, 866, 866, 866, 866,
+ 866, 866, 866, 866, 866, 866, 866, 866,
+ 866, 866, 866, 866, 866, 866, 865, 865,
+ 865, 865, 865, 865, 865, 865, 865, 865,
+ 865, 865, 865, 865, 865, 865, 865, 865,
+ 865, 865, 865, 865, 865, 865, 865, 865,
+ 865, 865, 865, 865, 865, 865, 865, 865,
+ 865, 865, 865, 865, 865, 865, 865, 865,
+
+ 865, 865, 865, 867, 867, 867, 867, 867,
868, 868, 868, 868, 868, 868, 868, 868,
868, 868, 868, 868, 868, 868, 868, 868,
868, 868, 868, 868, 868, 868, 868, 868,
- 868, 868, 869, 869, 869, 869, 869, 869,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
+ 868, 868, 868, 869, 869, 869, 869, 869,
+ 869, 869, 869, 869, 869, 869, 869, 869,
+ 869, 869, 869, 869, 869, 869, 869, 869,
+ 869, 869, 869, 869, 869, 869, 869, 869,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
+ 869, 869, 869, 869, 869, 869, 869, 869,
+ 869, 869, 869, 869, 869, 869, 869, 869,
+ 869, 869, 869, 869, 869, 869, 869, 869,
+ 869, 869, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 202,
- 870, 202, 870, 870, 870, 870, 202, 202,
+ 871, 871, 871, 871, 871, 871, 871, 872,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 871,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 871,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 202,
+ 871, 871, 871, 871, 871, 871, 871, 872,
+ 871, 203, 871, 871, 871, 871, 203, 203,
+ 871, 871, 871, 871, 871, 871, 871, 203,
+ 871, 203, 871, 871, 871, 871, 203, 203,
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 870, 870, 870, 870, 870, 870, 202,
- 870, 870, 870, 870, 870, 870, 870, 870,
+ 871, 871, 871, 871, 871, 871, 871, 872,
+ 871, 203, 871, 871, 871, 871, 203, 203,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 871,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 872,
+ 871, 203, 871, 871, 871, 871, 203, 203,
+ 871, 871, 871, 871, 871, 871, 871, 203,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 202, 870, 870, 870, 870, 202, 202,
- 870, 870, 870, 870, 870, 870, 870, 871,
+ 871, 203, 871, 871, 871, 871, 203, 203,
+ 871, 871, 871, 871, 871, 871, 871, 872,
+ 871, 871, 871, 871, 871, 871, 871, 203,
+ 871, 871, 871, 871, 871, 871, 871, 871,
- 870, 870, 870, 870, 870, 870, 870, 871,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 870, 870, 870, 870, 870,
- 870, 870, 870, 202, 202, 872, 872, 873,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 872,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 871,
- 874, 875, 876, 877, 877, 877, 877, 876,
- 876, 878, 879, 880, 881, 882, 883, 884,
- 885, 886, 887, 887, 887, 887, 887, 887,
- 887, 887, 887, 887, 887, 202, 202, 202,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 871, 871, 871, 871, 871, 872,
+ 871, 203, 871, 871, 871, 871, 203, 203,
+ 871, 871, 871, 871, 871, 871, 871, 872,
+ 871, 871, 871, 871, 871, 871, 871, 872,
871, 871, 871, 871, 871, 871, 871, 871,
871, 871, 871, 871, 871, 871, 871, 871,
- 888, 888, 888, 888, 888, 888, 888, 888,
- 888, 888, 202, 202, 202, 202, 202, 202,
-
- 889, 890, 891, 892, 893, 894, 895, 896,
- 897, 898, 899, 900, 901, 902, 903, 904,
- 905, 906, 907, 908, 909, 910, 911, 912,
- 913, 914, 915, 916, 917, 918, 919, 920,
-
- 921, 922, 923, 924, 925, 926, 927, 928,
- 929, 930, 931, 932, 933, 934, 935, 936,
- 937, 938, 939, 940, 941, 942, 943, 944,
- 945, 946, 947, 948, 949, 950, 951, 952,
-
- 953, 954, 955, 956, 957, 958, 959, 960,
- 961, 962, 963, 964, 965, 966, 967, 968,
- 969, 969, 969, 969, 969, 970, 202, 202,
- 971, 971, 971, 971, 971, 971, 202, 202,
-
- 972, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
-
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 973, 973, 973,
-
- 973, 973, 973, 973, 973, 973, 973, 973,
- 973, 973, 973, 973, 973, 974, 975, 973,
- 973, 973, 973, 973, 973, 973, 973, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
-
- 977, 978, 978, 978, 978, 978, 978, 978,
- 978, 978, 978, 978, 978, 978, 978, 978,
- 978, 978, 978, 978, 978, 978, 978, 978,
- 978, 978, 978, 979, 980, 202, 202, 202,
-
- 981, 981, 981, 981, 981, 981, 981, 981,
- 981, 981, 981, 981, 981, 981, 981, 981,
- 981, 981, 981, 981, 981, 981, 981, 981,
- 981, 981, 981, 981, 981, 981, 981, 981,
-
- 981, 981, 981, 981, 981, 981, 981, 981,
- 981, 981, 981, 982, 982, 982, 983, 983,
- 983, 984, 984, 984, 984, 984, 984, 984,
- 984, 202, 202, 202, 202, 202, 202, 202,
-
- 985, 985, 985, 985, 985, 985, 985, 985,
- 985, 985, 985, 985, 985, 202, 985, 985,
- 985, 985, 986, 986, 987, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 988, 988, 988, 988, 988, 988, 988, 988,
- 988, 988, 988, 988, 988, 988, 988, 988,
- 988, 988, 989, 989, 990, 991, 991, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 992, 992, 992, 992, 992, 992, 992, 992,
- 992, 992, 992, 992, 992, 992, 992, 992,
- 992, 992, 993, 993, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 994, 994, 994, 994, 994, 994, 994, 994,
- 994, 994, 994, 994, 994, 202, 994, 994,
- 994, 202, 995, 995, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 996, 996, 996, 996,
-
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 996, 996, 996, 996,
- 996, 996, 996, 996, 997, 997, 998, 997,
- 997, 997, 997, 997, 997, 997, 998, 998,
-
- 998, 998, 998, 998, 998, 998, 997, 998,
- 998, 997, 997, 997, 997, 997, 997, 997,
- 997, 997, 999, 997, 1000, 1000, 1001, 1002,
- 1000, 1003, 1000, 1004, 996, 1005, 202, 202,
-
- 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
- 1014, 1015, 202, 202, 202, 202, 202, 202,
- 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
- 1016, 1016, 202, 202, 202, 202, 202, 202,
-
- 1017, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
- 1024, 1025, 1026, 1027, 1027, 1027, 1028, 202,
- 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036,
- 1037, 1038, 202, 202, 202, 202, 202, 202,
-
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
-
- 1039, 1039, 1039, 1040, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
-
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1041, 202, 202, 202, 202, 202, 202, 202,
-
- 1042, 1042, 1042, 1042, 1042, 1027, 1027, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
-
- 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
- 1039, 1043, 1044, 202, 202, 202, 202, 202,
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
-
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
-
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 976, 976,
- 976, 976, 976, 976, 976, 976, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
- 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
- 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
- 1045, 1045, 1045, 1045, 1045, 1046, 1046, 202,
-
- 1047, 1047, 1047, 1048, 1048, 1048, 1048, 1047,
- 1047, 1048, 1048, 1048, 202, 202, 202, 202,
- 1048, 1048, 1047, 1048, 1048, 1048, 1048, 1048,
- 1048, 1049, 1050, 1051, 202, 202, 202, 202,
-
- 1052, 202, 202, 202, 1053, 1053, 1054, 1055,
- 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063,
- 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
- 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
-
- 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
- 1064, 1064, 1064, 1064, 1064, 1064, 202, 202,
- 1064, 1064, 1064, 1064, 1064, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
+ 871, 871, 871, 203, 203, 873, 873, 874,
+
+ 875, 876, 877, 878, 878, 878, 878, 877,
+ 877, 879, 880, 881, 882, 883, 884, 885,
+ 886, 887, 888, 888, 888, 888, 888, 888,
+ 888, 888, 888, 888, 888, 203, 203, 203,
+
+ 872, 872, 872, 872, 872, 872, 872, 872,
+ 872, 872, 872, 872, 872, 872, 872, 872,
+ 889, 889, 889, 889, 889, 889, 889, 889,
+ 889, 889, 203, 203, 203, 203, 203, 203,
+
+ 890, 891, 892, 893, 894, 895, 896, 897,
+ 898, 899, 900, 901, 902, 903, 904, 905,
+ 906, 907, 908, 909, 910, 911, 912, 913,
+ 914, 915, 916, 917, 918, 919, 920, 921,
+
+ 922, 923, 924, 925, 926, 927, 928, 929,
+ 930, 931, 932, 933, 934, 935, 936, 937,
+ 938, 939, 940, 941, 942, 943, 944, 945,
+ 946, 947, 948, 949, 950, 951, 952, 953,
+
+ 954, 955, 956, 957, 958, 959, 960, 961,
+ 962, 963, 964, 965, 966, 967, 968, 969,
+ 970, 970, 970, 970, 970, 971, 203, 203,
+ 972, 972, 972, 972, 972, 972, 203, 203,
+
+ 973, 974, 974, 974, 974, 974, 974, 974,
+ 974, 974, 974, 974, 974, 974, 974, 974,
+ 974, 974, 974, 974, 974, 974, 974, 974,
+ 974, 974, 974, 974, 974, 974, 974, 974,
+
+ 974, 974, 974, 974, 974, 974, 974, 974,
+ 974, 974, 974, 974, 974, 974, 974, 974,
+ 974, 974, 974, 974, 974, 974, 974, 974,
+ 974, 974, 974, 974, 974, 974, 974, 974,
+
+ 974, 974, 974, 974, 974, 974, 974, 974,
+ 974, 974, 974, 974, 974, 975, 976, 974,
+ 974, 974, 974, 974, 974, 974, 974, 977,
+ 977, 977, 977, 977, 977, 977, 977, 977,
+
+ 978, 979, 979, 979, 979, 979, 979, 979,
+ 979, 979, 979, 979, 979, 979, 979, 979,
+ 979, 979, 979, 979, 979, 979, 979, 979,
+ 979, 979, 979, 980, 981, 203, 203, 203,
+
+ 982, 982, 982, 982, 982, 982, 982, 982,
+ 982, 982, 982, 982, 982, 982, 982, 982,
+ 982, 982, 982, 982, 982, 982, 982, 982,
+ 982, 982, 982, 982, 982, 982, 982, 982,
+
+ 982, 982, 982, 982, 982, 982, 982, 982,
+ 982, 982, 982, 983, 983, 983, 984, 984,
+ 984, 985, 985, 985, 985, 985, 985, 985,
+ 985, 203, 203, 203, 203, 203, 203, 203,
+
+ 986, 986, 986, 986, 986, 986, 986, 986,
+ 986, 986, 986, 986, 986, 203, 986, 986,
+ 986, 986, 987, 987, 988, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 989, 989, 989, 989, 989, 989, 989, 989,
+ 989, 989, 989, 989, 989, 989, 989, 989,
+ 989, 989, 990, 990, 991, 992, 992, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 993, 993, 993, 993, 993, 993, 993, 993,
+ 993, 993, 993, 993, 993, 993, 993, 993,
+ 993, 993, 994, 994, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 995, 995, 995, 995, 995, 995, 995, 995,
+ 995, 995, 995, 995, 995, 203, 995, 995,
+ 995, 203, 996, 996, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 997, 997, 997, 997, 997, 997, 997, 997,
+ 997, 997, 997, 997, 997, 997, 997, 997,
+ 997, 997, 997, 997, 997, 997, 997, 997,
+ 997, 997, 997, 997, 997, 997, 997, 997,
+
+ 997, 997, 997, 997, 997, 997, 997, 997,
+ 997, 997, 997, 997, 997, 997, 997, 997,
+ 997, 997, 997, 997, 998, 998, 999, 998,
+ 998, 998, 998, 998, 998, 998, 999, 999,
+
+ 999, 999, 999, 999, 999, 999, 998, 999,
+ 999, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 1000, 998, 1001, 1001, 1002, 1003,
+ 1001, 1004, 1001, 1005, 997, 1006, 203, 203,
+
+ 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
+ 1015, 1016, 203, 203, 203, 203, 203, 203,
+ 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+ 1017, 1017, 203, 203, 203, 203, 203, 203,
+
+ 1018, 1018, 1019, 1020, 1021, 1022, 1023, 1024,
+ 1025, 1026, 1027, 1028, 1028, 1028, 1029, 203,
+ 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037,
+ 1038, 1039, 203, 203, 203, 203, 203, 203,
+
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+
+ 1040, 1040, 1040, 1041, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1042, 203, 203, 203, 203, 203, 203, 203,
+
+ 1043, 1043, 1043, 1043, 1043, 1028, 1028, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1044, 1045, 203, 203, 203, 203, 203,
+ 977, 977, 977, 977, 977, 977, 977, 977,
+ 977, 977, 977, 977, 977, 977, 977, 977,
+
+ 977, 977, 977, 977, 977, 977, 977, 977,
+ 977, 977, 977, 977, 977, 977, 977, 977,
+ 977, 977, 977, 977, 977, 977, 977, 977,
+ 977, 977, 977, 977, 977, 977, 977, 977,
+
+ 977, 977, 977, 977, 977, 977, 977, 977,
+ 977, 977, 977, 977, 977, 977, 977, 977,
+ 977, 977, 977, 977, 977, 977, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
+ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
+ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
+ 1046, 1046, 1046, 1046, 1046, 1047, 1047, 203,
+
+ 1048, 1048, 1048, 1049, 1049, 1049, 1049, 1048,
+ 1048, 1049, 1049, 1049, 203, 203, 203, 203,
+ 1049, 1049, 1048, 1049, 1049, 1049, 1049, 1049,
+ 1049, 1050, 1051, 1052, 203, 203, 203, 203,
+
+ 1053, 203, 203, 203, 1054, 1054, 1055, 1056,
+ 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 1066, 1066, 202, 202, 202, 202,
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
+ 1065, 1065, 1065, 1065, 1065, 1065, 203, 203,
+ 1065, 1065, 1065, 1065, 1065, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
- 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
- 1065, 1065, 202, 202, 202, 202, 202, 202,
- 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074,
- 1075, 1076, 1077, 202, 202, 202, 1078, 1078,
+ 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
+ 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
+ 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
+ 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
- 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
- 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
- 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
- 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
+ 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
+ 1066, 1066, 1067, 1067, 203, 203, 203, 203,
+ 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
+ 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
+
+ 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
+ 1066, 1066, 203, 203, 203, 203, 203, 203,
+ 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075,
+ 1076, 1077, 1078, 203, 203, 203, 1079, 1079,
1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
- 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1081,
- 1082, 1083, 1083, 1084, 202, 202, 1085, 1085,
-
- 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
- 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
- 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
- 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
-
- 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
- 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
- 1086, 1086, 1086, 1086, 1086, 1087, 1088, 1087,
- 1088, 1088, 1088, 1088, 1088, 1088, 1088, 202,
-
- 1089, 1090, 1088, 1090, 1090, 1088, 1088, 1088,
- 1088, 1088, 1088, 1088, 1088, 1087, 1087, 1087,
- 1087, 1087, 1087, 1088, 1088, 1091, 1091, 1091,
- 1091, 1091, 1091, 1091, 1091, 202, 202, 1092,
-
- 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100,
- 1101, 1102, 202, 202, 202, 202, 202, 202,
- 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100,
- 1101, 1102, 202, 202, 202, 202, 202, 202,
-
- 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1104,
- 1105, 1105, 1105, 1105, 1103, 1103, 202, 202,
- 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107,
- 1107, 1107, 1107, 1106, 1106, 1107, 1108, 1109,
-
- 1109, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1110, 1110, 1110, 1110, 1111, 1112, 1113, 1112,
- 1113, 1112, 1113, 1112, 1113, 1112, 1113, 1112,
- 1112, 1112, 1113, 1112, 1112, 1112, 1112, 1112,
- 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
-
- 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
- 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
- 1112, 1112, 1112, 1112, 1114, 1115, 1110, 1110,
- 1110, 1110, 1110, 1116, 1110, 1116, 1111, 1111,
-
- 1116, 1116, 1110, 1116, 1117, 1112, 1112, 1112,
- 1112, 1112, 1112, 1112, 202, 202, 202, 202,
- 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125,
- 1126, 1127, 1128, 1128, 1129, 1130, 1128, 1128,
-
- 1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
- 1131, 1131, 1131, 1132, 1133, 1132, 1132, 1132,
- 1132, 1132, 1132, 1132, 1131, 1131, 1131, 1131,
- 1131, 1131, 1131, 1131, 1131, 202, 202, 202,
-
- 1134, 1134, 1135, 1136, 1136, 1136, 1136, 1136,
- 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
- 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
- 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
-
- 1136, 1135, 1134, 1134, 1134, 1134, 1135, 1135,
- 1134, 1134, 1137, 1138, 1139, 1139, 1136, 1136,
- 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
- 1148, 1149, 1150, 1150, 1150, 1150, 1150, 1150,
-
- 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
- 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
- 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
- 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
-
- 1151, 1151, 1151, 1151, 1151, 1151, 1152, 1153,
- 1154, 1154, 1153, 1153, 1153, 1154, 1153, 1154,
- 1154, 1154, 1155, 1155, 202, 202, 202, 202,
- 202, 202, 202, 202, 1156, 1156, 1156, 1156,
-
- 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
- 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
- 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
- 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
-
- 1157, 1157, 1157, 1157, 1158, 1158, 1158, 1158,
- 1158, 1158, 1158, 1158, 1159, 1159, 1159, 1159,
- 1159, 1159, 1159, 1159, 1158, 1158, 1159, 1160,
- 202, 202, 202, 1161, 1161, 1162, 1162, 1162,
+ 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+ 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
- 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170,
- 1171, 1172, 202, 202, 202, 1157, 1157, 1157,
- 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180,
- 1181, 1182, 1183, 1183, 1183, 1183, 1183, 1183,
+ 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
+ 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
+ 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1082,
+ 1083, 1084, 1084, 1085, 203, 203, 1086, 1086,
+
+ 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+ 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+ 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+ 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+
+ 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+ 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+ 1087, 1087, 1087, 1087, 1087, 1088, 1089, 1088,
+ 1089, 1089, 1089, 1089, 1089, 1089, 1089, 203,
+
+ 1090, 1091, 1089, 1091, 1091, 1089, 1089, 1089,
+ 1089, 1089, 1089, 1089, 1089, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1089, 1089, 1092, 1092, 1092,
+ 1092, 1092, 1092, 1092, 1092, 203, 203, 1093,
+
+ 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101,
+ 1102, 1103, 203, 203, 203, 203, 203, 203,
+ 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101,
+ 1102, 1103, 203, 203, 203, 203, 203, 203,
+
+ 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1105,
+ 1106, 1106, 1106, 1106, 1104, 1104, 203, 203,
+ 1107, 1107, 1107, 1107, 1107, 1108, 1108, 1108,
+ 1108, 1108, 1108, 1107, 1107, 1108, 1109, 1110,
+
+ 1110, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1111, 1111, 1111, 1111, 1112, 1113, 1114, 1113,
+ 1114, 1113, 1114, 1113, 1114, 1113, 1114, 1113,
+ 1113, 1113, 1114, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1115, 1116, 1111, 1111,
+ 1111, 1111, 1111, 1117, 1111, 1117, 1112, 1112,
+
+ 1117, 1117, 1111, 1117, 1118, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 203, 203, 203, 203,
+ 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126,
+ 1127, 1128, 1129, 1129, 1130, 1131, 1129, 1129,
+
+ 1131, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+ 1132, 1132, 1132, 1133, 1134, 1133, 1133, 1133,
+ 1133, 1133, 1133, 1133, 1132, 1132, 1132, 1132,
+ 1132, 1132, 1132, 1132, 1132, 203, 203, 203,
+
+ 1135, 1135, 1136, 1137, 1137, 1137, 1137, 1137,
+ 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
+ 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
+ 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
+
+ 1137, 1136, 1135, 1135, 1135, 1135, 1136, 1136,
+ 1135, 1135, 1138, 1139, 1140, 1140, 1137, 1137,
+ 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
+ 1149, 1150, 1151, 1151, 1151, 1151, 1151, 1151,
+
+ 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
+ 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
+ 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
+ 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
+
+ 1152, 1152, 1152, 1152, 1152, 1152, 1153, 1154,
+ 1155, 1155, 1154, 1154, 1154, 1155, 1154, 1155,
+ 1155, 1155, 1156, 1156, 203, 203, 203, 203,
+ 203, 203, 203, 203, 1157, 1157, 1157, 1157,
+
+ 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+ 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+ 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+ 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
- 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
- 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
- 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
- 1184, 1184, 1184, 1184, 1184, 1184, 1185, 1185,
+ 1158, 1158, 1158, 1158, 1159, 1159, 1159, 1159,
+ 1159, 1159, 1159, 1159, 1160, 1160, 1160, 1160,
+ 1160, 1160, 1160, 1160, 1159, 1159, 1160, 1161,
+ 203, 203, 203, 1162, 1162, 1163, 1163, 1163,
+
+ 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171,
+ 1172, 1173, 203, 203, 203, 1158, 1158, 1158,
+ 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181,
+ 1182, 1183, 1184, 1184, 1184, 1184, 1184, 1184,
+
+ 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
+ 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
+ 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
+ 1185, 1185, 1185, 1185, 1185, 1185, 1186, 1186,
+
+ 1187, 1188, 1189, 1190, 1190, 1191, 1192, 1193,
+ 1194, 203, 203, 203, 203, 203, 203, 203,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
- 1186, 1187, 1188, 1189, 1189, 1190, 1191, 1192,
- 1193, 202, 202, 202, 202, 202, 202, 202,
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 203, 203, 1195, 1195, 1195,
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 202, 202, 1194, 1194, 1194,
+ 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 1197, 1197, 1197, 1198, 1199, 1200, 1200, 1200,
+ 1200, 1200, 1197, 1197, 1200, 1200, 1200, 1200,
- 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 1196, 1196, 1196, 1197, 1198, 1199, 1199, 1199,
- 1199, 1199, 1196, 1196, 1199, 1199, 1199, 1199,
-
- 1196, 1200, 1198, 1198, 1198, 1198, 1198, 1198,
- 1198, 1201, 1201, 1201, 1201, 1199, 1201, 1201,
- 1201, 1201, 1201, 1202, 1203, 1202, 1202, 1204,
- 1106, 1106, 1205, 202, 202, 202, 202, 202,
-
- 114, 114, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 114, 114, 114,
-
- 114, 114, 114, 114, 114, 114, 1206, 1206,
- 1206, 1206, 1206, 1207, 1208, 1208, 1208, 1209,
- 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- 1208, 1208, 1208, 1209, 1208, 1208, 1208, 1208,
-
- 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- 1208, 1208, 1208, 1208, 1208, 1208, 1209, 1208,
- 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
- 1208, 1208, 1208, 1208, 1208, 1210, 1210, 1210,
-
- 1210, 1210, 1208, 1208, 1208, 1208, 1210, 1210,
- 1210, 1210, 1210, 114, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115,
- 1211, 1212, 115, 115, 115, 1213, 115, 115,
+ 1197, 1201, 1199, 1199, 1199, 1199, 1199, 1199,
+ 1199, 1202, 1202, 1202, 1202, 1200, 1202, 1202,
+ 1202, 1202, 1202, 1203, 1204, 1203, 1203, 1205,
+ 1107, 1107, 1206, 203, 203, 203, 203, 203,
115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 1214, 115,
115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 1215, 1215, 1215, 1215, 1215,
-
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1216,
-
- 191, 191, 190, 191, 1217, 1217, 1217, 1217,
- 1217, 1217, 1218, 1219, 1219, 1220, 1221, 1222,
- 1223, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
- 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
-
- 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1106,
- 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
- 1106, 1106, 1106, 1106, 1106, 1106, 1224, 1225,
- 1225, 1226, 202, 1227, 1228, 1199, 1217, 1218,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 1229, 1230,
- 1231, 1232, 1233, 1234, 1235, 1235, 1236, 1235,
-
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 1237, 1238, 1237, 1238, 1237, 1238,
-
- 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+
+ 115, 115, 115, 115, 115, 115, 1207, 1207,
+ 1207, 1207, 1207, 1208, 1209, 1209, 1209, 1210,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1210, 1209, 1209, 1209, 1209,
+
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1210, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1211, 1211, 1211,
+
+ 1211, 1211, 1209, 1209, 1209, 1209, 1211, 1211,
+ 1211, 1211, 1211, 115, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116,
+ 1212, 1213, 116, 116, 116, 1214, 116, 116,
+
+ 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 1215, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 1216, 1216, 1216, 1216, 1216,
+
+ 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
+ 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
+ 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
+ 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1217,
+
+ 192, 192, 191, 192, 1218, 1218, 1218, 1218,
+ 1218, 1218, 1219, 1220, 1220, 1221, 1222, 1223,
+ 1224, 1220, 1220, 1220, 1220, 1220, 1220, 1220,
+ 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220,
+
+ 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1107,
+ 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
+ 1107, 1107, 1107, 1107, 1107, 1107, 1225, 1226,
+ 1226, 1227, 203, 1228, 1229, 1200, 1218, 1219,
+
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 1230, 1231,
+ 1232, 1233, 1234, 1235, 1236, 1236, 1237, 1236,
+
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 71, 72, 71, 72, 71, 72,
+ 71, 72, 1238, 1239, 1238, 1239, 1238, 1239,
+
1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
- 1239, 1239, 1239, 1239, 1239, 1239, 202, 202,
- 1240, 1240, 1240, 1240, 1240, 1240, 202, 202,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1240, 1240, 1240, 1240, 1240, 1240, 203, 203,
+ 1241, 1241, 1241, 1241, 1241, 1241, 203, 203,
- 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
- 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
- 1239, 1239, 1239, 1239, 1239, 1239, 202, 202,
- 1240, 1240, 1240, 1240, 1240, 1240, 202, 202,
- 1241, 1239, 1242, 1239, 1243, 1239, 1244, 1239,
- 202, 1240, 202, 1240, 202, 1240, 202, 1240,
+ 1240, 1240, 1240, 1240, 1240, 1240, 203, 203,
+ 1241, 1241, 1241, 1241, 1241, 1241, 203, 203,
+ 1242, 1240, 1243, 1240, 1244, 1240, 1245, 1240,
+ 203, 1241, 203, 1241, 203, 1241, 203, 1241,
- 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
- 1245, 1246, 1247, 1248, 1247, 1248, 1249, 1250,
- 1251, 1252, 1253, 1254, 1255, 1256, 202, 202,
-
- 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
- 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272,
- 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280,
- 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288,
-
- 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296,
- 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304,
- 1239, 1239, 1305, 1306, 1307, 202, 1308, 1309,
- 1240, 1240, 1310, 1311, 1312, 207, 1313, 207,
-
- 207, 1314, 1315, 1316, 1317, 202, 1318, 1319,
- 1320, 1321, 1320, 1321, 1322, 1314, 1314, 1314,
- 1239, 1239, 1323, 1324, 202, 202, 1325, 1326,
- 1240, 1240, 1327, 1328, 202, 1314, 1314, 1314,
-
- 1239, 1239, 1329, 1330, 1331, 1332, 1333, 1334,
- 1240, 1240, 1335, 1336, 1337, 1314, 1338, 1338,
- 202, 202, 1339, 1340, 1341, 202, 1342, 1343,
- 1344, 1345, 1346, 1347, 1348, 1349, 207, 202,
-
- 1350, 1350, 1351, 1351, 1351, 1351, 1351, 1352,
- 1351, 1351, 1351, 1353, 1354, 1355, 1356, 1357,
- 1358, 1359, 1358, 1360, 1361, 1362, 14, 1363,
- 1364, 1365, 1366, 1367, 1367, 1368, 1366, 1367,
-
- 14, 14, 14, 14, 1369, 1370, 1370, 1371,
- 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379,
- 13, 13, 13, 1380, 1380, 1381, 1382, 1382,
- 14, 1383, 1384, 14, 1385, 1386, 1363, 43,
-
- 43, 14, 14, 14, 1387, 16, 1388, 1389,
- 1390, 1390, 1391, 1391, 1391, 1391, 1392, 1392,
- 1392, 1392, 1393, 1394, 1395, 1396, 1397, 1398,
- 1397, 1397, 1397, 1397, 1396, 1397, 1397, 1399,
-
- 1400, 1401, 1401, 1401, 1402, 1403, 1404, 1405,
- 1406, 1407, 1408, 1408, 1408, 1408, 1408, 1408,
- 1409, 1410, 202, 202, 1411, 1412, 1413, 1414,
- 1415, 1416, 1417, 1417, 1418, 1419, 1420, 160,
-
- 1409, 63, 58, 59, 1411, 1412, 1413, 1414,
- 1415, 1416, 1417, 1417, 1418, 1419, 1420, 202,
- 1215, 1215, 1215, 1215, 1215, 1421, 1421, 1421,
- 1421, 1421, 1421, 1421, 1421, 202, 202, 202,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1246, 1247, 1248, 1249, 1248, 1249, 1250, 1251,
+ 1252, 1253, 1254, 1255, 1256, 1257, 203, 203,
+
+ 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
+ 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273,
+ 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281,
+ 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289,
+
+ 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297,
+ 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305,
+ 1240, 1240, 1306, 1307, 1308, 203, 1309, 1310,
+ 1241, 1241, 1311, 1312, 1313, 208, 1314, 208,
+
+ 208, 1315, 1316, 1317, 1318, 203, 1319, 1320,
+ 1321, 1322, 1321, 1322, 1323, 1315, 1315, 1315,
+ 1240, 1240, 1324, 1325, 203, 203, 1326, 1327,
+ 1241, 1241, 1328, 1329, 203, 1315, 1315, 1315,
+
+ 1240, 1240, 1330, 1331, 1332, 1333, 1334, 1335,
+ 1241, 1241, 1336, 1337, 1338, 1315, 1339, 1339,
+ 203, 203, 1340, 1341, 1342, 203, 1343, 1344,
+ 1345, 1346, 1347, 1348, 1349, 1350, 208, 203,
+
+ 1351, 1351, 1352, 1352, 1352, 1352, 1352, 1353,
+ 1352, 1352, 1352, 1354, 1355, 1356, 1357, 1358,
+ 1359, 1360, 1359, 1361, 1362, 1363, 14, 1364,
+ 1365, 1366, 1367, 1368, 1368, 1369, 1367, 1368,
+
+ 14, 14, 14, 14, 1370, 1371, 1371, 1372,
+ 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380,
+ 13, 13, 13, 1381, 1381, 1382, 1383, 1383,
+ 14, 1384, 1385, 14, 1386, 1387, 1364, 43,
+
+ 43, 14, 14, 14, 1388, 16, 1389, 1390,
+ 1391, 1392, 1393, 1393, 1393, 1393, 1394, 1394,
+ 1394, 1394, 1395, 1396, 1397, 1398, 1399, 1400,
+ 1399, 1399, 1399, 1399, 1398, 1399, 1399, 1401,
+
+ 1402, 1403, 1403, 1403, 1404, 1405, 1406, 1407,
+ 1408, 1409, 1410, 1410, 1410, 1410, 1410, 1410,
+ 1411, 1412, 203, 203, 1413, 1414, 1415, 1416,
+ 1417, 1418, 1419, 1419, 1420, 1421, 1422, 161,
+
+ 1411, 64, 59, 60, 1413, 1414, 1415, 1416,
+ 1417, 1418, 1419, 1419, 1420, 1421, 1422, 203,
+ 1216, 1216, 1216, 1216, 1216, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 203, 203, 203,
12, 12, 12, 12, 12, 12, 12, 50,
- 1422, 12, 12, 1423, 1424, 1425, 1425, 1425,
- 1426, 1426, 1427, 1427, 1427, 1427, 1428, 1429,
- 1429, 1430, 1431, 1432, 1433, 1433, 1434, 1435,
-
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
- 173, 173, 180, 180, 173, 173, 173, 173,
- 180, 180, 180, 173, 173, 1437, 1437, 1437,
-
- 1437, 173, 1438, 1438, 1439, 1440, 1440, 197,
- 1441, 197, 1440, 1442, 1218, 1218, 1218, 1218,
- 1219, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1443, 1443, 1444, 1445, 51, 1443, 1443, 1444,
- 51, 1445, 1446, 1444, 1444, 1444, 1446, 1446,
- 1444, 1444, 1444, 1446, 51, 1444, 1447, 51,
- 36, 1444, 1444, 1444, 1444, 1444, 51, 51,
-
- 1443, 1443, 1443, 51, 1444, 51, 1448, 51,
- 1444, 51, 1449, 1450, 1444, 1444, 1451, 1446,
- 1444, 1444, 1452, 1444, 1446, 1453, 1453, 1453,
- 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1459,
-
- 1460, 1393, 1393, 1393, 1393, 1459, 1458, 1458,
- 1458, 1458, 1461, 1393, 1462, 1463, 1464, 1465,
- 1466, 1466, 1466, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 65, 65, 65, 65,
-
- 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
- 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
- 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
- 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1424, 12, 12, 1425, 1426, 1427, 1427, 1427,
+ 1428, 1428, 1429, 1429, 1429, 1429, 1430, 1431,
+ 1431, 1432, 1433, 1434, 1435, 1435, 1436, 1437,
+
+ 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438,
+ 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438,
+ 174, 174, 181, 181, 174, 174, 174, 174,
+ 181, 181, 181, 174, 174, 1439, 1439, 1439,
+
+ 1439, 174, 1440, 1440, 1441, 1442, 1442, 198,
+ 1443, 198, 1442, 1444, 1219, 1219, 1219, 1219,
+ 1220, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1445, 1445, 1446, 1447, 51, 1445, 1445, 1446,
+ 51, 1447, 1448, 1446, 1446, 1446, 1448, 1448,
+ 1446, 1446, 1446, 1448, 51, 1446, 1449, 51,
+ 36, 1446, 1446, 1446, 1446, 1446, 51, 51,
+
+ 1445, 1445, 1450, 51, 1446, 51, 1451, 51,
+ 1446, 51, 1452, 1453, 1446, 1446, 1454, 1448,
+ 1446, 1446, 1455, 1446, 1448, 1456, 1456, 1456,
+ 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1462,
+
+ 1463, 1395, 1395, 1395, 1395, 1462, 1461, 1461,
+ 1461, 1461, 1464, 1395, 1465, 1466, 1467, 1468,
+ 1469, 1469, 1469, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66,
+
+ 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
+ 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
+ 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471,
+ 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471,
- 1469, 1469, 1469, 111, 123, 1470, 1470, 1470,
- 1470, 1466, 1471, 1471, 202, 202, 202, 202,
- 36, 36, 36, 36, 36, 51, 51, 51,
- 51, 51, 1472, 1472, 51, 51, 51, 51,
+ 1472, 1472, 1472, 112, 124, 1473, 1473, 1473,
+ 1473, 1469, 1474, 1474, 203, 203, 203, 203,
+ 36, 36, 36, 36, 1475, 53, 53, 53,
+ 53, 53, 1476, 1476, 51, 51, 51, 51,
36, 51, 51, 36, 51, 51, 36, 51,
- 51, 51, 51, 51, 51, 51, 1472, 51,
+ 51, 53, 53, 51, 51, 51, 1476, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 1473, 1472, 1472,
+ 51, 51, 51, 51, 51, 1477, 1476, 1476,
51, 51, 36, 51, 36, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 1455, 1455, 1455, 1455, 1455,
- 1455, 1455, 1455, 1455, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 36, 36, 36, 36, 1472, 36, 36, 36,
- 1474, 1475, 1474, 1476, 1477, 1476, 36, 36,
- 36, 36, 18, 57, 36, 1478, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 1479,
-
- 1480, 1481, 1482, 36, 1483, 36, 1472, 36,
- 36, 36, 36, 36, 1418, 1418, 36, 1418,
- 1418, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 1484, 1485, 36, 36,
-
- 36, 1472, 36, 1486, 1472, 1487, 36, 1472,
- 36, 1472, 36, 36, 1488, 36, 36, 36,
- 36, 36, 1484, 1485, 1484, 1485, 36, 36,
+ 51, 51, 51, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+
+ 36, 36, 36, 36, 1476, 36, 36, 36,
+ 1478, 1479, 1478, 1480, 1481, 1480, 36, 36,
+ 36, 36, 18, 58, 36, 1482, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 1483,
+
+ 1484, 1485, 1486, 36, 1487, 36, 1476, 36,
+ 36, 36, 36, 36, 1420, 1420, 36, 1420,
+ 1420, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 1488, 1489, 36, 36,
+
+ 36, 1476, 36, 1490, 1476, 1491, 36, 1476,
+ 36, 1476, 36, 36, 1492, 36, 36, 36,
+ 36, 36, 1488, 1489, 1488, 1489, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36,
- 1472, 36, 1472, 36, 1484, 1485, 1484, 1485,
- 1484, 1485, 1484, 1485, 36, 1472, 1489, 1490,
- 1489, 1490, 1484, 1485, 1489, 1490, 1484, 1485,
- 1489, 1490, 1484, 1485, 1484, 1485, 1484, 1485,
+ 1476, 36, 1476, 36, 1488, 1489, 1488, 1489,
+ 1488, 1489, 1488, 1489, 36, 1476, 1493, 1494,
+ 1493, 1494, 1488, 1489, 1493, 1494, 1488, 1489,
+ 1493, 1494, 1488, 1489, 1488, 1489, 1488, 1489,
- 1489, 1490, 1484, 1485, 1489, 1490, 1484, 1485,
- 1489, 1490, 1484, 1485, 36, 36, 36, 1484,
- 1485, 1484, 1485, 36, 36, 36, 36, 36,
- 1491, 36, 36, 36, 36, 36, 36, 36,
-
- 36, 36, 1484, 1485, 36, 36, 1492, 36,
- 1493, 1494, 36, 1494, 1472, 1472, 1472, 1472,
- 1484, 1485, 1484, 1485, 1484, 1485, 1484, 1485,
+ 1493, 1494, 1488, 1489, 1493, 1494, 1488, 1489,
+ 1493, 1494, 1488, 1489, 36, 36, 36, 1488,
+ 1489, 1488, 1489, 36, 36, 36, 36, 36,
1495, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 1488, 1489, 36, 36, 1496, 36,
+ 1497, 1498, 36, 1498, 1476, 1476, 1476, 1476,
+ 1488, 1489, 1488, 1489, 1488, 1489, 1488, 1489,
+ 1499, 36, 36, 36, 36, 36, 36, 36,
+
36, 36, 36, 36, 36, 36, 36, 36,
- 36, 1484, 1485, 1484, 1485, 1496, 36, 36,
- 1484, 1485, 36, 36, 36, 36, 1484, 1485,
- 1484, 1485, 1484, 1485, 1484, 1485, 1484, 1485,
+ 36, 1488, 1489, 1488, 1489, 1500, 36, 36,
+ 1488, 1489, 36, 36, 36, 36, 1488, 1489,
+ 1488, 1489, 1488, 1489, 1488, 1489, 1488, 1489,
- 1489, 1490, 1489, 1490, 1484, 1485, 1484, 1485,
- 1484, 1485, 1489, 1490, 1489, 1490, 36, 1497,
- 1484, 1485, 1498, 1498, 1498, 1393, 1499, 1499,
- 1393, 1393, 1500, 1500, 1500, 1501, 1501, 1393,
+ 1493, 1494, 1493, 1494, 1488, 1489, 1488, 1489,
+ 1488, 1489, 1493, 1494, 1493, 1494, 36, 1501,
+ 1488, 1489, 1502, 1502, 1502, 1395, 1503, 1503,
+ 1395, 1395, 1504, 1504, 1504, 1505, 1505, 1395,
- 51, 1455, 51, 51, 51, 51, 51, 51,
- 16, 1388, 16, 1388, 51, 51, 51, 51,
+ 51, 1458, 51, 51, 51, 51, 51, 51,
+ 16, 1389, 16, 1389, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 1502, 1502, 51, 51, 51, 51,
+ 51, 51, 1506, 1506, 51, 51, 51, 51,
36, 36, 51, 51, 51, 51, 51, 51,
- 51, 1503, 1504, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
-
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
-
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
- 1505, 1505, 1505, 1455, 1393, 1455, 1455, 1455,
-
- 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455,
- 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455,
- 1455, 1455, 1455, 1455, 1455, 1506, 1455, 1455,
- 1455, 1455, 1455, 1393, 1393, 1393, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1461, 1461, 1461, 1461,
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
-
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1507,
- 1507, 1462, 1462, 1462, 1462, 1462, 1462, 1462,
- 1462, 1462, 1462, 1462, 1508, 1508, 1508, 1508,
-
- 1508, 1508, 1463, 1463, 1463, 1463, 1463, 1463,
- 1509, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1511, 1511, 1511, 1511, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1513, 1513, 1513, 1513, 1514,
+ 53, 1507, 1508, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 1509, 1509,
+ 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509,
+
+ 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509,
+ 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509,
+ 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509,
+ 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509,
+
+ 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509,
+ 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509,
+ 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509,
+ 1509, 1509, 1509, 1458, 1395, 1458, 1458, 1458,
+
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1510, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1458, 1458, 1458, 1458, 1458, 1511, 1458, 1458,
+ 1458, 1458, 1458, 1395, 1395, 1395, 1395, 1395,
+
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1464, 1464, 1464, 1464,
+ 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
+
+ 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
+ 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1512,
+ 1513, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
+ 1465, 1465, 1465, 1465, 1514, 1514, 1514, 1514,
+
+ 1514, 1514, 1466, 1466, 1466, 1466, 1466, 1466,
+ 1515, 1516, 1516, 1516, 1516, 1516, 1516, 1516,
+ 1517, 1517, 1517, 1517, 1518, 1518, 1518, 1518,
+ 1519, 1519, 1519, 1520, 1520, 1520, 1520, 1521,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 1455, 1455, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
+ 51, 51, 51, 51, 51, 1458, 1458, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522,
- 1523, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 1515, 1516, 1517, 1518,
- 1519, 1520, 1521, 1522, 1523, 65, 65, 65,
-
- 65, 65, 65, 65, 65, 65, 65, 65,
- 63, 58, 59, 1411, 1412, 1413, 1414, 1415,
- 1416, 1524, 1524, 1524, 1524, 1524, 1524, 1524,
- 1524, 1524, 1524, 1524, 1525, 1525, 1525, 1525,
-
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
- 1525, 1525, 1525, 1525, 1525, 1525, 1526, 1526,
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
-
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
- 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
- 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
-
- 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
- 1527, 1527, 1528, 1529, 1529, 1529, 1529, 1529,
- 1529, 1529, 1529, 1529, 1529, 1530, 1531, 1532,
- 1533, 1534, 1535, 1536, 1537, 1538, 1529, 1539,
+ 51, 51, 51, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 1461, 1461,
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+ 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529,
+ 1530, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 1522, 1523, 1524, 1525,
+ 1526, 1527, 1528, 1529, 1530, 66, 66, 66,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 36,
- 51, 51, 51, 51, 51, 51, 51, 51,
+ 66, 66, 66, 66, 66, 66, 66, 66,
+ 64, 59, 60, 1413, 1414, 1415, 1416, 1417,
+ 1418, 1531, 1531, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 1531, 1531, 1532, 1532, 1532, 1532,
- 51, 36, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
+ 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
+ 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
+ 1532, 1532, 1532, 1532, 1532, 1532, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
+ 1533, 1533, 1534, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535,
+ 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535,
- 1502, 1502, 1502, 1502, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 1540, 1540, 1461, 1461,
- 1541, 1455, 1502, 1502, 1502, 1542, 1502, 1502,
+ 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535,
+ 1535, 1535, 1536, 1537, 1537, 1537, 1537, 1537,
+ 1537, 1537, 1537, 1537, 1537, 1538, 1539, 1540,
+ 1541, 1542, 1543, 1544, 1545, 1546, 1537, 1547,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
- 51, 1502, 1502, 1502, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 1464, 1464,
+ 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
51, 51, 51, 51, 51, 51, 51, 51,
- 1502, 51, 51, 51, 51, 51, 51, 36,
- 1455, 1455, 1461, 1461, 1461, 1461, 1461, 1461,
- 1461, 1461, 1461, 1461, 1461, 1461, 1462, 1541,
-
- 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
- 1461, 1461, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1462, 1462, 1462, 1462, 1462, 1462,
- 1462, 1462, 1462, 1462, 1462, 1543, 1509, 1509,
-
- 1507, 1507, 1462, 1462, 1462, 1462, 1462, 1462,
- 1462, 1462, 1462, 1462, 1544, 1462, 1462, 1462,
- 1462, 1462, 1463, 1543, 1543, 1543, 1543, 1543,
- 1543, 1543, 1543, 1543, 1543, 1545, 1545, 1545,
-
- 1546, 1546, 1546, 1546, 1545, 1545, 1545, 1545,
- 1545, 1509, 1509, 1509, 1509, 1545, 1510, 1545,
- 1545, 1545, 1509, 1545, 1545, 1509, 1509, 1509,
- 1545, 1545, 1509, 1509, 1545, 1509, 1509, 1545,
-
- 1545, 1545, 1510, 1509, 1510, 1510, 1510, 1510,
- 1509, 1509, 1545, 1509, 1509, 1509, 1509, 1509,
- 1509, 1545, 1545, 1545, 1545, 1545, 1509, 1545,
- 1545, 1547, 1545, 1509, 1509, 1545, 1545, 1545,
-
- 1548, 1502, 1502, 1502, 1502, 1510, 51, 51,
- 1502, 1502, 1549, 1549, 1542, 1542, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 53, 53, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 53, 36,
51, 51, 51, 51, 51, 51, 51, 51,
+ 53, 36, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 1510, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 1510, 51, 1510, 51,
- 51, 51, 51, 1510, 1510, 1510, 51, 1509,
- 51, 51, 51, 1550, 1550, 1550, 1550, 1551,
-
- 1551, 51, 1552, 1552, 1502, 51, 51, 51,
- 1553, 1554, 1553, 1554, 1553, 1554, 1553, 1554,
- 1553, 1554, 1553, 1554, 1553, 1554, 1555, 1556,
- 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564,
-
- 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562,
- 1563, 1564, 1555, 1556, 1557, 1558, 1559, 1560,
- 1561, 1562, 1563, 1564, 51, 1510, 1510, 1510,
- 51, 51, 51, 51, 51, 51, 51, 51,
-
51, 51, 51, 51, 51, 51, 51, 51,
+ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+ 1395, 1395, 1395, 1548, 1548, 1548, 1548, 1395,
+
+ 1506, 1506, 1506, 1506, 53, 53, 51, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 51, 1549, 1549, 1550, 1550,
+ 1551, 1510, 1506, 1506, 1506, 1552, 1506, 1506,
+
+ 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 1506, 1506, 1506, 53, 53, 53, 53,
+
+ 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53,
+
+ 53, 53, 53, 53, 53, 53, 53, 53,
+ 1506, 53, 53, 53, 53, 53, 53, 1475,
+ 1510, 1510, 1550, 1550, 1550, 1550, 1550, 1550,
+ 1550, 1550, 1550, 1550, 1550, 1550, 1553, 1551,
+
+ 1550, 1550, 1550, 1550, 1550, 1550, 1464, 1464,
+ 1464, 1464, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1512, 1512, 1553, 1553, 1553, 1553, 1553, 1553,
+ 1553, 1553, 1553, 1553, 1553, 1554, 1555, 1555,
+
+ 1512, 1512, 1553, 1553, 1553, 1553, 1553, 1553,
+ 1553, 1553, 1553, 1553, 1556, 1553, 1553, 1553,
+ 1553, 1553, 1557, 1554, 1554, 1554, 1554, 1554,
+ 1554, 1554, 1554, 1554, 1554, 1558, 1558, 1558,
+
+ 1559, 1559, 1559, 1559, 1558, 1558, 1558, 1558,
+ 1558, 1555, 1555, 1555, 1555, 1558, 1516, 1558,
+ 1558, 1558, 1555, 1558, 1558, 1555, 1555, 1555,
+ 1558, 1558, 1555, 1555, 1558, 1555, 1555, 1558,
+
+ 1558, 1558, 1516, 1555, 1516, 1516, 1516, 1516,
+ 1555, 1555, 1558, 1555, 1555, 1555, 1555, 1555,
+ 1555, 1558, 1558, 1558, 1558, 1558, 1555, 1558,
+ 1558, 1560, 1558, 1555, 1555, 1558, 1558, 1558,
+
+ 1561, 1506, 1506, 1506, 1506, 1516, 51, 51,
+ 1506, 1506, 1562, 1562, 1552, 1552, 53, 53,
+ 53, 53, 53, 51, 53, 51, 53, 51,
+ 51, 51, 51, 51, 51, 53, 51, 51,
+
+ 51, 53, 51, 51, 51, 51, 51, 51,
+ 1516, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 53, 53, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 1510, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 1510,
-
- 1565, 1565, 1565, 1566, 1567, 1568, 1569, 1508,
- 1570, 1571, 1508, 1572, 1573, 1574, 1575, 1575,
- 1393, 1393, 1393, 1393, 1393, 1576, 1577, 1393,
- 1393, 1393, 1393, 1393, 1578, 1576, 1577, 1393,
-
- 1393, 1393, 1576, 1577, 1576, 1577, 1553, 1554,
- 1553, 1554, 1553, 1554, 1579, 1580, 1579, 1580,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1393, 1393, 1393, 1553, 1554, 1553, 1554, 1553,
- 1554, 1553, 1554, 1553, 1554, 1582, 1583, 1584,
- 1585, 1553, 1554, 1553, 1554, 1553, 1554, 1553,
- 1554, 1393, 1393, 1586, 1393, 1393, 1393, 1393,
-
- 1587, 1393, 1393, 1588, 1576, 1577, 1393, 1393,
- 1576, 1577, 1576, 1577, 1576, 1577, 1576, 1577,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1589, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1576, 1577, 1393, 1393, 1576, 1577, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1576,
- 1577, 1576, 1577, 1393, 1576, 1577, 1393, 1393,
- 1553, 1554, 1553, 1554, 1393, 1393, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1576, 1577, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1590, 1393, 1393,
- 1576, 1577, 1393, 1393, 1553, 1554, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1460, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1576, 1577, 1576, 1577, 1393,
- 1393, 1393, 1393, 1393, 1576, 1577, 1393, 1393,
- 1393, 1393, 1393, 1393, 1576, 1577, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 1576, 1577, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1460, 1460, 1460, 1393,
- 1393, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
-
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
-
- 1577, 1576, 1577, 1393, 1393, 1393, 1576, 1577,
- 1576, 1577, 1576, 1577, 1576, 1577, 1393, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
-
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1576,
- 1577, 1576, 1577, 1576, 1577, 1576, 1577, 1393,
- 1393, 1393, 1393, 1393, 1591, 1393, 1592, 1393,
-
- 1393, 1393, 1393, 1593, 1594, 1593, 1393, 1393,
- 1393, 1393, 1393, 1393, 1576, 1577, 1595, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1576,
- 1577, 1576, 1577, 1393, 1393, 1393, 1393, 1393,
-
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1462, 1462,
- 1462, 1462, 1462, 1462, 1463, 1463, 1463, 1463,
- 1463, 1463, 1463, 1543, 1543, 1543, 1543, 1543,
-
- 1463, 1463, 1463, 1463, 1543, 1543, 1543, 1543,
- 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543,
- 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573,
- 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573,
-
- 1573, 1573, 1573, 1573, 1573, 1543, 1543, 1573,
- 1573, 1573, 1573, 1573, 1573, 1512, 1512, 1512,
- 1543, 1543, 1543, 1543, 1543, 1509, 1509, 1509,
- 1509, 1509, 1512, 1512, 1512, 1512, 1512, 1512,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 202, 202, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 202, 1596,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1597, 1597, 1597, 1512, 1512, 1512,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1598, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1514, 1597, 1597, 1597, 1597, 1597,
- 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
-
- 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- 1597, 1597, 1597, 1597, 1471, 1471, 1471, 1471,
- 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- 1597, 1597, 1597, 1597, 1597, 1597, 1599, 1598,
-
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
-
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
- 1600, 1600, 1600, 1600, 1600, 1600, 1600, 202,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
-
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
- 1601, 1601, 1601, 1601, 1601, 1601, 1601, 202,
-
- 127, 123, 1602, 1603, 1604, 1605, 1606, 127,
- 123, 127, 123, 127, 123, 1607, 1608, 1609,
- 1610, 1235, 1237, 1238, 1611, 127, 123, 1611,
- 1235, 1235, 1235, 1235, 1612, 1612, 1613, 1614,
-
- 1615, 1616, 1615, 1616, 1615, 1616, 1615, 1616,
- 1615, 1616, 1615, 1616, 1615, 1616, 1615, 1616,
- 1615, 1616, 1615, 1616, 1615, 1616, 1615, 1616,
- 1615, 1616, 1615, 1616, 1615, 1616, 1615, 1616,
-
- 1615, 1616, 1615, 1616, 1617, 1618, 1618, 1618,
- 1618, 1618, 1618, 1619, 1620, 1619, 1620, 1621,
- 1621, 1621, 1622, 1623, 202, 202, 202, 202,
- 202, 1624, 1625, 1625, 1625, 1626, 1624, 1625,
-
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
-
- 1627, 1627, 1627, 1627, 1627, 1627, 202, 1628,
- 202, 202, 202, 202, 202, 1628, 202, 202,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
-
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
-
- 1629, 1629, 1629, 1629, 1629, 1629, 1630, 1630,
- 202, 202, 202, 202, 202, 202, 202, 1631,
- 1632, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 1633,
- 871, 871, 871, 871, 871, 871, 871, 871,
- 871, 871, 871, 871, 871, 871, 871, 871,
- 871, 871, 871, 871, 871, 871, 871, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 871, 871, 871, 871, 871, 871, 871, 202,
- 871, 871, 871, 871, 871, 871, 871, 202,
- 871, 871, 871, 871, 871, 871, 871, 202,
- 871, 871, 871, 871, 871, 871, 871, 202,
-
- 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267,
-
- 1634, 1634, 1635, 1636, 1635, 1636, 1634, 1634,
- 1634, 1635, 1636, 1634, 1635, 1636, 1397, 1397,
- 1397, 1397, 1397, 1397, 1397, 1397, 1396, 1637,
- 1638, 1639, 1640, 1641, 1635, 1636, 1641, 1641,
-
- 1642, 1643, 1579, 1580, 1579, 1580, 1579, 1580,
- 1579, 1580, 1639, 1639, 1639, 1639, 1644, 1645,
- 1639, 1646, 1647, 1648, 1648, 1647, 1647, 1647,
- 1647, 1647, 1649, 1649, 1650, 1651, 1651, 1652,
-
- 1653, 1651, 1654, 1655, 1655, 1656, 1656, 1656,
- 1656, 1656, 1657, 1658, 1657, 1658, 1657, 1659,
- 1596, 1596, 1660, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 202, 1661, 1661, 1661, 1661, 1662,
-
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
-
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
- 1661, 1661, 1661, 1662, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
-
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662,
- 1662, 1662, 1662, 1662, 1662, 1662, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
- 1663, 1663, 1663, 1663, 202, 202, 202, 202,
-
- 1351, 1664, 1665, 1666, 1502, 1667, 1668, 1669,
- 16, 1388, 16, 1388, 16, 1388, 16, 1388,
- 16, 1388, 1502, 1502, 16, 1388, 16, 1388,
- 16, 1388, 16, 1388, 1670, 1366, 1671, 1671,
-
- 1502, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
- 1669, 1669, 1672, 1673, 174, 1674, 1675, 1675,
- 1676, 1677, 1677, 1677, 1677, 1678, 1679, 1502,
- 1680, 1680, 1680, 1681, 1682, 1683, 1663, 1502,
-
- 202, 1684, 1685, 1684, 1685, 1684, 1685, 1684,
- 1685, 1684, 1685, 1685, 1686, 1685, 1686, 1685,
- 1686, 1685, 1686, 1685, 1686, 1685, 1686, 1685,
- 1686, 1685, 1686, 1685, 1686, 1685, 1686, 1685,
-
- 1686, 1685, 1686, 1684, 1685, 1686, 1685, 1686,
- 1685, 1686, 1685, 1685, 1685, 1685, 1685, 1685,
- 1686, 1686, 1685, 1686, 1686, 1685, 1686, 1686,
- 1685, 1686, 1686, 1685, 1686, 1686, 1685, 1685,
-
- 1685, 1685, 1685, 1684, 1685, 1684, 1685, 1684,
- 1685, 1685, 1685, 1685, 1685, 1685, 1684, 1685,
- 1685, 1685, 1685, 1685, 1686, 1687, 1687, 202,
- 202, 1688, 1688, 1689, 1689, 1690, 1691, 1692,
-
- 1693, 1694, 1695, 1694, 1695, 1694, 1695, 1694,
- 1695, 1694, 1695, 1695, 1696, 1695, 1696, 1695,
- 1696, 1695, 1696, 1695, 1696, 1695, 1696, 1695,
- 1696, 1695, 1696, 1695, 1696, 1695, 1696, 1695,
-
- 1696, 1695, 1696, 1694, 1695, 1696, 1695, 1696,
- 1695, 1696, 1695, 1695, 1695, 1695, 1695, 1695,
- 1696, 1696, 1695, 1696, 1696, 1695, 1696, 1696,
- 1695, 1696, 1696, 1695, 1696, 1696, 1695, 1695,
-
- 1695, 1695, 1695, 1694, 1695, 1694, 1695, 1694,
- 1695, 1695, 1695, 1695, 1695, 1695, 1694, 1695,
- 1695, 1695, 1695, 1695, 1696, 1694, 1694, 1696,
- 1696, 1696, 1696, 1697, 1698, 1699, 1700, 1701,
-
- 202, 202, 202, 202, 202, 1702, 1702, 1702,
- 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702,
- 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702,
- 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702,
-
- 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702,
- 1702, 1702, 1702, 1702, 1702, 1703, 1704, 1705,
- 202, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
-
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
-
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 202,
- 1707, 1707, 1708, 1708, 1708, 1708, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
-
- 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
- 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
- 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
- 1711, 1711, 1711, 1712, 1712, 1712, 1712, 1712,
-
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
-
- 1546, 1546, 1546, 1546, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713,
- 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713,
-
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1715, 1715, 202,
-
- 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708,
- 1708, 1708, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
-
- 1709, 1709, 1709, 1709, 1716, 1716, 1716, 1716,
- 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
- 1718, 1719, 1719, 1719, 1719, 1719, 1719, 1719,
- 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719,
-
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
- 1714, 1714, 1714, 1714, 1715, 1715, 1720, 1707,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1719, 1719, 1719, 1719, 1719, 1719, 1719,
- 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1718, 1718, 1718, 1718,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
-
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1722,
-
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
-
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1718,
- 1718, 1718, 1718, 1709, 1709, 1709, 1709, 1709,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1718, 1718,
-
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1718,
-
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
-
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
- 1723, 1723, 1723, 1723, 1723, 1723, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
+ 51, 51, 51, 51, 53, 51, 51, 53,
+ 51, 51, 51, 51, 1516, 51, 1516, 51,
+ 51, 51, 51, 1516, 1516, 1516, 51, 1555,
+ 51, 51, 51, 1563, 1563, 1563, 1563, 1564,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+ 1564, 51, 1565, 1566, 1506, 53, 53, 53,
+ 1567, 1568, 1567, 1568, 1567, 1568, 1567, 1568,
+ 1567, 1568, 1567, 1568, 1567, 1568, 1569, 1570,
+ 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578,
- 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
- 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
- 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576,
+ 1577, 1578, 1569, 1570, 1571, 1572, 1573, 1574,
+ 1575, 1576, 1577, 1578, 51, 1516, 1516, 1516,
+ 51, 51, 51, 51, 51, 51, 51, 51,
+
+ 51, 53, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51,
+ 1516, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 1516,
+
+ 1579, 1579, 1579, 1580, 1581, 1582, 1583, 1514,
+ 1584, 1585, 1514, 1586, 1587, 1588, 1589, 1589,
+ 1395, 1395, 1395, 1395, 1395, 1590, 1591, 1395,
+ 1395, 1395, 1395, 1395, 1592, 1590, 1591, 1395,
+
+ 1395, 1395, 1590, 1591, 1590, 1591, 1567, 1568,
+ 1567, 1568, 1567, 1568, 1593, 1594, 1593, 1594,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+
+ 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
+ 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
+ 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
+ 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
+
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1548, 1548, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+
+ 1395, 1395, 1395, 1567, 1568, 1567, 1568, 1567,
+ 1568, 1567, 1568, 1567, 1568, 1596, 1597, 1598,
+ 1599, 1567, 1568, 1567, 1568, 1567, 1568, 1567,
+ 1568, 1395, 1395, 1600, 1395, 1395, 1395, 1395,
+
+ 1601, 1395, 1395, 1602, 1590, 1591, 1395, 1395,
+ 1590, 1591, 1590, 1591, 1590, 1591, 1590, 1591,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1603, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+
+ 1590, 1591, 1395, 1395, 1590, 1591, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1590,
+ 1591, 1590, 1591, 1395, 1590, 1591, 1395, 1395,
+ 1567, 1568, 1567, 1568, 1395, 1395, 1395, 1395,
+
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1590, 1591, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1604, 1395, 1395,
+ 1590, 1591, 1395, 1395, 1567, 1568, 1395, 1395,
+
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1463, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1590, 1591, 1590, 1591, 1395,
+ 1395, 1395, 1395, 1395, 1590, 1591, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1590, 1591, 1395, 1395,
+
+ 1395, 1395, 1395, 1395, 1590, 1591, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1463, 1463, 1463, 1395,
+ 1395, 1590, 1591, 1590, 1591, 1590, 1591, 1590,
+
+ 1591, 1590, 1591, 1590, 1591, 1590, 1591, 1590,
+ 1591, 1590, 1591, 1590, 1591, 1590, 1591, 1590,
+ 1591, 1590, 1591, 1590, 1591, 1590, 1591, 1590,
+ 1591, 1590, 1591, 1590, 1591, 1590, 1591, 1590,
+
+ 1591, 1590, 1591, 1395, 1395, 1395, 1590, 1591,
+ 1590, 1591, 1590, 1591, 1590, 1591, 1395, 1590,
+ 1591, 1590, 1591, 1590, 1591, 1590, 1591, 1590,
+ 1591, 1590, 1591, 1590, 1591, 1590, 1591, 1590,
+
+ 1591, 1590, 1591, 1590, 1591, 1590, 1591, 1590,
+ 1591, 1590, 1591, 1590, 1591, 1590, 1591, 1590,
+ 1591, 1590, 1591, 1590, 1591, 1590, 1591, 1395,
+ 1395, 1395, 1395, 1395, 1605, 1395, 1606, 1395,
+
+ 1395, 1395, 1395, 1607, 1608, 1607, 1395, 1395,
+ 1395, 1395, 1395, 1395, 1590, 1591, 1609, 1395,
+ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1590,
+ 1591, 1590, 1591, 1395, 1395, 1395, 1395, 1395,
+
+ 1513, 1513, 1513, 1513, 1513, 1512, 1512, 1512,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1465, 1465,
+ 1465, 1465, 1465, 1465, 1466, 1466, 1466, 1466,
+ 1466, 1466, 1466, 1554, 1554, 1610, 1610, 1610,
+
+ 1466, 1466, 1466, 1466, 1610, 1610, 1610, 1610,
+ 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610,
+ 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
+ 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
+
+ 1587, 1587, 1587, 1587, 1587, 1610, 1610, 1587,
+ 1587, 1587, 1587, 1587, 1587, 1518, 1518, 1518,
+ 1554, 1610, 1610, 1610, 1610, 1555, 1515, 1515,
+ 1515, 1515, 1518, 1518, 1518, 1518, 1518, 1518,
+
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 203, 203, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 203, 1611,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1612, 1612, 1612, 1518, 1518, 1518,
+
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1613, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1521, 1612, 1612, 1612, 1612, 1612,
+ 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612,
+
+ 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612,
+ 1612, 1612, 1612, 1612, 1474, 1474, 1474, 1474,
+ 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612,
+ 1612, 1612, 1612, 1612, 1612, 1612, 1614, 1613,
+
+ 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615,
+ 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615,
+ 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615,
+ 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615,
+
+ 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615,
+ 1615, 1615, 1615, 1615, 1615, 1615, 1615, 203,
+ 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
+ 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
+
+ 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
+ 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
+ 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
+ 1616, 1616, 1616, 1616, 1616, 1616, 1616, 203,
+
+ 128, 124, 1617, 1618, 1619, 1620, 1621, 128,
+ 124, 128, 124, 128, 124, 1622, 1623, 1624,
+ 1625, 1236, 1238, 1239, 1626, 128, 124, 1626,
+ 1236, 1236, 1236, 1236, 1627, 1627, 1628, 1629,
+
+ 1630, 1631, 1630, 1631, 1630, 1631, 1630, 1631,
+ 1630, 1631, 1630, 1631, 1630, 1631, 1630, 1631,
+ 1630, 1631, 1630, 1631, 1630, 1631, 1630, 1631,
+ 1630, 1631, 1630, 1631, 1630, 1631, 1630, 1631,
+
+ 1630, 1631, 1630, 1631, 1632, 1633, 1633, 1633,
+ 1633, 1633, 1633, 1634, 1635, 1634, 1635, 1636,
+ 1636, 1636, 1637, 1638, 203, 203, 203, 203,
+ 203, 1639, 1640, 1640, 1640, 1641, 1639, 1640,
+
+ 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+ 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+ 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+ 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642,
+
+ 1642, 1642, 1642, 1642, 1642, 1642, 203, 1643,
+ 203, 203, 203, 203, 203, 1643, 203, 203,
+ 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+ 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+
+ 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+ 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+ 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+ 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+
+ 1644, 1644, 1644, 1644, 1644, 1644, 1645, 1645,
+ 203, 203, 203, 203, 203, 203, 203, 1646,
+ 1647, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 1648,
+
+ 872, 872, 872, 872, 872, 872, 872, 872,
+ 872, 872, 872, 872, 872, 872, 872, 872,
+ 872, 872, 872, 872, 872, 872, 872, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 872, 872, 872, 872, 872, 872, 872, 203,
+ 872, 872, 872, 872, 872, 872, 872, 203,
+ 872, 872, 872, 872, 872, 872, 872, 203,
+ 872, 872, 872, 872, 872, 872, 872, 203,
+
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+
+ 1649, 1649, 1650, 1651, 1650, 1651, 1649, 1649,
+ 1649, 1650, 1651, 1649, 1650, 1651, 1399, 1399,
+ 1399, 1399, 1399, 1399, 1399, 1399, 1398, 1652,
+ 1653, 1654, 1655, 1656, 1650, 1651, 1656, 1656,
+
+ 1657, 1658, 1593, 1594, 1593, 1594, 1593, 1594,
+ 1593, 1594, 1654, 1654, 1654, 1654, 1659, 1660,
+ 1654, 1661, 1662, 1663, 1663, 1662, 1662, 1662,
+ 1662, 1662, 1664, 1664, 1665, 1666, 1666, 1667,
+
+ 1668, 1666, 1669, 1670, 1670, 1671, 1671, 1671,
+ 1671, 1671, 1672, 1673, 1672, 1673, 1672, 1674,
+ 1611, 1611, 1675, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 203, 1676, 1676, 1676, 1676, 1677,
+
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1677, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677,
+ 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677,
+ 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677,
+ 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677,
+
+ 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677,
+ 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677,
+ 1677, 1677, 1677, 1677, 1677, 1677, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
+ 1678, 1678, 1678, 1678, 203, 203, 203, 203,
+
+ 1352, 1679, 1680, 1681, 1682, 1683, 1684, 1685,
+ 16, 1389, 16, 1389, 16, 1389, 16, 1389,
+ 16, 1389, 1682, 1682, 16, 1389, 16, 1389,
+ 16, 1389, 16, 1389, 1686, 1367, 1687, 1687,
+
+ 1682, 1685, 1685, 1685, 1685, 1685, 1685, 1685,
+ 1685, 1685, 1688, 1689, 175, 1690, 1691, 1691,
+ 1692, 1693, 1693, 1693, 1693, 1694, 1695, 1682,
+ 1696, 1696, 1696, 1697, 1698, 1699, 1678, 1682,
+
+ 203, 1700, 1701, 1700, 1701, 1700, 1701, 1700,
+ 1701, 1700, 1701, 1701, 1702, 1701, 1702, 1701,
+ 1702, 1701, 1702, 1701, 1702, 1701, 1702, 1701,
+ 1702, 1701, 1702, 1701, 1702, 1701, 1702, 1701,
+
+ 1702, 1701, 1702, 1700, 1701, 1702, 1701, 1702,
+ 1701, 1702, 1701, 1701, 1701, 1701, 1701, 1701,
+ 1702, 1702, 1701, 1702, 1702, 1701, 1702, 1702,
+ 1701, 1702, 1702, 1701, 1702, 1702, 1701, 1701,
+
+ 1701, 1701, 1701, 1700, 1701, 1700, 1701, 1700,
+ 1701, 1701, 1701, 1701, 1701, 1701, 1700, 1701,
+ 1701, 1701, 1701, 1701, 1702, 1703, 1703, 203,
+ 203, 1704, 1704, 1705, 1705, 1706, 1707, 1708,
+
+ 1709, 1710, 1711, 1710, 1711, 1710, 1711, 1710,
+ 1711, 1710, 1711, 1711, 1712, 1711, 1712, 1711,
+ 1712, 1711, 1712, 1711, 1712, 1711, 1712, 1711,
+ 1712, 1711, 1712, 1711, 1712, 1711, 1712, 1711,
+
+ 1712, 1711, 1712, 1710, 1711, 1712, 1711, 1712,
+ 1711, 1712, 1711, 1711, 1711, 1711, 1711, 1711,
+ 1712, 1712, 1711, 1712, 1712, 1711, 1712, 1712,
+ 1711, 1712, 1712, 1711, 1712, 1712, 1711, 1711,
+
+ 1711, 1711, 1711, 1710, 1711, 1710, 1711, 1710,
+ 1711, 1711, 1711, 1711, 1711, 1711, 1710, 1711,
+ 1711, 1711, 1711, 1711, 1712, 1710, 1710, 1712,
+ 1712, 1712, 1712, 1713, 1714, 1715, 1716, 1717,
+
+ 203, 203, 203, 203, 203, 1718, 1718, 1718,
+ 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
+ 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
+ 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
+
+ 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
+ 1718, 1718, 1718, 1718, 1718, 1719, 1720, 1721,
+ 203, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 203,
+ 1723, 1723, 1724, 1724, 1724, 1724, 1725, 1725,
1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
- 1725, 1725, 1725, 1725, 1725, 1725, 1726, 1726,
1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
- 1726, 1726, 1726, 1726, 1727, 1727, 1727, 1727,
+ 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+ 1727, 1727, 1727, 1728, 1728, 1728, 1728, 1728,
- 1727, 1727, 1727, 1727, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1729, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
+ 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729,
+ 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729,
+ 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
+ 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
+ 1730, 1730, 1730, 1730, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1732, 1732, 1732, 1732, 1732,
+ 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
+
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+ 1732, 1732, 1732, 1732, 1732, 1733, 1733, 203,
+
1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1733, 1733, 1733,
+ 1724, 1724, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1735, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
+ 1725, 1725, 1725, 1725, 1734, 1734, 1734, 1734,
+ 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+ 1736, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
+ 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+ 1732, 1732, 1732, 1732, 1733, 1733, 1738, 1723,
- 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
- 1734, 1734, 1734, 1734, 1734, 202, 202, 202,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
+ 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
+ 1724, 1724, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1739,
+ 1725, 1739, 1725, 1725, 1725, 1725, 1725, 1725,
+
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
+ 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
+
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1736, 1736, 1736, 1736,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1741,
+
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1736,
+ 1736, 1736, 1736, 1725, 1725, 1725, 1725, 1725,
- 1736, 1736, 1737, 1737, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1737, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
- 1736, 1737, 1736, 1736, 1736, 1737, 1736, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1736, 1736,
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
- 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
- 1739, 1739, 1739, 1739, 1739, 1739, 1740, 1741,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+ 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1736,
1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
@@ -2723,179 +2673,224 @@ static const unsigned short uc_property_trie[] = {
1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
- 1742, 1742, 1742, 1742, 1743, 1744, 1745, 1746,
- 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
+ 1742, 1742, 1742, 1742, 1742, 1742, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+
+ 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
+ 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
+ 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
+ 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
+
+ 1744, 1744, 1744, 1744, 1744, 1744, 1745, 1745,
+ 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
+ 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
+ 1745, 1745, 1745, 1745, 1746, 1746, 1746, 1746,
+
+ 1746, 1746, 1746, 1746, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1748, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1751, 1751, 1751, 1751, 1751,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1752, 1752, 1752,
+
+ 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
+ 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
+ 1753, 1753, 1753, 1753, 1753, 1754, 1753, 1753,
+ 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
+
+ 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
+ 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
+ 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
+ 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
+
+ 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
+ 1753, 1753, 1753, 1753, 1753, 203, 203, 203,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+
+ 1755, 1755, 1756, 1756, 1755, 1755, 1755, 1755,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+ 1755, 1755, 1755, 1755, 1756, 1755, 1755, 1755,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+
+ 1755, 1756, 1755, 1755, 1755, 1756, 1755, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+ 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+ 1758, 1758, 1758, 1758, 1758, 1758, 1759, 1760,
+
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1762, 1763, 1764, 1765,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+
+ 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773,
+ 1774, 1775, 1761, 1761, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+
+ 286, 287, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 1776, 268,
+ 1777, 1777, 1777, 1778, 1779, 1779, 1779, 1779,
+ 1779, 1779, 1779, 1779, 268, 268, 1778, 1780,
+
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 282, 283, 282, 283, 282, 283, 282, 283,
+ 288, 289, 288, 289, 1781, 1781, 1782, 1779,
+
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+
+ 1783, 1783, 1783, 1783, 1783, 1783, 1784, 1784,
+ 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
+ 1785, 1785, 1786, 1787, 1788, 1788, 1788, 1787,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789,
+ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790,
+ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1791,
+ 1791, 1791, 1791, 1660, 1660, 1660, 1660, 1660,
+
+ 1792, 1792, 1238, 1239, 1238, 1239, 1238, 1239,
+ 1238, 1239, 1238, 1239, 1238, 1239, 1238, 1239,
+ 1236, 1236, 1238, 1239, 1238, 1239, 1238, 1239,
+ 1238, 1239, 1238, 1239, 1238, 1239, 1238, 1239,
+
+ 1238, 1239, 1238, 1239, 1238, 1239, 1238, 1239,
+ 1238, 1239, 1238, 1239, 1238, 1239, 1238, 1239,
+ 1238, 1239, 1238, 1239, 1238, 1239, 1238, 1239,
+ 1238, 1239, 1238, 1239, 1238, 1239, 1238, 1239,
+
+ 1238, 1239, 1238, 1239, 1238, 1239, 1238, 1239,
+ 1238, 1239, 1238, 1239, 1238, 1239, 1238, 1239,
+ 1627, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+ 1236, 1238, 1239, 1238, 1239, 1793, 1238, 1239,
+
+ 1238, 1239, 1238, 1239, 1238, 1239, 1238, 1239,
+ 1660, 1794, 1794, 1238, 1239, 1795, 1796, 1797,
+ 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805,
+ 1804, 1805, 1804, 1805, 1804, 1805, 1804, 1805,
+
+ 1798, 1799, 1798, 1799, 1798, 1799, 1798, 1799,
+ 1798, 1799, 1806, 1807, 1808, 1809, 1810, 1811,
+ 1812, 1813, 1814, 1815, 1816, 1817, 1816, 1817,
+ 1818, 1819, 1820, 1821, 1820, 1821, 1820, 1821,
+
+ 203, 203, 1820, 1821, 1822, 1823, 1824, 1825,
+ 1826, 1825, 1826, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 1825, 1826, 1827,
+ 1828, 1828, 1796, 1829, 1829, 1829, 1829, 1829,
+
+ 1830, 1830, 1831, 1830, 1830, 1830, 1832, 1830,
+ 1830, 1830, 1830, 1831, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+ 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
+
+ 1830, 1830, 1830, 1833, 1833, 1831, 1831, 1833,
+ 1834, 1834, 1834, 1834, 1835, 203, 203, 203,
+ 1735, 1735, 1735, 1735, 1735, 1735, 814, 814,
+ 1430, 1836, 203, 203, 203, 203, 203, 203,
+
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+ 1837, 1837, 1838, 1839, 1840, 1840, 1841, 1841,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1842, 1842, 1843, 1843, 1843, 1843, 1843, 1843,
+ 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843,
+ 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843,
+ 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843,
+
+ 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843,
+ 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843,
+ 1843, 1843, 1843, 1843, 1842, 1842, 1842, 1842,
+ 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
+
+ 1842, 1842, 1842, 1842, 1844, 1845, 203, 203,
+ 203, 203, 203, 203, 203, 203, 1846, 1846,
+ 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854,
+ 1855, 1856, 203, 203, 203, 203, 203, 203,
+
+ 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+ 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+ 1857, 1857, 509, 509, 509, 509, 509, 509,
+ 1858, 1858, 1858, 509, 1859, 1860, 1861, 1862,
+
+ 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870,
+ 1871, 1872, 1873, 1873, 1873, 1873, 1873, 1873,
+ 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+ 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+
+ 1873, 1873, 1873, 1873, 1873, 1873, 1874, 1874,
+ 1874, 1874, 1874, 1875, 1875, 1875, 1876, 1877,
+ 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878,
+ 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878,
+
+ 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1879,
+ 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+ 1879, 1879, 1880, 1881, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 1882,
- 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754,
- 1755, 1756, 1742, 1742, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
-
- 285, 286, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 1757, 267,
- 1758, 1758, 1758, 1759, 1760, 1760, 1760, 1760,
- 1760, 1760, 1760, 1760, 267, 267, 1759, 1761,
-
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
- 281, 282, 281, 282, 281, 282, 281, 282,
- 287, 288, 287, 288, 1762, 1762, 1763, 1760,
-
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
-
- 1764, 1764, 1764, 1764, 1764, 1764, 1765, 1765,
- 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,
- 1766, 1766, 1767, 1768, 1769, 1769, 1769, 1768,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770,
- 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771,
- 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1772,
- 1772, 1772, 1772, 1645, 1645, 1645, 1645, 1645,
-
- 1773, 1773, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1235, 1235, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
-
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
-
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1612, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
- 1235, 1237, 1238, 1237, 1238, 1774, 1237, 1238,
-
- 1237, 1238, 1237, 1238, 1237, 1238, 1237, 1238,
- 1645, 1775, 1775, 1237, 1238, 1776, 1777, 1778,
- 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786,
- 1785, 1786, 1785, 1786, 1785, 1786, 1785, 1786,
-
- 1779, 1780, 1779, 1780, 1779, 1780, 1779, 1780,
- 1779, 1780, 1787, 1788, 1789, 1790, 1791, 1792,
- 1793, 1794, 1795, 1796, 1797, 1798, 1797, 1798,
- 1799, 1800, 1801, 1802, 1801, 1802, 1801, 1802,
-
- 202, 202, 1801, 1802, 1803, 1804, 1805, 1806,
- 1807, 1806, 1807, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 1806, 1807, 1808,
- 1809, 1809, 1777, 1810, 1810, 1810, 1810, 1810,
-
- 1811, 1811, 1812, 1811, 1811, 1811, 1813, 1811,
- 1811, 1811, 1811, 1812, 1811, 1811, 1811, 1811,
- 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811,
- 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811,
-
- 1811, 1811, 1811, 1814, 1814, 1812, 1812, 1814,
- 1815, 1815, 1815, 1815, 1816, 202, 202, 202,
- 1717, 1717, 1717, 1717, 1717, 1717, 813, 813,
- 1428, 1817, 202, 202, 202, 202, 202, 202,
-
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
-
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
- 1818, 1818, 1819, 1820, 1821, 1821, 1822, 1822,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1823, 1823, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
-
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
- 1824, 1824, 1824, 1824, 1823, 1823, 1823, 1823,
- 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
-
- 1823, 1823, 1823, 1823, 1825, 1826, 202, 202,
- 202, 202, 202, 202, 202, 202, 1827, 1827,
- 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835,
- 1836, 1837, 202, 202, 202, 202, 202, 202,
-
- 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
- 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
- 1838, 1838, 508, 508, 508, 508, 508, 508,
- 1839, 1839, 1839, 508, 1840, 1841, 1842, 1843,
-
- 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851,
- 1852, 1853, 1854, 1854, 1854, 1854, 1854, 1854,
- 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854,
- 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854,
-
- 1854, 1854, 1854, 1854, 1854, 1854, 1855, 1855,
- 1855, 1855, 1855, 1856, 1856, 1856, 1857, 1858,
- 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
- 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
-
- 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1860,
- 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
- 1860, 1860, 1861, 1862, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 1863,
+ 864, 864, 864, 864, 864, 864, 864, 864,
+ 864, 864, 864, 864, 864, 864, 864, 864,
+ 864, 864, 864, 864, 864, 864, 864, 864,
+ 864, 864, 864, 864, 864, 203, 203, 203,
- 863, 863, 863, 863, 863, 863, 863, 863,
- 863, 863, 863, 863, 863, 863, 863, 863,
- 863, 863, 863, 863, 863, 863, 863, 863,
- 863, 863, 863, 863, 863, 202, 202, 202,
-
- 1864, 1864, 1864, 1865, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
- 1866, 1866, 1866, 1867, 1865, 1865, 1864, 1864,
- 1864, 1864, 1865, 1865, 1864, 1864, 1865, 1865,
-
- 1868, 1869, 1869, 1869, 1869, 1869, 1869, 1870,
- 1871, 1871, 1869, 1869, 1869, 1869, 202, 1872,
- 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880,
- 1881, 1882, 202, 202, 202, 202, 1869, 1869,
-
- 1883, 1883, 1883, 1883, 1883, 1884, 1885, 1883,
- 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883,
- 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893,
- 1894, 1895, 1883, 1883, 1883, 1883, 1883, 202,
-
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
-
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1897, 1897, 1897, 1897, 1897, 1897, 1898,
- 1898, 1897, 1897, 1898, 1898, 1897, 1897, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1896, 1896, 1896, 1897, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1897, 1898, 202, 202,
- 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906,
- 1907, 1908, 202, 202, 1909, 1910, 1910, 1910,
-
- 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
- 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
- 1912, 1911, 1911, 1911, 1911, 1911, 1911, 1913,
- 1913, 1913, 1911, 851, 1884, 1914, 1883, 1883,
+ 1883, 1883, 1883, 1884, 1885, 1885, 1885, 1885,
+ 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885,
+ 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885,
+ 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885,
+
+ 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885,
+ 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885,
+ 1885, 1885, 1885, 1886, 1884, 1884, 1883, 1883,
+ 1883, 1883, 1884, 1884, 1883, 1883, 1884, 1884,
+
+ 1887, 1888, 1888, 1888, 1888, 1888, 1888, 1889,
+ 1890, 1890, 1888, 1888, 1888, 1888, 203, 1891,
+ 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899,
+ 1900, 1901, 203, 203, 203, 203, 1888, 1888,
+
+ 1902, 1902, 1902, 1902, 1902, 1903, 1904, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912,
+ 1913, 1914, 1902, 1902, 1902, 1902, 1902, 203,
1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
@@ -2903,3796 +2898,3882 @@ static const unsigned short uc_property_trie[] = {
1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
- 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
- 1916, 1915, 1916, 1916, 1917, 1915, 1915, 1916,
- 1916, 1915, 1915, 1915, 1915, 1915, 1916, 1916,
-
- 1915, 1916, 1915, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 1915, 1915, 1918, 1919, 1919,
-
- 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
- 1920, 1920, 1920, 1921, 1922, 1922, 1921, 1921,
- 1923, 1923, 1920, 1924, 1924, 1921, 1925, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 202, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 202, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 202,
- 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
- 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
-
- 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
- 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784,
- 1784, 1784, 1784, 1927, 1784, 1784, 1784, 1784,
- 1784, 1784, 1784, 1928, 1929, 1929, 1929, 1929,
-
- 1930, 1930, 1930, 1930, 1784, 1931, 1932, 1932,
- 1933, 1934, 1935, 1935, 202, 202, 202, 202,
- 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943,
- 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951,
-
- 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959,
- 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967,
- 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975,
- 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983,
-
- 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991,
- 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
-
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
-
- 2016, 2016, 2016, 2017, 2017, 2018, 2017, 2017,
- 2018, 2017, 2017, 2019, 2017, 2020, 202, 202,
- 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028,
- 2029, 2030, 202, 202, 202, 202, 202, 202,
-
- 2031, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2031, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2031, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2031, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2031, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2031, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2031, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 2031, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
- 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
-
- 2032, 2032, 2032, 2032, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 866, 866, 866, 866, 866, 866, 866, 866,
- 866, 866, 866, 866, 866, 866, 866, 866,
-
- 866, 866, 866, 866, 866, 866, 866, 202,
- 202, 202, 202, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 869, 869, 869, 869,
-
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 202, 202, 202, 202,
-
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
-
- 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034,
- 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034,
- 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034,
- 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034,
+ 1915, 1916, 1916, 1916, 1916, 1916, 1916, 1917,
+ 1917, 1916, 1916, 1917, 1917, 1916, 1916, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1915, 1915, 1915, 1916, 1915, 1915, 1915, 1915,
+ 1915, 1915, 1915, 1915, 1916, 1917, 203, 203,
+ 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925,
+ 1926, 1927, 203, 203, 1928, 1929, 1929, 1929,
+
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+ 1931, 1930, 1930, 1930, 1930, 1930, 1930, 1932,
+ 1932, 1932, 1930, 852, 1903, 1933, 1902, 1902,
+
+ 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+ 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+ 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+ 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+
+ 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+ 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+ 1935, 1934, 1935, 1935, 1936, 1934, 1934, 1935,
+ 1935, 1934, 1934, 1934, 1934, 1934, 1935, 1935,
+
+ 1934, 1935, 1934, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 1934, 1934, 1937, 1938, 1938,
+
+ 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939,
+ 1939, 1939, 1939, 1940, 1941, 1941, 1940, 1940,
+ 1942, 1942, 1939, 1943, 1943, 1940, 1944, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 1945, 1945, 1945, 1945, 1945, 1945, 203,
+ 203, 1945, 1945, 1945, 1945, 1945, 1945, 203,
+ 203, 1945, 1945, 1945, 1945, 1945, 1945, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1945, 1945, 1945, 1945, 1945, 1945, 1945, 203,
+ 1945, 1945, 1945, 1945, 1945, 1945, 1945, 203,
+ 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+ 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+
+ 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+ 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+ 1803, 1803, 1803, 1946, 1803, 1803, 1803, 1803,
+ 1803, 1803, 1803, 1947, 1948, 1948, 1948, 1948,
+
+ 1949, 1949, 1949, 1949, 1803, 1950, 1951, 1951,
+ 1952, 1953, 1954, 1954, 203, 203, 203, 203,
+ 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962,
+ 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970,
+
+ 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978,
+ 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986,
+ 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+ 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+
+ 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+ 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018,
+ 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026,
+ 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034,
2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 1725, 1725,
- 2035, 1725, 2035, 1725, 1725, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 1725,
-
- 2035, 1725, 2035, 1725, 1725, 2035, 2035, 1725,
- 1725, 1725, 2035, 2035, 2035, 2035, 2036, 2036,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
-
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
-
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2038, 2038, 2038, 1733, 1733,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
-
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
-
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 2040, 2041, 2042, 2043, 2044, 2045, 2045, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 2046, 2047, 2048, 2049, 2050,
- 202, 202, 202, 202, 202, 2051, 2052, 2053,
+ 2035, 2035, 2035, 2036, 2036, 2037, 2036, 2036,
+ 2037, 2036, 2036, 2038, 2036, 2039, 203, 203,
+ 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047,
+ 2048, 2049, 203, 203, 203, 203, 203, 203,
+
+ 2050, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2050, 2051, 2051, 2051,
+
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2050, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2050, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2050, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2050, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2050, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+
+ 2051, 2051, 2051, 2051, 2050, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+ 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+
+ 2051, 2051, 2051, 2051, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 867, 867, 867, 867, 867, 867, 867, 867,
+ 867, 867, 867, 867, 867, 867, 867, 867,
- 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054,
- 2054, 2055, 2053, 2053, 2053, 2053, 2053, 2053,
- 2053, 2053, 2053, 2053, 2053, 2053, 2053, 301,
- 2053, 2053, 2053, 2053, 2053, 301, 2053, 301,
+ 867, 867, 867, 867, 867, 867, 867, 203,
+ 203, 203, 203, 870, 870, 870, 870, 870,
+ 870, 870, 870, 870, 870, 870, 870, 870,
+ 870, 870, 870, 870, 870, 870, 870, 870,
- 2053, 2053, 301, 2053, 2053, 301, 2053, 2053,
- 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2054,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
+ 870, 870, 870, 870, 870, 870, 870, 870,
+ 870, 870, 870, 870, 870, 870, 870, 870,
+ 870, 870, 870, 870, 870, 870, 870, 870,
+ 870, 870, 870, 870, 203, 203, 203, 203,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
+ 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2057, 2057, 2057, 2057, 2057, 2057,
- 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+ 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+ 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+ 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+ 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
- 2057, 2057, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
+ 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054,
+ 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054,
+ 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054,
+ 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 1671, 1366,
+ 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054,
+ 2054, 2054, 2054, 2054, 2054, 2054, 1744, 1744,
+ 2054, 1744, 2054, 1744, 1744, 2054, 2054, 2054,
+ 2054, 2054, 2054, 2054, 2054, 2054, 2054, 1744,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
+ 2054, 1744, 2054, 1744, 1744, 2054, 2054, 1744,
+ 1744, 1744, 2054, 2054, 2054, 2054, 2055, 2055,
2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 348, 348, 2056, 2056, 2056, 2056, 2056, 2056,
+ 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 348, 348, 348, 348, 348, 348, 348, 348,
+ 2056, 2056, 2056, 2057, 2057, 2057, 1752, 1752,
2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2059, 340, 348, 348,
-
- 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
- 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
- 2061, 2062, 2063, 2064, 2065, 2066, 2066, 2067,
- 2068, 2069, 202, 202, 202, 202, 202, 202,
-
- 173, 173, 173, 173, 1219, 1219, 1219, 1107,
- 1107, 1107, 1107, 1107, 1107, 1107, 1763, 1763,
- 2070, 2071, 2071, 2072, 2072, 2073, 2074, 2073,
- 2074, 2073, 2074, 2073, 2074, 2073, 2074, 2073,
-
- 2074, 2073, 2074, 2073, 2074, 1683, 1683, 2075,
- 2076, 2070, 2070, 2070, 2070, 2072, 2072, 2072,
- 2077, 2078, 2079, 202, 2080, 2081, 2082, 2082,
- 2071, 1419, 1420, 1419, 1420, 1419, 1420, 2083,
-
- 2070, 2070, 2084, 2085, 2086, 2087, 2088, 202,
- 2070, 1422, 1380, 2070, 202, 202, 202, 202,
- 2056, 2056, 2056, 2089, 2056, 348, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
-
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 348, 348, 2090,
-
- 202, 2082, 2070, 2083, 1422, 1380, 2070, 2091,
- 1419, 1420, 2070, 2084, 2077, 2085, 2079, 2092,
- 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100,
- 2101, 2102, 2081, 2080, 2103, 2088, 2104, 2082,
-
- 2070, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
- 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
- 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
- 2105, 2105, 2105, 2106, 2070, 2107, 2108, 2072,
-
- 2108, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
- 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
- 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
- 2109, 2109, 2109, 2106, 2088, 2107, 2088, 2110,
-
- 2111, 2112, 1419, 1420, 2113, 2114, 2115, 2116,
- 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
- 2117, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
-
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 2115, 2115, 2115, 2118, 2118,
-
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
- 1706, 1706, 1706, 1706, 1706, 1706, 1706, 202,
-
- 202, 202, 1706, 1706, 1706, 1706, 1706, 1706,
- 202, 202, 1706, 1706, 1706, 1706, 1706, 1706,
- 202, 202, 1706, 1706, 1706, 1706, 1706, 1706,
- 202, 202, 1706, 1706, 1706, 202, 202, 202,
-
- 2119, 1422, 2088, 2108, 1679, 1422, 1422, 202,
- 1443, 1418, 1418, 1418, 1418, 1443, 1443, 202,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 2120, 2120, 2120, 2121, 51, 2122, 2122,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 202, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 202,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 202, 2123, 2123, 202, 2123,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 202, 202,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 202, 202,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 202, 202, 202, 202, 202,
-
- 2124, 2125, 2124, 202, 202, 202, 202, 2126,
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
-
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
- 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
- 2126, 2126, 2126, 2126, 202, 202, 202, 2127,
- 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127,
-
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
-
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
- 2128, 2128, 2128, 2128, 2128, 2129, 2129, 2129,
- 2129, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
-
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2129, 2131, 2132, 2133, 2133, 202,
- 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543,
- 1543, 1543, 1543, 1543, 1596, 202, 202, 202,
-
- 2132, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1222, 202, 202,
-
- 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134,
- 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134,
- 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134,
- 2134, 2134, 2134, 2134, 2134, 202, 202, 202,
+ 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
+ 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
+ 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
+ 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
+ 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058,
+ 2058, 2058, 1752, 1752, 1752, 1752, 1752, 1752,
+
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+
+ 2059, 2060, 2061, 2062, 2063, 2064, 2064, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 2065, 2066, 2067, 2068, 2069,
+ 203, 203, 203, 203, 203, 2070, 2071, 2072,
+
+ 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073,
+ 2073, 2074, 2072, 2072, 2072, 2072, 2072, 2072,
+ 2072, 2072, 2072, 2072, 2072, 2072, 2072, 302,
+ 2072, 2072, 2072, 2072, 2072, 302, 2072, 302,
+
+ 2072, 2072, 302, 2072, 2072, 302, 2072, 2072,
+ 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2073,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2076, 2076, 2076, 2076, 2076, 2076,
+ 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+
+ 2076, 2076, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 1687, 1367,
+
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 349, 349, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
+ 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
+
+ 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
+ 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2078, 341, 349, 349,
+
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2080, 2081, 2082, 2083, 2084, 2085, 2085, 2086,
+ 2087, 2088, 203, 203, 203, 203, 203, 203,
+
+ 174, 174, 174, 174, 1220, 1220, 1220, 1108,
+ 1108, 1108, 1108, 1108, 1108, 1108, 1782, 1782,
+ 2089, 2090, 2090, 2091, 2091, 2092, 2093, 2092,
+ 2093, 2092, 2093, 2092, 2093, 2092, 2093, 2092,
+
+ 2093, 2092, 2093, 2092, 2093, 2094, 2094, 2095,
+ 2096, 2089, 2089, 2089, 2089, 2091, 2091, 2091,
+ 2097, 2098, 2099, 203, 2100, 2101, 2102, 2102,
+ 2090, 1421, 1422, 1421, 1422, 1421, 1422, 2103,
+
+ 2089, 2089, 2104, 2105, 2106, 2107, 2108, 203,
+ 2089, 1424, 1381, 2089, 203, 203, 203, 203,
+ 2075, 2075, 2075, 2109, 2075, 349, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 349, 349, 2110,
+
+ 203, 2102, 2089, 2103, 1424, 1381, 2089, 2111,
+ 1421, 1422, 2089, 2104, 2097, 2105, 2099, 2112,
+ 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120,
+ 2121, 2122, 2101, 2100, 2123, 2108, 2124, 2102,
+
+ 2089, 2125, 2125, 2125, 2125, 2125, 2125, 2125,
+ 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125,
+ 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125,
+ 2125, 2125, 2125, 2126, 2089, 2127, 2128, 2091,
+
+ 2128, 2129, 2129, 2129, 2129, 2129, 2129, 2129,
+ 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129,
+ 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129,
+ 2129, 2129, 2129, 2126, 2108, 2127, 2108, 2130,
+
+ 2131, 2132, 1421, 1422, 2133, 2134, 2135, 2136,
+ 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
+ 2137, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+
2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+ 2135, 2135, 2135, 2135, 2135, 2135, 2138, 2138,
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
- 2135, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 203,
- 1107, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
- 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
- 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
- 2136, 2136, 2136, 2136, 202, 202, 202, 202,
+ 203, 203, 1722, 1722, 1722, 1722, 1722, 1722,
+ 203, 203, 1722, 1722, 1722, 1722, 1722, 1722,
+ 203, 203, 1722, 1722, 1722, 1722, 1722, 1722,
+ 203, 203, 1722, 1722, 1722, 203, 203, 203,
- 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137,
- 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137,
- 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137,
- 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2138,
+ 2139, 1424, 2108, 2128, 1695, 1424, 1424, 203,
+ 1445, 1420, 1420, 1420, 1420, 1445, 1445, 203,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 2140, 2140, 2140, 2141, 51, 2142, 2142,
- 2139, 2139, 2139, 2139, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 2140, 2140, 2140,
- 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141,
- 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 203, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
- 2141, 2142, 2141, 2141, 2141, 2141, 2141, 2141,
- 2141, 2141, 2142, 202, 202, 202, 202, 202,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 203,
2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 203, 2143, 2143, 203, 2143,
2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 203, 203,
2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
- 2143, 2143, 2143, 2143, 2143, 2143, 2144, 2144,
- 2144, 2144, 2144, 202, 202, 202, 202, 202,
+ 2143, 2143, 2143, 2143, 2143, 2143, 203, 203,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 202, 2146,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 203, 203, 203, 203, 203,
+
+ 2144, 2145, 2144, 203, 203, 203, 203, 2146,
+ 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
+ 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
+ 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2147, 2147, 2147, 2147, 202, 202, 202, 202,
+ 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
+ 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
+ 2146, 2146, 2146, 2146, 203, 203, 203, 2147,
2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2148, 2149, 2149, 2149, 2149, 2149, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
+
+ 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
+ 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
+ 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
+ 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
+
+ 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
+ 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
+ 2148, 2148, 2148, 2148, 2148, 2149, 2149, 2149,
+ 2149, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
- 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
- 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
- 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
+ 2150, 2150, 2149, 2151, 2152, 2153, 2153, 203,
+ 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610,
+ 1610, 1610, 1610, 1610, 1611, 203, 203, 203,
- 2150, 2150, 2150, 2150, 2150, 2150, 2151, 2151,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
+ 2152, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2153, 2153,
- 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
- 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+ 1468, 1468, 1468, 1468, 1468, 1223, 203, 203,
2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
- 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
+ 2154, 2154, 2154, 2154, 2154, 203, 203, 203,
2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 202, 202,
+ 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163,
- 2164, 2165, 202, 202, 202, 202, 202, 202,
- 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
- 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
+ 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
+ 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
+ 2155, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1108, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
+ 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
+ 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
+ 2156, 2156, 2156, 2156, 203, 203, 203, 203,
+
+ 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157,
+ 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157,
+ 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157,
+ 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2158,
+
+ 2159, 2159, 2159, 2159, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 2160, 2160, 2160,
+ 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161,
+ 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161,
+
+ 2161, 2162, 2161, 2161, 2161, 2161, 2161, 2161,
+ 2161, 2161, 2162, 203, 203, 203, 203, 203,
+ 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+ 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+
+ 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+ 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+ 2163, 2163, 2163, 2163, 2163, 2163, 2164, 2164,
+ 2164, 2164, 2164, 203, 203, 203, 203, 203,
+
+ 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+ 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+ 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+ 2165, 2165, 2165, 2165, 2165, 2165, 203, 2166,
- 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
- 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
- 2166, 2166, 2166, 2166, 202, 202, 202, 202,
2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167,
-
2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167,
2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167,
2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167,
- 2167, 2167, 2167, 2167, 202, 202, 202, 202,
-
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
-
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
-
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
- 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169,
-
- 2169, 2169, 2169, 2169, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 2170,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
-
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2172, 2172, 2172, 2172, 2172, 2172, 301, 301,
- 2172, 301, 2172, 2172, 2172, 2172, 2172, 2172,
- 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
- 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
+ 2167, 2167, 2167, 2167, 203, 203, 203, 203,
+ 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167,
+ 2168, 2169, 2169, 2169, 2169, 2169, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+ 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+ 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+ 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+ 2170, 2170, 2170, 2170, 2170, 2170, 2171, 2171,
+ 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
- 2172, 2172, 2172, 2172, 2172, 2172, 301, 2172,
- 2172, 301, 301, 301, 2172, 301, 301, 2172,
-
- 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
- 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
- 2173, 2173, 2173, 2173, 2173, 2173, 301, 2174,
- 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175,
- 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176,
- 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176,
- 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2177,
- 2177, 2178, 2178, 2178, 2178, 2178, 2178, 2178,
+ 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
+ 2172, 2172, 2172, 2172, 2172, 2172, 2173, 2173,
+ 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174,
+ 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174,
- 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
- 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
- 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
- 2179, 2179, 2179, 2179, 2179, 2179, 2179, 301,
+ 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174,
+ 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174,
+ 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174,
+ 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174,
- 301, 301, 301, 301, 301, 301, 301, 2180,
- 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
+ 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175,
+ 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175,
+ 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175,
+ 2175, 2175, 2175, 2175, 2175, 2175, 203, 203,
- 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181,
- 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181,
- 2181, 2181, 2181, 301, 2181, 2181, 301, 301,
- 301, 301, 301, 2182, 2182, 2182, 2182, 2182,
+ 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183,
+ 2184, 2185, 203, 203, 203, 203, 203, 203,
+ 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186,
+ 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186,
- 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
- 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
- 2183, 2183, 2183, 2183, 2183, 2183, 2184, 2184,
- 2184, 2184, 2185, 2185, 301, 301, 301, 2186,
+ 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186,
+ 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186,
+ 2186, 2186, 2186, 2186, 203, 203, 203, 203,
+ 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
- 2187, 2187, 301, 301, 301, 301, 301, 2188,
+ 2187, 2187, 2187, 2187, 203, 203, 203, 203,
+
+ 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188,
+ 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188,
+ 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188,
+ 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188,
+
+ 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
+ 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 301, 301, 301, 301, 2191, 2191, 2190, 2190,
+ 2189, 2189, 2189, 2189, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 2190,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
- 301, 301, 2191, 2191, 2191, 2191, 2191, 2191,
+ 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
+ 2191, 2191, 2191, 2191, 2191, 2191, 2191, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
+ 2191, 2191, 2191, 2191, 2191, 2191, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
- 2192, 2193, 2193, 2193, 301, 2193, 2193, 301,
- 301, 301, 301, 301, 2193, 2194, 2193, 2195,
- 2192, 2192, 2192, 2192, 301, 2192, 2192, 2192,
- 301, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+ 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2192, 2192, 2192, 2192, 2192, 2192, 302, 302,
+ 2192, 302, 2192, 2192, 2192, 2192, 2192, 2192,
2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
- 2192, 2192, 2192, 2192, 2196, 2196, 301, 301,
- 2195, 2197, 2194, 301, 301, 301, 301, 2198,
-
- 2199, 2200, 2201, 2202, 2203, 2203, 2203, 2203,
- 2204, 301, 301, 301, 301, 301, 301, 301,
- 2205, 2205, 2205, 2205, 2205, 2205, 2206, 2206,
- 2207, 301, 301, 301, 301, 301, 301, 301,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2209, 2209, 2210,
+ 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+ 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+ 2192, 2192, 2192, 2192, 2192, 2192, 302, 2192,
+ 2192, 302, 302, 302, 2192, 302, 302, 2192,
+
+ 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193,
+ 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193,
+ 2193, 2193, 2193, 2193, 2193, 2193, 302, 2194,
+ 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
+
+ 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196,
+ 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196,
+ 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2197,
+ 2197, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+
+ 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199,
+ 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199,
+ 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199,
+ 2199, 2199, 2199, 2199, 2199, 2199, 2199, 302,
+
+ 302, 302, 302, 302, 302, 302, 302, 2200,
+ 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
+ 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
+ 2201, 2201, 2201, 302, 2201, 2201, 302, 302,
+ 302, 302, 302, 2202, 2202, 2202, 2202, 2202,
+
+ 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+ 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+ 2203, 2203, 2203, 2203, 2203, 2203, 2204, 2204,
+ 2204, 2204, 2205, 2205, 302, 302, 302, 2206,
+
+ 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
+ 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
+ 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
+ 2207, 2207, 302, 302, 302, 302, 302, 2208,
+
+ 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209,
+ 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209,
+ 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209,
+ 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209,
+
+ 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210,
+ 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210,
+ 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210,
+ 302, 302, 302, 302, 2211, 2211, 2210, 2210,
2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
+ 302, 302, 2211, 2211, 2211, 2211, 2211, 2211,
2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
- 2211, 2211, 2211, 2211, 2211, 2212, 2212, 2212,
- 2213, 2213, 2213, 2213, 2213, 2214, 2215, 2214,
- 2216, 2214, 2214, 2215, 2215, 2217, 2214, 2214,
- 2214, 2214, 2214, 2213, 2213, 2213, 2213, 2217,
- 2213, 2213, 2213, 2213, 2213, 2214, 2213, 2213,
-
- 2213, 2214, 2215, 2215, 2214, 2218, 2219, 301,
- 301, 301, 301, 2220, 2220, 2220, 2220, 2221,
- 2222, 2222, 2222, 2222, 2222, 2222, 2223, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
+ 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
+ 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
+ 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
+ 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
- 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
- 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
- 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
- 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
+ 2212, 2213, 2213, 2213, 302, 2213, 2213, 302,
+ 302, 302, 302, 302, 2213, 2214, 2213, 2215,
+ 2212, 2212, 2212, 2212, 302, 2212, 2212, 2212,
+ 302, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
- 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224,
- 2224, 2224, 2224, 2224, 2224, 2224, 301, 301,
- 301, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
+ 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
+ 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
+ 2212, 2212, 2212, 2212, 2216, 2216, 302, 302,
+ 2215, 2217, 2214, 302, 302, 302, 302, 2218,
- 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226,
- 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226,
- 2226, 2226, 2226, 2226, 2226, 2226, 301, 301,
- 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
+ 2219, 2220, 2221, 2222, 2223, 2223, 2223, 2223,
+ 2224, 302, 302, 302, 302, 302, 302, 302,
+ 2225, 2225, 2225, 2225, 2225, 2225, 2226, 2226,
+ 2227, 302, 302, 302, 302, 302, 302, 302,
2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
- 2228, 2228, 2228, 301, 301, 301, 301, 301,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
-
- 2230, 2231, 2230, 2231, 2231, 2231, 2230, 2230,
- 2230, 2231, 2230, 2230, 2231, 2230, 2231, 2231,
- 2230, 2231, 301, 301, 301, 301, 301, 301,
- 301, 2232, 2232, 2232, 2232, 301, 301, 301,
-
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 2233, 2233, 2233, 2233, 2234, 2234, 2235,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
-
- 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
- 2236, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
-
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
- 2237, 2237, 2237, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
-
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
- 2238, 2238, 2238, 301, 301, 301, 301, 301,
- 301, 301, 2239, 2239, 2239, 2239, 2239, 2239,
-
- 2240, 2241, 2241, 2241, 2241, 2241, 2241, 2241,
- 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241,
- 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241,
- 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241,
-
- 2241, 2241, 2242, 2241, 2243, 2243, 2243, 2243,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251,
- 2252, 2253, 301, 301, 301, 301, 301, 301,
-
- 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261,
- 2262, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 301,
-
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
-
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 301, 2265, 2265, 2266, 301, 301,
- 2264, 2264, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2268, 2268, 2268,
-
- 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2267,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 2269, 2269, 2269, 2270, 2269, 2269, 2269, 2269,
- 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269,
-
- 2269, 2269, 2269, 2269, 2269, 2271, 2272, 2272,
- 2273, 2273, 2273, 2272, 2273, 2272, 2272, 2272,
- 2272, 2274, 2274, 2274, 2275, 2276, 2276, 2276,
- 2276, 2276, 301, 301, 301, 301, 301, 301,
-
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 2277, 2278, 2277, 2277, 2279, 2279, 2279, 2278,
- 2277, 2279, 2279, 2277, 2277, 2279, 2277, 2277,
-
- 2278, 2277, 2279, 2279, 2277, 2280, 2280, 2280,
- 2280, 2281, 2282, 2283, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
+ 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+ 2228, 2228, 2228, 2228, 2228, 2229, 2229, 2230,
+
+ 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231,
+ 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231,
+ 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231,
+ 2231, 2231, 2231, 2231, 2231, 2232, 2232, 2232,
+
+ 2233, 2233, 2233, 2233, 2233, 2234, 2235, 2234,
+ 2236, 2234, 2234, 2235, 2235, 2237, 2234, 2234,
+ 2234, 2234, 2234, 2233, 2233, 2233, 2233, 2237,
+ 2233, 2233, 2233, 2233, 2233, 2234, 2233, 2233,
+
+ 2233, 2234, 2235, 2235, 2234, 2238, 2239, 302,
+ 302, 302, 302, 2240, 2240, 2240, 2240, 2241,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2243, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+ 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+ 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+ 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+
+ 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+ 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+ 2244, 2244, 2244, 2244, 2244, 2244, 302, 302,
+ 302, 2245, 2245, 2245, 2245, 2245, 2245, 2245,
+
+ 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
+ 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
+ 2246, 2246, 2246, 2246, 2246, 2246, 302, 302,
+ 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+
+ 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
+ 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
+ 2248, 2248, 2248, 302, 302, 302, 302, 302,
+ 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
+
+ 2250, 2251, 2250, 2251, 2251, 2251, 2250, 2250,
+ 2250, 2251, 2250, 2250, 2251, 2250, 2251, 2251,
+ 2250, 2251, 302, 302, 302, 302, 302, 302,
+ 302, 2252, 2252, 2252, 2252, 302, 302, 302,
+
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 2253, 2253, 2253, 2253, 2254, 2254, 2255,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256,
+ 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256,
+ 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256,
+ 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256,
+
+ 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256,
+ 2256, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258,
+ 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258,
+ 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258,
+ 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258,
+
+ 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258,
+ 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258,
+ 2258, 2258, 2258, 302, 302, 302, 302, 302,
+ 302, 302, 2259, 2259, 2259, 2259, 2259, 2259,
+
+ 2260, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
+ 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
+ 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
+ 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
+
+ 2261, 2261, 2262, 2261, 2263, 2263, 2263, 2263,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271,
+ 2272, 2273, 302, 302, 302, 302, 302, 302,
+
+ 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281,
+ 2282, 2283, 2283, 2283, 2283, 2283, 2283, 2283,
+ 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283,
+ 2283, 2283, 2283, 2283, 2283, 2283, 2283, 302,
2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284,
2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284,
- 2284, 2284, 2284, 2284, 2284, 2284, 2284, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
+ 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284,
+ 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284,
+
+ 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284,
+ 2284, 2284, 302, 2285, 2285, 2286, 302, 302,
+ 2284, 2284, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
- 2285, 2286, 2285, 2287, 2287, 2287, 2287, 2287,
- 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
- 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
- 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
- 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
- 2286, 2286, 2286, 2286, 2286, 2286, 2288, 2289,
- 2289, 2290, 2290, 2290, 2290, 2290, 202, 202,
- 202, 202, 2291, 2292, 2293, 2294, 2295, 2296,
- 2297, 2298, 2299, 2300, 2300, 2300, 2300, 2300,
- 2300, 2300, 2300, 2300, 2300, 2300, 2301, 2302,
- 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 2311,
- 2312, 2312, 2313, 2314, 2314, 2314, 2314, 2314,
- 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314,
- 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314,
- 2314, 2314, 2315, 2314, 2315, 2314, 2314, 2314,
- 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314,
- 2314, 2314, 2314, 2315, 2314, 2314, 2314, 2314,
- 2313, 2313, 2313, 2312, 2312, 2312, 2312, 2313,
- 2313, 2316, 2317, 2318, 2318, 2319, 2320, 2320,
- 2320, 2320, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 2321, 202, 202,
- 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
- 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
- 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
- 2322, 202, 202, 202, 202, 202, 202, 202,
+ 2287, 2287, 2287, 2287, 2287, 2288, 2288, 2288,
+
+ 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2287,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 2289, 2289, 2289, 2290, 2289, 2289, 2289, 2289,
+ 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
+
+ 2289, 2289, 2289, 2289, 2289, 2291, 2292, 2292,
+ 2293, 2293, 2293, 2292, 2293, 2292, 2292, 2292,
+ 2292, 2294, 2294, 2294, 2295, 2296, 2296, 2296,
+ 2296, 2296, 302, 302, 302, 302, 302, 302,
+
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 2297, 2298, 2297, 2297, 2299, 2299, 2299, 2298,
+ 2297, 2299, 2299, 2297, 2297, 2299, 2297, 2297,
+
+ 2298, 2297, 2299, 2299, 2297, 2300, 2300, 2300,
+ 2300, 2301, 2302, 2303, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304,
+ 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304,
+ 2304, 2304, 2304, 2304, 2304, 2304, 2304, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 2305, 2306, 2305, 2307, 2307, 2307, 2307, 2307,
+ 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2307,
+ 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2307,
+ 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2307,
+ 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2307,
+ 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2307,
+ 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2307,
+ 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
+ 2306, 2306, 2306, 2306, 2306, 2306, 2308, 2309,
+ 2309, 2310, 2310, 2310, 2310, 2310, 203, 203,
+ 203, 203, 2311, 2312, 2313, 2314, 2315, 2316,
+ 2317, 2318, 2319, 2320, 2320, 2320, 2320, 2320,
+ 2320, 2320, 2320, 2320, 2320, 2320, 2321, 2322,
2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330,
- 2331, 2332, 202, 202, 202, 202, 202, 202,
-
- 2333, 2333, 2333, 2334, 2334, 2334, 2334, 2334,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 2331,
+ 2332, 2332, 2333, 2334, 2334, 2334, 2334, 2334,
2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
+ 2334, 2334, 2335, 2334, 2335, 2334, 2334, 2334,
2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
- 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2335,
- 2336, 2336, 2336, 2336, 2337, 2336, 2338, 2338,
- 2336, 2336, 2336, 2339, 2339, 202, 2340, 2341,
- 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349,
- 2350, 2351, 2351, 2351, 2352, 2353, 2353, 2354,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
- 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
- 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
- 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
- 2355, 2355, 2355, 2356, 2357, 2358, 2355, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2359, 2359, 2360, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361,
- 2361, 2361, 2361, 2360, 2360, 2360, 2359, 2359,
- 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2360,
- 2362, 2361, 2363, 2363, 2361, 2364, 2364, 2365,
- 2366, 2367, 2368, 2367, 2367, 2369, 2370, 2371,
- 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379,
- 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2386,
- 202, 2387, 2387, 2387, 2387, 2387, 2387, 2387,
- 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387,
- 2387, 2387, 2387, 2387, 2387, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 202, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
- 2388, 2388, 2388, 2388, 2389, 2389, 2389, 2390,
- 2390, 2390, 2389, 2389, 2390, 2391, 2392, 2390,
- 2393, 2393, 2394, 2393, 2393, 2394, 2395, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2396, 2396, 2396, 2396, 2396, 2396, 2396, 202,
- 2396, 202, 2396, 2396, 2396, 2396, 202, 2396,
- 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
- 2396, 2396, 2396, 2396, 2396, 2396, 202, 2396,
- 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
- 2396, 2397, 202, 202, 202, 202, 202, 202,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
- 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2399,
- 2400, 2400, 2400, 2399, 2399, 2399, 2399, 2399,
- 2399, 2401, 2402, 202, 202, 202, 202, 202,
- 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410,
- 2411, 2412, 202, 202, 202, 202, 202, 202,
-
- 2413, 2414, 2415, 2415, 202, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 202, 202, 2416,
- 2416, 202, 202, 2416, 2416, 2416, 2416, 2416,
+ 2334, 2334, 2334, 2335, 2334, 2334, 2334, 2334,
+ 2333, 2333, 2333, 2332, 2332, 2332, 2332, 2333,
+ 2333, 2336, 2337, 2338, 2338, 2339, 2340, 2340,
+ 2340, 2340, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 2341, 203, 203,
+ 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342,
+ 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342,
+ 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342,
+ 2342, 203, 203, 203, 203, 203, 203, 203,
+ 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350,
+ 2351, 2352, 203, 203, 203, 203, 203, 203,
+
+ 2353, 2353, 2353, 2354, 2354, 2354, 2354, 2354,
+ 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354,
+ 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354,
+ 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354,
+ 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2355,
+ 2356, 2356, 2356, 2356, 2357, 2356, 2358, 2358,
+ 2356, 2356, 2356, 2359, 2359, 203, 2360, 2361,
+ 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369,
+ 2370, 2371, 2371, 2371, 2372, 2373, 2373, 2374,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
+ 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
+ 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
+ 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
+ 2375, 2375, 2375, 2376, 2377, 2378, 2375, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2379, 2379, 2380, 2381, 2381, 2381, 2381, 2381,
+ 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+ 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+ 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+ 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+ 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+ 2381, 2381, 2381, 2380, 2380, 2380, 2379, 2379,
+ 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2380,
+ 2382, 2381, 2383, 2383, 2381, 2384, 2384, 2385,
+ 2386, 2387, 2388, 2387, 2387, 2389, 2390, 2391,
+ 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399,
+ 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2406,
+ 203, 2407, 2407, 2407, 2407, 2407, 2407, 2407,
+ 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407,
+ 2407, 2407, 2407, 2407, 2407, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+ 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+ 2408, 2408, 203, 2408, 2408, 2408, 2408, 2408,
+ 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+ 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+ 2408, 2408, 2408, 2408, 2409, 2409, 2409, 2410,
+ 2410, 2410, 2409, 2409, 2410, 2411, 2412, 2410,
+ 2413, 2413, 2414, 2413, 2413, 2414, 2415, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 203,
+ 2416, 203, 2416, 2416, 2416, 2416, 203, 2416,
2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 203, 2416,
2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 202, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 202, 2416, 2416, 202, 2416, 2416, 2416,
- 2416, 2416, 202, 2417, 2418, 2416, 2419, 2415,
- 2414, 2415, 2415, 2415, 2415, 202, 202, 2415,
- 2415, 202, 202, 2420, 2420, 2421, 202, 202,
- 2422, 202, 202, 202, 202, 202, 202, 2419,
- 202, 202, 202, 202, 202, 2416, 2416, 2416,
- 2416, 2416, 2415, 2415, 202, 202, 2423, 2423,
- 2423, 2423, 2423, 2423, 2423, 202, 202, 202,
- 2423, 2423, 2423, 2423, 2423, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2424, 2424, 2424,
- 2424, 2424, 2424, 2424, 2424, 2425, 2425, 2425,
- 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426,
- 2425, 2425, 2427, 2426, 2426, 2425, 2428, 2424,
- 2424, 2424, 2424, 2429, 2429, 2430, 2430, 2431,
- 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439,
- 2440, 2441, 2442, 2430, 202, 2431, 2443, 2444,
- 2445, 2445, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
+ 2416, 2417, 203, 203, 203, 203, 203, 203,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2419,
+ 2420, 2420, 2420, 2419, 2419, 2419, 2419, 2419,
+ 2419, 2421, 2422, 203, 203, 203, 203, 203,
+ 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430,
+ 2431, 2432, 203, 203, 203, 203, 203, 203,
+
+ 2433, 2434, 2435, 2435, 203, 2436, 2436, 2436,
+ 2436, 2436, 2436, 2436, 2436, 203, 203, 2436,
+ 2436, 203, 203, 2436, 2436, 2436, 2436, 2436,
+ 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436,
+ 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436,
+ 2436, 203, 2436, 2436, 2436, 2436, 2436, 2436,
+ 2436, 203, 2436, 2436, 203, 2436, 2436, 2436,
+ 2436, 2436, 203, 2437, 2438, 2436, 2439, 2435,
+ 2434, 2435, 2435, 2435, 2435, 203, 203, 2435,
+ 2435, 203, 203, 2440, 2440, 2441, 203, 203,
+ 2442, 203, 203, 203, 203, 203, 203, 2439,
+ 203, 203, 203, 203, 203, 2436, 2436, 2436,
+ 2436, 2436, 2435, 2435, 203, 203, 2443, 2443,
+ 2443, 2443, 2443, 2443, 2443, 203, 203, 203,
+ 2443, 2443, 2443, 2443, 2443, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+ 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+ 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+ 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+ 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+ 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+ 2444, 2444, 2444, 2444, 2444, 2445, 2445, 2445,
2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446,
- 2447, 2448, 2448, 2449, 2449, 2449, 2449, 2449,
- 2449, 2448, 2450, 2451, 2451, 2447, 2451, 2449,
- 2449, 2448, 2452, 2453, 2446, 2446, 2454, 2446,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462,
- 2463, 2464, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
- 2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
- 2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
- 2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
- 2465, 2465, 2465, 2465, 2465, 2465, 2465, 2465,
- 2465, 2465, 2465, 2465, 2465, 2465, 2465, 2466,
- 2467, 2467, 2468, 2468, 2468, 2468, 202, 202,
- 2467, 2467, 2469, 2469, 2468, 2468, 2467, 2470,
- 2471, 2472, 2473, 2473, 2474, 2474, 2475, 2475,
- 2475, 2473, 2476, 2476, 2476, 2476, 2476, 2476,
- 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2476,
- 2477, 2477, 2477, 2477, 2478, 2478, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2480, 2480, 2480, 2481, 2481, 2481, 2481, 2481,
- 2481, 2481, 2481, 2480, 2480, 2481, 2480, 2482,
- 2481, 2483, 2483, 2484, 2479, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492,
- 2493, 2494, 202, 202, 202, 202, 202, 202,
- 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495,
- 2495, 2495, 2495, 2495, 2495, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
- 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
+ 2445, 2445, 2447, 2446, 2446, 2445, 2448, 2444,
+ 2444, 2444, 2444, 2449, 2449, 2450, 2450, 2451,
+ 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459,
+ 2460, 2461, 2462, 2450, 203, 2451, 2463, 2464,
+ 2465, 2465, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466,
+ 2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466,
+ 2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466,
+ 2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466,
+ 2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466,
+ 2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466,
+ 2467, 2468, 2468, 2469, 2469, 2469, 2469, 2469,
+ 2469, 2468, 2470, 2471, 2471, 2467, 2471, 2469,
+ 2469, 2468, 2472, 2473, 2466, 2466, 2474, 2466,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482,
+ 2483, 2484, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485,
+ 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485,
+ 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485,
+ 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485,
+ 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485,
+ 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2486,
+ 2487, 2487, 2488, 2488, 2488, 2488, 203, 203,
+ 2487, 2487, 2489, 2489, 2488, 2488, 2487, 2490,
+ 2491, 2492, 2493, 2493, 2494, 2494, 2495, 2495,
+ 2495, 2493, 2496, 2496, 2496, 2496, 2496, 2496,
2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
- 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
- 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
- 2496, 2496, 2496, 2497, 2498, 2497, 2498, 2498,
- 2497, 2497, 2497, 2497, 2497, 2497, 2499, 2500,
- 2501, 202, 202, 202, 202, 202, 202, 202,
- 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509,
- 2510, 2511, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512,
- 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512,
- 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512,
- 2512, 2512, 2513, 202, 202, 2514, 2514, 2514,
- 2515, 2515, 2514, 2514, 2514, 2514, 2515, 2514,
- 2514, 2514, 2514, 2516, 202, 202, 202, 202,
- 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524,
- 2525, 2526, 2527, 2527, 2528, 2528, 2528, 2529,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530,
- 2530, 2530, 2530, 2530, 2531, 2531, 2531, 2532,
+ 2497, 2497, 2497, 2497, 2498, 2498, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2499, 2499, 2499, 2499, 2499, 2499, 2499, 2499,
+ 2499, 2499, 2499, 2499, 2499, 2499, 2499, 2499,
+ 2499, 2499, 2499, 2499, 2499, 2499, 2499, 2499,
+ 2499, 2499, 2499, 2499, 2499, 2499, 2499, 2499,
+ 2499, 2499, 2499, 2499, 2499, 2499, 2499, 2499,
+ 2499, 2499, 2499, 2499, 2499, 2499, 2499, 2499,
+ 2500, 2500, 2500, 2501, 2501, 2501, 2501, 2501,
+ 2501, 2501, 2501, 2500, 2500, 2501, 2500, 2502,
+ 2501, 2503, 2503, 2504, 2499, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512,
+ 2513, 2514, 203, 203, 203, 203, 203, 203,
+ 2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515,
+ 2515, 2515, 2515, 2515, 2515, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2517, 2518, 2517, 2518, 2518,
+ 2517, 2517, 2517, 2517, 2517, 2517, 2519, 2520,
+ 2521, 203, 203, 203, 203, 203, 203, 203,
+ 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529,
+ 2530, 2531, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532,
2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532,
- 2531, 2533, 2534, 2535, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
- 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
- 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
- 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
- 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537,
- 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537,
- 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537,
- 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537,
- 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545,
- 2546, 2547, 2548, 2548, 2548, 2548, 2548, 2548,
- 2548, 2548, 2548, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 2549,
-
- 2550, 2550, 2550, 2550, 2550, 2550, 2550, 202,
- 202, 2550, 202, 202, 2550, 2550, 2550, 2550,
- 2550, 2550, 2550, 2550, 202, 2550, 2550, 202,
+ 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532,
+ 2532, 2532, 2533, 203, 203, 2534, 2534, 2534,
+ 2535, 2535, 2534, 2534, 2534, 2534, 2535, 2534,
+ 2534, 2534, 2534, 2536, 203, 203, 203, 203,
+ 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544,
+ 2545, 2546, 2547, 2547, 2548, 2548, 2548, 2549,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550,
2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550,
2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550,
- 2551, 2552, 2552, 2552, 2552, 2552, 202, 2552,
- 2553, 202, 202, 2554, 2554, 2555, 2556, 2557,
- 2552, 2557, 2552, 2558, 2559, 2560, 2559, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568,
- 2569, 2570, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
- 202, 202, 2571, 2571, 2571, 2571, 2571, 2571,
- 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
- 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
- 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
- 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
- 2571, 2572, 2572, 2572, 2573, 2573, 2573, 2573,
- 202, 202, 2573, 2573, 2572, 2572, 2572, 2572,
- 2574, 2571, 2575, 2571, 2572, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2576, 2577, 2577, 2577, 2577, 2577, 2577, 2578,
- 2578, 2577, 2577, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576,
- 2576, 2576, 2576, 2577, 2579, 2577, 2577, 2577,
- 2577, 2580, 2581, 2577, 2577, 2577, 2577, 2582,
- 2583, 2584, 2585, 2585, 2584, 2582, 2583, 2579,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2586, 2587, 2587, 2587, 2587, 2587, 2587, 2588,
- 2588, 2587, 2587, 2587, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
- 2586, 2586, 2586, 2586, 2589, 2589, 2590, 2590,
- 2590, 2590, 2587, 2587, 2587, 2587, 2587, 2587,
- 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2588,
- 2587, 2591, 2592, 2593, 2593, 2594, 2595, 2595,
- 2595, 2592, 2592, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
+ 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550,
+ 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550,
+ 2550, 2550, 2550, 2550, 2551, 2551, 2551, 2552,
+ 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552,
+ 2551, 2553, 2554, 2555, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556,
+ 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556,
+ 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556,
+ 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556,
+ 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557,
+ 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557,
+ 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557,
+ 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557,
+ 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565,
+ 2566, 2567, 2568, 2568, 2568, 2568, 2568, 2568,
+ 2568, 2568, 2568, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 2569,
+
+ 2570, 2570, 2570, 2570, 2570, 2570, 2570, 203,
+ 203, 2570, 203, 203, 2570, 2570, 2570, 2570,
+ 2570, 2570, 2570, 2570, 203, 2570, 2570, 203,
+ 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570,
+ 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570,
+ 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570,
+ 2571, 2572, 2572, 2572, 2572, 2572, 203, 2572,
+ 2573, 203, 203, 2574, 2574, 2575, 2576, 2577,
+ 2572, 2577, 2572, 2578, 2579, 2580, 2579, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588,
+ 2589, 2590, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
+ 203, 203, 2591, 2591, 2591, 2591, 2591, 2591,
+ 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
+ 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
+ 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
+ 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
+ 2591, 2592, 2592, 2592, 2593, 2593, 2593, 2593,
+ 203, 203, 2593, 2593, 2592, 2592, 2592, 2592,
+ 2594, 2591, 2595, 2591, 2592, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2596, 2597, 2597, 2597, 2597, 2597, 2597, 2598,
+ 2598, 2597, 2597, 2596, 2596, 2596, 2596, 2596,
2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
- 2596, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 202, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597,
- 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2598,
- 2599, 2599, 2599, 2599, 2599, 2599, 2599, 202,
- 2599, 2599, 2599, 2599, 2599, 2599, 2598, 2600,
- 2597, 2601, 2601, 2602, 2602, 2602, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610,
- 2611, 2612, 2613, 2613, 2613, 2613, 2613, 2613,
- 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613,
- 2613, 2613, 2613, 2613, 2613, 202, 202, 202,
- 2614, 2615, 2616, 2616, 2616, 2616, 2616, 2616,
+ 2596, 2596, 2596, 2597, 2599, 2597, 2597, 2597,
+ 2597, 2600, 2601, 2597, 2597, 2597, 2597, 2602,
+ 2603, 2604, 2605, 2605, 2604, 2602, 2603, 2599,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2606, 2607, 2607, 2607, 2607, 2607, 2607, 2608,
+ 2608, 2607, 2607, 2607, 2606, 2606, 2606, 2606,
+ 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606,
+ 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606,
+ 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606,
+ 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606,
+ 2606, 2606, 2606, 2606, 2609, 2609, 2610, 2610,
+ 2610, 2610, 2607, 2607, 2607, 2607, 2607, 2607,
+ 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2608,
+ 2607, 2611, 2612, 2613, 2613, 2614, 2615, 2615,
+ 2615, 2612, 2612, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
- 202, 202, 2617, 2617, 2617, 2617, 2617, 2617,
+ 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
+ 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
+ 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
+ 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616,
+ 2616, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617,
+ 2617, 203, 2617, 2617, 2617, 2617, 2617, 2617,
+ 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617,
2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617,
2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617,
- 202, 2618, 2617, 2617, 2617, 2617, 2617, 2617,
- 2617, 2618, 2617, 2617, 2618, 2617, 2617, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 202,
- 2619, 2619, 202, 2619, 2619, 2619, 2619, 2619,
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
- 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
- 2619, 2620, 2620, 2620, 2620, 2620, 2620, 202,
- 202, 202, 2620, 202, 2620, 2620, 202, 2620,
- 2620, 2620, 2621, 2620, 2622, 2622, 2623, 2620,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631,
- 2632, 2633, 202, 202, 202, 202, 202, 202,
- 2634, 2634, 2634, 2634, 2634, 2634, 202, 2634,
- 2634, 202, 2634, 2634, 2634, 2634, 2634, 2634,
- 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634,
- 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634,
- 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634,
- 2634, 2634, 2635, 2635, 2635, 2635, 2635, 202,
- 2636, 2636, 202, 2635, 2635, 2636, 2635, 2637,
- 2634, 202, 202, 202, 202, 202, 202, 202,
- 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645,
- 2646, 2647, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
- 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
- 2648, 2648, 2648, 2649, 2649, 2650, 2650, 2651,
- 2651, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2652, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2653, 2653, 2653, 2653, 2653, 2653, 2653, 2653,
- 2653, 2653, 2653, 2653, 2653, 2653, 2653, 2653,
- 2653, 2653, 2653, 2653, 2653, 2654, 2654, 2654,
- 2654, 2654, 2654, 2654, 2654, 2655, 2655, 2655,
- 2655, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
+ 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2618,
+ 2619, 2619, 2619, 2619, 2619, 2619, 2619, 203,
+ 2619, 2619, 2619, 2619, 2619, 2619, 2618, 2620,
+ 2617, 2621, 2621, 2622, 2622, 2622, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630,
+ 2631, 2632, 2633, 2633, 2633, 2633, 2633, 2633,
+ 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633,
+ 2633, 2633, 2633, 2633, 2633, 203, 203, 203,
+ 2634, 2635, 2636, 2636, 2636, 2636, 2636, 2636,
+ 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636,
+ 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636,
+ 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636,
+ 203, 203, 2637, 2637, 2637, 2637, 2637, 2637,
+ 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637,
+ 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637,
+ 203, 2638, 2637, 2637, 2637, 2637, 2637, 2637,
+ 2637, 2638, 2637, 2637, 2638, 2637, 2637, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2639, 2639, 2639, 2639, 2639, 2639, 2639, 203,
+ 2639, 2639, 203, 2639, 2639, 2639, 2639, 2639,
+ 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639,
+ 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639,
+ 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639,
+ 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639,
+ 2639, 2640, 2640, 2640, 2640, 2640, 2640, 203,
+ 203, 203, 2640, 203, 2640, 2640, 203, 2640,
+ 2640, 2640, 2641, 2640, 2642, 2642, 2643, 2640,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651,
+ 2652, 2653, 203, 203, 203, 203, 203, 203,
+ 2654, 2654, 2654, 2654, 2654, 2654, 203, 2654,
+ 2654, 203, 2654, 2654, 2654, 2654, 2654, 2654,
2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
- 2654, 2654, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 2656,
-
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
-
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
- 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
- 2658, 2659, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
- 2660, 2660, 2660, 2661, 2661, 2661, 2661, 2661,
- 2661, 2661, 2661, 2661, 2661, 2661, 2661, 202,
- 2662, 2662, 2662, 2662, 2663, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
-
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 2659, 2659, 2659, 2659,
- 2659, 2659, 2659, 2659, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
-
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2665, 2665, 2665, 2666, 2666, 2666, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2666, 2664, 2664, 2664, 2665, 2666,
- 2665, 2666, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
-
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2665, 2666, 2666, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
-
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 2664,
- 2664, 2664, 2664, 2664, 2664, 2664, 2664, 202,
- 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2668,
- 2669, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
-
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2671, 2672,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
-
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670,
- 2670, 2670, 2670, 2670, 2670, 2670, 2670, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
-
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
+ 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
+ 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
+ 2654, 2654, 2655, 2655, 2655, 2655, 2655, 203,
+ 2656, 2656, 203, 2655, 2655, 2656, 2655, 2657,
+ 2654, 203, 203, 203, 203, 203, 203, 203,
+ 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665,
+ 2666, 2667, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668,
+ 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668,
+ 2668, 2668, 2668, 2669, 2669, 2670, 2670, 2671,
+ 2671, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2672, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673,
- 2673, 202, 202, 202, 202, 202, 202, 202,
- 2674, 2674, 2674, 2674, 2674, 2674, 2674, 2674,
- 2674, 2674, 2674, 2674, 2674, 2674, 2674, 2674,
+ 2673, 2673, 2673, 2673, 2673, 2674, 2674, 2674,
+ 2674, 2674, 2674, 2674, 2674, 2675, 2675, 2675,
+ 2675, 2674, 2674, 2674, 2674, 2674, 2674, 2674,
2674, 2674, 2674, 2674, 2674, 2674, 2674, 2674,
- 2674, 2674, 2674, 2674, 2674, 2674, 2674, 202,
- 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682,
- 2683, 2684, 202, 202, 202, 202, 2685, 2685,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
- 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
- 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
- 2686, 2686, 2686, 2686, 2686, 2686, 202, 202,
- 2687, 2687, 2687, 2687, 2687, 2688, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2691,
- 2691, 2692, 2693, 2693, 2694, 2694, 2694, 2694,
- 2695, 2695, 2695, 2695, 2691, 2694, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703,
- 2704, 2705, 202, 2706, 2706, 2706, 2706, 2706,
- 2706, 2706, 202, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 202, 202, 202, 202, 202, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 2689, 2689, 2689, 2689, 2689, 2689, 2689, 2689,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
- 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
- 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
- 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
- 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708,
- 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708,
- 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708,
- 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708,
+ 2674, 2674, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 2676,
+
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+ 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2678,
+ 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+ 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+ 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+ 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+ 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+ 2678, 2679, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+ 2680, 2680, 2680, 2681, 2681, 2681, 2681, 2681,
+ 2681, 2681, 2681, 2681, 2681, 2681, 2681, 203,
+ 2682, 2682, 2682, 2682, 2683, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 2679, 2679, 2679, 2679,
+ 2679, 2679, 2679, 2679, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2685, 2685, 2685, 2686, 2686, 2686, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2686, 2684, 2684, 2684, 2685, 2686,
+ 2685, 2686, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2685, 2686, 2686, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+ 2684, 2684, 2684, 2684, 2684, 2684, 2684, 203,
+ 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2688,
+ 2689, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2691, 2692,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690,
+ 2690, 2690, 2690, 2690, 2690, 2690, 2690, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693,
+ 2693, 203, 203, 203, 203, 203, 203, 203,
+ 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
+ 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
+ 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
+ 2694, 2694, 2694, 2694, 2694, 2694, 2694, 203,
+ 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702,
+ 2703, 2704, 203, 203, 203, 203, 2705, 2705,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706,
+ 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706,
+ 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706,
+ 2706, 2706, 2706, 2706, 2706, 2706, 203, 203,
+ 2707, 2707, 2707, 2707, 2707, 2708, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2711,
+ 2711, 2712, 2713, 2713, 2714, 2714, 2714, 2714,
+ 2715, 2715, 2715, 2715, 2711, 2714, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723,
+ 2724, 2725, 203, 2726, 2726, 2726, 2726, 2726,
+ 2726, 2726, 203, 2709, 2709, 2709, 2709, 2709,
2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
- 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2710,
- 2711, 2712, 2712, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
- 2713, 2713, 2713, 2713, 2713, 2714, 2714, 2714,
- 2714, 2714, 2714, 202, 202, 202, 202, 2715,
- 2713, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
- 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2717,
- 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717,
- 202, 202, 202, 202, 202, 202, 202, 2718,
- 2718, 2718, 2718, 2719, 2719, 2719, 2719, 2719,
- 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2720, 2721, 2722, 2723, 2724, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2725, 2725, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
-
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2727, 2727, 2727,
- 2727, 2727, 2728, 2728, 2728, 2728, 2728, 2728,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726,
- 2726, 2726, 2726, 2729, 2729, 2729, 2729, 2729,
+ 203, 203, 203, 203, 203, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
+ 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
+ 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
+ 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
+ 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728,
+ 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728,
+ 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728,
+ 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728,
2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729,
-
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
-
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730,
- 2730, 2730, 2730, 2730, 2730, 2730, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729,
- 2729, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2731, 2732, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
+ 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2730,
+ 2731, 2732, 2732, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
-
2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
- 2733, 2733, 2733, 2733, 2733, 2733, 2733, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2734, 2734, 2734, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 2735, 2735, 2735, 2735,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
-
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
+ 2733, 2733, 2733, 2733, 2733, 2734, 2734, 2734,
+ 2734, 2734, 2734, 203, 203, 203, 203, 2735,
+ 2733, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736,
- 2736, 2736, 2736, 2736, 202, 202, 202, 202,
-
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
+ 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2737,
2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 202, 202, 202, 202, 202,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 2737, 2737, 2737, 202, 202, 202,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 202, 202, 202, 202, 202, 202, 202,
- 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737,
- 2737, 2737, 202, 202, 2738, 2739, 2740, 2741,
- 2742, 2742, 2742, 2742, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 202,
- 202, 1465, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2744, 2744,
- 2744, 2744, 2744, 2744, 2744, 2745, 2746, 2747,
- 2747, 2747, 2743, 2743, 2743, 2748, 2745, 2745,
- 2745, 2745, 2745, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2750, 2750, 2750, 2750, 2750,
- 2750, 2750, 2750, 2743, 2743, 2751, 2751, 2751,
- 2751, 2751, 2750, 2750, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2751, 2751, 2751, 2751, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2744, 2744, 2744, 2744, 2744,
- 2744, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
- 2743, 2743, 2743, 2743, 2743, 2743, 2752, 2752,
- 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752,
- 2752, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
- 2130, 2130, 2753, 2753, 2753, 2130, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754,
- 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754,
- 2754, 2754, 2754, 2754, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2754, 2754, 2754, 2754, 2754, 2754,
- 2754, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
+ 203, 203, 203, 203, 203, 203, 203, 2738,
+ 2738, 2738, 2738, 2739, 2739, 2739, 2739, 2739,
+ 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2740, 2741, 2742, 2743, 2744, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2745, 2745, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2747, 2747, 2747,
+ 2747, 2747, 2748, 2748, 2748, 2748, 2748, 2748,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+ 2746, 2746, 2746, 2749, 2749, 2749, 2749, 2749,
+ 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
+
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 2750, 2750,
+ 2750, 2750, 2750, 2750, 2750, 2750, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
+ 2749, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2751, 2752, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+ 2753, 2753, 2753, 2753, 2753, 2753, 2753, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2754, 2754, 2754, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 2755, 2755, 2755, 2755,
+ 203, 203, 203, 203, 203, 203, 203, 203,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 202, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 202, 2756, 2756,
- 202, 202, 2756, 202, 202, 2756, 2756, 202,
- 202, 2756, 2756, 2756, 2756, 202, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 202, 2757, 202, 2757, 2757, 2757,
- 2757, 2758, 2757, 2757, 202, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
-
- 2757, 2757, 2757, 2757, 2756, 2756, 202, 2756,
- 2756, 2756, 2756, 202, 202, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 202, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 202, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2756, 2756, 202, 2756, 2756, 2756, 2756, 202,
- 2756, 2756, 2756, 2756, 2756, 202, 2756, 202,
- 202, 202, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 202, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 1457, 1457, 202, 202,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2759, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2760, 2757, 2757, 2757, 2757,
- 2757, 2757, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2759, 2757, 2757, 2757, 2757,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+ 2756, 2756, 2756, 2756, 203, 203, 203, 203,
2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2760, 2757, 2757,
- 2757, 2757, 2757, 2757, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2759, 2757, 2757,
2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2760,
- 2757, 2757, 2757, 2757, 2757, 2757, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2759,
2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2760, 2757, 2757, 2757, 2757, 2757, 2757,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
- 2756, 2759, 2757, 2757, 2757, 2757, 2757, 2757,
2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
- 2757, 2757, 2757, 2760, 2757, 2757, 2757, 2757,
- 2757, 2757, 2761, 2762, 202, 202, 2763, 2764,
- 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772,
- 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770,
- 2771, 2772, 2763, 2764, 2765, 2766, 2767, 2768,
- 2769, 2770, 2771, 2772, 2763, 2764, 2765, 2766,
- 2767, 2768, 2769, 2770, 2771, 2772, 2763, 2764,
- 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772,
-
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
+ 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
+ 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
+ 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
+ 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
+ 2757, 2757, 2757, 203, 203, 203, 203, 203,
+ 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
+ 2757, 2757, 2757, 2757, 2757, 203, 203, 203,
+ 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
+ 2757, 203, 203, 203, 203, 203, 203, 203,
+ 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757,
+ 2757, 2757, 203, 203, 2758, 2759, 2760, 2761,
+ 2762, 2762, 2762, 2762, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 203,
+ 203, 1468, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2764, 2764,
+ 2764, 2764, 2764, 2764, 2764, 2765, 2766, 2767,
+ 2767, 2767, 2763, 2763, 2763, 2768, 2765, 2765,
+ 2765, 2765, 2765, 2769, 2769, 2769, 2769, 2769,
+ 2769, 2769, 2769, 2770, 2770, 2770, 2770, 2770,
+ 2770, 2770, 2770, 2763, 2763, 2771, 2771, 2771,
+ 2771, 2771, 2770, 2770, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2771, 2771, 2771, 2771, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2764, 2764, 2764, 2764, 2764,
+ 2764, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+ 2763, 2763, 2763, 2763, 2763, 2763, 2772, 2772,
+ 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772,
+ 2772, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
+ 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
+ 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
+ 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
+ 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
+ 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
+ 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
+ 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150,
+ 2150, 2150, 2773, 2773, 2773, 2150, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2773,
- 2773, 2773, 2773, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2774, 2773, 2773,
- 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
- 2773, 2773, 2773, 2773, 2774, 2773, 2773, 2775,
- 2776, 2775, 2775, 2777, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 2774, 2774, 2774, 2774, 2774,
- 202, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2778, 2778, 2778, 2778, 2778, 2778, 2778, 202,
- 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778,
- 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778,
- 2778, 202, 202, 2778, 2778, 2778, 2778, 2778,
- 2778, 2778, 202, 2778, 2778, 202, 2778, 2778,
- 2778, 2778, 2778, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
- 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
- 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
- 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
- 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
- 2779, 2779, 2779, 2779, 2779, 202, 202, 202,
- 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2781,
- 2781, 2781, 2781, 2781, 2781, 2781, 202, 202,
- 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789,
- 2790, 2791, 202, 202, 202, 202, 2779, 2792,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
+ 2774, 2774, 2774, 2774, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+ 1513, 1513, 1513, 1513, 1513, 1513, 1513, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
+ 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
+ 2775, 2775, 2774, 2774, 2774, 2774, 2774, 2774,
+ 2774, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 203, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2776, 203, 2776, 2776,
+ 203, 203, 2776, 203, 203, 2776, 2776, 203,
+ 203, 2776, 2776, 2776, 2776, 203, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2777, 2777,
+ 2777, 2777, 203, 2777, 203, 2777, 2777, 2777,
+ 2777, 2778, 2777, 2777, 203, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+
+ 2777, 2777, 2777, 2777, 2776, 2776, 203, 2776,
+ 2776, 2776, 2776, 203, 203, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 203, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 203, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2776, 2776, 203, 2776, 2776, 2776, 2776, 203,
+ 2776, 2776, 2776, 2776, 2776, 203, 2776, 203,
+ 203, 203, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 203, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 1460, 1460, 203, 203,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2779, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2780, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2779, 2777, 2777, 2777, 2777,
+
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2780, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2779, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2780,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2779,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2780, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+ 2776, 2779, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2777, 2780, 2777, 2777, 2777, 2777,
+ 2777, 2777, 2781, 2782, 203, 203, 2783, 2784,
+ 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792,
+ 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790,
+ 2791, 2792, 2783, 2784, 2785, 2786, 2787, 2788,
+ 2789, 2790, 2791, 2792, 2783, 2784, 2785, 2786,
+ 2787, 2788, 2789, 2790, 2791, 2792, 2783, 2784,
+ 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792,
+
2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
- 2793, 2793, 2793, 2793, 2794, 2794, 2794, 2794,
- 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802,
- 2803, 2804, 202, 202, 202, 202, 202, 2805,
-
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
- 2806, 2806, 2806, 2806, 2806, 301, 301, 2807,
- 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807,
- 2808, 2808, 2808, 2808, 2808, 2808, 2808, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2809, 2809, 2809, 2809, 2809, 2809, 2809, 2809,
- 2809, 2809, 2809, 2809, 2809, 2809, 2809, 2809,
- 2809, 2809, 2809, 2809, 2809, 2809, 2809, 2809,
- 2809, 2809, 2809, 2809, 2809, 2809, 2809, 2809,
- 2809, 2809, 2810, 2810, 2810, 2810, 2810, 2810,
- 2810, 2810, 2810, 2810, 2810, 2810, 2810, 2810,
- 2810, 2810, 2810, 2810, 2810, 2810, 2810, 2810,
- 2810, 2810, 2810, 2810, 2810, 2810, 2810, 2810,
- 2810, 2810, 2810, 2810, 2811, 2811, 2811, 2811,
- 2811, 2811, 2812, 2813, 301, 301, 301, 301,
- 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821,
- 2822, 2823, 301, 301, 301, 301, 2824, 2824,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2825, 2825, 2825, 2825,
- 2825, 2825, 2825, 2825, 2826, 2825, 2825, 2825,
- 2827, 2825, 2825, 2825, 2825, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 301, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2829, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 2828, 2828,
- 2828, 2828, 2828, 2828, 2828, 2828, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
- 301, 301, 301, 301, 301, 301, 301, 301,
-
- 2830, 2830, 2830, 2830, 348, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 348, 2830, 2830, 348, 2830, 348, 348, 2830,
- 348, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 348, 2830, 2830, 2830, 2830,
- 348, 2830, 348, 2830, 348, 348, 348, 348,
- 348, 348, 2830, 348, 348, 348, 348, 2830,
- 348, 2830, 348, 2830, 348, 2830, 2830, 2830,
- 348, 2830, 2830, 348, 2830, 348, 348, 2830,
- 348, 2830, 348, 2830, 348, 2830, 348, 2830,
- 348, 2830, 2830, 348, 2830, 348, 348, 2830,
- 2830, 2830, 2830, 348, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 348, 2830, 2830, 2830, 2830,
- 348, 2830, 2830, 2830, 2830, 348, 2830, 348,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2793,
+ 2793, 2793, 2793, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2794, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+ 2793, 2793, 2793, 2793, 2794, 2793, 2793, 2795,
+ 2796, 2795, 2795, 2797, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 2794, 2794, 2794, 2794, 2794,
+ 203, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2798, 2798, 2798, 2798, 2798, 2798, 2798, 203,
+ 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798,
+ 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798,
+ 2798, 203, 203, 2798, 2798, 2798, 2798, 2798,
+ 2798, 2798, 203, 2798, 2798, 203, 2798, 2798,
+ 2798, 2798, 2798, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 2799, 2799, 2799, 2799, 2799, 2799, 2799, 2799,
+ 2799, 2799, 2799, 2799, 2799, 2799, 2799, 2799,
+ 2799, 2799, 2799, 2799, 2799, 2799, 2799, 2799,
+ 2799, 2799, 2799, 2799, 2799, 2799, 2799, 2799,
+ 2799, 2799, 2799, 2799, 2799, 2799, 2799, 2799,
+ 2799, 2799, 2799, 2799, 2799, 203, 203, 203,
+ 2800, 2800, 2800, 2800, 2800, 2800, 2800, 2801,
+ 2801, 2801, 2801, 2801, 2801, 2801, 203, 203,
+ 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809,
+ 2810, 2811, 203, 203, 203, 203, 2799, 2812,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2813, 2813, 2813, 2813, 2813, 2813, 2813, 2813,
+ 2813, 2813, 2813, 2813, 2813, 2813, 2813, 2813,
+ 2813, 2813, 2813, 2813, 2813, 2813, 2813, 2813,
+ 2813, 2813, 2813, 2813, 2813, 2813, 2813, 2813,
+ 2813, 2813, 2813, 2813, 2813, 2813, 2813, 2813,
+ 2813, 2813, 2813, 2813, 2814, 2814, 2814, 2814,
+ 2815, 2816, 2817, 2818, 2819, 2820, 2821, 2822,
+ 2823, 2824, 203, 203, 203, 203, 203, 2825,
+
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826,
+ 2826, 2826, 2826, 2826, 2826, 302, 302, 2827,
+ 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
+ 2828, 2828, 2828, 2828, 2828, 2828, 2828, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+ 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+ 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+ 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+ 2829, 2829, 2830, 2830, 2830, 2830, 2830, 2830,
2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 348, 2830, 2830, 2830, 2830, 2830,
2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 348, 348, 348, 348,
- 348, 2830, 2830, 2830, 348, 2830, 2830, 2830,
- 2830, 2830, 348, 2830, 2830, 2830, 2830, 2830,
2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830,
- 2830, 2830, 2830, 2830, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
- 2831, 2831, 348, 348, 348, 348, 348, 348,
- 348, 348, 348, 348, 348, 348, 348, 348,
-
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1733, 1733, 1733, 1733,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1733,
- 1733, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1548,
- 1733, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1733, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 2832, 2832, 2833, 2834, 2835, 2836, 2837, 2838,
- 2839, 2840, 2841, 2842, 2842, 2843, 2843, 2843,
- 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844,
- 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844,
- 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844,
- 2844, 2844, 2844, 2844, 2844, 2844, 2844, 1597,
- 2845, 2846, 2845, 2845, 2845, 2845, 2845, 2845,
- 2845, 2845, 2845, 2845, 2845, 2846, 2845, 2846,
- 2845, 2845, 2846, 2845, 2845, 2845, 2846, 2845,
- 2845, 2845, 2844, 2844, 2844, 2844, 2844, 2847,
- 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2849,
- 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2849,
+ 2830, 2830, 2830, 2830, 2831, 2831, 2831, 2831,
+ 2831, 2831, 2832, 2833, 302, 302, 302, 302,
+ 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841,
+ 2842, 2843, 302, 302, 302, 302, 2844, 2844,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 2845, 2845, 2845, 2845, 2845, 2845, 2845,
+ 2845, 2845, 2845, 2845, 2845, 2845, 2845, 2845,
+ 2845, 2845, 2845, 2845, 2845, 2845, 2845, 2845,
+ 2845, 2845, 2845, 2845, 2845, 2845, 2845, 2845,
+ 2845, 2845, 2845, 2845, 2845, 2845, 2845, 2845,
+ 2845, 2845, 2845, 2845, 2845, 2845, 2845, 2845,
+ 2845, 2845, 2845, 2845, 2845, 2845, 2845, 2845,
+ 2845, 2845, 2845, 2845, 2846, 2845, 2845, 2845,
+ 2847, 2845, 2845, 2845, 2845, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 302, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
- 2848, 2848, 2850, 2850, 2851, 2843, 2843, 2843,
2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
- 2848, 2849, 2848, 2849, 2849, 2848, 2848, 2849,
2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
- 2848, 2848, 813, 813, 813, 813, 2852, 2852,
- 2844, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
- 2852, 2852, 2852, 2853, 2853, 2853, 2853, 2853,
- 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853,
- 2853, 2853, 2853, 2853, 2853, 2843, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 2854, 2854,
- 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854,
- 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854,
- 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854,
-
- 2855, 2856, 2856, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 2856, 2856, 2856, 2856, 2856, 2856,
- 2856, 2856, 2856, 2857, 1733, 1733, 1733, 1733,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2856, 2856, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2858, 2858, 2858, 2858, 2858, 2858, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 2859, 2859, 2859,
- 1511, 1511, 1511, 1511, 1511, 1511, 1548, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1548, 2859, 2859,
- 1511, 1511, 1511, 1511, 1511, 1549, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1512, 1512, 1548, 1548,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1510, 1510, 1511,
- 1511, 1511, 1511, 1511, 1510, 1511, 1511, 1511,
- 1511, 1511, 1549, 1549, 1549, 1548, 1511, 1549,
- 1511, 1511, 1549, 2860, 2860, 1548, 1548, 2859,
- 2859, 2859, 2859, 2859, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 2859, 2859, 2859, 2861, 2861, 2861, 2861, 2861,
-
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1548,
- 1511, 1548, 1549, 1549, 1511, 1511, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1511, 1511, 1511, 1549, 1511, 1511, 1511,
- 1511, 1549, 1549, 1549, 1511, 1549, 1549, 1549,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1549,
- 1511, 1549, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1510, 1511, 1510, 1511, 1510, 1511, 1511, 1511,
- 1511, 1511, 1549, 1511, 1511, 1511, 1511, 1510,
- 1511, 1510, 1510, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1548, 1511, 1511, 1511, 1511, 1548, 1548, 2859,
-
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1512, 1512,
- 2862, 2862, 2862, 2862, 1512, 1512, 1512, 1512,
- 1512, 1512, 1548, 2859, 2859, 2859, 2859, 2859,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 2860, 2860, 1548, 1548,
- 1548, 1548, 2863, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 2860, 1548, 1548, 1548, 1548, 2860, 2860, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 2864, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1512, 1512, 1512, 1512,
- 1512, 1512, 1548, 1511, 1511, 1511, 1511, 1511,
-
- 2865, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 2865, 1511, 1511, 1511, 2865, 1511, 2865,
- 1511, 2865, 1511, 2865, 1511, 1511, 1511, 2865,
- 1511, 1511, 1511, 1511, 1511, 1511, 2865, 2865,
- 1511, 1511, 1511, 1511, 2865, 1511, 2865, 2865,
- 1511, 1511, 1511, 1511, 2865, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1548, 1548, 2859, 2859, 1549, 1549, 1549,
- 1511, 1511, 1511, 1549, 1549, 1549, 1549, 1549,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 2866, 2866,
- 2866, 2867, 2867, 2867, 1512, 1512, 1512, 1512,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1549, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1511, 1511, 1511, 1511, 1549, 1549, 1549, 1511,
- 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
- 1549, 1511, 1511, 1511, 1511, 1511, 1548, 1548,
- 1548, 1548, 1548, 1548, 2860, 1548, 1548, 1548,
- 2859, 2864, 2864, 2858, 2858, 2868, 2843, 2843,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1733, 1733, 1733,
- 1548, 1548, 1548, 1548, 2864, 2864, 2864, 2858,
- 2858, 2869, 2868, 2843, 2843, 1733, 1733, 1733,
-
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 2869, 2869, 2869,
- 2869, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2868, 2868, 2868, 2868, 2868, 2868, 2868, 2868,
- 2868, 2868, 2868, 2868, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1733, 1733, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
- 1512, 1512, 1512, 1512, 1512, 1512, 1733, 1733,
- 2843, 2843, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
- 1514, 1514, 1514, 1514, 2870, 2868, 2868, 2871,
- 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859,
- 2872, 2863, 2863, 2863, 2863, 2863, 2863, 2873,
- 2864, 2864, 2864, 2864, 2864, 2864, 2863, 2864,
- 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
- 2863, 2873, 2873, 2863, 2863, 2863, 2863, 2863,
- 2863, 2863, 2864, 2864, 2863, 2863, 2863, 2868,
- 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
- 2864, 2864, 2864, 2864, 2858, 2869, 2869, 2869,
- 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
- 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858,
- 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
- 2858, 2858, 2858, 2858, 2869, 2869, 2869, 2869,
- 2869, 2868, 2843, 2869, 2869, 2869, 2869, 2870,
- 2843, 1733, 2869, 2868, 2869, 2869, 2869, 2869,
- 2859, 2859, 2859, 2859, 2859, 2864, 2864, 2864,
- 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
- 2864, 2864, 2858, 2858, 2858, 2858, 2858, 2858,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
- 2869, 2869, 2869, 2843, 2843, 2868, 2868, 2868,
- 2868, 2868, 2868, 2843, 2843, 2843, 2868, 2868,
- 2869, 2869, 2869, 2869, 2869, 2874, 2874, 2869,
- 2874, 2874, 2868, 2871, 2868, 2868, 2868, 2868,
- 2859, 2869, 2869, 2868, 2868, 2868, 2868, 2868,
- 2868, 2868, 2868, 2843, 1733, 2871, 2871, 2871,
- 2858, 2873, 2873, 2873, 2873, 2873, 2873, 2873,
- 2873, 2873, 2873, 2873, 2873, 2873, 2858, 2858,
- 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2869,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
-
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
- 1598, 1598, 1598, 1598, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869,
- 2869, 2869, 2869, 2869, 2869, 2869, 1733, 1733,
- 2868, 2868, 2868, 2868, 2843, 1733, 1733, 1733,
- 2868, 2868, 2868, 1733, 1733, 1733, 1733, 1733,
- 2868, 2868, 2868, 2843, 2843, 2843, 2843, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2868, 2868, 2868, 2868, 2868, 2868, 2843, 2843,
- 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843,
- 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843,
- 2843, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2843, 2843, 2843, 2843, 2843, 2843, 2843, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2843, 2843, 2843, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2843, 2843, 2843, 2843, 2843, 2843, 2843, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 202, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
- 1596, 1596, 1596, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882,
- 2883, 2884, 202, 202, 202, 202, 202, 202,
-
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 2885, 2885,
-
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
-
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
- 2886, 2886, 2886, 2886, 2886, 2886, 2886, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
-
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
- 1728, 1728, 1728, 1728, 1728, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
-
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
- 2887, 2887, 2887, 2887, 2887, 2887, 1733, 1733,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
-
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
-
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730,
- 1730, 1730, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
-
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
-
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731,
- 1731, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
-
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
- 2888, 2888, 2888, 2888, 2888, 2888, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
-
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724,
- 1724, 1724, 1724, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
- 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
-
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 2885, 2885,
-
- 1403, 2749, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
+ 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
+ 2848, 2848, 2848, 2848, 2848, 2848, 2849, 2848,
+ 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
+ 2848, 2848, 2848, 2848, 2848, 2848, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 302,
+
+ 2850, 2850, 2850, 2850, 349, 2850, 2850, 2850,
+ 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+ 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+ 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+ 349, 2850, 2850, 349, 2850, 349, 349, 2850,
+ 349, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+ 2850, 2850, 2850, 349, 2850, 2850, 2850, 2850,
+ 349, 2850, 349, 2850, 349, 349, 349, 349,
+ 349, 349, 2850, 349, 349, 349, 349, 2850,
+ 349, 2850, 349, 2850, 349, 2850, 2850, 2850,
+ 349, 2850, 2850, 349, 2850, 349, 349, 2850,
+ 349, 2850, 349, 2850, 349, 2850, 349, 2850,
+ 349, 2850, 2850, 349, 2850, 349, 349, 2850,
+ 2850, 2850, 2850, 349, 2850, 2850, 2850, 2850,
+ 2850, 2850, 2850, 349, 2850, 2850, 2850, 2850,
+ 349, 2850, 2850, 2850, 2850, 349, 2850, 349,
+ 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+ 2850, 2850, 349, 2850, 2850, 2850, 2850, 2850,
+ 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+ 2850, 2850, 2850, 2850, 349, 349, 349, 349,
+ 349, 2850, 2850, 2850, 349, 2850, 2850, 2850,
+ 2850, 2850, 349, 2850, 2850, 2850, 2850, 2850,
+ 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+ 2850, 2850, 2850, 2850, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 2851, 2851, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 2852, 2852, 2852, 2852,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+ 1559, 1559, 1559, 1559, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 2852,
+ 2852, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1561,
+ 2852, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 2852, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+
+ 2853, 2853, 2854, 2855, 2856, 2857, 2858, 2859,
+ 2860, 2861, 2862, 2863, 2863, 2864, 2864, 2864,
+ 2865, 2865, 2865, 2865, 2865, 2865, 2865, 2865,
+ 2865, 2865, 2865, 2865, 2865, 2865, 2865, 2865,
+ 2865, 2865, 2865, 2865, 2865, 2865, 2865, 2865,
+ 2865, 2865, 2865, 2865, 2865, 2865, 2865, 2866,
+ 2867, 2868, 2867, 2867, 2867, 2867, 2867, 2867,
+ 2867, 2867, 2867, 2867, 2867, 2868, 2867, 2868,
+ 2867, 2867, 2868, 2867, 2867, 2867, 2868, 2867,
+ 2867, 2867, 2865, 2865, 2865, 2865, 2865, 2869,
+ 2870, 2870, 2870, 2870, 2870, 2870, 2870, 2871,
+ 2870, 2870, 2870, 2870, 2870, 2870, 2870, 2871,
+ 2870, 2870, 2870, 2870, 2870, 2870, 2870, 2870,
+ 2870, 2870, 2872, 2872, 2873, 2864, 2864, 2864,
+ 2874, 2874, 2870, 2870, 2870, 2870, 2870, 2870,
+ 2870, 2871, 2870, 2871, 2871, 2870, 2874, 2875,
+ 2870, 2870, 2870, 2870, 2870, 2870, 2870, 2870,
+ 2870, 2870, 814, 814, 814, 814, 2876, 2877,
+ 2865, 2876, 2876, 2876, 2876, 2876, 2876, 2876,
+ 2876, 2876, 2876, 2878, 2878, 2878, 2878, 2878,
+ 2878, 2878, 2878, 2878, 2878, 2878, 2878, 2878,
+ 2878, 2878, 2878, 2878, 2878, 2864, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2879, 2879,
+ 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+ 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+ 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+
+ 2880, 2881, 2881, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
+ 1734, 1734, 2882, 1734, 1734, 1734, 1734, 1734,
+ 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
+ 1734, 1734, 1734, 1734, 1734, 1734, 1734, 2882,
+ 1734, 1734, 2881, 2881, 2881, 2881, 2881, 2881,
+ 2881, 2881, 2881, 2883, 2852, 2852, 2852, 2852,
+ 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
+ 1734, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2881, 2881, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2884, 2884, 2884, 2884, 2884, 2884, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 2885, 2885, 2885,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1561, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1561, 2885, 2885,
+ 1517, 1517, 1517, 1517, 1517, 1562, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1519, 1519, 1561, 1561,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1516, 1516, 1517,
+ 1517, 1517, 1517, 1517, 1516, 1517, 1517, 1517,
+ 1517, 1517, 1562, 1562, 1562, 1561, 1517, 1562,
+ 1517, 1517, 1562, 2886, 2886, 1561, 1561, 2885,
+ 2885, 2885, 2885, 2885, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 2885, 2885, 2885, 2887, 2887, 2887, 2887, 2887,
+
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1561,
+ 1517, 1561, 1562, 1562, 1517, 1517, 1562, 1562,
+ 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,
+ 1562, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1562, 1562,
+ 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,
+ 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,
+ 1562, 1517, 1517, 1517, 1562, 1517, 1517, 1517,
+ 1517, 1562, 1562, 1562, 1517, 1562, 1562, 1562,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1562,
+ 1517, 1562, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1516, 1517, 1516, 1517, 1516, 1517, 1517, 1517,
+ 1517, 1517, 1562, 1517, 1517, 1517, 1517, 1516,
+ 1517, 1516, 1516, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1561, 1517, 1517, 1517, 1517, 1561, 1561, 2885,
+
+ 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1516,
+ 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516,
+ 1516, 1516, 1516, 1516, 1516, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1516, 1516, 1516, 1516, 1516, 1516,
+ 1516, 1516, 1516, 1516, 1516, 1516, 1518, 1518,
+ 2888, 2888, 2888, 2888, 1518, 1518, 1519, 1519,
+ 1519, 1519, 1561, 2885, 2885, 2885, 2885, 2885,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 2886, 2886, 1561, 1561,
+ 1561, 1561, 2889, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 2886, 1561, 1561, 1561, 1561, 2886, 2886, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 2890, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1561, 1517, 1517, 1517, 1517, 1517,
+
+ 2891, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 2891, 1517, 1517, 1517, 2891, 1517, 2891,
+ 1517, 2891, 1517, 2891, 1517, 1517, 1517, 2891,
+ 1517, 1517, 1517, 1517, 1517, 1517, 2891, 2891,
+ 1517, 1517, 1517, 1517, 2891, 1517, 2891, 2891,
+ 1517, 1517, 1517, 1517, 2891, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1561, 1561, 2885, 2885, 1562, 1562, 1562,
+ 1517, 1517, 1517, 1562, 1562, 1562, 1562, 1562,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 2892, 2892,
+ 2892, 2893, 2893, 2893, 1518, 1518, 1518, 1518,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1562, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1517, 1517, 1517, 1517, 1562, 1562, 1562, 1517,
+ 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517,
+ 1562, 1517, 1517, 1517, 1517, 1517, 1561, 1561,
+ 1561, 1561, 1561, 1561, 2886, 1561, 1561, 1561,
+ 2885, 2890, 2890, 2884, 2884, 2894, 2864, 2864,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561,
+ 1561, 1561, 1561, 1561, 1561, 2852, 2852, 2852,
+ 1561, 1561, 1561, 1561, 2890, 2890, 2890, 2884,
+ 2884, 2895, 2894, 2864, 2864, 2852, 2852, 2852,
+
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2896, 2896, 2896, 2896,
+ 2896, 2896, 2896, 2896, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 2895, 2895, 2895,
+ 2895, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2894, 2894, 2894, 2894, 2894, 2894, 2894, 2894,
+ 2894, 2894, 2894, 2894, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 2852, 2852, 2852, 2852,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 2852, 2852, 2852, 2852, 2852, 2852,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518,
+ 1518, 1518, 1518, 1518, 1518, 1518, 2852, 2852,
+ 2864, 2864, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 2897, 2894, 2894, 2898,
+ 2885, 2885, 2885, 2885, 2885, 2885, 2885, 2885,
+ 2899, 2889, 2889, 2889, 2889, 2889, 2889, 2900,
+ 2890, 2890, 2890, 2890, 2890, 2890, 2889, 2890,
+ 2884, 2884, 2884, 2884, 2884, 2884, 2884, 2884,
+ 2889, 2900, 2900, 2889, 2889, 2889, 2889, 2889,
+ 2889, 2889, 2890, 2901, 2889, 2889, 2889, 2894,
+ 2890, 2890, 2890, 2890, 2890, 2890, 2901, 2890,
+ 2890, 2890, 2890, 2890, 2884, 2895, 2895, 2895,
2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
+ 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2884,
+ 2884, 2884, 2884, 2884, 2884, 2884, 2884, 2884,
+ 2884, 2884, 2884, 2884, 2895, 2895, 2895, 2895,
+ 2895, 2894, 2864, 2895, 2895, 2895, 2895, 2897,
+ 2864, 2852, 2895, 2894, 2895, 2895, 2895, 2895,
+ 2885, 2885, 2885, 2885, 2885, 2890, 2890, 2890,
2890, 2890, 2890, 2890, 2890, 2890, 2890, 2890,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
- 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
-
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
-
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
- 2891, 2891, 2891, 2891, 2891, 2891, 2885, 2885
+ 2890, 2890, 2884, 2884, 2884, 2884, 2884, 2884,
+ 2895, 2895, 2895, 2895, 2895, 2895, 2895, 2895,
+ 2895, 2895, 2895, 2864, 2864, 2894, 2894, 2894,
+ 2894, 2894, 2894, 2864, 2864, 2864, 2894, 2894,
+ 2895, 2895, 2895, 2895, 2895, 2902, 2902, 2895,
+ 2902, 2902, 2894, 2898, 2894, 2894, 2894, 2894,
+ 2885, 2895, 2895, 2894, 2894, 2894, 2894, 2894,
+ 2894, 2894, 2894, 2864, 2852, 2898, 2898, 2898,
+ 2884, 2900, 2900, 2900, 2900, 2900, 2900, 2900,
+ 2900, 2900, 2900, 2900, 2900, 2900, 2884, 2884,
+ 2884, 2884, 2884, 2884, 2884, 2884, 2884, 2895,
+ 2895, 2895, 2895, 2895, 2895, 2895, 2895, 2895,
+ 2895, 2895, 2895, 2895, 2895, 2895, 2895, 2895,
+ 2895, 2895, 2895, 2895, 2895, 2895, 2895, 2895,
+
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+ 2903, 2903, 2903, 2903, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2895, 2895, 2895, 2895, 2895, 2895, 2895, 2895,
+ 2895, 2895, 2895, 2895, 2895, 2895, 2852, 2852,
+ 2894, 2894, 2894, 2894, 2864, 2852, 2852, 2852,
+ 2894, 2894, 2894, 2852, 2852, 2852, 2852, 2852,
+ 2894, 2894, 2894, 2864, 2864, 2864, 2864, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2894, 2894, 2894, 2894, 2894, 2894, 2864, 2864,
+ 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
+ 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
+ 2864, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2864, 2864, 2864, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 203, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611,
+ 1611, 1611, 1611, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911,
+ 2912, 2913, 203, 203, 203, 203, 203, 203,
+
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+ 2852, 2852, 2852, 2852, 2852, 2852, 2914, 2914,
+
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+ 2915, 2915, 2915, 2915, 2915, 2915, 2915, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+ 1747, 1747, 1747, 1747, 1747, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916,
+ 2916, 2916, 2916, 2916, 2916, 2916, 1752, 1752,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+ 1750, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
+ 2917, 2917, 2917, 2917, 2917, 2917, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 2914, 2914,
+
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
+ 1743, 1743, 1743, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+ 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 2914, 2914,
+
+ 1405, 2769, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
+
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+ 2920, 2920, 2920, 2920, 2920, 2920, 2914, 2914
};
static const Properties uc_properties[] = {
@@ -6749,6 +6830,7 @@ static const Properties uc_properties[] = {
{ 27, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 28, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
{ 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 3 },
{ 23, 10, 0, 0, -1, 16, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
{ 10, 18, 0, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 3, 6, 17, 4, 2 },
@@ -8081,12 +8163,13 @@ static const Properties uc_properties[] = {
{ 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
{ 23, 10, 0, 0, -1, 1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
{ 24, 10, 0, 0, -1, -1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
- { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 12, 2 },
+ { 25, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 5, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 12, 2 },
{ 26, 6, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 8, 0, 2 },
{ 22, 10, 0, 0, -1, -1, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
{ 25, 10, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 12, 2 },
+ { 25, 10, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 5, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 25, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 26, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
@@ -8144,13 +8227,14 @@ static const Properties uc_properties[] = {
{ 29, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 10, 0, 2 },
{ 15, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
{ 29, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 9, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
{ 14, 0, 0, 0, -1, 0, 1, 85, { {0, -7517}, {0, 0}, {0, 0}, {0, -7517} }, 0, 10, 12, 7, 4 },
{ 14, 0, 0, 0, -1, 0, 1, 85, { {1, 207}, {0, 0}, {0, 0}, {1, 207} }, 0, 10, 12, 7, 3 },
{ 14, 0, 0, 0, -1, 0, 1, 85, { {1, 209}, {0, 0}, {0, 0}, {1, 209} }, 0, 10, 12, 7, 3 },
{ 29, 4, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 14, 0, 0, 0, -1, 0, 1, 0, { {0, 28}, {0, 0}, {0, 0}, {0, 28} }, 0, 10, 12, 7, 3 },
{ 18, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 2 },
- { 15, 0, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
+ { 15, 0, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 10, 12, 6, 2 },
{ 29, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 15, 0, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 6, 2 },
@@ -8168,6 +8252,7 @@ static const Properties uc_properties[] = {
{ 4, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 3 },
{ 4, 0, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 3 },
{ 29, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
+ { 26, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
{ 26, 10, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 26, 10, 0, 0, -1, 3, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
@@ -8198,17 +8283,20 @@ static const Properties uc_properties[] = {
{ 26, 10, 0, 0, -1, 7, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 26, 10, 0, 0, -1, -8, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 26, 10, 0, 0, -1, -7, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
{ 21, 10, 0, 0, -1, 1, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
{ 22, 10, 0, 0, -1, -1, 1, 85, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
{ 29, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 26, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 5, 10, 0, 0, 1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
@@ -8223,6 +8311,7 @@ static const Properties uc_properties[] = {
{ 5, 2, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 1, 80, { {0, 26}, {0, 0}, {0, 0}, {0, 26} }, 0, 10, 12, 7, 2 },
+ { 29, 0, 0, 0, -1, 0, 1, 80, { {0, 26}, {0, 0}, {0, 0}, {0, 26} }, 14, 10, 12, 7, 2 },
{ 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, -26}, {0, -26}, {0, 0} }, 0, 10, 12, 6, 2 },
{ 5, 10, 0, 0, 0, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 5, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
@@ -8236,19 +8325,25 @@ static const Properties uc_properties[] = {
{ 5, 10, 0, 0, 8, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 5, 10, 0, 0, 9, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 5, 10, 0, 0, 0, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
+ { 26, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 7, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
+ { 29, 0, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 9, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
{ 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
{ 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 6, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 6, 0, 2 },
{ 21, 10, 0, 0, -1, 1, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
{ 22, 10, 0, 0, -1, -1, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
{ 5, 10, 0, 0, 1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
@@ -8292,6 +8387,7 @@ static const Properties uc_properties[] = {
{ 26, 10, 0, 0, -1, -2106, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 26, 10, 0, 0, -1, -2108, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 26, 10, 0, 0, -1, -2250, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
@@ -8363,6 +8459,7 @@ static const Properties uc_properties[] = {
{ 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 11, 2 },
{ 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
{ 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 37 },
{ 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 2 },
{ 4, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
@@ -8372,14 +8469,14 @@ static const Properties uc_properties[] = {
{ 0, 17, 228, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
{ 0, 17, 222, 5, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 1 },
{ 1, 0, 224, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 21, 4, 26 },
- { 20, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 20, 10, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
{ 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 8, 2 },
{ 17, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 21, 8, 2 },
{ 29, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
{ 4, 0, 0, 0, -1, 0, 4, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
{ 17, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 37 },
{ 18, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 5, 8, 2 },
- { 25, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
{ 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 8, 34 },
{ 18, 0, 0, 0, -1, 0, 1, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 34 },
{ 18, 0, 0, 0, -1, 0, 1, 17, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 34 },
@@ -8409,6 +8506,8 @@ static const Properties uc_properties[] = {
{ 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
{ 18, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
{ 18, 0, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 14, 8, 36 },
+ { 29, 10, 0, 0, -1, 0, 8, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 10, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
{ 18, 0, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 5, 8, 35 },
{ 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 26 },
{ 29, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 26 },
@@ -8417,6 +8516,7 @@ static const Properties uc_properties[] = {
{ 29, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
{ 5, 10, 0, 0, -1, 0, 6, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 8, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 26 },
+ { 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 8, 14, 0, 35 },
{ 29, 0, 0, 0, -1, 0, 22, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
{ 18, 0, 0, 0, -1, 0, 4, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 8, 37 },
@@ -8771,6 +8871,7 @@ static const Properties uc_properties[] = {
{ 19, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 17, 14, 0, 2 },
{ 21, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
{ 22, 10, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
+ { 25, 10, 0, 0, -1, 0, 6, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
{ 21, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 0, 13, 2 },
{ 22, 10, 0, 0, -1, 0, 7, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 1, 13, 2 },
{ 25, 6, 0, 0, -1, 0, 1, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 15, 1, 11, 2 },
@@ -9528,6 +9629,7 @@ static const Properties uc_properties[] = {
{ 29, 13, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 18, 13, 0, 0, -1, 0, 13, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 8, 8 },
{ 26, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 8 },
+ { 13, 0, 0, 0, -1, 0, 0, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 0 },
{ 5, 2, 0, 0, 0, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 5, 2, 0, 0, 1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 5, 2, 0, 0, 2, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
@@ -9539,38 +9641,46 @@ static const Properties uc_properties[] = {
{ 5, 2, 0, 0, 8, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 5, 2, 0, 0, 9, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 5, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 12, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
{ 29, 0, 0, 0, -1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
{ 29, 0, 0, 0, -1, 0, 12, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
{ 29, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 10, 12, 7, 2 },
{ 29, 10, 0, 0, -1, 0, 13, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 21, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 21, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 10, 12, 7, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 10, 12, 7, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 6, 7, 28, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 34 },
- { 29, 0, 0, 0, -1, 0, 12, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 29, 0, 0, 0, -1, 0, 12, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 0, 0, 0, -1, 0, 11, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
{ 29, 0, 0, 0, -1, 0, 18, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
{ 28, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 4, 4, 31, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 13, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
{ 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 3, 13, 2 },
{ 29, 10, 0, 0, -1, 0, 16, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 5, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
- { 29, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 12, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 12, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 23, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 17, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 19, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 18, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 0, 14, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 20, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 30, 0, 2 },
+ { 29, 10, 0, 0, -1, 0, 21, 0, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 14, 0, 12, 0, 2 },
{ 3, 2, 0, 0, 0, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
{ 3, 2, 0, 0, 1, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
{ 3, 2, 0, 0, 2, 0, 23, 80, { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, 0, 16, 11, 9, 2 },
diff --git a/src/corelib/text/qunicodetables_p.h b/src/corelib/text/qunicodetables_p.h
index e59aea25bd..1d6026229f 100644
--- a/src/corelib/text/qunicodetables_p.h
+++ b/src/corelib/text/qunicodetables_p.h
@@ -118,10 +118,7 @@ enum GraphemeBreakClass {
GraphemeBreak_T,
GraphemeBreak_LV,
GraphemeBreak_LVT,
- Graphemebreak_E_Base,
- Graphemebreak_E_Modifier,
- Graphemebreak_Glue_After_Zwj,
- Graphemebreak_E_Base_GAZ,
+ GraphemeBreak_Extended_Pictographic,
NumGraphemeBreakClasses
};
diff --git a/src/corelib/text/qunicodetools.cpp b/src/corelib/text/qunicodetools.cpp
index 7b69da8c2c..504adc193a 100644
--- a/src/corelib/text/qunicodetools.cpp
+++ b/src/corelib/text/qunicodetools.cpp
@@ -43,6 +43,8 @@
#include "qvarlengtharray.h"
#include "qlibrary.h"
+#include <limits.h>
+
#define FLAG(x) (1 << (x))
QT_BEGIN_NAMESPACE
@@ -54,45 +56,90 @@ namespace QUnicodeTools {
// -----------------------------------------------------------------------------------------------------
//
// The text boundaries determination algorithm.
-// See http://www.unicode.org/reports/tr29/tr29-31.html
+// See https://www.unicode.org/reports/tr29/tr29-37.html
//
// -----------------------------------------------------------------------------------------------------
namespace GB {
-/*
- * Most grapheme break rules can be implemented table driven, but rules GB10, GB12 and GB13 need a bit
- * of special treatment.
- */
-enum State : uchar {
- Break,
- Inside,
- GB10,
- GB10_2,
- GB10_3,
- GB13, // also covers GB12
+// This table is indexed by the grapheme break classes of two
+// (adjacent) code points.
+// The class of the first code point selects an entry.
+// If the entry's bit at position second_cp_class is set
+// (in other words: if entry & (1u << second_cp_class) is non-zero)
+// then there is NO grapheme break between the two code points.
+
+using GBTableEntryType = quint16;
+
+// Check that we have enough bits in the table (in case
+// NumGraphemeBreakClasses grows too much).
+static_assert(sizeof(GBTableEntryType) * CHAR_BIT >= QUnicodeTables::NumGraphemeBreakClasses,
+ "Internal error: increase the size in bits of GBTableEntryType");
+
+// GB9, GB9a
+static const GBTableEntryType Extend_SpacingMark_ZWJ =
+ FLAG(QUnicodeTables::GraphemeBreak_Extend)
+ | FLAG(QUnicodeTables::GraphemeBreak_SpacingMark)
+ | FLAG(QUnicodeTables::GraphemeBreak_ZWJ);
+
+static const GBTableEntryType HardBreak = 0u;
+
+static const GBTableEntryType breakTable[QUnicodeTables::NumGraphemeBreakClasses] = {
+ Extend_SpacingMark_ZWJ, // Any
+ FLAG(QUnicodeTables::GraphemeBreak_LF), // CR
+ HardBreak, // LF
+ HardBreak, // Control
+ Extend_SpacingMark_ZWJ, // Extend
+ Extend_SpacingMark_ZWJ, // ZWJ
+ Extend_SpacingMark_ZWJ, // RegionalIndicator
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_Any)
+ | FLAG(QUnicodeTables::GraphemeBreak_Prepend)
+ | FLAG(QUnicodeTables::GraphemeBreak_L)
+ | FLAG(QUnicodeTables::GraphemeBreak_V)
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ | FLAG(QUnicodeTables::GraphemeBreak_LV)
+ | FLAG(QUnicodeTables::GraphemeBreak_LVT)
+ | FLAG(QUnicodeTables::GraphemeBreak_RegionalIndicator)
+ | FLAG(QUnicodeTables::GraphemeBreak_Extended_Pictographic)
+ ), // Prepend
+ Extend_SpacingMark_ZWJ, // SpacingMark
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_L)
+ | FLAG(QUnicodeTables::GraphemeBreak_V)
+ | FLAG(QUnicodeTables::GraphemeBreak_LV)
+ | FLAG(QUnicodeTables::GraphemeBreak_LVT)
+ ), // L
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_V)
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ ), // V
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ ), // T
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_V)
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ ), // LV
+ (Extend_SpacingMark_ZWJ
+ | FLAG(QUnicodeTables::GraphemeBreak_T)
+ ), // LVT
+ Extend_SpacingMark_ZWJ // Extended_Pictographic
};
-static const State breakTable[QUnicodeTables::NumGraphemeBreakClasses][QUnicodeTables::NumGraphemeBreakClasses] = {
-// Any CR LF Control Extend ZWJ RI Prepend S-Mark L V T LV LVT E_B E_M GAZ EBG
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Any
- { Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // CR
- { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // LF
- { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Control
- { Break , Break , Break , Break , GB10_2, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , GB10_3, Break , Break }, // Extend
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Inside, Inside }, // ZWJ
- { Break , Break , Break , Break , Inside, Inside, GB13 , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // RegionalIndicator
- { Inside, Break , Break , Break , Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside }, // Prepend
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // SpacingMark
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Inside, Inside, Break , Inside, Inside, Break , Break , Break , Break }, // L
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Inside, Inside, Break , Break , Break , Break , Break , Break }, // V
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break }, // T
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Inside, Inside, Break , Break , Break , Break , Break , Break }, // LV
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break }, // LVT
- { Break , Break , Break , Break , GB10 , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Inside, Break , Break }, // E_B
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // E_M
- { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // GAZ
- { Break , Break , Break , Break , GB10 , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Inside, Break , Break }, // EBG
+static bool shouldBreakBetweenClasses(QUnicodeTables::GraphemeBreakClass first,
+ QUnicodeTables::GraphemeBreakClass second)
+{
+ return (breakTable[first] & FLAG(second)) == 0;
+}
+
+// Some rules (GB11, GB12, GB13) cannot be represented by the table alone,
+// so we need to store some local state.
+enum class State : uchar {
+ Normal,
+ GB11_ExtPicExt, // saw a Extend after a Extended_Pictographic
+ GB11_ExtPicExtZWJ, // saw a ZWG after a Extended_Pictographic and zero or more Extend
+ GB12_13_RI, // saw a RegionalIndicator following a non-RegionalIndicator
};
} // namespace GB
@@ -100,7 +147,7 @@ static const State breakTable[QUnicodeTables::NumGraphemeBreakClasses][QUnicodeT
static void getGraphemeBreaks(const char16_t *string, qsizetype len, QCharAttributes *attributes)
{
QUnicodeTables::GraphemeBreakClass lcls = QUnicodeTables::GraphemeBreak_LF; // to meet GB1
- GB::State state = GB::Break; // only required to track some of the rules
+ GB::State state = GB::State::Normal;
for (qsizetype i = 0; i != len; ++i) {
qsizetype pos = i;
char32_t ucs4 = string[i];
@@ -115,37 +162,55 @@ static void getGraphemeBreaks(const char16_t *string, qsizetype len, QCharAttrib
const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ucs4);
QUnicodeTables::GraphemeBreakClass cls = (QUnicodeTables::GraphemeBreakClass) prop->graphemeBreakClass;
- switch (GB::breakTable[lcls][cls]) {
- case GB::Break:
- attributes[pos].graphemeBoundary = true;
- state = GB::Break;
- break;
- case GB::Inside:
- state = GB::Break;
+ bool shouldBreak = GB::shouldBreakBetweenClasses(lcls, cls);
+
+ switch (state) {
+ case GB::State::Normal:
+ if (lcls == QUnicodeTables::GraphemeBreak_Extended_Pictographic) { // GB11
+ if (cls == QUnicodeTables::GraphemeBreak_Extend) {
+ state = GB::State::GB11_ExtPicExt;
+ Q_ASSERT(!shouldBreak); // GB9, do not break before Extend
+ } else if (cls == QUnicodeTables::GraphemeBreak_ZWJ) {
+ state = GB::State::GB11_ExtPicExtZWJ;
+ Q_ASSERT(!shouldBreak); // GB9, do not break before ZWJ
+ }
+ } else if (cls == QUnicodeTables::GraphemeBreak_RegionalIndicator) { // GB12, GB13
+ state = GB::State::GB12_13_RI;
+ }
+
break;
- case GB::GB10:
- state = GB::GB10;
+ case GB::State::GB11_ExtPicExt:
+ Q_ASSERT(lcls == QUnicodeTables::GraphemeBreak_Extend);
+ if (cls == QUnicodeTables::GraphemeBreak_Extend) {
+ // keep going in the current state
+ Q_ASSERT(!shouldBreak); // GB9, do not break before Extend
+ } else if (cls == QUnicodeTables::GraphemeBreak_ZWJ) {
+ state = GB::State::GB11_ExtPicExtZWJ;
+ Q_ASSERT(!shouldBreak); // GB9, do not break before ZWJ
+ }
+
break;
- case GB::GB10_2:
- if (state == GB::GB10 || state == GB::GB10_2)
- state = GB::GB10_2;
- else
- state = GB::Break;
+
+ case GB::State::GB11_ExtPicExtZWJ:
+ Q_ASSERT(lcls == QUnicodeTables::GraphemeBreak_ZWJ);
+ if (cls == QUnicodeTables::GraphemeBreak_Extended_Pictographic)
+ shouldBreak = false;
+
+ state = GB::State::Normal;
break;
- case GB::GB10_3:
- if (state != GB::GB10 && state != GB::GB10_2)
- attributes[pos].graphemeBoundary = true;
- state = GB::Break;
+
+ case GB::State::GB12_13_RI:
+ Q_ASSERT(lcls == QUnicodeTables::GraphemeBreak_RegionalIndicator);
+ if (cls == QUnicodeTables::GraphemeBreak_RegionalIndicator)
+ shouldBreak = false;
+
+ state = GB::State::Normal;
break;
- case GB::GB13:
- if (state != GB::GB13) {
- state = GB::GB13;
- } else {
- attributes[pos].graphemeBoundary = true;
- state = GB::Break;
- }
}
+ if (shouldBreak)
+ attributes[pos].graphemeBoundary = true;
+
lcls = cls;
}
diff --git a/src/corelib/thread/qfuture.qdoc b/src/corelib/thread/qfuture.qdoc
index 8fec4989bb..335c16a39c 100644
--- a/src/corelib/thread/qfuture.qdoc
+++ b/src/corelib/thread/qfuture.qdoc
@@ -33,8 +33,6 @@
\ingroup thread
- To start a computation, use one of the APIs in the \l {Qt Concurrent} framework.
-
QFuture allows threads to be synchronized against one or more results
which will be ready at a later point in time. The result can be of any type
that has default, copy and possibly move constructors. If
@@ -134,7 +132,10 @@
you can attach multiple continuations to a signal, which are invoked in the
same thread or a new thread.
- \sa QtFuture::connect(), QFutureWatcher, {Qt Concurrent}
+ \note To start a computation and store results in a QFuture, use QPromise or
+ one of the APIs in the \l {Qt Concurrent} framework.
+
+ \sa QPromise, QtFuture::connect(), QFutureWatcher, {Qt Concurrent}
*/
/*! \fn template <typename T> QFuture<T>::QFuture()
diff --git a/src/corelib/thread/qfuture_impl.h b/src/corelib/thread/qfuture_impl.h
index 4998fa79aa..4d77acb0fe 100644
--- a/src/corelib/thread/qfuture_impl.h
+++ b/src/corelib/thread/qfuture_impl.h
@@ -724,34 +724,34 @@ static QFuture<ArgsType<Signal>> connect(Sender *sender, Signal signal)
if constexpr (std::is_void_v<ArgsType>) {
connections->first =
QObject::connect(sender, signal, sender, [promise, connections]() mutable {
- promise.reportFinished();
QObject::disconnect(connections->first);
QObject::disconnect(connections->second);
+ promise.reportFinished();
});
} else if constexpr (QtPrivate::isTupleV<ArgsType>) {
connections->first = QObject::connect(sender, signal, sender,
[promise, connections](auto... values) mutable {
- promise.reportResult(std::make_tuple(values...));
- promise.reportFinished();
QObject::disconnect(connections->first);
QObject::disconnect(connections->second);
+ promise.reportResult(std::make_tuple(values...));
+ promise.reportFinished();
});
} else {
connections->first = QObject::connect(sender, signal, sender,
[promise, connections](ArgsType value) mutable {
- promise.reportResult(value);
- promise.reportFinished();
QObject::disconnect(connections->first);
QObject::disconnect(connections->second);
+ promise.reportResult(value);
+ promise.reportFinished();
});
}
connections->second =
QObject::connect(sender, &QObject::destroyed, sender, [promise, connections]() mutable {
- promise.reportCanceled();
- promise.reportFinished();
QObject::disconnect(connections->first);
QObject::disconnect(connections->second);
+ promise.reportCanceled();
+ promise.reportFinished();
});
return promise.future();
diff --git a/src/corelib/thread/qthreadpool.cpp b/src/corelib/thread/qthreadpool.cpp
index 6d258af9df..7eb1b601ff 100644
--- a/src/corelib/thread/qthreadpool.cpp
+++ b/src/corelib/thread/qthreadpool.cpp
@@ -176,7 +176,7 @@ bool QThreadPoolPrivate::tryStart(QRunnable *task)
}
// can't do anything if we're over the limit
- if (activeThreadCount() >= maxThreadCount)
+ if (activeThreadCount() >= maxThreadCount())
return false;
if (waitingThreads.count() > 0) {
@@ -249,7 +249,7 @@ void QThreadPoolPrivate::tryToStartMoreThreads()
bool QThreadPoolPrivate::tooManyThreadsActive() const
{
const int activeThreadCount = this->activeThreadCount();
- return activeThreadCount > maxThreadCount && (activeThreadCount - reservedThreads) > 1;
+ return activeThreadCount > maxThreadCount() && (activeThreadCount - reservedThreads) > 1;
}
/*!
@@ -571,7 +571,7 @@ bool QThreadPool::tryStart(std::function<void()> functionToRun)
Q_D(QThreadPool);
QMutexLocker locker(&d->mutex);
- if (!d->allThreads.isEmpty() && d->activeThreadCount() >= d->maxThreadCount)
+ if (!d->allThreads.isEmpty() && d->activeThreadCount() >= d->maxThreadCount())
return false;
QRunnable *runnable = QRunnable::create(std::move(functionToRun));
@@ -612,7 +612,9 @@ void QThreadPool::setExpiryTimeout(int expiryTimeout)
/*! \property QThreadPool::maxThreadCount
- \brief the maximum number of threads used by the thread pool.
+ \brief the maximum number of threads used by the thread pool. This property
+ will default to the value of QThread::idealThreadCount() at the moment the
+ QThreadPool object is created.
\note The thread pool will always use at least 1 thread, even if
\a maxThreadCount limit is zero or negative.
@@ -623,7 +625,7 @@ void QThreadPool::setExpiryTimeout(int expiryTimeout)
int QThreadPool::maxThreadCount() const
{
Q_D(const QThreadPool);
- return d->maxThreadCount;
+ return d->requestedMaxThreadCount;
}
void QThreadPool::setMaxThreadCount(int maxThreadCount)
@@ -631,10 +633,10 @@ void QThreadPool::setMaxThreadCount(int maxThreadCount)
Q_D(QThreadPool);
QMutexLocker locker(&d->mutex);
- if (maxThreadCount == d->maxThreadCount)
+ if (maxThreadCount == d->requestedMaxThreadCount)
return;
- d->maxThreadCount = maxThreadCount;
+ d->requestedMaxThreadCount = maxThreadCount;
d->tryToStartMoreThreads();
}
@@ -756,6 +758,7 @@ bool QThreadPool::contains(const QThread *thread) const
const QThreadPoolThread *poolThread = qobject_cast<const QThreadPoolThread *>(thread);
if (!poolThread)
return false;
+ QMutexLocker locker(&d->mutex);
return d->allThreads.contains(const_cast<QThreadPoolThread *>(poolThread));
}
diff --git a/src/corelib/thread/qthreadpool_p.h b/src/corelib/thread/qthreadpool_p.h
index 4d73a480b5..a2c7d917a4 100644
--- a/src/corelib/thread/qthreadpool_p.h
+++ b/src/corelib/thread/qthreadpool_p.h
@@ -55,6 +55,7 @@
#include "QtCore/qmutex.h"
#include "QtCore/qthread.h"
#include "QtCore/qwaitcondition.h"
+#include "QtCore/qthreadpool.h"
#include "QtCore/qset.h"
#include "QtCore/qqueue.h"
#include "private/qobject_p.h"
@@ -158,6 +159,8 @@ public:
void tryToStartMoreThreads();
bool tooManyThreadsActive() const;
+ int maxThreadCount() const
+ { return qMax(requestedMaxThreadCount, 1); } // documentation says we start at least one
void startThread(QRunnable *runnable = nullptr);
void reset();
bool waitForDone(int msecs);
@@ -174,7 +177,7 @@ public:
QWaitCondition noActiveThreads;
int expiryTimeout = 30000;
- int maxThreadCount = QThread::idealThreadCount();
+ int requestedMaxThreadCount = QThread::idealThreadCount(); // don't use this directly
int reservedThreads = 0;
int activeThreads = 0;
uint stackSize = 0;
diff --git a/src/corelib/time/qcalendar.cpp b/src/corelib/time/qcalendar.cpp
index db17da0eca..4782e1a80a 100644
--- a/src/corelib/time/qcalendar.cpp
+++ b/src/corelib/time/qcalendar.cpp
@@ -50,9 +50,12 @@
#include "qislamiccivilcalendar_p.h"
#endif
+#include "qatomic.h"
#include "qdatetime.h"
#include "qcalendarmath_p.h"
#include <qhash.h>
+#include <qmutex.h>
+#include <private/qlocking_p.h>
#include <qdebug.h>
#include <vector>
@@ -78,11 +81,13 @@ inline size_t qHash(const CalendarName &key, size_t seed = 0) noexcept
return qHash(key.toLower(), seed);
}
-struct Registry {
+static QBasicMutex registryMutex; // Protects registry from concurrent access
+struct Registry
+{
std::vector<QCalendarBackend *> byId;
QHash<CalendarName, QCalendarBackend *> byName;
- QCalendarBackend *gregorianCalendar = nullptr;
- bool populated = false;
+ QAtomicPointer<const QCalendarBackend> gregorianCalendar = nullptr;
+ QAtomicInteger<int> status = 0; // 1: populated, 2: destructing
Registry()
{
@@ -91,12 +96,18 @@ struct Registry {
~Registry()
{
+ status.storeRelaxed(2);
+ const auto lock = qt_scoped_lock(registryMutex);
qDeleteAll(byId);
}
bool registerName(QCalendarBackend *calendar, const QString &name)
{
Q_ASSERT(!name.isEmpty());
+ if (status.loadRelaxed() > 1 || name.isEmpty())
+ return false;
+ const auto lock = qt_scoped_lock(registryMutex);
+
const auto found = byName.find(name);
if (found != byName.end()) {
// Re-registering a calendar with a name it has already is OK (and
@@ -109,18 +120,25 @@ struct Registry {
}
void addCalendar(QCalendarBackend *calendar, const QString &name, QCalendar::System id)
{
- if (name.isEmpty() || !registerName(calendar, name))
+ if (status.loadRelaxed() > 1 || name.isEmpty() || !registerName(calendar, name))
return;
- Q_ASSERT(byId.size() >= size_t(id));
+ const auto lock = qt_scoped_lock(registryMutex);
if (id == QCalendar::System::User) {
byId.push_back(calendar);
} else {
+ Q_ASSERT(byId.size() > size_t(id));
Q_ASSERT(byId[size_t(id)] == nullptr);
byId[size_t(id)] = calendar;
}
if (id == QCalendar::System::Gregorian) {
- Q_ASSERT(!gregorianCalendar);
- gregorianCalendar = calendar;
+ // We succeeded in registering the name, so must be the first
+ // instantiator of QGregorianCalendar to get here.
+ const bool ok = gregorianCalendar.testAndSetRelease(nullptr, calendar);
+#if defined(QT_FORCE_ASSERTS) || !defined(QT_NO_DEBUG)
+ Q_ASSERT(ok);
+#else
+ Q_UNUSED(ok);
+#endif
}
}
/*
@@ -133,15 +151,21 @@ struct Registry {
*/
void populate()
{
- if (populated)
+ if (status.loadRelaxed())
return;
for (int i = 0; i <= int(QCalendar::System::Last); ++i) {
- if (!byId[i])
- (void)backendFromEnum(QCalendar::System(i));
+ {
+ const auto lock = qt_scoped_lock(registryMutex); // so we can check byId[i]
+ if (status.loadRelaxed()) // Might as well check while we're locked
+ return;
+ if (byId[i])
+ continue;
+ }
+ (void)backendFromEnum(QCalendar::System(i));
}
- populated = true;
+ status.testAndSetRelease(0, 1);
}
};
@@ -149,6 +173,8 @@ struct Registry {
Q_GLOBAL_STATIC(Registry, calendarRegistry);
+// Must not be called in a thread that's holding registryMutex locked,
+// since it calls constructors, which need to register.
static const QCalendarBackend *backendFromEnum(QCalendar::System system)
{
QCalendarBackend *backend = nullptr;
@@ -183,12 +209,16 @@ static const QCalendarBackend *backendFromEnum(QCalendar::System system)
return backend;
const QString name = backend->name();
// Check for successful registration:
- if (calendarRegistry->registerName(backend, name))
+ if (calendarRegistry->registerName(backend, name)) {
+#if defined(QT_FORCE_ASSERTS) || !defined(QT_NO_DEBUG)
+ const auto lock = qt_scoped_lock(registryMutex);
+ Q_ASSERT(backend == calendarRegistry->byId[size_t(system)]);
+#endif // else Q_ASSERT() is a no-op and we don't need the lock
return backend;
+ }
+ // Duplicate registration: caller can be sure that byId[system] is correctly
+ // set, provided system <= Last.
delete backend;
- const auto found = calendarRegistry->byName.find(name);
- if (found != calendarRegistry->byName.end())
- return found.value();
return nullptr;
}
@@ -212,21 +242,62 @@ static const QCalendarBackend *backendFromEnum(QCalendar::System system)
with third-party software. Once a backend is registered for a name,
QCalendar can be constructed using that name to select the backend.
+ Each built-in backend has a distinct primary name and all built-in backends
+ are instantiated before any custom backend is registered, to prevent custom
+ backends with conflicting names from replacing built-in backends.
+
Each calendar backend must inherit from QCalendarBackend and implement its
pure virtual methods. It may also override some other virtual methods, as
needed.
Most backends are pure code, with no data elements. Such backends should
normally be implemented as singletons. For a backend to be added to the
- QCalendar::System \c enum, it should be such a singleton, with a case in
+ QCalendar::System \c enum, it must be such a singleton, with a case in
backendFromEnum()'s switch statement (above) to instantiate it.
- Non-singleton calendar backends should ensure that each instance is created
- with a distinct primary name. Later instances attempting to register with a
- name already in use shall fail to register and be unavailable to QCalendar,
- hence unusable.
-
- \sa registerAlias(), QDate, QDateTime, QDateEdit, QDateTimeEdit, QCalendarWidget
+ \section1 Instantiating backends
+
+ Backends may be defined by third-party, plugin or user code. When such
+ custom backends are instantiated, in their calls to the QCalendarBackend
+ base-class constructor, each instance should pass a distinct primary name to
+ the base-class constructor and omit the \c system parameter.
+
+ A backend class that has instance variables as well as code may be
+ instantiated many times, each with a distinct primary name, to implement
+ distinct backends - presumably variants on some parameterized calendar.
+ Each instance is then a distinct backend. A pure code backend class shall
+ typically only be instantiated once, as it is only capable of representing
+ one backend.
+
+ Each backend should be instantiated exactly once, on the heap (using the C++
+ \c new operator); this will register it with the QCalendar implementation
+ code and ensure it is available, by its primary name, to all code that may
+ subsequently need it. It will be deleted on program termination along with
+ the registry in which QCalendar records backends.
+
+ The single exception to this is that each backend's instantiator should
+ verify that it was registered successfully with its primary name. It can do
+ this by calling registerAlias() with that name; this will return true if it
+ is already registered with the name. If it returns false, the instantiation
+ has used a name that was already in use so the new backend has not been
+ registered and the instantiator retains ownership of the backend instance;
+ it will not be accessible to QCalendar. (Since registerAlias() is protected,
+ a custom backend's class shall typically need to provide a method to perform
+ this check for its instantiator.)
+
+ Built-in backends, identified by QCalendar::System values other than User,
+ should only be instantiated by code in the implementation of QCalendar; no
+ other code should ever instantiate one. As noted above, such a backend must
+ be a singleton. Its constructor passes down the \c enum member that
+ identifies it as \c system to the base-class constructor.
+
+ The shareable base-classes for backends, QRomanCalendar and QHijriCalendar,
+ are not themselves identified by QCalendar::System and may be used as
+ base-classes for custom calendar backends, but cannot be instantiated
+ themselves.
+
+ \sa registerAlias(), QDate, QDateTime, QDateEdit, QDateTimeEdit,
+ QCalendarWidget
*/
/*!
@@ -261,11 +332,12 @@ static const QCalendarBackend *backendFromEnum(QCalendar::System system)
given \c name is in use already. This can be used as a test before
instantiating a backend with the given \c name.
- \sa calendarId(), calendarSystem(), registerAlias()
+ \sa calendarSystem(), registerAlias()
*/
QCalendarBackend::QCalendarBackend(const QString &name, QCalendar::System system)
{
Q_ASSERT(!name.isEmpty());
+ // Will lock the registry mutex on its own, so no need to do it here:
calendarRegistry->addCalendar(this, name, system);
}
@@ -667,6 +739,7 @@ QStringList QCalendarBackend::availableCalendars()
if (calendarRegistry.isDestroyed())
return {};
calendarRegistry->populate();
+ const auto registryLock = qt_scoped_lock(registryMutex);
return QStringList(calendarRegistry->byName.keyBegin(), calendarRegistry->byName.keyEnd());
}
@@ -689,6 +762,9 @@ bool QCalendarBackend::registerAlias(const QString &name)
return false;
// Constructing this accessed the registry, so ensured it exists:
Q_ASSERT(calendarRegistry.exists());
+
+ // Not taking the lock on the registry here because it's just one call
+ // (which internally locks anyway).
return calendarRegistry->registerName(this, name);
}
@@ -710,6 +786,7 @@ const QCalendarBackend *QCalendarBackend::fromName(QStringView name)
if (calendarRegistry.isDestroyed())
return nullptr;
calendarRegistry->populate();
+ const auto registryLock = qt_scoped_lock(registryMutex);
auto it = calendarRegistry->byName.find(name.toString());
return it == calendarRegistry->byName.end() ? nullptr : *it;
}
@@ -723,6 +800,7 @@ const QCalendarBackend *QCalendarBackend::fromName(QLatin1String name)
if (calendarRegistry.isDestroyed())
return nullptr;
calendarRegistry->populate();
+ const auto registryLock = qt_scoped_lock(registryMutex);
auto it = calendarRegistry->byName.find(QString(name));
return it == calendarRegistry->byName.end() ? nullptr : *it;
}
@@ -739,10 +817,16 @@ const QCalendarBackend *QCalendarBackend::fromEnum(QCalendar::System system)
{
if (calendarRegistry.isDestroyed() || system == QCalendar::System::User)
return nullptr;
- Q_ASSERT(calendarRegistry->byId.size() >= size_t(system));
- if (auto *c = calendarRegistry->byId[size_t(system)])
- return c;
- return backendFromEnum(system);
+ {
+ const auto registryLock = qt_scoped_lock(registryMutex);
+ Q_ASSERT(calendarRegistry->byId.size() >= size_t(system));
+ if (auto *c = calendarRegistry->byId[size_t(system)])
+ return c;
+ }
+ if (auto *result = backendFromEnum(system))
+ return result;
+ const auto registryLock = qt_scoped_lock(registryMutex);
+ return calendarRegistry->byId[size_t(system)];
}
/*!
@@ -809,9 +893,13 @@ QCalendar::QCalendar()
{
if (calendarRegistry.isDestroyed())
return;
- d = calendarRegistry->gregorianCalendar;
- if (!d)
- d = new QGregorianCalendar;
+ d = calendarRegistry->gregorianCalendar.loadAcquire();
+ if (!d) {
+ auto fresh = new QGregorianCalendar;
+ if (!calendarRegistry->gregorianCalendar.testAndSetOrdered(fresh, fresh, d))
+ delete fresh;
+ Q_ASSERT(d);
+ }
}
QCalendar::QCalendar(QCalendar::System system)
@@ -895,8 +983,8 @@ bool QCalendar::isDateValid(int year, int month, int day) const
*/
bool QCalendar::isGregorian() const
{
- Q_ASSERT(!calendarRegistry.isDestroyed());
- return d == calendarRegistry->gregorianCalendar;
+ Q_ASSERT(calendarRegistry.exists());
+ return d == calendarRegistry->gregorianCalendar.loadRelaxed();
}
/*!
diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp
index f85e4115bb..62a5531c03 100644
--- a/src/corelib/time/qdatetime.cpp
+++ b/src/corelib/time/qdatetime.cpp
@@ -2485,7 +2485,7 @@ static qint64 qt_mktime(QDate *date, QTime *time, QDateTimePrivate::DaylightStat
*abbreviation = qt_tzname(QDateTimePrivate::StandardTime);
}
} else if (yy == 1969 && mm == 12 && dd == 31
- && time->second() == MSECS_PER_DAY - 1) {
+ && QTime(0, 0).secsTo(*time) == SECS_PER_DAY - 1) {
// There was, of course, a last second in 1969, at time_t(-1); we won't
// rescue it if it's not in normalised form, and we don't know its DST
// status (unless we did already), but let's not wantonly declare it
diff --git a/src/corelib/time/qdatetimeparser.cpp b/src/corelib/time/qdatetimeparser.cpp
index a36eded2e5..7bee5a68b1 100644
--- a/src/corelib/time/qdatetimeparser.cpp
+++ b/src/corelib/time/qdatetimeparser.cpp
@@ -1740,6 +1740,24 @@ QDateTimeParser::findTimeZoneName(QStringView str, const QDateTime &when) const
int index = std::distance(str.cbegin(),
std::find_if(str.cbegin(), str.cend(), invalidZoneNameCharacter));
+ // Limit name fragments (between slashes) to 20 characters.
+ // (Valid time-zone IDs are allowed up to 14 and Android has quirks up to 17.)
+ // Limit number of fragments to six; no known zone name has more than four.
+ int lastSlash = -1;
+ int count = 0;
+ Q_ASSERT(index <= str.size());
+ while (lastSlash < index) {
+ int slash = str.indexOf(QLatin1Char('/'), lastSlash + 1);
+ if (slash < 0)
+ slash = index; // i.e. the end of the candidate text
+ else if (++count > 5)
+ index = slash; // Truncate
+ if (slash - lastSlash > 20)
+ index = lastSlash + 20; // Truncate
+ // If any of those conditions was met, index <= slash, so this exits the loop:
+ lastSlash = slash;
+ }
+
for (; index > systemLength; --index) { // Find longest match
str.truncate(index);
QTimeZone zone(str.toLatin1());
diff --git a/src/corelib/time/qhijricalendar_data_p.h b/src/corelib/time/qhijricalendar_data_p.h
index 48932eb1b6..56a7fbdc29 100644
--- a/src/corelib/time/qhijricalendar_data_p.h
+++ b/src/corelib/time/qhijricalendar_data_p.h
@@ -59,8 +59,8 @@ QT_BEGIN_NAMESPACE
// GENERATED PART STARTS HERE
/*
- This part of the file was generated on 2020-10-30 from the
- Common Locale Data Repository v38
+ This part of the file was generated on 2021-04-09 from the
+ Common Locale Data Repository v39
http://www.unicode.org/cldr/
@@ -504,7 +504,7 @@ static const QCalendarLocale locale_data[] = {
{ 208, 66, 261, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// North Ndebele/Latin/Zimbabwe
{ 209, 66, 175, 6381, 6381, 6487, 6565, 184, 184,106,106, 78, 78, 26, 26 },// Norwegian Bokmal/Latin/Norway
{ 209, 66, 224, 6381, 6381, 6487, 6565, 184, 184,106,106, 78, 78, 26, 26 },// Norwegian Bokmal/Latin/Svalbard And Jan Mayen
- { 210, 66, 175, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Norwegian Nynorsk/Latin/Norway
+ { 210, 66, 175, 6381, 6381, 6487, 6565, 184, 184,106,106, 78, 78, 26, 26 },// Norwegian Nynorsk/Latin/Norway
{ 211, 66, 219, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Nuer/Latin/South Sudan
{ 212, 66, 142, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Nyanja/Latin/Malawi
{ 213, 66, 243, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Nyankole/Latin/Uganda
diff --git a/src/corelib/time/qjalalicalendar_data_p.h b/src/corelib/time/qjalalicalendar_data_p.h
index 8106550670..875703fc85 100644
--- a/src/corelib/time/qjalalicalendar_data_p.h
+++ b/src/corelib/time/qjalalicalendar_data_p.h
@@ -59,8 +59,8 @@ QT_BEGIN_NAMESPACE
// GENERATED PART STARTS HERE
/*
- This part of the file was generated on 2020-10-30 from the
- Common Locale Data Repository v38
+ This part of the file was generated on 2021-04-09 from the
+ Common Locale Data Repository v39
http://www.unicode.org/cldr/
@@ -504,7 +504,7 @@ static const QCalendarLocale locale_data[] = {
{ 208, 66, 261, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// North Ndebele/Latin/Zimbabwe
{ 209, 66, 175, 822, 822, 822, 822, 153, 153, 83, 83, 83, 83, 26, 26 },// Norwegian Bokmal/Latin/Norway
{ 209, 66, 224, 822, 822, 822, 822, 153, 153, 83, 83, 83, 83, 26, 26 },// Norwegian Bokmal/Latin/Svalbard And Jan Mayen
- { 210, 66, 175, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Norwegian Nynorsk/Latin/Norway
+ { 210, 66, 175, 822, 822, 822, 822, 153, 153, 83, 83, 83, 83, 26, 26 },// Norwegian Nynorsk/Latin/Norway
{ 211, 66, 219, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Nuer/Latin/South Sudan
{ 212, 66, 142, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Nyanja/Latin/Malawi
{ 213, 66, 243, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Nyankole/Latin/Uganda
diff --git a/src/corelib/time/qtimezoneprivate_android.cpp b/src/corelib/time/qtimezoneprivate_android.cpp
index fae9b84fa0..da82832455 100644
--- a/src/corelib/time/qtimezoneprivate_android.cpp
+++ b/src/corelib/time/qtimezoneprivate_android.cpp
@@ -113,7 +113,7 @@ void QAndroidTimeZonePrivate::init(const QByteArray &ianaId)
// The ID or display name of the zone we've got, if it looks like what we asked for:
const auto match = [iana](const QJNIObjectPrivate &jname) -> QByteArray {
const QString name = jname.toString();
- if (iana.compare(name, Qt::CaseInsensitive))
+ if (iana.compare(name, Qt::CaseInsensitive) == 0)
return name.toUtf8();
return QByteArray();
diff --git a/src/corelib/time/qtimezoneprivate_data_p.h b/src/corelib/time/qtimezoneprivate_data_p.h
index a1cae29aea..053f619251 100644
--- a/src/corelib/time/qtimezoneprivate_data_p.h
+++ b/src/corelib/time/qtimezoneprivate_data_p.h
@@ -115,8 +115,8 @@ struct QUtcData {
// GENERATED PART STARTS HERE
/*
- This part of the file was generated on 2020-11-04 from the
- Common Locale Data Repository v38 file supplemental/windowsZones.xml
+ This part of the file was generated on 2021-04-13 from the
+ Common Locale Data Repository v39 file supplemental/windowsZones.xml
http://www.unicode.org/cldr/
@@ -213,285 +213,286 @@ static const QZoneData zoneDataTable[] = {
{ 36, 141, 2026 }, // E. Africa Standard Time / Madagascar
{ 36, 151, 2046 }, // E. Africa Standard Time / Mayotte
{ 36, 215, 2061 }, // E. Africa Standard Time / Somalia
- { 36, 219, 2078 }, // E. Africa Standard Time / South Sudan
- { 36, 230, 2090 }, // E. Africa Standard Time / Tanzania
- { 36, 243, 2111 }, // E. Africa Standard Time / Uganda
- { 37, 15, 2126 }, // E. Australia Standard Time / Australia
- { 38, 154, 2164 }, // E. Europe Standard Time / Moldova
- { 39, 32, 2180 }, // E. South America Standard Time / Brazil
- { 40, 49, 2198 }, // Easter Island Standard Time / Chile
- { 41, 0, 2213 }, // Eastern Standard Time / AnyCountry
- { 41, 18, 2221 }, // Eastern Standard Time / Bahamas
- { 41, 41, 2236 }, // Eastern Standard Time / Canada
- { 41, 248, 2341 }, // Eastern Standard Time / United States
- { 42, 152, 2498 }, // Eastern Standard Time (Mexico) / Mexico
- { 43, 71, 2513 }, // Egypt Standard Time / Egypt
- { 44, 193, 2526 }, // Ekaterinburg Standard Time / Russia
- { 45, 82, 2545 }, // Fiji Standard Time / Fiji
- { 46, 2, 2558 }, // FLE Standard Time / Aland Islands
- { 46, 36, 2575 }, // FLE Standard Time / Bulgaria
- { 46, 75, 2588 }, // FLE Standard Time / Estonia
- { 46, 83, 2603 }, // FLE Standard Time / Finland
- { 46, 131, 2619 }, // FLE Standard Time / Latvia
- { 46, 137, 2631 }, // FLE Standard Time / Lithuania
- { 46, 244, 2646 }, // FLE Standard Time / Ukraine
- { 47, 90, 2692 }, // Georgian Standard Time / Georgia
- { 48, 81, 2705 }, // GMT Standard Time / Faroe Islands
- { 48, 100, 2721 }, // GMT Standard Time / Guernsey
- { 48, 114, 2737 }, // GMT Standard Time / Ireland
- { 48, 115, 2751 }, // GMT Standard Time / Isle Of Man
- { 48, 121, 2770 }, // GMT Standard Time / Jersey
- { 48, 188, 2784 }, // GMT Standard Time / Portugal
- { 48, 220, 2815 }, // GMT Standard Time / Spain
- { 48, 246, 2831 }, // GMT Standard Time / United Kingdom
- { 49, 95, 2845 }, // Greenland Standard Time / Greenland
- { 50, 37, 2861 }, // Greenwich Standard Time / Burkina Faso
- { 50, 89, 2880 }, // Greenwich Standard Time / Gambia
- { 50, 92, 2894 }, // Greenwich Standard Time / Ghana
- { 50, 101, 2907 }, // Greenwich Standard Time / Guinea Bissau
- { 50, 102, 2921 }, // Greenwich Standard Time / Guinea
- { 50, 109, 2936 }, // Greenwich Standard Time / Iceland
- { 50, 118, 2955 }, // Greenwich Standard Time / Ivory Coast
- { 50, 134, 2970 }, // Greenwich Standard Time / Liberia
- { 50, 145, 2986 }, // Greenwich Standard Time / Mali
- { 50, 149, 3000 }, // Greenwich Standard Time / Mauritania
- { 50, 196, 3018 }, // Greenwich Standard Time / Saint Helena
- { 50, 206, 3037 }, // Greenwich Standard Time / Senegal
- { 50, 209, 3050 }, // Greenwich Standard Time / Sierra Leone
- { 50, 233, 3066 }, // Greenwich Standard Time / Togo
- { 51, 63, 3078 }, // GTB Standard Time / Cyprus
- { 51, 94, 3106 }, // GTB Standard Time / Greece
- { 51, 192, 3120 }, // GTB Standard Time / Romania
- { 52, 104, 3137 }, // Haiti Standard Time / Haiti
- { 53, 0, 3160 }, // Hawaiian Standard Time / AnyCountry
- { 53, 58, 3171 }, // Hawaiian Standard Time / Cook Islands
- { 53, 86, 3189 }, // Hawaiian Standard Time / French Polynesia
- { 53, 247, 3204 }, // Hawaiian Standard Time / United States Outlying Islands
- { 53, 248, 3221 }, // Hawaiian Standard Time / United States
- { 54, 110, 3238 }, // India Standard Time / India
- { 55, 112, 3252 }, // Iran Standard Time / Iran
- { 56, 116, 3264 }, // Israel Standard Time / Israel
- { 57, 122, 3279 }, // Jordan Standard Time / Jordan
- { 58, 193, 3290 }, // Kaliningrad Standard Time / Russia
- { 59, 218, 3309 }, // Korea Standard Time / South Korea
- { 60, 135, 3320 }, // Libya Standard Time / Libya
- { 61, 0, 3335 }, // Line Islands Standard Time / AnyCountry
- { 61, 125, 3346 }, // Line Islands Standard Time / Kiribati
- { 62, 15, 3365 }, // Lord Howe Standard Time / Australia
- { 63, 193, 3385 }, // Magadan Standard Time / Russia
- { 64, 49, 3398 }, // Magallanes Standard Time / Chile
- { 65, 86, 3419 }, // Marquesas Standard Time / French Polynesia
- { 66, 150, 3437 }, // Mauritius Standard Time / Mauritius
- { 66, 191, 3454 }, // Mauritius Standard Time / Reunion
- { 66, 208, 3469 }, // Mauritius Standard Time / Seychelles
- { 67, 132, 3481 }, // Middle East Standard Time / Lebanon
- { 68, 250, 3493 }, // Montevideo Standard Time / Uruguay
- { 69, 159, 3512 }, // Morocco Standard Time / Morocco
- { 69, 257, 3530 }, // Morocco Standard Time / Western Sahara
- { 70, 152, 3546 }, // Mountain Standard Time (Mexico) / Mexico
- { 71, 0, 3581 }, // Mountain Standard Time / AnyCountry
- { 71, 41, 3589 }, // Mountain Standard Time / Canada
- { 71, 152, 3663 }, // Mountain Standard Time / Mexico
- { 71, 248, 3679 }, // Mountain Standard Time / United States
- { 72, 53, 3708 }, // Myanmar Standard Time / Cocos Islands
- { 72, 161, 3721 }, // Myanmar Standard Time / Myanmar
- { 73, 193, 3734 }, // N. Central Asia Standard Time / Russia
- { 74, 162, 3751 }, // Namibia Standard Time / Namibia
- { 75, 164, 3767 }, // Nepal Standard Time / Nepal
- { 76, 9, 3781 }, // New Zealand Standard Time / Antarctica
- { 76, 167, 3800 }, // New Zealand Standard Time / New Zealand
- { 77, 41, 3817 }, // Newfoundland Standard Time / Canada
- { 78, 172, 3834 }, // Norfolk Standard Time / Norfolk Island
- { 79, 193, 3850 }, // North Asia East Standard Time / Russia
- { 80, 193, 3863 }, // North Asia Standard Time / Russia
- { 81, 174, 3898 }, // North Korea Standard Time / North Korea
- { 82, 193, 3913 }, // Omsk Standard Time / Russia
- { 83, 49, 3923 }, // Pacific SA Standard Time / Chile
- { 84, 0, 3940 }, // Pacific Standard Time / AnyCountry
- { 84, 41, 3948 }, // Pacific Standard Time / Canada
- { 84, 248, 3966 }, // Pacific Standard Time / United States
- { 85, 152, 3986 }, // Pacific Standard Time (Mexico) / Mexico
- { 86, 178, 4023 }, // Pakistan Standard Time / Pakistan
- { 87, 183, 4036 }, // Paraguay Standard Time / Paraguay
- { 88, 123, 4053 }, // Qyzylorda Standard Time / Kazakhstan
- { 89, 23, 4068 }, // Romance Standard Time / Belgium
- { 89, 65, 4084 }, // Romance Standard Time / Denmark
- { 89, 84, 4102 }, // Romance Standard Time / France
- { 89, 220, 4115 }, // Romance Standard Time / Spain
- { 90, 193, 4142 }, // Russia Time Zone 3 / Russia
- { 91, 193, 4156 }, // Russia Time Zone 10 / Russia
- { 92, 193, 4175 }, // Russia Time Zone 11 / Russia
- { 93, 193, 4202 }, // Russian Standard Time / Russia
- { 93, 244, 4229 }, // Russian Standard Time / Ukraine
- { 94, 0, 4247 }, // SA Eastern Standard Time / AnyCountry
- { 94, 9, 4257 }, // SA Eastern Standard Time / Antarctica
- { 94, 32, 4294 }, // SA Eastern Standard Time / Brazil
- { 94, 80, 4373 }, // SA Eastern Standard Time / Falkland Islands
- { 94, 85, 4390 }, // SA Eastern Standard Time / French Guiana
- { 94, 223, 4406 }, // SA Eastern Standard Time / Suriname
- { 95, 0, 4425 }, // SA Pacific Standard Time / AnyCountry
- { 95, 32, 4435 }, // SA Pacific Standard Time / Brazil
- { 95, 41, 4471 }, // SA Pacific Standard Time / Canada
- { 95, 45, 4493 }, // SA Pacific Standard Time / Cayman Islands
- { 95, 54, 4508 }, // SA Pacific Standard Time / Colombia
- { 95, 70, 4523 }, // SA Pacific Standard Time / Ecuador
- { 95, 119, 4541 }, // SA Pacific Standard Time / Jamaica
- { 95, 181, 4557 }, // SA Pacific Standard Time / Panama
- { 95, 184, 4572 }, // SA Pacific Standard Time / Peru
- { 96, 0, 4585 }, // SA Western Standard Time / AnyCountry
- { 96, 8, 4595 }, // SA Western Standard Time / Anguilla
- { 96, 10, 4612 }, // SA Western Standard Time / Antigua And Barbuda
- { 96, 13, 4628 }, // SA Western Standard Time / Aruba
- { 96, 21, 4642 }, // SA Western Standard Time / Barbados
- { 96, 28, 4659 }, // SA Western Standard Time / Bolivia
- { 96, 32, 4674 }, // SA Western Standard Time / Brazil
- { 96, 34, 4727 }, // SA Western Standard Time / British Virgin Islands
- { 96, 41, 4743 }, // SA Western Standard Time / Canada
- { 96, 44, 4764 }, // SA Western Standard Time / Caribbean Netherlands
- { 96, 62, 4783 }, // SA Western Standard Time / Curacao
- { 96, 68, 4799 }, // SA Western Standard Time / Dominica
- { 96, 69, 4816 }, // SA Western Standard Time / Dominican Republic
- { 96, 96, 4838 }, // SA Western Standard Time / Grenada
- { 96, 97, 4854 }, // SA Western Standard Time / Guadeloupe
- { 96, 103, 4873 }, // SA Western Standard Time / Guyana
- { 96, 148, 4888 }, // SA Western Standard Time / Martinique
- { 96, 158, 4907 }, // SA Western Standard Time / Montserrat
- { 96, 189, 4926 }, // SA Western Standard Time / Puerto Rico
- { 96, 195, 4946 }, // SA Western Standard Time / Saint Barthelemy
- { 96, 197, 4968 }, // SA Western Standard Time / Saint Kitts And Nevis
- { 96, 198, 4985 }, // SA Western Standard Time / Saint Lucia
- { 96, 199, 5002 }, // SA Western Standard Time / Saint Martin
- { 96, 201, 5018 }, // SA Western Standard Time / Saint Vincent And Grenadines
- { 96, 211, 5037 }, // SA Western Standard Time / Sint Maarten
- { 96, 236, 5059 }, // SA Western Standard Time / Trinidad And Tobago
- { 96, 249, 5081 }, // SA Western Standard Time / United States Virgin Islands
- { 97, 200, 5099 }, // Saint Pierre Standard Time / Saint Pierre And Miquelon
- { 98, 193, 5116 }, // Sakhalin Standard Time / Russia
- { 99, 202, 5130 }, // Samoa Standard Time / Samoa
- { 100, 204, 5143 }, // Sao Tome Standard Time / Sao Tome And Principe
- { 101, 193, 5159 }, // Saratov Standard Time / Russia
- { 102, 0, 5174 }, // SE Asia Standard Time / AnyCountry
- { 102, 9, 5184 }, // SE Asia Standard Time / Antarctica
- { 102, 39, 5201 }, // SE Asia Standard Time / Cambodia
- { 102, 51, 5217 }, // SE Asia Standard Time / Christmas Island
- { 102, 111, 5234 }, // SE Asia Standard Time / Indonesia
- { 102, 129, 5262 }, // SE Asia Standard Time / Laos
- { 102, 231, 5277 }, // SE Asia Standard Time / Thailand
- { 102, 255, 5290 }, // SE Asia Standard Time / Vietnam
- { 103, 0, 5302 }, // Singapore Standard Time / AnyCountry
- { 103, 35, 5312 }, // Singapore Standard Time / Brunei
- { 103, 111, 5324 }, // Singapore Standard Time / Indonesia
- { 103, 143, 5338 }, // Singapore Standard Time / Malaysia
- { 103, 185, 5369 }, // Singapore Standard Time / Philippines
- { 103, 210, 5381 }, // Singapore Standard Time / Singapore
- { 104, 0, 5396 }, // South Africa Standard Time / AnyCountry
- { 104, 30, 5406 }, // South Africa Standard Time / Botswana
- { 104, 38, 5422 }, // South Africa Standard Time / Burundi
- { 104, 57, 5439 }, // South Africa Standard Time / Congo Kinshasa
- { 104, 76, 5457 }, // South Africa Standard Time / Eswatini
- { 104, 133, 5472 }, // South Africa Standard Time / Lesotho
- { 104, 142, 5486 }, // South Africa Standard Time / Malawi
- { 104, 160, 5502 }, // South Africa Standard Time / Mozambique
- { 104, 194, 5516 }, // South Africa Standard Time / Rwanda
- { 104, 216, 5530 }, // South Africa Standard Time / South Africa
- { 104, 260, 5550 }, // South Africa Standard Time / Zambia
- { 104, 261, 5564 }, // South Africa Standard Time / Zimbabwe
- { 105, 221, 5578 }, // Sri Lanka Standard Time / Sri Lanka
- { 106, 222, 5591 }, // Sudan Standard Time / Sudan
- { 107, 227, 5607 }, // Syria Standard Time / Syria
- { 108, 228, 5621 }, // Taipei Standard Time / Taiwan
- { 109, 15, 5633 }, // Tasmania Standard Time / Australia
- { 110, 32, 5688 }, // Tocantins Standard Time / Brazil
- { 111, 0, 5706 }, // Tokyo Standard Time / AnyCountry
- { 111, 111, 5716 }, // Tokyo Standard Time / Indonesia
- { 111, 120, 5730 }, // Tokyo Standard Time / Japan
- { 111, 179, 5741 }, // Tokyo Standard Time / Palau
- { 111, 232, 5755 }, // Tokyo Standard Time / Timor-Leste
- { 112, 193, 5765 }, // Tomsk Standard Time / Russia
- { 113, 235, 5776 }, // Tonga Standard Time / Tonga
- { 114, 193, 5794 }, // Transbaikal Standard Time / Russia
- { 115, 239, 5805 }, // Turkey Standard Time / Turkey
- { 116, 241, 5821 }, // Turks And Caicos Standard Time / Turks And Caicos Islands
- { 117, 156, 5840 }, // Ulaanbaatar Standard Time / Mongolia
- { 118, 248, 5873 }, // US Eastern Standard Time / United States
- { 119, 0, 5940 }, // US Mountain Standard Time / AnyCountry
- { 119, 41, 5950 }, // US Mountain Standard Time / Canada
- { 119, 152, 6041 }, // US Mountain Standard Time / Mexico
- { 119, 248, 6060 }, // US Mountain Standard Time / United States
- { 120, 0, 6076 }, // UTC-11 / AnyCountry
- { 120, 5, 6087 }, // UTC-11 / American Samoa
- { 120, 171, 6105 }, // UTC-11 / Niue
- { 120, 247, 6118 }, // UTC-11 / United States Outlying Islands
- { 121, 0, 6133 }, // UTC-09 / AnyCountry
- { 121, 86, 6143 }, // UTC-09 / French Polynesia
- { 122, 0, 6159 }, // UTC-08 / AnyCountry
- { 122, 186, 6169 }, // UTC-08 / Pitcairn
- { 123, 0, 6186 }, // UTC-02 / AnyCountry
- { 123, 32, 6196 }, // UTC-02 / Brazil
- { 123, 217, 6212 }, // UTC-02 / South Georgia And South Sandwich Islands
- { 124, 0, 6235 }, // UTC / AnyCountry
- { 124, 95, 6251 }, // UTC / Greenland
- { 125, 0, 6272 }, // UTC+12 / AnyCountry
- { 125, 125, 6283 }, // UTC+12 / Kiribati
- { 125, 147, 6298 }, // UTC+12 / Marshall Islands
- { 125, 163, 6331 }, // UTC+12 / Nauru
- { 125, 242, 6345 }, // UTC+12 / Tuvalu
- { 125, 247, 6362 }, // UTC+12 / United States Outlying Islands
- { 125, 256, 6375 }, // UTC+12 / Wallis And Futuna
- { 126, 0, 6390 }, // UTC+13 / AnyCountry
- { 126, 125, 6401 }, // UTC+13 / Kiribati
- { 126, 234, 6419 }, // UTC+13 / Tokelau
- { 127, 254, 6435 }, // Venezuela Standard Time / Venezuela
- { 128, 193, 6451 }, // Vladivostok Standard Time / Russia
- { 129, 193, 6482 }, // Volgograd Standard Time / Russia
- { 130, 15, 6499 }, // W. Australia Standard Time / Australia
- { 131, 0, 6515 }, // W. Central Africa Standard Time / AnyCountry
- { 131, 4, 6525 }, // W. Central Africa Standard Time / Algeria
- { 131, 7, 6540 }, // W. Central Africa Standard Time / Angola
- { 131, 25, 6554 }, // W. Central Africa Standard Time / Benin
- { 131, 40, 6572 }, // W. Central Africa Standard Time / Cameroon
- { 131, 46, 6586 }, // W. Central Africa Standard Time / Central African Republic
- { 131, 48, 6600 }, // W. Central Africa Standard Time / Chad
- { 131, 56, 6616 }, // W. Central Africa Standard Time / Congo Brazzaville
- { 131, 57, 6635 }, // W. Central Africa Standard Time / Congo Kinshasa
- { 131, 73, 6651 }, // W. Central Africa Standard Time / Equatorial Guinea
- { 131, 88, 6665 }, // W. Central Africa Standard Time / Gabon
- { 131, 169, 6683 }, // W. Central Africa Standard Time / Nigeria
- { 131, 170, 6696 }, // W. Central Africa Standard Time / Niger
- { 131, 238, 6710 }, // W. Central Africa Standard Time / Tunisia
- { 132, 6, 6723 }, // W. Europe Standard Time / Andorra
- { 132, 16, 6738 }, // W. Europe Standard Time / Austria
- { 132, 91, 6752 }, // W. Europe Standard Time / Germany
- { 132, 93, 6782 }, // W. Europe Standard Time / Gibraltar
- { 132, 117, 6799 }, // W. Europe Standard Time / Italy
- { 132, 136, 6811 }, // W. Europe Standard Time / Liechtenstein
- { 132, 138, 6824 }, // W. Europe Standard Time / Luxembourg
- { 132, 146, 6842 }, // W. Europe Standard Time / Malta
- { 132, 155, 6855 }, // W. Europe Standard Time / Monaco
- { 132, 165, 6869 }, // W. Europe Standard Time / Netherlands
- { 132, 175, 6886 }, // W. Europe Standard Time / Norway
- { 132, 203, 6898 }, // W. Europe Standard Time / San Marino
- { 132, 224, 6916 }, // W. Europe Standard Time / Svalbard And Jan Mayen
- { 132, 225, 6936 }, // W. Europe Standard Time / Sweden
- { 132, 226, 6953 }, // W. Europe Standard Time / Switzerland
- { 132, 253, 6967 }, // W. Europe Standard Time / Vatican City
- { 133, 156, 6982 }, // W. Mongolia Standard Time / Mongolia
- { 134, 0, 6992 }, // West Asia Standard Time / AnyCountry
- { 134, 9, 7002 }, // West Asia Standard Time / Antarctica
- { 134, 87, 7020 }, // West Asia Standard Time / French Southern Territories
- { 134, 123, 7037 }, // West Asia Standard Time / Kazakhstan
- { 134, 144, 7082 }, // West Asia Standard Time / Maldives
- { 134, 229, 7098 }, // West Asia Standard Time / Tajikistan
- { 134, 240, 7112 }, // West Asia Standard Time / Turkmenistan
- { 134, 251, 7126 }, // West Asia Standard Time / Uzbekistan
- { 135, 180, 7155 }, // West Bank Standard Time / Palestinian Territories
- { 136, 0, 7177 }, // West Pacific Standard Time / AnyCountry
- { 136, 9, 7188 }, // West Pacific Standard Time / Antarctica
- { 136, 98, 7214 }, // West Pacific Standard Time / Guam
- { 136, 153, 7227 }, // West Pacific Standard Time / Micronesia
- { 136, 173, 7240 }, // West Pacific Standard Time / Northern Mariana Islands
- { 136, 182, 7255 }, // West Pacific Standard Time / Papua New Guinea
- { 137, 193, 7276 }, // Yakutsk Standard Time / Russia
+ { 36, 230, 2078 }, // E. Africa Standard Time / Tanzania
+ { 36, 243, 2099 }, // E. Africa Standard Time / Uganda
+ { 37, 15, 2114 }, // E. Australia Standard Time / Australia
+ { 38, 154, 2152 }, // E. Europe Standard Time / Moldova
+ { 39, 32, 2168 }, // E. South America Standard Time / Brazil
+ { 40, 49, 2186 }, // Easter Island Standard Time / Chile
+ { 41, 0, 2201 }, // Eastern Standard Time / AnyCountry
+ { 41, 18, 2209 }, // Eastern Standard Time / Bahamas
+ { 41, 41, 2224 }, // Eastern Standard Time / Canada
+ { 41, 248, 2329 }, // Eastern Standard Time / United States
+ { 42, 152, 2486 }, // Eastern Standard Time (Mexico) / Mexico
+ { 43, 71, 2501 }, // Egypt Standard Time / Egypt
+ { 44, 193, 2514 }, // Ekaterinburg Standard Time / Russia
+ { 45, 82, 2533 }, // Fiji Standard Time / Fiji
+ { 46, 2, 2546 }, // FLE Standard Time / Aland Islands
+ { 46, 36, 2563 }, // FLE Standard Time / Bulgaria
+ { 46, 75, 2576 }, // FLE Standard Time / Estonia
+ { 46, 83, 2591 }, // FLE Standard Time / Finland
+ { 46, 131, 2607 }, // FLE Standard Time / Latvia
+ { 46, 137, 2619 }, // FLE Standard Time / Lithuania
+ { 46, 244, 2634 }, // FLE Standard Time / Ukraine
+ { 47, 90, 2680 }, // Georgian Standard Time / Georgia
+ { 48, 81, 2693 }, // GMT Standard Time / Faroe Islands
+ { 48, 100, 2709 }, // GMT Standard Time / Guernsey
+ { 48, 114, 2725 }, // GMT Standard Time / Ireland
+ { 48, 115, 2739 }, // GMT Standard Time / Isle Of Man
+ { 48, 121, 2758 }, // GMT Standard Time / Jersey
+ { 48, 188, 2772 }, // GMT Standard Time / Portugal
+ { 48, 220, 2803 }, // GMT Standard Time / Spain
+ { 48, 246, 2819 }, // GMT Standard Time / United Kingdom
+ { 49, 95, 2833 }, // Greenland Standard Time / Greenland
+ { 50, 37, 2849 }, // Greenwich Standard Time / Burkina Faso
+ { 50, 89, 2868 }, // Greenwich Standard Time / Gambia
+ { 50, 92, 2882 }, // Greenwich Standard Time / Ghana
+ { 50, 95, 2895 }, // Greenwich Standard Time / Greenland
+ { 50, 101, 2916 }, // Greenwich Standard Time / Guinea Bissau
+ { 50, 102, 2930 }, // Greenwich Standard Time / Guinea
+ { 50, 109, 2945 }, // Greenwich Standard Time / Iceland
+ { 50, 118, 2964 }, // Greenwich Standard Time / Ivory Coast
+ { 50, 134, 2979 }, // Greenwich Standard Time / Liberia
+ { 50, 145, 2995 }, // Greenwich Standard Time / Mali
+ { 50, 149, 3009 }, // Greenwich Standard Time / Mauritania
+ { 50, 196, 3027 }, // Greenwich Standard Time / Saint Helena
+ { 50, 206, 3046 }, // Greenwich Standard Time / Senegal
+ { 50, 209, 3059 }, // Greenwich Standard Time / Sierra Leone
+ { 50, 233, 3075 }, // Greenwich Standard Time / Togo
+ { 51, 63, 3087 }, // GTB Standard Time / Cyprus
+ { 51, 94, 3115 }, // GTB Standard Time / Greece
+ { 51, 192, 3129 }, // GTB Standard Time / Romania
+ { 52, 104, 3146 }, // Haiti Standard Time / Haiti
+ { 53, 0, 3169 }, // Hawaiian Standard Time / AnyCountry
+ { 53, 58, 3180 }, // Hawaiian Standard Time / Cook Islands
+ { 53, 86, 3198 }, // Hawaiian Standard Time / French Polynesia
+ { 53, 247, 3213 }, // Hawaiian Standard Time / United States Outlying Islands
+ { 53, 248, 3230 }, // Hawaiian Standard Time / United States
+ { 54, 110, 3247 }, // India Standard Time / India
+ { 55, 112, 3261 }, // Iran Standard Time / Iran
+ { 56, 116, 3273 }, // Israel Standard Time / Israel
+ { 57, 122, 3288 }, // Jordan Standard Time / Jordan
+ { 58, 193, 3299 }, // Kaliningrad Standard Time / Russia
+ { 59, 218, 3318 }, // Korea Standard Time / South Korea
+ { 60, 135, 3329 }, // Libya Standard Time / Libya
+ { 61, 0, 3344 }, // Line Islands Standard Time / AnyCountry
+ { 61, 125, 3355 }, // Line Islands Standard Time / Kiribati
+ { 62, 15, 3374 }, // Lord Howe Standard Time / Australia
+ { 63, 193, 3394 }, // Magadan Standard Time / Russia
+ { 64, 49, 3407 }, // Magallanes Standard Time / Chile
+ { 65, 86, 3428 }, // Marquesas Standard Time / French Polynesia
+ { 66, 150, 3446 }, // Mauritius Standard Time / Mauritius
+ { 66, 191, 3463 }, // Mauritius Standard Time / Reunion
+ { 66, 208, 3478 }, // Mauritius Standard Time / Seychelles
+ { 67, 132, 3490 }, // Middle East Standard Time / Lebanon
+ { 68, 250, 3502 }, // Montevideo Standard Time / Uruguay
+ { 69, 159, 3521 }, // Morocco Standard Time / Morocco
+ { 69, 257, 3539 }, // Morocco Standard Time / Western Sahara
+ { 70, 152, 3555 }, // Mountain Standard Time (Mexico) / Mexico
+ { 71, 0, 3590 }, // Mountain Standard Time / AnyCountry
+ { 71, 41, 3598 }, // Mountain Standard Time / Canada
+ { 71, 152, 3672 }, // Mountain Standard Time / Mexico
+ { 71, 248, 3688 }, // Mountain Standard Time / United States
+ { 72, 53, 3717 }, // Myanmar Standard Time / Cocos Islands
+ { 72, 161, 3730 }, // Myanmar Standard Time / Myanmar
+ { 73, 193, 3743 }, // N. Central Asia Standard Time / Russia
+ { 74, 162, 3760 }, // Namibia Standard Time / Namibia
+ { 75, 164, 3776 }, // Nepal Standard Time / Nepal
+ { 76, 9, 3790 }, // New Zealand Standard Time / Antarctica
+ { 76, 167, 3809 }, // New Zealand Standard Time / New Zealand
+ { 77, 41, 3826 }, // Newfoundland Standard Time / Canada
+ { 78, 172, 3843 }, // Norfolk Standard Time / Norfolk Island
+ { 79, 193, 3859 }, // North Asia East Standard Time / Russia
+ { 80, 193, 3872 }, // North Asia Standard Time / Russia
+ { 81, 174, 3907 }, // North Korea Standard Time / North Korea
+ { 82, 193, 3922 }, // Omsk Standard Time / Russia
+ { 83, 49, 3932 }, // Pacific SA Standard Time / Chile
+ { 84, 0, 3949 }, // Pacific Standard Time / AnyCountry
+ { 84, 41, 3957 }, // Pacific Standard Time / Canada
+ { 84, 248, 3975 }, // Pacific Standard Time / United States
+ { 85, 152, 3995 }, // Pacific Standard Time (Mexico) / Mexico
+ { 86, 178, 4032 }, // Pakistan Standard Time / Pakistan
+ { 87, 183, 4045 }, // Paraguay Standard Time / Paraguay
+ { 88, 123, 4062 }, // Qyzylorda Standard Time / Kazakhstan
+ { 89, 23, 4077 }, // Romance Standard Time / Belgium
+ { 89, 65, 4093 }, // Romance Standard Time / Denmark
+ { 89, 84, 4111 }, // Romance Standard Time / France
+ { 89, 220, 4124 }, // Romance Standard Time / Spain
+ { 90, 193, 4151 }, // Russia Time Zone 3 / Russia
+ { 91, 193, 4165 }, // Russia Time Zone 10 / Russia
+ { 92, 193, 4184 }, // Russia Time Zone 11 / Russia
+ { 93, 193, 4211 }, // Russian Standard Time / Russia
+ { 93, 244, 4238 }, // Russian Standard Time / Ukraine
+ { 94, 0, 4256 }, // SA Eastern Standard Time / AnyCountry
+ { 94, 9, 4266 }, // SA Eastern Standard Time / Antarctica
+ { 94, 32, 4303 }, // SA Eastern Standard Time / Brazil
+ { 94, 80, 4382 }, // SA Eastern Standard Time / Falkland Islands
+ { 94, 85, 4399 }, // SA Eastern Standard Time / French Guiana
+ { 94, 223, 4415 }, // SA Eastern Standard Time / Suriname
+ { 95, 0, 4434 }, // SA Pacific Standard Time / AnyCountry
+ { 95, 32, 4444 }, // SA Pacific Standard Time / Brazil
+ { 95, 41, 4480 }, // SA Pacific Standard Time / Canada
+ { 95, 45, 4502 }, // SA Pacific Standard Time / Cayman Islands
+ { 95, 54, 4517 }, // SA Pacific Standard Time / Colombia
+ { 95, 70, 4532 }, // SA Pacific Standard Time / Ecuador
+ { 95, 119, 4550 }, // SA Pacific Standard Time / Jamaica
+ { 95, 181, 4566 }, // SA Pacific Standard Time / Panama
+ { 95, 184, 4581 }, // SA Pacific Standard Time / Peru
+ { 96, 0, 4594 }, // SA Western Standard Time / AnyCountry
+ { 96, 8, 4604 }, // SA Western Standard Time / Anguilla
+ { 96, 10, 4621 }, // SA Western Standard Time / Antigua And Barbuda
+ { 96, 13, 4637 }, // SA Western Standard Time / Aruba
+ { 96, 21, 4651 }, // SA Western Standard Time / Barbados
+ { 96, 28, 4668 }, // SA Western Standard Time / Bolivia
+ { 96, 32, 4683 }, // SA Western Standard Time / Brazil
+ { 96, 34, 4736 }, // SA Western Standard Time / British Virgin Islands
+ { 96, 41, 4752 }, // SA Western Standard Time / Canada
+ { 96, 44, 4773 }, // SA Western Standard Time / Caribbean Netherlands
+ { 96, 62, 4792 }, // SA Western Standard Time / Curacao
+ { 96, 68, 4808 }, // SA Western Standard Time / Dominica
+ { 96, 69, 4825 }, // SA Western Standard Time / Dominican Republic
+ { 96, 96, 4847 }, // SA Western Standard Time / Grenada
+ { 96, 97, 4863 }, // SA Western Standard Time / Guadeloupe
+ { 96, 103, 4882 }, // SA Western Standard Time / Guyana
+ { 96, 148, 4897 }, // SA Western Standard Time / Martinique
+ { 96, 158, 4916 }, // SA Western Standard Time / Montserrat
+ { 96, 189, 4935 }, // SA Western Standard Time / Puerto Rico
+ { 96, 195, 4955 }, // SA Western Standard Time / Saint Barthelemy
+ { 96, 197, 4977 }, // SA Western Standard Time / Saint Kitts And Nevis
+ { 96, 198, 4994 }, // SA Western Standard Time / Saint Lucia
+ { 96, 199, 5011 }, // SA Western Standard Time / Saint Martin
+ { 96, 201, 5027 }, // SA Western Standard Time / Saint Vincent And Grenadines
+ { 96, 211, 5046 }, // SA Western Standard Time / Sint Maarten
+ { 96, 236, 5068 }, // SA Western Standard Time / Trinidad And Tobago
+ { 96, 249, 5090 }, // SA Western Standard Time / United States Virgin Islands
+ { 97, 200, 5108 }, // Saint Pierre Standard Time / Saint Pierre And Miquelon
+ { 98, 193, 5125 }, // Sakhalin Standard Time / Russia
+ { 99, 202, 5139 }, // Samoa Standard Time / Samoa
+ { 100, 204, 5152 }, // Sao Tome Standard Time / Sao Tome And Principe
+ { 101, 193, 5168 }, // Saratov Standard Time / Russia
+ { 102, 0, 5183 }, // SE Asia Standard Time / AnyCountry
+ { 102, 9, 5193 }, // SE Asia Standard Time / Antarctica
+ { 102, 39, 5210 }, // SE Asia Standard Time / Cambodia
+ { 102, 51, 5226 }, // SE Asia Standard Time / Christmas Island
+ { 102, 111, 5243 }, // SE Asia Standard Time / Indonesia
+ { 102, 129, 5271 }, // SE Asia Standard Time / Laos
+ { 102, 231, 5286 }, // SE Asia Standard Time / Thailand
+ { 102, 255, 5299 }, // SE Asia Standard Time / Vietnam
+ { 103, 0, 5311 }, // Singapore Standard Time / AnyCountry
+ { 103, 35, 5321 }, // Singapore Standard Time / Brunei
+ { 103, 111, 5333 }, // Singapore Standard Time / Indonesia
+ { 103, 143, 5347 }, // Singapore Standard Time / Malaysia
+ { 103, 185, 5378 }, // Singapore Standard Time / Philippines
+ { 103, 210, 5390 }, // Singapore Standard Time / Singapore
+ { 104, 0, 5405 }, // South Africa Standard Time / AnyCountry
+ { 104, 30, 5415 }, // South Africa Standard Time / Botswana
+ { 104, 38, 5431 }, // South Africa Standard Time / Burundi
+ { 104, 57, 5448 }, // South Africa Standard Time / Congo Kinshasa
+ { 104, 76, 5466 }, // South Africa Standard Time / Eswatini
+ { 104, 133, 5481 }, // South Africa Standard Time / Lesotho
+ { 104, 142, 5495 }, // South Africa Standard Time / Malawi
+ { 104, 160, 5511 }, // South Africa Standard Time / Mozambique
+ { 104, 194, 5525 }, // South Africa Standard Time / Rwanda
+ { 104, 216, 5539 }, // South Africa Standard Time / South Africa
+ { 104, 219, 5559 }, // South Africa Standard Time / South Sudan
+ { 104, 260, 5571 }, // South Africa Standard Time / Zambia
+ { 104, 261, 5585 }, // South Africa Standard Time / Zimbabwe
+ { 105, 221, 5599 }, // Sri Lanka Standard Time / Sri Lanka
+ { 106, 222, 5612 }, // Sudan Standard Time / Sudan
+ { 107, 227, 5628 }, // Syria Standard Time / Syria
+ { 108, 228, 5642 }, // Taipei Standard Time / Taiwan
+ { 109, 15, 5654 }, // Tasmania Standard Time / Australia
+ { 110, 32, 5709 }, // Tocantins Standard Time / Brazil
+ { 111, 0, 5727 }, // Tokyo Standard Time / AnyCountry
+ { 111, 111, 5737 }, // Tokyo Standard Time / Indonesia
+ { 111, 120, 5751 }, // Tokyo Standard Time / Japan
+ { 111, 179, 5762 }, // Tokyo Standard Time / Palau
+ { 111, 232, 5776 }, // Tokyo Standard Time / Timor-Leste
+ { 112, 193, 5786 }, // Tomsk Standard Time / Russia
+ { 113, 235, 5797 }, // Tonga Standard Time / Tonga
+ { 114, 193, 5815 }, // Transbaikal Standard Time / Russia
+ { 115, 239, 5826 }, // Turkey Standard Time / Turkey
+ { 116, 241, 5842 }, // Turks And Caicos Standard Time / Turks And Caicos Islands
+ { 117, 156, 5861 }, // Ulaanbaatar Standard Time / Mongolia
+ { 118, 248, 5894 }, // US Eastern Standard Time / United States
+ { 119, 0, 5961 }, // US Mountain Standard Time / AnyCountry
+ { 119, 41, 5971 }, // US Mountain Standard Time / Canada
+ { 119, 152, 6028 }, // US Mountain Standard Time / Mexico
+ { 119, 248, 6047 }, // US Mountain Standard Time / United States
+ { 120, 0, 6063 }, // UTC-11 / AnyCountry
+ { 120, 5, 6074 }, // UTC-11 / American Samoa
+ { 120, 171, 6092 }, // UTC-11 / Niue
+ { 120, 247, 6105 }, // UTC-11 / United States Outlying Islands
+ { 121, 0, 6120 }, // UTC-09 / AnyCountry
+ { 121, 86, 6130 }, // UTC-09 / French Polynesia
+ { 122, 0, 6146 }, // UTC-08 / AnyCountry
+ { 122, 186, 6156 }, // UTC-08 / Pitcairn
+ { 123, 0, 6173 }, // UTC-02 / AnyCountry
+ { 123, 32, 6183 }, // UTC-02 / Brazil
+ { 123, 217, 6199 }, // UTC-02 / South Georgia And South Sandwich Islands
+ { 124, 0, 6222 }, // UTC / AnyCountry
+ { 125, 0, 6238 }, // UTC+12 / AnyCountry
+ { 125, 125, 6249 }, // UTC+12 / Kiribati
+ { 125, 147, 6264 }, // UTC+12 / Marshall Islands
+ { 125, 163, 6297 }, // UTC+12 / Nauru
+ { 125, 242, 6311 }, // UTC+12 / Tuvalu
+ { 125, 247, 6328 }, // UTC+12 / United States Outlying Islands
+ { 125, 256, 6341 }, // UTC+12 / Wallis And Futuna
+ { 126, 0, 6356 }, // UTC+13 / AnyCountry
+ { 126, 125, 6367 }, // UTC+13 / Kiribati
+ { 126, 234, 6385 }, // UTC+13 / Tokelau
+ { 127, 254, 6401 }, // Venezuela Standard Time / Venezuela
+ { 128, 193, 6417 }, // Vladivostok Standard Time / Russia
+ { 129, 193, 6448 }, // Volgograd Standard Time / Russia
+ { 130, 15, 6465 }, // W. Australia Standard Time / Australia
+ { 131, 0, 6481 }, // W. Central Africa Standard Time / AnyCountry
+ { 131, 4, 6491 }, // W. Central Africa Standard Time / Algeria
+ { 131, 7, 6506 }, // W. Central Africa Standard Time / Angola
+ { 131, 25, 6520 }, // W. Central Africa Standard Time / Benin
+ { 131, 40, 6538 }, // W. Central Africa Standard Time / Cameroon
+ { 131, 46, 6552 }, // W. Central Africa Standard Time / Central African Republic
+ { 131, 48, 6566 }, // W. Central Africa Standard Time / Chad
+ { 131, 56, 6582 }, // W. Central Africa Standard Time / Congo Brazzaville
+ { 131, 57, 6601 }, // W. Central Africa Standard Time / Congo Kinshasa
+ { 131, 73, 6617 }, // W. Central Africa Standard Time / Equatorial Guinea
+ { 131, 88, 6631 }, // W. Central Africa Standard Time / Gabon
+ { 131, 169, 6649 }, // W. Central Africa Standard Time / Nigeria
+ { 131, 170, 6662 }, // W. Central Africa Standard Time / Niger
+ { 131, 238, 6676 }, // W. Central Africa Standard Time / Tunisia
+ { 132, 6, 6689 }, // W. Europe Standard Time / Andorra
+ { 132, 16, 6704 }, // W. Europe Standard Time / Austria
+ { 132, 91, 6718 }, // W. Europe Standard Time / Germany
+ { 132, 93, 6748 }, // W. Europe Standard Time / Gibraltar
+ { 132, 117, 6765 }, // W. Europe Standard Time / Italy
+ { 132, 136, 6777 }, // W. Europe Standard Time / Liechtenstein
+ { 132, 138, 6790 }, // W. Europe Standard Time / Luxembourg
+ { 132, 146, 6808 }, // W. Europe Standard Time / Malta
+ { 132, 155, 6821 }, // W. Europe Standard Time / Monaco
+ { 132, 165, 6835 }, // W. Europe Standard Time / Netherlands
+ { 132, 175, 6852 }, // W. Europe Standard Time / Norway
+ { 132, 203, 6864 }, // W. Europe Standard Time / San Marino
+ { 132, 224, 6882 }, // W. Europe Standard Time / Svalbard And Jan Mayen
+ { 132, 225, 6902 }, // W. Europe Standard Time / Sweden
+ { 132, 226, 6919 }, // W. Europe Standard Time / Switzerland
+ { 132, 253, 6933 }, // W. Europe Standard Time / Vatican City
+ { 133, 156, 6948 }, // W. Mongolia Standard Time / Mongolia
+ { 134, 0, 6958 }, // West Asia Standard Time / AnyCountry
+ { 134, 9, 6968 }, // West Asia Standard Time / Antarctica
+ { 134, 87, 6986 }, // West Asia Standard Time / French Southern Territories
+ { 134, 123, 7003 }, // West Asia Standard Time / Kazakhstan
+ { 134, 144, 7048 }, // West Asia Standard Time / Maldives
+ { 134, 229, 7064 }, // West Asia Standard Time / Tajikistan
+ { 134, 240, 7078 }, // West Asia Standard Time / Turkmenistan
+ { 134, 251, 7092 }, // West Asia Standard Time / Uzbekistan
+ { 135, 180, 7121 }, // West Bank Standard Time / Palestinian Territories
+ { 136, 0, 7143 }, // West Pacific Standard Time / AnyCountry
+ { 136, 9, 7154 }, // West Pacific Standard Time / Antarctica
+ { 136, 98, 7180 }, // West Pacific Standard Time / Guam
+ { 136, 153, 7193 }, // West Pacific Standard Time / Micronesia
+ { 136, 173, 7206 }, // West Pacific Standard Time / Northern Mariana Islands
+ { 136, 182, 7221 }, // West Pacific Standard Time / Papua New Guinea
+ { 137, 193, 7242 }, // Yakutsk Standard Time / Russia
+ { 138, 41, 7269 }, // Yukon Standard Time / Canada
{ 0, 0, 0 } // Trailing zeroes
};
@@ -534,151 +535,152 @@ static const QWindowsData windowsDataTable[] = {
{ 35, 852, 1910,-43200 }, // Dateline Standard Time
{ 36, 875, 2011, 10800 }, // E. Africa Standard Time
{ 37, 899, 7489, 36000 }, // E. Australia Standard Time
- { 38, 926, 2164, 7200 }, // E. Europe Standard Time
- { 39, 950, 2180,-10800 }, // E. South America Standard Time
- { 40, 981, 2198,-21600 }, // Easter Island Standard Time
+ { 38, 926, 2152, 7200 }, // E. Europe Standard Time
+ { 39, 950, 2168,-10800 }, // E. South America Standard Time
+ { 40, 981, 2186,-21600 }, // Easter Island Standard Time
{ 41, 1009, 7508,-18000 }, // Eastern Standard Time
- { 42, 1031, 2498,-18000 }, // Eastern Standard Time (Mexico)
- { 43, 1062, 2513, 7200 }, // Egypt Standard Time
- { 44, 1082, 2526, 18000 }, // Ekaterinburg Standard Time
- { 45, 1109, 2545, 43200 }, // Fiji Standard Time
+ { 42, 1031, 2486,-18000 }, // Eastern Standard Time (Mexico)
+ { 43, 1062, 2501, 7200 }, // Egypt Standard Time
+ { 44, 1082, 2514, 18000 }, // Ekaterinburg Standard Time
+ { 45, 1109, 2533, 43200 }, // Fiji Standard Time
{ 46, 1128, 7525, 7200 }, // FLE Standard Time
- { 47, 1146, 2692, 14400 }, // Georgian Standard Time
- { 48, 1169, 2831, 0 }, // GMT Standard Time
- { 49, 1187, 2845,-10800 }, // Greenland Standard Time
- { 50, 1211, 2936, 0 }, // Greenwich Standard Time
- { 51, 1235, 3120, 7200 }, // GTB Standard Time
- { 52, 1253, 3137,-18000 }, // Haiti Standard Time
- { 53, 1273, 3221,-36000 }, // Hawaiian Standard Time
- { 54, 1296, 3238, 19800 }, // India Standard Time
- { 55, 1316, 3252, 12600 }, // Iran Standard Time
- { 56, 1335, 3264, 7200 }, // Israel Standard Time
- { 57, 1356, 3279, 7200 }, // Jordan Standard Time
- { 58, 1377, 3290, 7200 }, // Kaliningrad Standard Time
- { 59, 1403, 3309, 32400 }, // Korea Standard Time
- { 60, 1423, 3320, 7200 }, // Libya Standard Time
- { 61, 1443, 3346, 50400 }, // Line Islands Standard Time
- { 62, 1470, 3365, 37800 }, // Lord Howe Standard Time
- { 63, 1494, 3385, 36000 }, // Magadan Standard Time
- { 64, 1516, 3398,-10800 }, // Magallanes Standard Time
- { 65, 1541, 3419,-34200 }, // Marquesas Standard Time
- { 66, 1565, 3437, 14400 }, // Mauritius Standard Time
- { 67, 1589, 3481, 7200 }, // Middle East Standard Time
- { 68, 1615, 3493,-10800 }, // Montevideo Standard Time
- { 69, 1640, 3512, 0 }, // Morocco Standard Time
+ { 47, 1146, 2680, 14400 }, // Georgian Standard Time
+ { 48, 1169, 2819, 0 }, // GMT Standard Time
+ { 49, 1187, 2833,-10800 }, // Greenland Standard Time
+ { 50, 1211, 2945, 0 }, // Greenwich Standard Time
+ { 51, 1235, 3129, 7200 }, // GTB Standard Time
+ { 52, 1253, 3146,-18000 }, // Haiti Standard Time
+ { 53, 1273, 3230,-36000 }, // Hawaiian Standard Time
+ { 54, 1296, 3247, 19800 }, // India Standard Time
+ { 55, 1316, 3261, 12600 }, // Iran Standard Time
+ { 56, 1335, 3273, 7200 }, // Israel Standard Time
+ { 57, 1356, 3288, 7200 }, // Jordan Standard Time
+ { 58, 1377, 3299, 7200 }, // Kaliningrad Standard Time
+ { 59, 1403, 3318, 32400 }, // Korea Standard Time
+ { 60, 1423, 3329, 7200 }, // Libya Standard Time
+ { 61, 1443, 3355, 50400 }, // Line Islands Standard Time
+ { 62, 1470, 3374, 37800 }, // Lord Howe Standard Time
+ { 63, 1494, 3394, 36000 }, // Magadan Standard Time
+ { 64, 1516, 3407,-10800 }, // Magallanes Standard Time
+ { 65, 1541, 3428,-34200 }, // Marquesas Standard Time
+ { 66, 1565, 3446, 14400 }, // Mauritius Standard Time
+ { 67, 1589, 3490, 7200 }, // Middle East Standard Time
+ { 68, 1615, 3502,-10800 }, // Montevideo Standard Time
+ { 69, 1640, 3521, 0 }, // Morocco Standard Time
{ 70, 1662, 7537,-25200 }, // Mountain Standard Time (Mexico)
{ 71, 1694, 7555,-25200 }, // Mountain Standard Time
- { 72, 1717, 3721, 23400 }, // Myanmar Standard Time
- { 73, 1739, 3734, 21600 }, // N. Central Asia Standard Time
- { 74, 1769, 3751, 3600 }, // Namibia Standard Time
- { 75, 1791, 3767, 20700 }, // Nepal Standard Time
- { 76, 1811, 3800, 43200 }, // New Zealand Standard Time
- { 77, 1837, 3817,-12600 }, // Newfoundland Standard Time
- { 78, 1864, 3834, 39600 }, // Norfolk Standard Time
- { 79, 1886, 3850, 28800 }, // North Asia East Standard Time
+ { 72, 1717, 3730, 23400 }, // Myanmar Standard Time
+ { 73, 1739, 3743, 21600 }, // N. Central Asia Standard Time
+ { 74, 1769, 3760, 3600 }, // Namibia Standard Time
+ { 75, 1791, 3776, 20700 }, // Nepal Standard Time
+ { 76, 1811, 3809, 43200 }, // New Zealand Standard Time
+ { 77, 1837, 3826,-12600 }, // Newfoundland Standard Time
+ { 78, 1864, 3843, 39600 }, // Norfolk Standard Time
+ { 79, 1886, 3859, 28800 }, // North Asia East Standard Time
{ 80, 1916, 7570, 25200 }, // North Asia Standard Time
- { 81, 1941, 3898, 30600 }, // North Korea Standard Time
- { 82, 1967, 3913, 21600 }, // Omsk Standard Time
- { 83, 1986, 3923,-10800 }, // Pacific SA Standard Time
- { 84, 2011, 3966,-28800 }, // Pacific Standard Time
+ { 81, 1941, 3907, 30600 }, // North Korea Standard Time
+ { 82, 1967, 3922, 21600 }, // Omsk Standard Time
+ { 83, 1986, 3932,-10800 }, // Pacific SA Standard Time
+ { 84, 2011, 3975,-28800 }, // Pacific Standard Time
{ 85, 2033, 7587,-28800 }, // Pacific Standard Time (Mexico)
- { 86, 2064, 4023, 18000 }, // Pakistan Standard Time
- { 87, 2087, 4036,-14400 }, // Paraguay Standard Time
- { 88, 2110, 4053, 18000 }, // Qyzylorda Standard Time
- { 89, 2134, 4102, 3600 }, // Romance Standard Time
- { 90, 2156, 4142, 14400 }, // Russia Time Zone 3
- { 91, 2175, 4156, 39600 }, // Russia Time Zone 10
+ { 86, 2064, 4032, 18000 }, // Pakistan Standard Time
+ { 87, 2087, 4045,-14400 }, // Paraguay Standard Time
+ { 88, 2110, 4062, 18000 }, // Qyzylorda Standard Time
+ { 89, 2134, 4111, 3600 }, // Romance Standard Time
+ { 90, 2156, 4151, 14400 }, // Russia Time Zone 3
+ { 91, 2175, 4165, 39600 }, // Russia Time Zone 10
{ 92, 2195, 7603, 43200 }, // Russia Time Zone 11
{ 93, 2215, 7618, 10800 }, // Russian Standard Time
- { 94, 2237, 4390,-10800 }, // SA Eastern Standard Time
- { 95, 2262, 4508,-18000 }, // SA Pacific Standard Time
- { 96, 2287, 4659,-14400 }, // SA Western Standard Time
- { 97, 2312, 5099,-10800 }, // Saint Pierre Standard Time
- { 98, 2339, 5116, 39600 }, // Sakhalin Standard Time
- { 99, 2362, 5130, 46800 }, // Samoa Standard Time
- { 100, 2382, 5143, 0 }, // Sao Tome Standard Time
- { 101, 2405, 5159, 14400 }, // Saratov Standard Time
- { 102, 2427, 5277, 25200 }, // SE Asia Standard Time
- { 103, 2449, 5381, 28800 }, // Singapore Standard Time
- { 104, 2473, 5530, 7200 }, // South Africa Standard Time
- { 105, 2500, 5578, 19800 }, // Sri Lanka Standard Time
- { 106, 2524, 5591, 7200 }, // Sudan Standard Time
- { 107, 2544, 5607, 7200 }, // Syria Standard Time
- { 108, 2564, 5621, 28800 }, // Taipei Standard Time
+ { 94, 2237, 4399,-10800 }, // SA Eastern Standard Time
+ { 95, 2262, 4517,-18000 }, // SA Pacific Standard Time
+ { 96, 2287, 4668,-14400 }, // SA Western Standard Time
+ { 97, 2312, 5108,-10800 }, // Saint Pierre Standard Time
+ { 98, 2339, 5125, 39600 }, // Sakhalin Standard Time
+ { 99, 2362, 5139, 46800 }, // Samoa Standard Time
+ { 100, 2382, 5152, 0 }, // Sao Tome Standard Time
+ { 101, 2405, 5168, 14400 }, // Saratov Standard Time
+ { 102, 2427, 5286, 25200 }, // SE Asia Standard Time
+ { 103, 2449, 5390, 28800 }, // Singapore Standard Time
+ { 104, 2473, 5539, 7200 }, // South Africa Standard Time
+ { 105, 2500, 5599, 19800 }, // Sri Lanka Standard Time
+ { 106, 2524, 5612, 7200 }, // Sudan Standard Time
+ { 107, 2544, 5628, 7200 }, // Syria Standard Time
+ { 108, 2564, 5642, 28800 }, // Taipei Standard Time
{ 109, 2585, 7632, 36000 }, // Tasmania Standard Time
- { 110, 2608, 5688,-10800 }, // Tocantins Standard Time
- { 111, 2632, 5730, 32400 }, // Tokyo Standard Time
- { 112, 2652, 5765, 25200 }, // Tomsk Standard Time
- { 113, 2672, 5776, 46800 }, // Tonga Standard Time
- { 114, 2692, 5794, 32400 }, // Transbaikal Standard Time
- { 115, 2718, 5805, 7200 }, // Turkey Standard Time
- { 116, 2739, 5821,-14400 }, // Turks And Caicos Standard Time
+ { 110, 2608, 5709,-10800 }, // Tocantins Standard Time
+ { 111, 2632, 5751, 32400 }, // Tokyo Standard Time
+ { 112, 2652, 5786, 25200 }, // Tomsk Standard Time
+ { 113, 2672, 5797, 46800 }, // Tonga Standard Time
+ { 114, 2692, 5815, 32400 }, // Transbaikal Standard Time
+ { 115, 2718, 5826, 7200 }, // Turkey Standard Time
+ { 116, 2739, 5842,-14400 }, // Turks And Caicos Standard Time
{ 117, 2770, 7649, 28800 }, // Ulaanbaatar Standard Time
{ 118, 2796, 7666,-18000 }, // US Eastern Standard Time
- { 119, 2821, 6060,-25200 }, // US Mountain Standard Time
- { 120, 2847, 6076,-39600 }, // UTC-11
- { 121, 2854, 6133,-32400 }, // UTC-09
- { 122, 2861, 6159,-28800 }, // UTC-08
- { 123, 2868, 6186, -7200 }, // UTC-02
+ { 119, 2821, 6047,-25200 }, // US Mountain Standard Time
+ { 120, 2847, 6063,-39600 }, // UTC-11
+ { 121, 2854, 6120,-32400 }, // UTC-09
+ { 122, 2861, 6146,-28800 }, // UTC-08
+ { 123, 2868, 6173, -7200 }, // UTC-02
{ 124, 2875, 7687, 0 }, // UTC
- { 125, 2879, 6272, 43200 }, // UTC+12
- { 126, 2886, 6390, 46800 }, // UTC+13
- { 127, 2893, 6435,-16200 }, // Venezuela Standard Time
+ { 125, 2879, 6238, 43200 }, // UTC+12
+ { 126, 2886, 6356, 46800 }, // UTC+13
+ { 127, 2893, 6401,-16200 }, // Venezuela Standard Time
{ 128, 2917, 7695, 36000 }, // Vladivostok Standard Time
- { 129, 2943, 6482, 14400 }, // Volgograd Standard Time
- { 130, 2967, 6499, 28800 }, // W. Australia Standard Time
- { 131, 2994, 6683, 3600 }, // W. Central Africa Standard Time
+ { 129, 2943, 6448, 14400 }, // Volgograd Standard Time
+ { 130, 2967, 6465, 28800 }, // W. Australia Standard Time
+ { 131, 2994, 6649, 3600 }, // W. Central Africa Standard Time
{ 132, 3026, 7712, 3600 }, // W. Europe Standard Time
- { 133, 3050, 6982, 25200 }, // W. Mongolia Standard Time
+ { 133, 3050, 6948, 25200 }, // W. Mongolia Standard Time
{ 134, 3076, 7726, 18000 }, // West Asia Standard Time
{ 135, 3100, 7740, 7200 }, // West Bank Standard Time
- { 136, 3124, 7255, 36000 }, // West Pacific Standard Time
+ { 136, 3124, 7221, 36000 }, // West Pacific Standard Time
{ 137, 3151, 7752, 32400 }, // Yakutsk Standard Time
+ { 138, 3173, 7765,-25200 }, // Yukon Standard Time
{ 0, 0, 0, 0 } // Trailing zeroes
};
// IANA ID Index, UTC Offset
static const QUtcData utcDataTable[] = {
- { 7765, 0 }, // UTC
- { 7769,-50400 }, // UTC-14:00
- { 7779,-46800 }, // UTC-13:00
- { 7789,-43200 }, // UTC-12:00
- { 7799,-39600 }, // UTC-11:00
- { 7809,-36000 }, // UTC-10:00
- { 7819,-32400 }, // UTC-09:00
- { 7829,-28800 }, // UTC-08:00
- { 7839,-25200 }, // UTC-07:00
- { 7849,-21600 }, // UTC-06:00
- { 7859,-18000 }, // UTC-05:00
- { 7869,-16200 }, // UTC-04:30
- { 7879,-14400 }, // UTC-04:00
- { 7889,-12600 }, // UTC-03:30
- { 7899,-10800 }, // UTC-03:00
- { 7909, -7200 }, // UTC-02:00
- { 7919, -3600 }, // UTC-01:00
- { 7929, 0 }, // UTC-00:00
- { 7939, 0 }, // UTC+00:00
- { 7949, 3600 }, // UTC+01:00
- { 7959, 7200 }, // UTC+02:00
- { 7969, 10800 }, // UTC+03:00
- { 7979, 12600 }, // UTC+03:30
- { 7989, 14400 }, // UTC+04:00
- { 7999, 16200 }, // UTC+04:30
- { 8009, 18000 }, // UTC+05:00
- { 8019, 19800 }, // UTC+05:30
- { 8029, 20700 }, // UTC+05:45
- { 8039, 21600 }, // UTC+06:00
- { 8049, 23400 }, // UTC+06:30
- { 8059, 25200 }, // UTC+07:00
- { 8069, 28800 }, // UTC+08:00
- { 8079, 30600 }, // UTC+08:30
- { 8089, 32400 }, // UTC+09:00
- { 8099, 34200 }, // UTC+09:30
- { 8109, 36000 }, // UTC+10:00
- { 8119, 39600 }, // UTC+11:00
- { 8129, 43200 }, // UTC+12:00
- { 8139, 46800 }, // UTC+13:00
- { 8149, 50400 }, // UTC+14:00
+ { 7784, 0 }, // UTC
+ { 7788,-50400 }, // UTC-14:00
+ { 7798,-46800 }, // UTC-13:00
+ { 7808,-43200 }, // UTC-12:00
+ { 7818,-39600 }, // UTC-11:00
+ { 7828,-36000 }, // UTC-10:00
+ { 7838,-32400 }, // UTC-09:00
+ { 7848,-28800 }, // UTC-08:00
+ { 7858,-25200 }, // UTC-07:00
+ { 7868,-21600 }, // UTC-06:00
+ { 7878,-18000 }, // UTC-05:00
+ { 7888,-16200 }, // UTC-04:30
+ { 7898,-14400 }, // UTC-04:00
+ { 7908,-12600 }, // UTC-03:30
+ { 7918,-10800 }, // UTC-03:00
+ { 7928, -7200 }, // UTC-02:00
+ { 7938, -3600 }, // UTC-01:00
+ { 7948, 0 }, // UTC-00:00
+ { 7958, 0 }, // UTC+00:00
+ { 7968, 3600 }, // UTC+01:00
+ { 7978, 7200 }, // UTC+02:00
+ { 7988, 10800 }, // UTC+03:00
+ { 7998, 12600 }, // UTC+03:30
+ { 8008, 14400 }, // UTC+04:00
+ { 8018, 16200 }, // UTC+04:30
+ { 8028, 18000 }, // UTC+05:00
+ { 8038, 19800 }, // UTC+05:30
+ { 8048, 20700 }, // UTC+05:45
+ { 8058, 21600 }, // UTC+06:00
+ { 8068, 23400 }, // UTC+06:30
+ { 8078, 25200 }, // UTC+07:00
+ { 8088, 28800 }, // UTC+08:00
+ { 8098, 30600 }, // UTC+08:30
+ { 8108, 32400 }, // UTC+09:00
+ { 8118, 34200 }, // UTC+09:30
+ { 8128, 36000 }, // UTC+10:00
+ { 8138, 39600 }, // UTC+11:00
+ { 8148, 43200 }, // UTC+12:00
+ { 8158, 46800 }, // UTC+13:00
+ { 8168, 50400 }, // UTC+14:00
{ 0, 0 } // Trailing zeroes
};
@@ -841,6 +843,7 @@ static const char windowsIdData[] = {
0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6e, 0x6b, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54,
0x69, 0x6d, 0x65, 0x0, 0x57, 0x65, 0x73, 0x74, 0x20, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x53, 0x74, 0x61,
0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x0, 0x59, 0x61, 0x6b, 0x75, 0x74, 0x73, 0x6b, 0x20, 0x53,
+0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x0, 0x59, 0x75, 0x6b, 0x6f, 0x6e, 0x20, 0x53,
0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x0
};
@@ -949,268 +952,268 @@ static const char ianaIdData[] = {
0x69, 0x72, 0x6f, 0x62, 0x69, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x41, 0x6e, 0x74, 0x61, 0x6e, 0x61, 0x6e,
0x61, 0x72, 0x69, 0x76, 0x6f, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x4d, 0x61, 0x79, 0x6f, 0x74, 0x74, 0x65,
0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x6f, 0x67, 0x61, 0x64, 0x69, 0x73, 0x68, 0x75, 0x0, 0x41, 0x66,
-0x72, 0x69, 0x63, 0x61, 0x2f, 0x4a, 0x75, 0x62, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x72,
-0x5f, 0x65, 0x73, 0x5f, 0x53, 0x61, 0x6c, 0x61, 0x61, 0x6d, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4b, 0x61,
-0x6d, 0x70, 0x61, 0x6c, 0x61, 0x0, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x2f, 0x42, 0x72, 0x69, 0x73,
-0x62, 0x61, 0x6e, 0x65, 0x20, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x2f, 0x4c, 0x69, 0x6e, 0x64, 0x65,
-0x6d, 0x61, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x43, 0x68, 0x69, 0x73, 0x69, 0x6e, 0x61, 0x75, 0x0,
-0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x61, 0x6f, 0x5f, 0x50, 0x61, 0x75, 0x6c, 0x6f, 0x0, 0x50, 0x61,
-0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x0, 0x45, 0x53, 0x54, 0x35, 0x45, 0x44, 0x54,
-0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x61, 0x73, 0x73, 0x61, 0x75, 0x0, 0x41, 0x6d, 0x65, 0x72,
-0x69, 0x63, 0x61, 0x2f, 0x54, 0x6f, 0x72, 0x6f, 0x6e, 0x74, 0x6f, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
-0x49, 0x71, 0x61, 0x6c, 0x75, 0x69, 0x74, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x6f, 0x6e, 0x74,
-0x72, 0x65, 0x61, 0x6c, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x69, 0x70, 0x69, 0x67, 0x6f, 0x6e,
-0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x61, 0x6e, 0x67, 0x6e, 0x69, 0x72, 0x74, 0x75, 0x6e, 0x67,
-0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x54, 0x68, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x42, 0x61, 0x79,
-0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x65, 0x77, 0x5f, 0x59, 0x6f, 0x72, 0x6b, 0x20, 0x41, 0x6d,
-0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x65, 0x74, 0x72, 0x6f, 0x69, 0x74, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63,
-0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x2f, 0x50, 0x65, 0x74, 0x65, 0x72, 0x73, 0x62, 0x75, 0x72, 0x67,
-0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x2f, 0x56, 0x69, 0x6e,
-0x63, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61,
-0x6e, 0x61, 0x2f, 0x57, 0x69, 0x6e, 0x61, 0x6d, 0x61, 0x63, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4b,
-0x65, 0x6e, 0x74, 0x75, 0x63, 0x6b, 0x79, 0x2f, 0x4d, 0x6f, 0x6e, 0x74, 0x69, 0x63, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x41,
-0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x6f, 0x75, 0x69, 0x73, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x0, 0x41, 0x6d,
-0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x61, 0x6e, 0x63, 0x75, 0x6e, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f,
-0x43, 0x61, 0x69, 0x72, 0x6f, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x65, 0x72, 0x69, 0x6e,
-0x62, 0x75, 0x72, 0x67, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x46, 0x69, 0x6a, 0x69, 0x0, 0x45, 0x75,
-0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x61, 0x72, 0x69, 0x65, 0x68, 0x61, 0x6d, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70,
-0x65, 0x2f, 0x53, 0x6f, 0x66, 0x69, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x54, 0x61, 0x6c, 0x6c, 0x69,
-0x6e, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x48, 0x65, 0x6c, 0x73, 0x69, 0x6e, 0x6b, 0x69, 0x0, 0x45,
-0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x52, 0x69, 0x67, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x56, 0x69,
-0x6c, 0x6e, 0x69, 0x75, 0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4b, 0x69, 0x65, 0x76, 0x20, 0x45, 0x75,
-0x72, 0x6f, 0x70, 0x65, 0x2f, 0x55, 0x7a, 0x68, 0x67, 0x6f, 0x72, 0x6f, 0x64, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65,
-0x2f, 0x5a, 0x61, 0x70, 0x6f, 0x72, 0x6f, 0x7a, 0x68, 0x79, 0x65, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x62, 0x69,
-0x6c, 0x69, 0x73, 0x69, 0x0, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x2f, 0x46, 0x61, 0x65, 0x72, 0x6f, 0x65,
-0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x47, 0x75, 0x65, 0x72, 0x6e, 0x73, 0x65, 0x79, 0x0, 0x45, 0x75, 0x72,
-0x6f, 0x70, 0x65, 0x2f, 0x44, 0x75, 0x62, 0x6c, 0x69, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x49, 0x73,
-0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x4d, 0x61, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4a, 0x65, 0x72,
-0x73, 0x65, 0x79, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4c, 0x69, 0x73, 0x62, 0x6f, 0x6e, 0x20, 0x41, 0x74,
-0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x2f, 0x4d, 0x61, 0x64, 0x65, 0x69, 0x72, 0x61, 0x0, 0x41, 0x74, 0x6c, 0x61, 0x6e,
-0x74, 0x69, 0x63, 0x2f, 0x43, 0x61, 0x6e, 0x61, 0x72, 0x79, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4c, 0x6f,
-0x6e, 0x64, 0x6f, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x47, 0x6f, 0x64, 0x74, 0x68, 0x61, 0x62,
-0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4f, 0x75, 0x61, 0x67, 0x61, 0x64, 0x6f, 0x75, 0x67, 0x6f, 0x75, 0x0,
-0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x61, 0x6e, 0x6a, 0x75, 0x6c, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61,
-0x2f, 0x41, 0x63, 0x63, 0x72, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x69, 0x73, 0x73, 0x61, 0x75,
-0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x6f, 0x6e, 0x61, 0x6b, 0x72, 0x79, 0x0, 0x41, 0x74, 0x6c, 0x61,
-0x6e, 0x74, 0x69, 0x63, 0x2f, 0x52, 0x65, 0x79, 0x6b, 0x6a, 0x61, 0x76, 0x69, 0x6b, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63,
-0x61, 0x2f, 0x41, 0x62, 0x69, 0x64, 0x6a, 0x61, 0x6e, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x6f, 0x6e,
-0x72, 0x6f, 0x76, 0x69, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x61, 0x6d, 0x61, 0x6b, 0x6f, 0x0,
-0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x6f, 0x75, 0x61, 0x6b, 0x63, 0x68, 0x6f, 0x74, 0x74, 0x0, 0x41, 0x74,
-0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x2f, 0x53, 0x74, 0x5f, 0x48, 0x65, 0x6c, 0x65, 0x6e, 0x61, 0x0, 0x41, 0x66, 0x72,
-0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x6b, 0x61, 0x72, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x46, 0x72, 0x65,
-0x65, 0x74, 0x6f, 0x77, 0x6e, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x6f, 0x6d, 0x65, 0x0, 0x41, 0x73,
-0x69, 0x61, 0x2f, 0x4e, 0x69, 0x63, 0x6f, 0x73, 0x69, 0x61, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x46, 0x61, 0x6d, 0x61,
-0x67, 0x75, 0x73, 0x74, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x41, 0x74, 0x68, 0x65, 0x6e, 0x73, 0x0,
-0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x42, 0x75, 0x63, 0x68, 0x61, 0x72, 0x65, 0x73, 0x74, 0x0, 0x41, 0x6d, 0x65,
-0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x6f, 0x72, 0x74, 0x2d, 0x61, 0x75, 0x2d, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x65, 0x0,
-0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x31, 0x30, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x52,
-0x61, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x67, 0x61, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x54, 0x61, 0x68,
-0x69, 0x74, 0x69, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4a, 0x6f, 0x68, 0x6e, 0x73, 0x74, 0x6f, 0x6e,
-0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x48, 0x6f, 0x6e, 0x6f, 0x6c, 0x75, 0x6c, 0x75, 0x0, 0x41, 0x73,
-0x69, 0x61, 0x2f, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x74, 0x74, 0x61, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x65, 0x68,
-0x72, 0x61, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4a, 0x65, 0x72, 0x75, 0x73, 0x61, 0x6c, 0x65, 0x6d, 0x0, 0x41,
-0x73, 0x69, 0x61, 0x2f, 0x41, 0x6d, 0x6d, 0x61, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4b, 0x61, 0x6c,
-0x69, 0x6e, 0x69, 0x6e, 0x67, 0x72, 0x61, 0x64, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x53, 0x65, 0x6f, 0x75, 0x6c, 0x0,
-0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x54, 0x72, 0x69, 0x70, 0x6f, 0x6c, 0x69, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47,
-0x4d, 0x54, 0x2d, 0x31, 0x34, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4b, 0x69, 0x72, 0x69, 0x74, 0x69,
-0x6d, 0x61, 0x74, 0x69, 0x0, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x2f, 0x4c, 0x6f, 0x72, 0x64, 0x5f,
-0x48, 0x6f, 0x77, 0x65, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4d, 0x61, 0x67, 0x61, 0x64, 0x61, 0x6e, 0x0, 0x41, 0x6d,
-0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x75, 0x6e, 0x74, 0x61, 0x5f, 0x41, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x0, 0x50,
-0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4d, 0x61, 0x72, 0x71, 0x75, 0x65, 0x73, 0x61, 0x73, 0x0, 0x49, 0x6e, 0x64,
-0x69, 0x61, 0x6e, 0x2f, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x69, 0x75, 0x73, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e,
-0x2f, 0x52, 0x65, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x4d, 0x61, 0x68, 0x65,
-0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x42, 0x65, 0x69, 0x72, 0x75, 0x74, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61,
-0x2f, 0x4d, 0x6f, 0x6e, 0x74, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43,
-0x61, 0x73, 0x61, 0x62, 0x6c, 0x61, 0x6e, 0x63, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x45, 0x6c, 0x5f,
-0x41, 0x61, 0x69, 0x75, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x68, 0x69, 0x68, 0x75, 0x61,
-0x68, 0x75, 0x61, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x7a, 0x61, 0x74, 0x6c, 0x61, 0x6e,
-0x0, 0x4d, 0x53, 0x54, 0x37, 0x4d, 0x44, 0x54, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x45, 0x64, 0x6d,
-0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69,
-0x64, 0x67, 0x65, 0x5f, 0x42, 0x61, 0x79, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x6e, 0x75, 0x76,
-0x69, 0x6b, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x59, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6b, 0x6e, 0x69,
-0x66, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4f, 0x6a, 0x69, 0x6e, 0x61, 0x67, 0x61, 0x0, 0x41,
-0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x65, 0x6e, 0x76, 0x65, 0x72, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63,
-0x61, 0x2f, 0x42, 0x6f, 0x69, 0x73, 0x65, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x43, 0x6f, 0x63, 0x6f, 0x73,
-0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x52, 0x61, 0x6e, 0x67, 0x6f, 0x6f, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4e,
-0x6f, 0x76, 0x6f, 0x73, 0x69, 0x62, 0x69, 0x72, 0x73, 0x6b, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x57, 0x69,
-0x6e, 0x64, 0x68, 0x6f, 0x65, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4b, 0x61, 0x74, 0x6d, 0x61, 0x6e, 0x64, 0x75,
-0x0, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x63, 0x4d, 0x75, 0x72, 0x64, 0x6f, 0x0,
-0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x41, 0x75, 0x63, 0x6b, 0x6c, 0x61, 0x6e, 0x64, 0x0, 0x41, 0x6d, 0x65,
-0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x4a, 0x6f, 0x68, 0x6e, 0x73, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69,
-0x63, 0x2f, 0x4e, 0x6f, 0x72, 0x66, 0x6f, 0x6c, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x49, 0x72, 0x6b, 0x75, 0x74,
-0x73, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4b, 0x72, 0x61, 0x73, 0x6e, 0x6f, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x20,
-0x41, 0x73, 0x69, 0x61, 0x2f, 0x4e, 0x6f, 0x76, 0x6f, 0x6b, 0x75, 0x7a, 0x6e, 0x65, 0x74, 0x73, 0x6b, 0x0, 0x41, 0x73,
-0x69, 0x61, 0x2f, 0x50, 0x79, 0x6f, 0x6e, 0x67, 0x79, 0x61, 0x6e, 0x67, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4f, 0x6d,
-0x73, 0x6b, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x67, 0x6f, 0x0,
-0x50, 0x53, 0x54, 0x38, 0x50, 0x44, 0x54, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x56, 0x61, 0x6e, 0x63,
-0x6f, 0x75, 0x76, 0x65, 0x72, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x6f, 0x73, 0x5f, 0x41, 0x6e,
-0x67, 0x65, 0x6c, 0x65, 0x73, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x54, 0x69, 0x6a, 0x75, 0x61, 0x6e,
-0x61, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x61, 0x6e, 0x74, 0x61, 0x5f, 0x49, 0x73, 0x61, 0x62,
-0x65, 0x6c, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4b, 0x61, 0x72, 0x61, 0x63, 0x68, 0x69, 0x0, 0x41, 0x6d, 0x65, 0x72,
-0x69, 0x63, 0x61, 0x2f, 0x41, 0x73, 0x75, 0x6e, 0x63, 0x69, 0x6f, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x51, 0x79,
-0x7a, 0x79, 0x6c, 0x6f, 0x72, 0x64, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x42, 0x72, 0x75, 0x73, 0x73,
-0x65, 0x6c, 0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x43, 0x6f, 0x70, 0x65, 0x6e, 0x68, 0x61, 0x67, 0x65,
-0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x50, 0x61, 0x72, 0x69, 0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70,
-0x65, 0x2f, 0x4d, 0x61, 0x64, 0x72, 0x69, 0x64, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x65, 0x75, 0x74,
-0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x61, 0x6d, 0x61, 0x72, 0x61, 0x0, 0x41, 0x73, 0x69, 0x61,
-0x2f, 0x53, 0x72, 0x65, 0x64, 0x6e, 0x65, 0x6b, 0x6f, 0x6c, 0x79, 0x6d, 0x73, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f,
-0x4b, 0x61, 0x6d, 0x63, 0x68, 0x61, 0x74, 0x6b, 0x61, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x41, 0x6e, 0x61, 0x64, 0x79,
-0x72, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x6f, 0x73, 0x63, 0x6f, 0x77, 0x20, 0x45, 0x75, 0x72, 0x6f,
-0x70, 0x65, 0x2f, 0x4b, 0x69, 0x72, 0x6f, 0x76, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x69, 0x6d, 0x66,
-0x65, 0x72, 0x6f, 0x70, 0x6f, 0x6c, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x33, 0x0, 0x41, 0x6e, 0x74,
-0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x52, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x20, 0x41, 0x6e, 0x74, 0x61,
-0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x61, 0x6c, 0x6d, 0x65, 0x72, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63,
-0x61, 0x2f, 0x46, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x65, 0x7a, 0x61, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
-0x42, 0x65, 0x6c, 0x65, 0x6d, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x63, 0x65, 0x69, 0x6f,
-0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x52, 0x65, 0x63, 0x69, 0x66, 0x65, 0x20, 0x41, 0x6d, 0x65, 0x72,
-0x69, 0x63, 0x61, 0x2f, 0x53, 0x61, 0x6e, 0x74, 0x61, 0x72, 0x65, 0x6d, 0x0, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69,
-0x63, 0x2f, 0x53, 0x74, 0x61, 0x6e, 0x6c, 0x65, 0x79, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x61,
-0x79, 0x65, 0x6e, 0x6e, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x61,
-0x72, 0x69, 0x62, 0x6f, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x35, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
-0x63, 0x61, 0x2f, 0x52, 0x69, 0x6f, 0x5f, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x6f, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63,
-0x61, 0x2f, 0x45, 0x69, 0x72, 0x75, 0x6e, 0x65, 0x70, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43,
-0x6f, 0x72, 0x61, 0x6c, 0x5f, 0x48, 0x61, 0x72, 0x62, 0x6f, 0x75, 0x72, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61,
-0x2f, 0x43, 0x61, 0x79, 0x6d, 0x61, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x6f, 0x67, 0x6f,
-0x74, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x47, 0x75, 0x61, 0x79, 0x61, 0x71, 0x75, 0x69, 0x6c,
-0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4a, 0x61, 0x6d, 0x61, 0x69, 0x63, 0x61, 0x0, 0x41, 0x6d, 0x65,
-0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
-0x4c, 0x69, 0x6d, 0x61, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x34, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
-0x63, 0x61, 0x2f, 0x41, 0x6e, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
-0x41, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x72, 0x75, 0x62,
-0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x61, 0x72, 0x62, 0x61, 0x64, 0x6f, 0x73, 0x0, 0x41,
-0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x61, 0x5f, 0x50, 0x61, 0x7a, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63,
-0x61, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x75, 0x73, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x6f, 0x61,
-0x5f, 0x56, 0x69, 0x73, 0x74, 0x61, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x6f, 0x72, 0x74, 0x6f,
-0x5f, 0x56, 0x65, 0x6c, 0x68, 0x6f, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x54, 0x6f, 0x72, 0x74, 0x6f,
-0x6c, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x6c, 0x61, 0x6e, 0x63, 0x2d, 0x53, 0x61, 0x62,
-0x6c, 0x6f, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4b, 0x72, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x69,
-0x6a, 0x6b, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x75, 0x72, 0x61, 0x63, 0x61, 0x6f, 0x0, 0x41,
-0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72,
-0x69, 0x63, 0x61, 0x2f, 0x53, 0x61, 0x6e, 0x74, 0x6f, 0x5f, 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x0, 0x41, 0x6d,
-0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x47, 0x72, 0x65, 0x6e, 0x61, 0x64, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63,
-0x61, 0x2f, 0x47, 0x75, 0x61, 0x64, 0x65, 0x6c, 0x6f, 0x75, 0x70, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61,
-0x2f, 0x47, 0x75, 0x79, 0x61, 0x6e, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x72, 0x74,
-0x69, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x6f, 0x6e, 0x74, 0x73,
-0x65, 0x72, 0x72, 0x61, 0x74, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x75, 0x65, 0x72, 0x74, 0x6f,
-0x5f, 0x52, 0x69, 0x63, 0x6f, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x42, 0x61, 0x72,
-0x74, 0x68, 0x65, 0x6c, 0x65, 0x6d, 0x79, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x4b,
-0x69, 0x74, 0x74, 0x73, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x4c, 0x75, 0x63, 0x69,
-0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x72, 0x69, 0x67, 0x6f, 0x74, 0x0, 0x41, 0x6d,
-0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x56, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x0, 0x41, 0x6d, 0x65,
-0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x65, 0x73, 0x0, 0x41,
-0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x53, 0x70, 0x61, 0x69, 0x6e,
-0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x54, 0x68, 0x6f, 0x6d, 0x61, 0x73, 0x0, 0x41,
-0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x69, 0x71, 0x75, 0x65, 0x6c, 0x6f, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61,
-0x2f, 0x53, 0x61, 0x6b, 0x68, 0x61, 0x6c, 0x69, 0x6e, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x41, 0x70,
-0x69, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x61, 0x6f, 0x5f, 0x54, 0x6f, 0x6d, 0x65, 0x0, 0x45,
-0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x76, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d,
-0x54, 0x2d, 0x37, 0x0, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x76, 0x69, 0x73,
-0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x50, 0x68, 0x6e, 0x6f, 0x6d, 0x5f, 0x50, 0x65, 0x6e, 0x68, 0x0, 0x49, 0x6e, 0x64,
-0x69, 0x61, 0x6e, 0x2f, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x6d, 0x61, 0x73, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4a,
-0x61, 0x6b, 0x61, 0x72, 0x74, 0x61, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x50, 0x6f, 0x6e, 0x74, 0x69, 0x61, 0x6e, 0x61,
-0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x56, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6e, 0x65, 0x0, 0x41, 0x73, 0x69,
-0x61, 0x2f, 0x42, 0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x53, 0x61, 0x69, 0x67, 0x6f,
-0x6e, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x38, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x42, 0x72, 0x75,
-0x6e, 0x65, 0x69, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4d, 0x61, 0x6b, 0x61, 0x73, 0x73, 0x61, 0x72, 0x0, 0x41, 0x73,
-0x69, 0x61, 0x2f, 0x4b, 0x75, 0x61, 0x6c, 0x61, 0x5f, 0x4c, 0x75, 0x6d, 0x70, 0x75, 0x72, 0x20, 0x41, 0x73, 0x69, 0x61,
-0x2f, 0x4b, 0x75, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61,
-0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x53, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x65, 0x0, 0x45, 0x74, 0x63, 0x2f,
-0x47, 0x4d, 0x54, 0x2d, 0x32, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x47, 0x61, 0x62, 0x6f, 0x72, 0x6f, 0x6e,
-0x65, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x75, 0x6a, 0x75, 0x6d, 0x62, 0x75, 0x72, 0x61, 0x0, 0x41,
-0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x75, 0x62, 0x75, 0x6d, 0x62, 0x61, 0x73, 0x68, 0x69, 0x0, 0x41, 0x66, 0x72,
-0x69, 0x63, 0x61, 0x2f, 0x4d, 0x62, 0x61, 0x62, 0x61, 0x6e, 0x65, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d,
-0x61, 0x73, 0x65, 0x72, 0x75, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x6c, 0x61, 0x6e, 0x74, 0x79, 0x72,
-0x65, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x70, 0x75, 0x74, 0x6f, 0x0, 0x41, 0x66, 0x72, 0x69,
-0x63, 0x61, 0x2f, 0x4b, 0x69, 0x67, 0x61, 0x6c, 0x69, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4a, 0x6f, 0x68,
-0x61, 0x6e, 0x6e, 0x65, 0x73, 0x62, 0x75, 0x72, 0x67, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x75, 0x73,
-0x61, 0x6b, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x48, 0x61, 0x72, 0x61, 0x72, 0x65, 0x0, 0x41, 0x73,
-0x69, 0x61, 0x2f, 0x43, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x6f, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4b, 0x68,
-0x61, 0x72, 0x74, 0x6f, 0x75, 0x6d, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x44, 0x61, 0x6d, 0x61, 0x73, 0x63, 0x75, 0x73,
-0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x61, 0x69, 0x70, 0x65, 0x69, 0x0, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c,
-0x69, 0x61, 0x2f, 0x48, 0x6f, 0x62, 0x61, 0x72, 0x74, 0x20, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x2f,
-0x43, 0x75, 0x72, 0x72, 0x69, 0x65, 0x20, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61,
-0x63, 0x71, 0x75, 0x61, 0x72, 0x69, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x72, 0x61, 0x67,
-0x75, 0x61, 0x69, 0x6e, 0x61, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x39, 0x0, 0x41, 0x73, 0x69, 0x61,
-0x2f, 0x4a, 0x61, 0x79, 0x61, 0x70, 0x75, 0x72, 0x61, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x6f, 0x6b, 0x79, 0x6f,
-0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x50, 0x61, 0x6c, 0x61, 0x75, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f,
-0x44, 0x69, 0x6c, 0x69, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x6f, 0x6d, 0x73, 0x6b, 0x0, 0x50, 0x61, 0x63, 0x69,
-0x66, 0x69, 0x63, 0x2f, 0x54, 0x6f, 0x6e, 0x67, 0x61, 0x74, 0x61, 0x70, 0x75, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x43,
-0x68, 0x69, 0x74, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x49, 0x73, 0x74, 0x61, 0x6e, 0x62, 0x75, 0x6c,
-0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x54, 0x75, 0x72, 0x6b, 0x0,
-0x41, 0x73, 0x69, 0x61, 0x2f, 0x55, 0x6c, 0x61, 0x61, 0x6e, 0x62, 0x61, 0x61, 0x74, 0x61, 0x72, 0x20, 0x41, 0x73, 0x69,
-0x61, 0x2f, 0x43, 0x68, 0x6f, 0x69, 0x62, 0x61, 0x6c, 0x73, 0x61, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61,
-0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63,
-0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x2f, 0x4d, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x6f, 0x20, 0x41, 0x6d,
-0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x2f, 0x56, 0x65, 0x76, 0x61, 0x79, 0x0,
-0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x37, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x57, 0x68,
-0x69, 0x74, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x72, 0x65,
-0x73, 0x74, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x77, 0x73, 0x6f, 0x6e, 0x20,
-0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x77, 0x73, 0x6f, 0x6e, 0x5f, 0x43, 0x72, 0x65, 0x65, 0x6b,
-0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x46, 0x6f, 0x72, 0x74, 0x5f, 0x4e, 0x65, 0x6c, 0x73, 0x6f, 0x6e,
-0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x48, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x69, 0x6c, 0x6c, 0x6f, 0x0,
-0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x68, 0x6f, 0x65, 0x6e, 0x69, 0x78, 0x0, 0x45, 0x74, 0x63, 0x2f,
-0x47, 0x4d, 0x54, 0x2b, 0x31, 0x31, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x50, 0x61, 0x67, 0x6f, 0x5f,
-0x50, 0x61, 0x67, 0x6f, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4e, 0x69, 0x75, 0x65, 0x0, 0x50, 0x61,
-0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4d, 0x69, 0x64, 0x77, 0x61, 0x79, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54,
-0x2b, 0x39, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x47, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x72, 0x0, 0x45,
-0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x38, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x50, 0x69, 0x74,
-0x63, 0x61, 0x69, 0x72, 0x6e, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x32, 0x0, 0x41, 0x6d, 0x65, 0x72,
-0x69, 0x63, 0x61, 0x2f, 0x4e, 0x6f, 0x72, 0x6f, 0x6e, 0x68, 0x61, 0x0, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63,
-0x2f, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x47, 0x65, 0x6f, 0x72, 0x67, 0x69, 0x61, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47,
-0x4d, 0x54, 0x20, 0x45, 0x74, 0x63, 0x2f, 0x55, 0x54, 0x43, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44,
-0x61, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x68, 0x61, 0x76, 0x6e, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d,
-0x31, 0x32, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x54, 0x61, 0x72, 0x61, 0x77, 0x61, 0x0, 0x50, 0x61,
-0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4d, 0x61, 0x6a, 0x75, 0x72, 0x6f, 0x20, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63,
-0x2f, 0x4b, 0x77, 0x61, 0x6a, 0x61, 0x6c, 0x65, 0x69, 0x6e, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4e,
-0x61, 0x75, 0x72, 0x75, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x46, 0x75, 0x6e, 0x61, 0x66, 0x75, 0x74,
-0x69, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x57, 0x61, 0x6b, 0x65, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66,
-0x69, 0x63, 0x2f, 0x57, 0x61, 0x6c, 0x6c, 0x69, 0x73, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x31, 0x33,
-0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x45, 0x6e, 0x64, 0x65, 0x72, 0x62, 0x75, 0x72, 0x79, 0x0, 0x50,
-0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x46, 0x61, 0x6b, 0x61, 0x6f, 0x66, 0x6f, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
-0x63, 0x61, 0x2f, 0x43, 0x61, 0x72, 0x61, 0x63, 0x61, 0x73, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x56, 0x6c, 0x61, 0x64,
-0x69, 0x76, 0x6f, 0x73, 0x74, 0x6f, 0x6b, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x55, 0x73, 0x74, 0x2d, 0x4e, 0x65, 0x72,
-0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x56, 0x6f, 0x6c, 0x67, 0x6f, 0x67, 0x72, 0x61, 0x64, 0x0, 0x41,
-0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x2f, 0x50, 0x65, 0x72, 0x74, 0x68, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47,
-0x4d, 0x54, 0x2d, 0x31, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x6c, 0x67, 0x69, 0x65, 0x72, 0x73, 0x0,
-0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x75, 0x61, 0x6e, 0x64, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61,
-0x2f, 0x50, 0x6f, 0x72, 0x74, 0x6f, 0x2d, 0x4e, 0x6f, 0x76, 0x6f, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44,
-0x6f, 0x75, 0x61, 0x6c, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x61, 0x6e, 0x67, 0x75, 0x69, 0x0,
-0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x64, 0x6a, 0x61, 0x6d, 0x65, 0x6e, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69,
-0x63, 0x61, 0x2f, 0x42, 0x72, 0x61, 0x7a, 0x7a, 0x61, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63,
-0x61, 0x2f, 0x4b, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x73, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61,
-0x6c, 0x61, 0x62, 0x6f, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x69, 0x62, 0x72, 0x65, 0x76, 0x69, 0x6c,
-0x6c, 0x65, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x61, 0x67, 0x6f, 0x73, 0x0, 0x41, 0x66, 0x72, 0x69,
-0x63, 0x61, 0x2f, 0x4e, 0x69, 0x61, 0x6d, 0x65, 0x79, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x54, 0x75, 0x6e,
-0x69, 0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x41, 0x6e, 0x64, 0x6f, 0x72, 0x72, 0x61, 0x0, 0x45, 0x75,
-0x72, 0x6f, 0x70, 0x65, 0x2f, 0x56, 0x69, 0x65, 0x6e, 0x6e, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x42,
-0x65, 0x72, 0x6c, 0x69, 0x6e, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x65,
-0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x47, 0x69, 0x62, 0x72, 0x61, 0x6c, 0x74, 0x61, 0x72, 0x0, 0x45,
-0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x52, 0x6f, 0x6d, 0x65, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x56, 0x61,
-0x64, 0x75, 0x7a, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4c, 0x75, 0x78, 0x65, 0x6d, 0x62, 0x6f, 0x75, 0x72,
-0x67, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x61, 0x6c, 0x74, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70,
-0x65, 0x2f, 0x4d, 0x6f, 0x6e, 0x61, 0x63, 0x6f, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x41, 0x6d, 0x73, 0x74,
-0x65, 0x72, 0x64, 0x61, 0x6d, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4f, 0x73, 0x6c, 0x6f, 0x0, 0x45, 0x75,
-0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x61, 0x6e, 0x5f, 0x4d, 0x61, 0x72, 0x69, 0x6e, 0x6f, 0x0, 0x41, 0x72, 0x63, 0x74,
-0x69, 0x63, 0x2f, 0x4c, 0x6f, 0x6e, 0x67, 0x79, 0x65, 0x61, 0x72, 0x62, 0x79, 0x65, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f,
-0x70, 0x65, 0x2f, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x68, 0x6f, 0x6c, 0x6d, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f,
-0x5a, 0x75, 0x72, 0x69, 0x63, 0x68, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x56, 0x61, 0x74, 0x69, 0x63, 0x61,
-0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x48, 0x6f, 0x76, 0x64, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d,
-0x35, 0x0, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x77, 0x73, 0x6f, 0x6e, 0x0,
-0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x4b, 0x65, 0x72, 0x67, 0x75, 0x65, 0x6c, 0x65, 0x6e, 0x0, 0x41, 0x73, 0x69,
-0x61, 0x2f, 0x4f, 0x72, 0x61, 0x6c, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x41, 0x71, 0x74, 0x61, 0x75, 0x20, 0x41, 0x73,
-0x69, 0x61, 0x2f, 0x41, 0x71, 0x74, 0x6f, 0x62, 0x65, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x41, 0x74, 0x79, 0x72, 0x61,
-0x75, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x4d, 0x61, 0x6c, 0x64, 0x69, 0x76, 0x65, 0x73, 0x0, 0x41, 0x73,
-0x69, 0x61, 0x2f, 0x44, 0x75, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x65, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x41, 0x73, 0x68,
-0x67, 0x61, 0x62, 0x61, 0x74, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x61, 0x73, 0x68, 0x6b, 0x65, 0x6e, 0x74, 0x20,
-0x41, 0x73, 0x69, 0x61, 0x2f, 0x53, 0x61, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x6e, 0x64, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f,
-0x48, 0x65, 0x62, 0x72, 0x6f, 0x6e, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x47, 0x61, 0x7a, 0x61, 0x0, 0x45, 0x74, 0x63,
-0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x31, 0x30, 0x0, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x44,
-0x75, 0x6d, 0x6f, 0x6e, 0x74, 0x44, 0x55, 0x72, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69,
-0x63, 0x2f, 0x47, 0x75, 0x61, 0x6d, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x54, 0x72, 0x75, 0x6b, 0x0,
-0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x53, 0x61, 0x69, 0x70, 0x61, 0x6e, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66,
-0x69, 0x63, 0x2f, 0x50, 0x6f, 0x72, 0x74, 0x5f, 0x4d, 0x6f, 0x72, 0x65, 0x73, 0x62, 0x79, 0x0, 0x41, 0x73, 0x69, 0x61,
-0x2f, 0x59, 0x61, 0x6b, 0x75, 0x74, 0x73, 0x6b, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4b, 0x68, 0x61, 0x6e, 0x64, 0x79,
-0x67, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x61, 0x67, 0x65,
+0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x72, 0x5f, 0x65, 0x73, 0x5f, 0x53, 0x61, 0x6c, 0x61, 0x61, 0x6d, 0x0, 0x41,
+0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4b, 0x61, 0x6d, 0x70, 0x61, 0x6c, 0x61, 0x0, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61,
+0x6c, 0x69, 0x61, 0x2f, 0x42, 0x72, 0x69, 0x73, 0x62, 0x61, 0x6e, 0x65, 0x20, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c,
+0x69, 0x61, 0x2f, 0x4c, 0x69, 0x6e, 0x64, 0x65, 0x6d, 0x61, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x43,
+0x68, 0x69, 0x73, 0x69, 0x6e, 0x61, 0x75, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x61, 0x6f, 0x5f,
+0x50, 0x61, 0x75, 0x6c, 0x6f, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72,
+0x0, 0x45, 0x53, 0x54, 0x35, 0x45, 0x44, 0x54, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x61, 0x73,
+0x73, 0x61, 0x75, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x54, 0x6f, 0x72, 0x6f, 0x6e, 0x74, 0x6f, 0x20,
+0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x71, 0x61, 0x6c, 0x75, 0x69, 0x74, 0x20, 0x41, 0x6d, 0x65, 0x72,
+0x69, 0x63, 0x61, 0x2f, 0x4d, 0x6f, 0x6e, 0x74, 0x72, 0x65, 0x61, 0x6c, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61,
+0x2f, 0x4e, 0x69, 0x70, 0x69, 0x67, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x61, 0x6e,
+0x67, 0x6e, 0x69, 0x72, 0x74, 0x75, 0x6e, 0x67, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x54, 0x68, 0x75,
+0x6e, 0x64, 0x65, 0x72, 0x5f, 0x42, 0x61, 0x79, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x65, 0x77,
+0x5f, 0x59, 0x6f, 0x72, 0x6b, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x65, 0x74, 0x72, 0x6f, 0x69,
+0x74, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x2f, 0x50, 0x65,
+0x74, 0x65, 0x72, 0x73, 0x62, 0x75, 0x72, 0x67, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x6e, 0x64,
+0x69, 0x61, 0x6e, 0x61, 0x2f, 0x56, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x2f, 0x57, 0x69, 0x6e, 0x61, 0x6d, 0x61, 0x63, 0x20, 0x41,
+0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4b, 0x65, 0x6e, 0x74, 0x75, 0x63, 0x6b, 0x79, 0x2f, 0x4d, 0x6f, 0x6e, 0x74,
+0x69, 0x63, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x6f, 0x75, 0x69, 0x73,
+0x76, 0x69, 0x6c, 0x6c, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x61, 0x6e, 0x63, 0x75, 0x6e,
+0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x61, 0x69, 0x72, 0x6f, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x59,
+0x65, 0x6b, 0x61, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63,
+0x2f, 0x46, 0x69, 0x6a, 0x69, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x61, 0x72, 0x69, 0x65, 0x68, 0x61,
+0x6d, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x6f, 0x66, 0x69, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f,
+0x70, 0x65, 0x2f, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x48, 0x65,
+0x6c, 0x73, 0x69, 0x6e, 0x6b, 0x69, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x52, 0x69, 0x67, 0x61, 0x0, 0x45,
+0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x56, 0x69, 0x6c, 0x6e, 0x69, 0x75, 0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65,
+0x2f, 0x4b, 0x69, 0x65, 0x76, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x55, 0x7a, 0x68, 0x67, 0x6f, 0x72, 0x6f,
+0x64, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x5a, 0x61, 0x70, 0x6f, 0x72, 0x6f, 0x7a, 0x68, 0x79, 0x65, 0x0,
+0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x62, 0x69, 0x6c, 0x69, 0x73, 0x69, 0x0, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69,
+0x63, 0x2f, 0x46, 0x61, 0x65, 0x72, 0x6f, 0x65, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x47, 0x75, 0x65, 0x72,
+0x6e, 0x73, 0x65, 0x79, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x44, 0x75, 0x62, 0x6c, 0x69, 0x6e, 0x0, 0x45,
+0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x49, 0x73, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x4d, 0x61, 0x6e, 0x0, 0x45, 0x75,
+0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4c,
+0x69, 0x73, 0x62, 0x6f, 0x6e, 0x20, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x2f, 0x4d, 0x61, 0x64, 0x65, 0x69,
+0x72, 0x61, 0x0, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x2f, 0x43, 0x61, 0x6e, 0x61, 0x72, 0x79, 0x0, 0x45,
+0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4c, 0x6f, 0x6e, 0x64, 0x6f, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61,
+0x2f, 0x47, 0x6f, 0x64, 0x74, 0x68, 0x61, 0x62, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4f, 0x75, 0x61, 0x67,
+0x61, 0x64, 0x6f, 0x75, 0x67, 0x6f, 0x75, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x61, 0x6e, 0x6a, 0x75,
+0x6c, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x63, 0x63, 0x72, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x44, 0x61, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x68, 0x61, 0x76, 0x6e, 0x0, 0x41, 0x66, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x42, 0x69, 0x73, 0x73, 0x61, 0x75, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x6f, 0x6e,
+0x61, 0x6b, 0x72, 0x79, 0x0, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x2f, 0x52, 0x65, 0x79, 0x6b, 0x6a, 0x61,
+0x76, 0x69, 0x6b, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x62, 0x69, 0x64, 0x6a, 0x61, 0x6e, 0x0, 0x41,
+0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x6f, 0x6e, 0x72, 0x6f, 0x76, 0x69, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63,
+0x61, 0x2f, 0x42, 0x61, 0x6d, 0x61, 0x6b, 0x6f, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x6f, 0x75, 0x61,
+0x6b, 0x63, 0x68, 0x6f, 0x74, 0x74, 0x0, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x2f, 0x53, 0x74, 0x5f, 0x48,
+0x65, 0x6c, 0x65, 0x6e, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x6b, 0x61, 0x72, 0x0, 0x41,
+0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x46, 0x72, 0x65, 0x65, 0x74, 0x6f, 0x77, 0x6e, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63,
+0x61, 0x2f, 0x4c, 0x6f, 0x6d, 0x65, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4e, 0x69, 0x63, 0x6f, 0x73, 0x69, 0x61, 0x20,
+0x41, 0x73, 0x69, 0x61, 0x2f, 0x46, 0x61, 0x6d, 0x61, 0x67, 0x75, 0x73, 0x74, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70,
+0x65, 0x2f, 0x41, 0x74, 0x68, 0x65, 0x6e, 0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x42, 0x75, 0x63, 0x68,
+0x61, 0x72, 0x65, 0x73, 0x74, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x6f, 0x72, 0x74, 0x2d, 0x61,
+0x75, 0x2d, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x65, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x31, 0x30, 0x0,
+0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x52, 0x61, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x67, 0x61, 0x0, 0x50, 0x61,
+0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x54, 0x61, 0x68, 0x69, 0x74, 0x69, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63,
+0x2f, 0x4a, 0x6f, 0x68, 0x6e, 0x73, 0x74, 0x6f, 0x6e, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x48, 0x6f,
+0x6e, 0x6f, 0x6c, 0x75, 0x6c, 0x75, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x74, 0x74, 0x61,
+0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x65, 0x68, 0x72, 0x61, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4a, 0x65,
+0x72, 0x75, 0x73, 0x61, 0x6c, 0x65, 0x6d, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x41, 0x6d, 0x6d, 0x61, 0x6e, 0x0, 0x45,
+0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4b, 0x61, 0x6c, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x72, 0x61, 0x64, 0x0, 0x41, 0x73,
+0x69, 0x61, 0x2f, 0x53, 0x65, 0x6f, 0x75, 0x6c, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x54, 0x72, 0x69, 0x70,
+0x6f, 0x6c, 0x69, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x31, 0x34, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66,
+0x69, 0x63, 0x2f, 0x4b, 0x69, 0x72, 0x69, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x0, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61,
+0x6c, 0x69, 0x61, 0x2f, 0x4c, 0x6f, 0x72, 0x64, 0x5f, 0x48, 0x6f, 0x77, 0x65, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4d,
+0x61, 0x67, 0x61, 0x64, 0x61, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x75, 0x6e, 0x74, 0x61,
+0x5f, 0x41, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4d, 0x61, 0x72, 0x71,
+0x75, 0x65, 0x73, 0x61, 0x73, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x74, 0x69,
+0x75, 0x73, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x52, 0x65, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x0, 0x49, 0x6e,
+0x64, 0x69, 0x61, 0x6e, 0x2f, 0x4d, 0x61, 0x68, 0x65, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x42, 0x65, 0x69, 0x72, 0x75,
+0x74, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x6f, 0x6e, 0x74, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6f,
+0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x61, 0x73, 0x61, 0x62, 0x6c, 0x61, 0x6e, 0x63, 0x61, 0x0, 0x41,
+0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x45, 0x6c, 0x5f, 0x41, 0x61, 0x69, 0x75, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x43, 0x68, 0x69, 0x68, 0x75, 0x61, 0x68, 0x75, 0x61, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61,
+0x2f, 0x4d, 0x61, 0x7a, 0x61, 0x74, 0x6c, 0x61, 0x6e, 0x0, 0x4d, 0x53, 0x54, 0x37, 0x4d, 0x44, 0x54, 0x0, 0x41, 0x6d,
+0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x45, 0x64, 0x6d, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x42, 0x61, 0x79, 0x20, 0x41, 0x6d, 0x65,
+0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x6e, 0x75, 0x76, 0x69, 0x6b, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
+0x59, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6b, 0x6e, 0x69, 0x66, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
+0x4f, 0x6a, 0x69, 0x6e, 0x61, 0x67, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x65, 0x6e, 0x76,
+0x65, 0x72, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x6f, 0x69, 0x73, 0x65, 0x0, 0x49, 0x6e, 0x64,
+0x69, 0x61, 0x6e, 0x2f, 0x43, 0x6f, 0x63, 0x6f, 0x73, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x52, 0x61, 0x6e, 0x67, 0x6f,
+0x6f, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4e, 0x6f, 0x76, 0x6f, 0x73, 0x69, 0x62, 0x69, 0x72, 0x73, 0x6b, 0x0,
+0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x57, 0x69, 0x6e, 0x64, 0x68, 0x6f, 0x65, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61,
+0x2f, 0x4b, 0x61, 0x74, 0x6d, 0x61, 0x6e, 0x64, 0x75, 0x0, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61,
+0x2f, 0x4d, 0x63, 0x4d, 0x75, 0x72, 0x64, 0x6f, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x41, 0x75, 0x63,
+0x6b, 0x6c, 0x61, 0x6e, 0x64, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x4a, 0x6f, 0x68,
+0x6e, 0x73, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4e, 0x6f, 0x72, 0x66, 0x6f, 0x6c, 0x6b, 0x0, 0x41,
+0x73, 0x69, 0x61, 0x2f, 0x49, 0x72, 0x6b, 0x75, 0x74, 0x73, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4b, 0x72, 0x61,
+0x73, 0x6e, 0x6f, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4e, 0x6f, 0x76, 0x6f, 0x6b, 0x75,
+0x7a, 0x6e, 0x65, 0x74, 0x73, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x50, 0x79, 0x6f, 0x6e, 0x67, 0x79, 0x61, 0x6e,
+0x67, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4f, 0x6d, 0x73, 0x6b, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
+0x53, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x67, 0x6f, 0x0, 0x50, 0x53, 0x54, 0x38, 0x50, 0x44, 0x54, 0x0, 0x41, 0x6d, 0x65,
+0x72, 0x69, 0x63, 0x61, 0x2f, 0x56, 0x61, 0x6e, 0x63, 0x6f, 0x75, 0x76, 0x65, 0x72, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x4c, 0x6f, 0x73, 0x5f, 0x41, 0x6e, 0x67, 0x65, 0x6c, 0x65, 0x73, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x54, 0x69, 0x6a, 0x75, 0x61, 0x6e, 0x61, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53,
+0x61, 0x6e, 0x74, 0x61, 0x5f, 0x49, 0x73, 0x61, 0x62, 0x65, 0x6c, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4b, 0x61, 0x72,
+0x61, 0x63, 0x68, 0x69, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x73, 0x75, 0x6e, 0x63, 0x69, 0x6f,
+0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x51, 0x79, 0x7a, 0x79, 0x6c, 0x6f, 0x72, 0x64, 0x61, 0x0, 0x45, 0x75, 0x72,
+0x6f, 0x70, 0x65, 0x2f, 0x42, 0x72, 0x75, 0x73, 0x73, 0x65, 0x6c, 0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f,
+0x43, 0x6f, 0x70, 0x65, 0x6e, 0x68, 0x61, 0x67, 0x65, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x50, 0x61,
+0x72, 0x69, 0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x61, 0x64, 0x72, 0x69, 0x64, 0x20, 0x41, 0x66,
+0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x65, 0x75, 0x74, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x61,
+0x6d, 0x61, 0x72, 0x61, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x53, 0x72, 0x65, 0x64, 0x6e, 0x65, 0x6b, 0x6f, 0x6c, 0x79,
+0x6d, 0x73, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4b, 0x61, 0x6d, 0x63, 0x68, 0x61, 0x74, 0x6b, 0x61, 0x20, 0x41,
+0x73, 0x69, 0x61, 0x2f, 0x41, 0x6e, 0x61, 0x64, 0x79, 0x72, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x6f,
+0x73, 0x63, 0x6f, 0x77, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4b, 0x69, 0x72, 0x6f, 0x76, 0x0, 0x45, 0x75,
+0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x69, 0x6d, 0x66, 0x65, 0x72, 0x6f, 0x70, 0x6f, 0x6c, 0x0, 0x45, 0x74, 0x63, 0x2f,
+0x47, 0x4d, 0x54, 0x2b, 0x33, 0x0, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x52, 0x6f, 0x74,
+0x68, 0x65, 0x72, 0x61, 0x20, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x61, 0x6c, 0x6d,
+0x65, 0x72, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x46, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x65, 0x7a, 0x61,
+0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x65, 0x6c, 0x65, 0x6d, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x4d, 0x61, 0x63, 0x65, 0x69, 0x6f, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x52, 0x65,
+0x63, 0x69, 0x66, 0x65, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x61, 0x6e, 0x74, 0x61, 0x72, 0x65,
+0x6d, 0x0, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x2f, 0x53, 0x74, 0x61, 0x6e, 0x6c, 0x65, 0x79, 0x0, 0x41,
+0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x61, 0x79, 0x65, 0x6e, 0x6e, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x62, 0x6f, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d,
+0x54, 0x2b, 0x35, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x52, 0x69, 0x6f, 0x5f, 0x42, 0x72, 0x61, 0x6e,
+0x63, 0x6f, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x45, 0x69, 0x72, 0x75, 0x6e, 0x65, 0x70, 0x65, 0x0,
+0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x6f, 0x72, 0x61, 0x6c, 0x5f, 0x48, 0x61, 0x72, 0x62, 0x6f, 0x75,
+0x72, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x61, 0x79, 0x6d, 0x61, 0x6e, 0x0, 0x41, 0x6d, 0x65,
+0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x6f, 0x67, 0x6f, 0x74, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
+0x47, 0x75, 0x61, 0x79, 0x61, 0x71, 0x75, 0x69, 0x6c, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4a, 0x61,
+0x6d, 0x61, 0x69, 0x63, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61,
+0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x69, 0x6d, 0x61, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d,
+0x54, 0x2b, 0x34, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x6e, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x61,
+0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x61, 0x0, 0x41, 0x6d, 0x65,
+0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x72, 0x75, 0x62, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42,
+0x61, 0x72, 0x62, 0x61, 0x64, 0x6f, 0x73, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x61, 0x5f, 0x50,
+0x61, 0x7a, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x75, 0x73, 0x20, 0x41, 0x6d,
+0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x6f, 0x61, 0x5f, 0x56, 0x69, 0x73, 0x74, 0x61, 0x20, 0x41, 0x6d, 0x65, 0x72,
+0x69, 0x63, 0x61, 0x2f, 0x50, 0x6f, 0x72, 0x74, 0x6f, 0x5f, 0x56, 0x65, 0x6c, 0x68, 0x6f, 0x0, 0x41, 0x6d, 0x65, 0x72,
+0x69, 0x63, 0x61, 0x2f, 0x54, 0x6f, 0x72, 0x74, 0x6f, 0x6c, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
+0x42, 0x6c, 0x61, 0x6e, 0x63, 0x2d, 0x53, 0x61, 0x62, 0x6c, 0x6f, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61,
+0x2f, 0x4b, 0x72, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x69, 0x6a, 0x6b, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f,
+0x43, 0x75, 0x72, 0x61, 0x63, 0x61, 0x6f, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x6f, 0x6d, 0x69,
+0x6e, 0x69, 0x63, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x61, 0x6e, 0x74, 0x6f, 0x5f, 0x44,
+0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x47, 0x72, 0x65, 0x6e, 0x61,
+0x64, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x47, 0x75, 0x61, 0x64, 0x65, 0x6c, 0x6f, 0x75, 0x70,
+0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x47, 0x75, 0x79, 0x61, 0x6e, 0x61, 0x0, 0x41, 0x6d, 0x65,
+0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72,
+0x69, 0x63, 0x61, 0x2f, 0x4d, 0x6f, 0x6e, 0x74, 0x73, 0x65, 0x72, 0x72, 0x61, 0x74, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x50, 0x75, 0x65, 0x72, 0x74, 0x6f, 0x5f, 0x52, 0x69, 0x63, 0x6f, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x42, 0x61, 0x72, 0x74, 0x68, 0x65, 0x6c, 0x65, 0x6d, 0x79, 0x0, 0x41, 0x6d, 0x65,
+0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x4b, 0x69, 0x74, 0x74, 0x73, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63,
+0x61, 0x2f, 0x53, 0x74, 0x5f, 0x4c, 0x75, 0x63, 0x69, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d,
+0x61, 0x72, 0x69, 0x67, 0x6f, 0x74, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74, 0x5f, 0x56, 0x69,
+0x6e, 0x63, 0x65, 0x6e, 0x74, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x5f,
+0x50, 0x72, 0x69, 0x6e, 0x63, 0x65, 0x73, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x6f, 0x72, 0x74,
+0x5f, 0x6f, 0x66, 0x5f, 0x53, 0x70, 0x61, 0x69, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53, 0x74,
+0x5f, 0x54, 0x68, 0x6f, 0x6d, 0x61, 0x73, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x69, 0x71, 0x75,
+0x65, 0x6c, 0x6f, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x53, 0x61, 0x6b, 0x68, 0x61, 0x6c, 0x69, 0x6e, 0x0, 0x50,
+0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x41, 0x70, 0x69, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x53,
+0x61, 0x6f, 0x5f, 0x54, 0x6f, 0x6d, 0x65, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x61, 0x72, 0x61, 0x74,
+0x6f, 0x76, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x37, 0x0, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74,
+0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x76, 0x69, 0x73, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x50, 0x68, 0x6e, 0x6f, 0x6d,
+0x5f, 0x50, 0x65, 0x6e, 0x68, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x6d,
+0x61, 0x73, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4a, 0x61, 0x6b, 0x61, 0x72, 0x74, 0x61, 0x20, 0x41, 0x73, 0x69, 0x61,
+0x2f, 0x50, 0x6f, 0x6e, 0x74, 0x69, 0x61, 0x6e, 0x61, 0x6b, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x56, 0x69, 0x65, 0x6e,
+0x74, 0x69, 0x61, 0x6e, 0x65, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x42, 0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x6b, 0x0, 0x41,
+0x73, 0x69, 0x61, 0x2f, 0x53, 0x61, 0x69, 0x67, 0x6f, 0x6e, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x38,
+0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x42, 0x72, 0x75, 0x6e, 0x65, 0x69, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4d, 0x61,
+0x6b, 0x61, 0x73, 0x73, 0x61, 0x72, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4b, 0x75, 0x61, 0x6c, 0x61, 0x5f, 0x4c, 0x75,
+0x6d, 0x70, 0x75, 0x72, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4b, 0x75, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x0, 0x41, 0x73,
+0x69, 0x61, 0x2f, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x53, 0x69, 0x6e, 0x67, 0x61,
+0x70, 0x6f, 0x72, 0x65, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x32, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63,
+0x61, 0x2f, 0x47, 0x61, 0x62, 0x6f, 0x72, 0x6f, 0x6e, 0x65, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x75,
+0x6a, 0x75, 0x6d, 0x62, 0x75, 0x72, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x75, 0x62, 0x75, 0x6d,
+0x62, 0x61, 0x73, 0x68, 0x69, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x62, 0x61, 0x62, 0x61, 0x6e, 0x65,
+0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x73, 0x65, 0x72, 0x75, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63,
+0x61, 0x2f, 0x42, 0x6c, 0x61, 0x6e, 0x74, 0x79, 0x72, 0x65, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61,
+0x70, 0x75, 0x74, 0x6f, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4b, 0x69, 0x67, 0x61, 0x6c, 0x69, 0x0, 0x41,
+0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4a, 0x6f, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x73, 0x62, 0x75, 0x72, 0x67, 0x0, 0x41,
+0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4a, 0x75, 0x62, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x75,
+0x73, 0x61, 0x6b, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x48, 0x61, 0x72, 0x61, 0x72, 0x65, 0x0, 0x41,
+0x73, 0x69, 0x61, 0x2f, 0x43, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x6f, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4b,
+0x68, 0x61, 0x72, 0x74, 0x6f, 0x75, 0x6d, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x44, 0x61, 0x6d, 0x61, 0x73, 0x63, 0x75,
+0x73, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x61, 0x69, 0x70, 0x65, 0x69, 0x0, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61,
+0x6c, 0x69, 0x61, 0x2f, 0x48, 0x6f, 0x62, 0x61, 0x72, 0x74, 0x20, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61,
+0x2f, 0x43, 0x75, 0x72, 0x72, 0x69, 0x65, 0x20, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x4d,
+0x61, 0x63, 0x71, 0x75, 0x61, 0x72, 0x69, 0x65, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x72, 0x61,
+0x67, 0x75, 0x61, 0x69, 0x6e, 0x61, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x39, 0x0, 0x41, 0x73, 0x69,
+0x61, 0x2f, 0x4a, 0x61, 0x79, 0x61, 0x70, 0x75, 0x72, 0x61, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x6f, 0x6b, 0x79,
+0x6f, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x50, 0x61, 0x6c, 0x61, 0x75, 0x0, 0x41, 0x73, 0x69, 0x61,
+0x2f, 0x44, 0x69, 0x6c, 0x69, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x6f, 0x6d, 0x73, 0x6b, 0x0, 0x50, 0x61, 0x63,
+0x69, 0x66, 0x69, 0x63, 0x2f, 0x54, 0x6f, 0x6e, 0x67, 0x61, 0x74, 0x61, 0x70, 0x75, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f,
+0x43, 0x68, 0x69, 0x74, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x49, 0x73, 0x74, 0x61, 0x6e, 0x62, 0x75,
+0x6c, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x54, 0x75, 0x72, 0x6b,
+0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x55, 0x6c, 0x61, 0x61, 0x6e, 0x62, 0x61, 0x61, 0x74, 0x61, 0x72, 0x20, 0x41, 0x73,
+0x69, 0x61, 0x2f, 0x43, 0x68, 0x6f, 0x69, 0x62, 0x61, 0x6c, 0x73, 0x61, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63,
+0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x2f, 0x4d, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x6f, 0x20, 0x41,
+0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x2f, 0x56, 0x65, 0x76, 0x61, 0x79,
+0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x37, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43,
+0x72, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x77, 0x73, 0x6f,
+0x6e, 0x5f, 0x43, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x46, 0x6f, 0x72, 0x74,
+0x5f, 0x4e, 0x65, 0x6c, 0x73, 0x6f, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x48, 0x65, 0x72, 0x6d,
+0x6f, 0x73, 0x69, 0x6c, 0x6c, 0x6f, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x68, 0x6f, 0x65, 0x6e,
+0x69, 0x78, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x31, 0x31, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69,
+0x63, 0x2f, 0x50, 0x61, 0x67, 0x6f, 0x5f, 0x50, 0x61, 0x67, 0x6f, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f,
+0x4e, 0x69, 0x75, 0x65, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4d, 0x69, 0x64, 0x77, 0x61, 0x79, 0x0,
+0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x39, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x47, 0x61,
+0x6d, 0x62, 0x69, 0x65, 0x72, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2b, 0x38, 0x0, 0x50, 0x61, 0x63, 0x69,
+0x66, 0x69, 0x63, 0x2f, 0x50, 0x69, 0x74, 0x63, 0x61, 0x69, 0x72, 0x6e, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54,
+0x2b, 0x32, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x6f, 0x72, 0x6f, 0x6e, 0x68, 0x61, 0x0, 0x41,
+0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x2f, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x47, 0x65, 0x6f, 0x72, 0x67, 0x69,
+0x61, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x55, 0x54, 0x43, 0x20, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x0, 0x45, 0x74,
+0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x31, 0x32, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x54, 0x61, 0x72,
+0x61, 0x77, 0x61, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4d, 0x61, 0x6a, 0x75, 0x72, 0x6f, 0x20, 0x50,
+0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4b, 0x77, 0x61, 0x6a, 0x61, 0x6c, 0x65, 0x69, 0x6e, 0x0, 0x50, 0x61, 0x63,
+0x69, 0x66, 0x69, 0x63, 0x2f, 0x4e, 0x61, 0x75, 0x72, 0x75, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x46,
+0x75, 0x6e, 0x61, 0x66, 0x75, 0x74, 0x69, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x57, 0x61, 0x6b, 0x65,
+0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x57, 0x61, 0x6c, 0x6c, 0x69, 0x73, 0x0, 0x45, 0x74, 0x63, 0x2f,
+0x47, 0x4d, 0x54, 0x2d, 0x31, 0x33, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x45, 0x6e, 0x64, 0x65, 0x72,
+0x62, 0x75, 0x72, 0x79, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x46, 0x61, 0x6b, 0x61, 0x6f, 0x66, 0x6f,
+0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x43, 0x61, 0x72, 0x61, 0x63, 0x61, 0x73, 0x0, 0x41, 0x73, 0x69,
+0x61, 0x2f, 0x56, 0x6c, 0x61, 0x64, 0x69, 0x76, 0x6f, 0x73, 0x74, 0x6f, 0x6b, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x55,
+0x73, 0x74, 0x2d, 0x4e, 0x65, 0x72, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x56, 0x6f, 0x6c, 0x67, 0x6f,
+0x67, 0x72, 0x61, 0x64, 0x0, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x61, 0x2f, 0x50, 0x65, 0x72, 0x74, 0x68,
+0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x31, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x6c,
+0x67, 0x69, 0x65, 0x72, 0x73, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x75, 0x61, 0x6e, 0x64, 0x61, 0x0,
+0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x50, 0x6f, 0x72, 0x74, 0x6f, 0x2d, 0x4e, 0x6f, 0x76, 0x6f, 0x0, 0x41, 0x66,
+0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x6f, 0x75, 0x61, 0x6c, 0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42,
+0x61, 0x6e, 0x67, 0x75, 0x69, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x64, 0x6a, 0x61, 0x6d, 0x65, 0x6e,
+0x61, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x72, 0x61, 0x7a, 0x7a, 0x61, 0x76, 0x69, 0x6c, 0x6c, 0x65,
+0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4b, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x73, 0x61, 0x0, 0x41, 0x66, 0x72,
+0x69, 0x63, 0x61, 0x2f, 0x4d, 0x61, 0x6c, 0x61, 0x62, 0x6f, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x69,
+0x62, 0x72, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x61, 0x67, 0x6f,
+0x73, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4e, 0x69, 0x61, 0x6d, 0x65, 0x79, 0x0, 0x41, 0x66, 0x72, 0x69,
+0x63, 0x61, 0x2f, 0x54, 0x75, 0x6e, 0x69, 0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x41, 0x6e, 0x64, 0x6f,
+0x72, 0x72, 0x61, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x56, 0x69, 0x65, 0x6e, 0x6e, 0x61, 0x0, 0x45, 0x75,
+0x72, 0x6f, 0x70, 0x65, 0x2f, 0x42, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x42,
+0x75, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x47, 0x69, 0x62, 0x72, 0x61,
+0x6c, 0x74, 0x61, 0x72, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x52, 0x6f, 0x6d, 0x65, 0x0, 0x45, 0x75, 0x72,
+0x6f, 0x70, 0x65, 0x2f, 0x56, 0x61, 0x64, 0x75, 0x7a, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4c, 0x75, 0x78,
+0x65, 0x6d, 0x62, 0x6f, 0x75, 0x72, 0x67, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x61, 0x6c, 0x74, 0x61,
+0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x6f, 0x6e, 0x61, 0x63, 0x6f, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70,
+0x65, 0x2f, 0x41, 0x6d, 0x73, 0x74, 0x65, 0x72, 0x64, 0x61, 0x6d, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4f,
+0x73, 0x6c, 0x6f, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x61, 0x6e, 0x5f, 0x4d, 0x61, 0x72, 0x69, 0x6e,
+0x6f, 0x0, 0x41, 0x72, 0x63, 0x74, 0x69, 0x63, 0x2f, 0x4c, 0x6f, 0x6e, 0x67, 0x79, 0x65, 0x61, 0x72, 0x62, 0x79, 0x65,
+0x6e, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x68, 0x6f, 0x6c, 0x6d, 0x0, 0x45,
+0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x5a, 0x75, 0x72, 0x69, 0x63, 0x68, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f,
+0x56, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x48, 0x6f, 0x76, 0x64, 0x0, 0x45, 0x74,
+0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x35, 0x0, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63, 0x74, 0x69, 0x63, 0x61, 0x2f, 0x4d,
+0x61, 0x77, 0x73, 0x6f, 0x6e, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x4b, 0x65, 0x72, 0x67, 0x75, 0x65, 0x6c,
+0x65, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x4f, 0x72, 0x61, 0x6c, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x41, 0x71,
+0x74, 0x61, 0x75, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x41, 0x71, 0x74, 0x6f, 0x62, 0x65, 0x20, 0x41, 0x73, 0x69, 0x61,
+0x2f, 0x41, 0x74, 0x79, 0x72, 0x61, 0x75, 0x0, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x4d, 0x61, 0x6c, 0x64, 0x69,
+0x76, 0x65, 0x73, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x44, 0x75, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x65, 0x0, 0x41, 0x73,
+0x69, 0x61, 0x2f, 0x41, 0x73, 0x68, 0x67, 0x61, 0x62, 0x61, 0x74, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x61, 0x73,
+0x68, 0x6b, 0x65, 0x6e, 0x74, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x53, 0x61, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x6e, 0x64,
+0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x48, 0x65, 0x62, 0x72, 0x6f, 0x6e, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x47, 0x61,
+0x7a, 0x61, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x2d, 0x31, 0x30, 0x0, 0x41, 0x6e, 0x74, 0x61, 0x72, 0x63,
+0x74, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x75, 0x6d, 0x6f, 0x6e, 0x74, 0x44, 0x55, 0x72, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x0,
+0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x47, 0x75, 0x61, 0x6d, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63,
+0x2f, 0x54, 0x72, 0x75, 0x6b, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x53, 0x61, 0x69, 0x70, 0x61, 0x6e,
+0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x50, 0x6f, 0x72, 0x74, 0x5f, 0x4d, 0x6f, 0x72, 0x65, 0x73, 0x62,
+0x79, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x59, 0x61, 0x6b, 0x75, 0x74, 0x73, 0x6b, 0x20, 0x41, 0x73, 0x69, 0x61, 0x2f,
+0x4b, 0x68, 0x61, 0x6e, 0x64, 0x79, 0x67, 0x61, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x57, 0x68, 0x69,
+0x74, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x44, 0x61, 0x77, 0x73,
+0x6f, 0x6e, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x61, 0x67, 0x65,
0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x75, 0x65, 0x6e, 0x6f, 0x73, 0x5f, 0x41, 0x69, 0x72, 0x65,
0x73, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x41, 0x73, 0x74, 0x72, 0x61, 0x6b, 0x68, 0x61, 0x6e, 0x0, 0x41,
0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x48, 0x61, 0x6c, 0x69, 0x66, 0x61, 0x78, 0x0, 0x41, 0x75, 0x73, 0x74, 0x72,
@@ -1229,30 +1232,31 @@ static const char ianaIdData[] = {
0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x6f, 0x73, 0x63, 0x6f, 0x77, 0x0, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69,
0x61, 0x2f, 0x48, 0x6f, 0x62, 0x61, 0x72, 0x74, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x55, 0x6c, 0x61, 0x61, 0x6e, 0x62,
0x61, 0x61, 0x74, 0x61, 0x72, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e,
-0x61, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f,
+0x61, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x0, 0x45, 0x74, 0x63, 0x2f, 0x55, 0x54, 0x43, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f,
0x56, 0x6c, 0x61, 0x64, 0x69, 0x76, 0x6f, 0x73, 0x74, 0x6f, 0x6b, 0x0, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x42,
0x65, 0x72, 0x6c, 0x69, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x54, 0x61, 0x73, 0x68, 0x6b, 0x65, 0x6e, 0x74, 0x0,
0x41, 0x73, 0x69, 0x61, 0x2f, 0x48, 0x65, 0x62, 0x72, 0x6f, 0x6e, 0x0, 0x41, 0x73, 0x69, 0x61, 0x2f, 0x59, 0x61, 0x6b,
-0x75, 0x74, 0x73, 0x6b, 0x0, 0x55, 0x54, 0x43, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x31, 0x34, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2d, 0x31, 0x33, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2d, 0x31, 0x31, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x31, 0x30, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2d, 0x30, 0x39, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x38, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2d, 0x30, 0x37, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x36, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2d, 0x30, 0x35, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x34, 0x3a, 0x33, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2d, 0x30, 0x34, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x33, 0x3a, 0x33, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2d, 0x30, 0x33, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x32, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2d, 0x30, 0x31, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x31, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x33, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x30, 0x33, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x34, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x30, 0x34, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x35, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x30, 0x35, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x35, 0x3a, 0x34, 0x35, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x30, 0x36, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x36, 0x3a, 0x33, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x30, 0x37, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x38, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x30, 0x38, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x39, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x30, 0x39, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x31, 0x30, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x31, 0x31, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x31, 0x32, 0x3a, 0x30, 0x30, 0x0, 0x55,
-0x54, 0x43, 0x2b, 0x31, 0x33, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x31, 0x34, 0x3a, 0x30, 0x30, 0x0
+0x75, 0x74, 0x73, 0x6b, 0x0, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x57, 0x68, 0x69, 0x74, 0x65, 0x68, 0x6f,
+0x72, 0x73, 0x65, 0x0, 0x55, 0x54, 0x43, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x31, 0x34, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2d, 0x31, 0x33, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2d, 0x31, 0x31, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x31, 0x30, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2d, 0x30, 0x39, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x38, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2d, 0x30, 0x37, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x36, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2d, 0x30, 0x35, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x34, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2d, 0x30, 0x34, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x33, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2d, 0x30, 0x33, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x32, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2d, 0x30, 0x31, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2d, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x31, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x33, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x30, 0x33, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x34, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x30, 0x34, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x35, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x30, 0x35, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x35, 0x3a, 0x34, 0x35, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x30, 0x36, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x36, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x30, 0x37, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x38, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x30, 0x38, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x30, 0x39, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x30, 0x39, 0x3a, 0x33, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x31, 0x30, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x31, 0x31, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x31, 0x32, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54,
+0x43, 0x2b, 0x31, 0x33, 0x3a, 0x30, 0x30, 0x0, 0x55, 0x54, 0x43, 0x2b, 0x31, 0x34, 0x3a, 0x30, 0x30, 0x0
};
// GENERATED PART ENDS HERE
diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp
index 938f8d119a..65a28c749f 100644
--- a/src/corelib/time/qtimezoneprivate_tz.cpp
+++ b/src/corelib/time/qtimezoneprivate_tz.cpp
@@ -351,6 +351,11 @@ static QByteArray parseTzPosixRule(QDataStream &ds)
static QDate calculateDowDate(int year, int month, int dayOfWeek, int week)
{
+ if (dayOfWeek == 0) // Sunday; we represent it as 7, POSIX uses 0
+ dayOfWeek = 7;
+ else if (dayOfWeek & ~7 || month < 1 || month > 12 || week < 1 || week > 5)
+ return QDate();
+
QDate date(year, month, 1);
int startDow = date.dayOfWeek();
if (startDow <= dayOfWeek)
@@ -365,28 +370,34 @@ static QDate calculateDowDate(int year, int month, int dayOfWeek, int week)
static QDate calculatePosixDate(const QByteArray &dateRule, int year)
{
+ bool ok;
// Can start with M, J, or a digit
if (dateRule.at(0) == 'M') {
// nth week in month format "Mmonth.week.dow"
QList<QByteArray> dateParts = dateRule.split('.');
- int month = dateParts.at(0).mid(1).toInt();
- int week = dateParts.at(1).toInt();
- int dow = dateParts.at(2).toInt();
- if (dow == 0)
- ++dow;
- return calculateDowDate(year, month, dow, week);
+ if (dateParts.count() > 2) {
+ int month = dateParts.at(0).mid(1).toInt(&ok);
+ int week = ok ? dateParts.at(1).toInt(&ok) : 0;
+ int dow = ok ? dateParts.at(2).toInt(&ok) : 0;
+ if (ok)
+ return calculateDowDate(year, month, dow, week);
+ }
} else if (dateRule.at(0) == 'J') {
// Day of Year ignores Feb 29
- int doy = dateRule.mid(1).toInt();
- QDate date = QDate(year, 1, 1).addDays(doy - 1);
- if (QDate::isLeapYear(date.year()))
- date = date.addDays(-1);
- return date;
+ int doy = dateRule.mid(1).toInt(&ok);
+ if (ok && doy > 0 && doy < 366) {
+ QDate date = QDate(year, 1, 1).addDays(doy - 1);
+ if (QDate::isLeapYear(date.year()) && date.month() > 2)
+ date = date.addDays(-1);
+ return date;
+ }
} else {
// Day of Year includes Feb 29
- int doy = dateRule.toInt();
- return QDate(year, 1, 1).addDays(doy - 1);
+ int doy = dateRule.toInt(&ok);
+ if (ok && doy > 0 && doy <= 366)
+ return QDate(year, 1, 1).addDays(doy - 1);
}
+ return QDate();
}
// returns the time in seconds, INT_MIN if we failed to parse
@@ -576,7 +587,8 @@ static QList<QTimeZonePrivate::Data> calculatePosixTransitions(const QByteArray
result << data;
return result;
}
-
+ if (parts.count() < 3 || parts.at(1).isEmpty() || parts.at(2).isEmpty())
+ return result; // Malformed.
// Get the std to dst transtion details
QList<QByteArray> dstParts = parts.at(1).split('/');
@@ -596,6 +608,9 @@ static QList<QTimeZonePrivate::Data> calculatePosixTransitions(const QByteArray
else
stdTime = QTime(2, 0, 0);
+ if (dstDateRule.isEmpty() || stdDateRule.isEmpty() || !dstTime.isValid() || !stdTime.isValid())
+ return result; // Malformed.
+
// Limit year to the range QDateTime can represent:
const int minYear = int(QDateTime::YearRange::First);
const int maxYear = int(QDateTime::YearRange::Last);
@@ -867,13 +882,19 @@ void QTzTimeZonePrivate::init(const QByteArray &ianaId)
cached_data = std::move(entry);
m_id = ianaId;
// Avoid empty ID, if we have an abbreviation to use instead
- if (m_id.isEmpty()) { // We've read /etc/localtime's contents
- for (const auto &abbr : cached_data.m_abbreviations) {
- if (!abbr.isEmpty()) {
- m_id = abbr;
- break;
- }
- }
+ if (m_id.isEmpty()) {
+ // This can only happen for the system zone, when we've read the
+ // contents of /etc/localtime because it wasn't a symlink.
+#if QT_CONFIG(icu)
+ // Use ICU's system zone, if only to avoid using the abbreviation as ID
+ // (ICU might mis-recognize it) in displayName().
+ m_icu = new QIcuTimeZonePrivate();
+ // Use its ID, as an alternate source of data:
+ m_id = m_icu->id();
+ if (!m_id.isEmpty())
+ return;
+#endif
+ m_id = abbreviation(QDateTime::currentMSecsSinceEpoch()).toUtf8();
}
}
@@ -1163,8 +1184,11 @@ public:
*/
const StatIdent local = identify("/etc/localtime");
const StatIdent tz = identify("/etc/TZ");
- if (!m_name.isEmpty() && m_last.isValid() && (m_last == local || m_last == tz))
+ const StatIdent timezone = identify("/etc/timezone");
+ if (!m_name.isEmpty() && m_last.isValid()
+ && (m_last == local || m_last == tz || m_last == timezone)) {
return m_name;
+ }
m_name = etcLocalTime();
if (!m_name.isEmpty()) {
@@ -1172,12 +1196,19 @@ public:
return m_name;
}
- m_name = etcTZ();
- m_last = m_name.isEmpty() ? StatIdent() : tz;
+ // Some systems (e.g. uClibc) have a default value for $TZ in /etc/TZ:
+ m_name = etcContent(QStringLiteral("/etc/TZ"));
+ if (!m_name.isEmpty()) {
+ m_last = tz;
+ return m_name;
+ }
+
+ // Gentoo still (2020, QTBUG-87326) uses this:
+ m_name = etcContent(QStringLiteral("/etc/timezone"));
+ m_last = m_name.isEmpty() ? StatIdent() : timezone;
return m_name;
}
-
private:
QByteArray m_name;
struct StatIdent
@@ -1218,10 +1249,8 @@ private:
return QByteArray();
}
- static QByteArray etcTZ()
+ static QByteArray etcContent(const QString &path)
{
- // Some systems (e.g. uClibc) have a default value for $TZ in /etc/TZ:
- const QString path = QStringLiteral("/etc/TZ");
QFile zone(path);
if (zone.open(QIODevice::ReadOnly))
return zone.readAll().trimmed();
diff --git a/src/corelib/tools/qarraydata.cpp b/src/corelib/tools/qarraydata.cpp
index 8ca315024d..3297b51cfe 100644
--- a/src/corelib/tools/qarraydata.cpp
+++ b/src/corelib/tools/qarraydata.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2020 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2016 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@@ -184,6 +184,15 @@ static QArrayData *allocateData(qsizetype allocSize)
return header;
}
+
+namespace {
+// QArrayData with strictest alignment requirements supported by malloc()
+struct alignas(std::max_align_t) AlignedQArrayData : QArrayData
+{
+};
+}
+
+
void *QArrayData::allocate(QArrayData **dptr, qsizetype objectSize, qsizetype alignment,
qsizetype capacity, QArrayData::AllocationOption option) noexcept
{
@@ -197,13 +206,13 @@ void *QArrayData::allocate(QArrayData **dptr, qsizetype objectSize, qsizetype al
return nullptr;
}
- qsizetype headerSize = sizeof(QArrayData);
- const qsizetype headerAlignment = alignof(QArrayData);
+ qsizetype headerSize = sizeof(AlignedQArrayData);
+ const qsizetype headerAlignment = alignof(AlignedQArrayData);
if (alignment > headerAlignment) {
- // Allocate extra (alignment - Q_ALIGNOF(QArrayData)) padding bytes so we
- // can properly align the data array. This assumes malloc is able to
- // provide appropriate alignment for the header -- as it should!
+ // Allocate extra (alignment - Q_ALIGNOF(AlignedQArrayData)) padding
+ // bytes so we can properly align the data array. This assumes malloc is
+ // able to provide appropriate alignment for the header -- as it should!
headerSize += alignment - headerAlignment;
}
Q_ASSERT(headerSize > 0);
@@ -233,7 +242,7 @@ QArrayData::reallocateUnaligned(QArrayData *data, void *dataPointer,
{
Q_ASSERT(!data || !data->isShared());
- const qsizetype headerSize = sizeof(QArrayData);
+ const qsizetype headerSize = sizeof(AlignedQArrayData);
qsizetype allocSize = calculateBlockSize(capacity, objectSize, headerSize, option);
if (Q_UNLIKELY(allocSize < 0))
return qMakePair<QArrayData *, void *>(nullptr, nullptr);
diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h
index 0c7703c588..05f1b7f2ae 100644
--- a/src/corelib/tools/qarraydataops.h
+++ b/src/corelib/tools/qarraydataops.h
@@ -150,8 +150,7 @@ public:
if (where < this->size)
::memmove(static_cast<void *>(insertionPoint + n), static_cast<void *>(insertionPoint), (this->size - where) * sizeof(T));
} else {
- if (where > 0)
- ::memmove(static_cast<void *>(this->ptr - n), static_cast<const void *>(this->ptr), where * sizeof(T));
+ Q_ASSERT(where == 0);
this->ptr -= n;
insertionPoint -= n;
}
@@ -162,10 +161,11 @@ public:
void insert(qsizetype i, const T *data, qsizetype n)
{
typename Data::GrowthPosition pos = Data::GrowsAtEnd;
- if (this->size != 0 && i <= (this->size >> 1))
+ if (this->size != 0 && i == 0)
pos = Data::GrowsAtBeginning;
+
DataPointer oldData;
- this->detachAndGrow(pos, n, &oldData);
+ this->detachAndGrow(pos, n, &data, &oldData);
Q_ASSERT((pos == Data::GrowsAtBeginning && this->freeSpaceAtBegin() >= n) ||
(pos == Data::GrowsAtEnd && this->freeSpaceAtEnd() >= n));
@@ -178,9 +178,10 @@ public:
T copy(t);
typename Data::GrowthPosition pos = Data::GrowsAtEnd;
- if (this->size != 0 && i <= (this->size >> 1))
+ if (this->size != 0 && i == 0)
pos = Data::GrowsAtBeginning;
- this->detachAndGrow(pos, n);
+
+ this->detachAndGrow(pos, n, nullptr, nullptr);
Q_ASSERT((pos == Data::GrowsAtBeginning && this->freeSpaceAtBegin() >= n) ||
(pos == Data::GrowsAtEnd && this->freeSpaceAtEnd() >= n));
@@ -208,12 +209,10 @@ public:
}
T tmp(std::forward<Args>(args)...);
typename QArrayData::GrowthPosition pos = QArrayData::GrowsAtEnd;
- if (this->size != 0 && i <= (this->size >> 1))
+ if (this->size != 0 && i == 0)
pos = QArrayData::GrowsAtBeginning;
- if (detach ||
- (pos == QArrayData::GrowsAtBeginning && !this->freeSpaceAtBegin()) ||
- (pos == QArrayData::GrowsAtEnd && !this->freeSpaceAtEnd()))
- this->reallocateAndGrow(pos, 1);
+
+ this->detachAndGrow(pos, 1, nullptr, nullptr);
T *where = createHole(pos, i, 1);
new (where) T(std::move(tmp));
@@ -231,10 +230,12 @@ public:
// are invalidated. However, erasing from the beginning effectively
// means that all iterators are invalidated. We can use this freedom to
// erase by moving towards the end.
- if (b == this->begin())
+ if (b == this->begin() && e != this->end()) {
this->ptr = e;
- else if (e != this->end())
- ::memmove(static_cast<void *>(b), static_cast<void *>(e), (static_cast<T *>(this->end()) - e) * sizeof(T));
+ } else if (e != this->end()) {
+ ::memmove(static_cast<void *>(b), static_cast<void *>(e),
+ (static_cast<T *>(this->end()) - e) * sizeof(T));
+ }
this->size -= n;
}
@@ -394,24 +395,18 @@ public:
struct Inserter
{
QArrayDataPointer<T> *data;
- qsizetype increment = 1;
T *begin;
qsizetype size;
qsizetype sourceCopyConstruct = 0, nSource = 0, move = 0, sourceCopyAssign = 0;
T *end = nullptr, *last = nullptr, *where = nullptr;
- Inserter(QArrayDataPointer<T> *d, QArrayData::GrowthPosition pos)
- : data(d), increment(pos == QArrayData::GrowsAtBeginning ? -1 : 1)
+ Inserter(QArrayDataPointer<T> *d) : data(d)
{
begin = d->ptr;
size = d->size;
- if (increment < 0)
- begin += size - 1;
}
~Inserter() {
- if (increment < 0)
- begin -= size - 1;
data->ptr = begin;
data->size = size;
}
@@ -419,34 +414,18 @@ public:
void setup(qsizetype pos, qsizetype n)
{
-
- if (increment > 0) {
- end = begin + size;
- last = end - 1;
- where = begin + pos;
- qsizetype dist = size - pos;
- sourceCopyConstruct = 0;
- nSource = n;
- move = n - dist; // smaller 0
- sourceCopyAssign = n;
- if (n > dist) {
- sourceCopyConstruct = n - dist;
- move = 0;
- sourceCopyAssign -= sourceCopyConstruct;
- }
- } else {
- end = begin - size;
- last = end + 1;
- where = end + pos;
- sourceCopyConstruct = 0;
- nSource = -n;
- move = pos - n; // larger 0
- sourceCopyAssign = -n;
- if (n > pos) {
- sourceCopyConstruct = pos - n;
- move = 0;
- sourceCopyAssign -= sourceCopyConstruct;
- }
+ end = begin + size;
+ last = end - 1;
+ where = begin + pos;
+ qsizetype dist = size - pos;
+ sourceCopyConstruct = 0;
+ nSource = n;
+ move = n - dist; // smaller 0
+ sourceCopyAssign = n;
+ if (n > dist) {
+ sourceCopyConstruct = n - dist;
+ move = 0;
+ sourceCopyAssign -= sourceCopyConstruct;
}
}
@@ -456,12 +435,10 @@ public:
Q_UNUSED(oldSize);
setup(pos, n);
- if (increment < 0)
- source += n - 1;
// first create new elements at the end, by copying from elements
// to be inserted (if they extend past the current end of the array)
- for (qsizetype i = 0; i != sourceCopyConstruct; i += increment) {
+ for (qsizetype i = 0; i != sourceCopyConstruct; ++i) {
new (end + i) T(source[nSource - sourceCopyConstruct + i]);
++size;
}
@@ -469,7 +446,7 @@ public:
// now move construct new elements at the end from existing elements inside
// the array.
- for (qsizetype i = sourceCopyConstruct; i != nSource; i += increment) {
+ for (qsizetype i = sourceCopyConstruct; i != nSource; ++i) {
new (end + i) T(std::move(*(end + i - nSource)));
++size;
}
@@ -477,24 +454,24 @@ public:
Q_ASSERT(size == oldSize + n);
// now move assign existing elements towards the end
- for (qsizetype i = 0; i != move; i -= increment)
+ for (qsizetype i = 0; i != move; --i)
last[i] = std::move(last[i - nSource]);
// finally copy the remaining elements from source over
- for (qsizetype i = 0; i != sourceCopyAssign; i += increment)
+ for (qsizetype i = 0; i != sourceCopyAssign; ++i)
where[i] = source[i];
}
void insert(qsizetype pos, const T &t, qsizetype n)
{
- qsizetype oldSize = size;
+ const qsizetype oldSize = size;
Q_UNUSED(oldSize);
setup(pos, n);
// first create new elements at the end, by copying from elements
// to be inserted (if they extend past the current end of the array)
- for (qsizetype i = 0; i != sourceCopyConstruct; i += increment) {
+ for (qsizetype i = 0; i != sourceCopyConstruct; ++i) {
new (end + i) T(t);
++size;
}
@@ -502,7 +479,7 @@ public:
// now move construct new elements at the end from existing elements inside
// the array.
- for (qsizetype i = sourceCopyConstruct; i != nSource; i += increment) {
+ for (qsizetype i = sourceCopyConstruct; i != nSource; ++i) {
new (end + i) T(std::move(*(end + i - nSource)));
++size;
}
@@ -510,11 +487,11 @@ public:
Q_ASSERT(size == oldSize + n);
// now move assign existing elements towards the end
- for (qsizetype i = 0; i != move; i -= increment)
+ for (qsizetype i = 0; i != move; --i)
last[i] = std::move(last[i - nSource]);
// finally copy the remaining elements from source over
- for (qsizetype i = 0; i != sourceCopyAssign; i += increment)
+ for (qsizetype i = 0; i != sourceCopyAssign; ++i)
where[i] = t;
}
@@ -523,18 +500,18 @@ public:
setup(pos, 1);
if (sourceCopyConstruct) {
- Q_ASSERT(sourceCopyConstruct == increment);
+ Q_ASSERT(sourceCopyConstruct == 1);
new (end) T(std::move(t));
++size;
} else {
// create a new element at the end by move constructing one existing element
// inside the array.
- new (end) T(std::move(*(end - increment)));
+ new (end) T(std::move(*(end - 1)));
++size;
// now move assign existing elements towards the end
- for (qsizetype i = 0; i != move; i -= increment)
- last[i] = std::move(last[i - increment]);
+ for (qsizetype i = 0; i != move; --i)
+ last[i] = std::move(last[i - 1]);
// and move the new item into place
*where = std::move(t);
@@ -544,29 +521,50 @@ public:
void insert(qsizetype i, const T *data, qsizetype n)
{
- typename Data::GrowthPosition pos = Data::GrowsAtEnd;
- if (this->size != 0 && i <= (this->size >> 1))
- pos = Data::GrowsAtBeginning;
+ const bool growsAtBegin = this->size != 0 && i == 0;
+ const auto pos = growsAtBegin ? Data::GrowsAtBeginning : Data::GrowsAtEnd;
+
DataPointer oldData;
- this->detachAndGrow(pos, n, &oldData);
+ this->detachAndGrow(pos, n, &data, &oldData);
Q_ASSERT((pos == Data::GrowsAtBeginning && this->freeSpaceAtBegin() >= n) ||
(pos == Data::GrowsAtEnd && this->freeSpaceAtEnd() >= n));
- Inserter(this, pos).insert(i, data, n);
+ if (growsAtBegin) {
+ // copy construct items in reverse order at the begin
+ Q_ASSERT(this->freeSpaceAtBegin() >= n);
+ while (n) {
+ --n;
+ new (this->begin() - 1) T(data[n]);
+ --this->ptr;
+ ++this->size;
+ }
+ } else {
+ Inserter(this).insert(i, data, n);
+ }
}
void insert(qsizetype i, qsizetype n, parameter_type t)
{
T copy(t);
- typename Data::GrowthPosition pos = Data::GrowsAtEnd;
- if (this->size != 0 && i <= (this->size >> 1))
- pos = Data::GrowsAtBeginning;
- this->detachAndGrow(pos, n);
+ const bool growsAtBegin = this->size != 0 && i == 0;
+ const auto pos = growsAtBegin ? Data::GrowsAtBeginning : Data::GrowsAtEnd;
+
+ this->detachAndGrow(pos, n, nullptr, nullptr);
Q_ASSERT((pos == Data::GrowsAtBeginning && this->freeSpaceAtBegin() >= n) ||
(pos == Data::GrowsAtEnd && this->freeSpaceAtEnd() >= n));
- Inserter(this, pos).insert(i, copy, n);
+ if (growsAtBegin) {
+ // copy construct items in reverse order at the begin
+ Q_ASSERT(this->freeSpaceAtBegin() >= n);
+ while (n--) {
+ new (this->begin() - 1) T(copy);
+ --this->ptr;
+ ++this->size;
+ }
+ } else {
+ Inserter(this).insert(i, copy, n);
+ }
}
template<typename... Args>
@@ -587,15 +585,19 @@ public:
}
}
T tmp(std::forward<Args>(args)...);
- typename QArrayData::GrowthPosition pos = QArrayData::GrowsAtEnd;
- if (this->size != 0 && i <= (this->size >> 1))
- pos = QArrayData::GrowsAtBeginning;
- if (detach ||
- (pos == QArrayData::GrowsAtBeginning && !this->freeSpaceAtBegin()) ||
- (pos == QArrayData::GrowsAtEnd && !this->freeSpaceAtEnd()))
- this->reallocateAndGrow(pos, 1);
+ const bool growsAtBegin = this->size != 0 && i == 0;
+ const auto pos = growsAtBegin ? Data::GrowsAtBeginning : Data::GrowsAtEnd;
+
+ this->detachAndGrow(pos, 1, nullptr, nullptr);
- Inserter(this, pos).insertOne(i, std::move(tmp));
+ if (growsAtBegin) {
+ Q_ASSERT(this->freeSpaceAtBegin());
+ new (this->begin() - 1) T(std::move(tmp));
+ --this->ptr;
+ ++this->size;
+ } else {
+ Inserter(this).insertOne(i, std::move(tmp));
+ }
}
void erase(T *b, qsizetype n)
@@ -610,7 +612,7 @@ public:
// are invalidated. However, erasing from the beginning effectively
// means that all iterators are invalidated. We can use this freedom to
// erase by moving towards the end.
- if (b == this->begin()) {
+ if (b == this->begin() && e != this->end()) {
this->ptr = e;
} else {
const T *const end = this->end();
@@ -694,12 +696,7 @@ public:
qsizetype nInserts = 0;
qsizetype bytes;
- qsizetype increment = 1;
-
- Inserter(QArrayDataPointer<T> *d, QArrayData::GrowthPosition pos)
- : data(d), increment(pos == QArrayData::GrowsAtBeginning ? -1 : 1)
- {
- }
+ Inserter(QArrayDataPointer<T> *d) : data(d) { }
~Inserter() {
if constexpr (!std::is_nothrow_copy_constructible_v<T>) {
if (displaceFrom != displaceTo) {
@@ -707,8 +704,6 @@ public:
nInserts -= qAbs(displaceFrom - displaceTo);
}
}
- if (increment < 0)
- data->ptr -= nInserts;
data->size += nInserts;
}
@@ -716,16 +711,9 @@ public:
{
nInserts = n;
T *insertionPoint = data->ptr + pos;
- if (increment > 0) {
- displaceFrom = data->ptr + pos;
- displaceTo = displaceFrom + n;
- bytes = data->size - pos;
- } else {
- displaceFrom = data->ptr;
- displaceTo = displaceFrom - n;
- --insertionPoint;
- bytes = pos;
- }
+ displaceFrom = data->ptr + pos;
+ displaceTo = displaceFrom + n;
+ bytes = data->size - pos;
bytes *= sizeof(T);
::memmove(static_cast<void *>(displaceTo), static_cast<void *>(displaceFrom), bytes);
return insertionPoint;
@@ -735,14 +723,11 @@ public:
{
T *where = displace(pos, n);
- if (increment < 0)
- source += n - 1;
-
while (n--) {
new (where) T(*source);
- where += increment;
- source += increment;
- displaceFrom += increment;
+ ++where;
+ ++source;
+ ++displaceFrom;
}
}
@@ -752,8 +737,8 @@ public:
while (n--) {
new (where) T(t);
- where += increment;
- displaceFrom += increment;
+ ++where;
+ ++displaceFrom;
}
}
@@ -761,7 +746,7 @@ public:
{
T *where = displace(pos, 1);
new (where) T(std::move(t));
- displaceFrom += increment;
+ ++displaceFrom;
Q_ASSERT(displaceFrom == displaceTo);
}
@@ -770,29 +755,50 @@ public:
void insert(qsizetype i, const T *data, qsizetype n)
{
- typename Data::GrowthPosition pos = Data::GrowsAtEnd;
- if (this->size != 0 && i <= (this->size >> 1))
- pos = Data::GrowsAtBeginning;
+ const bool growsAtBegin = this->size != 0 && i == 0;
+ const auto pos = growsAtBegin ? Data::GrowsAtBeginning : Data::GrowsAtEnd;
+
DataPointer oldData;
- this->detachAndGrow(pos, n, &oldData);
+ this->detachAndGrow(pos, n, &data, &oldData);
Q_ASSERT((pos == Data::GrowsAtBeginning && this->freeSpaceAtBegin() >= n) ||
(pos == Data::GrowsAtEnd && this->freeSpaceAtEnd() >= n));
- Inserter(this, pos).insert(i, data, n);
+ if (growsAtBegin) {
+ // copy construct items in reverse order at the begin
+ Q_ASSERT(this->freeSpaceAtBegin() >= n);
+ while (n) {
+ --n;
+ new (this->begin() - 1) T(data[n]);
+ --this->ptr;
+ ++this->size;
+ }
+ } else {
+ Inserter(this).insert(i, data, n);
+ }
}
void insert(qsizetype i, qsizetype n, parameter_type t)
{
T copy(t);
- typename Data::GrowthPosition pos = Data::GrowsAtEnd;
- if (this->size != 0 && i <= (this->size >> 1))
- pos = Data::GrowsAtBeginning;
- this->detachAndGrow(pos, n);
+ const bool growsAtBegin = this->size != 0 && i == 0;
+ const auto pos = growsAtBegin ? Data::GrowsAtBeginning : Data::GrowsAtEnd;
+
+ this->detachAndGrow(pos, n, nullptr, nullptr);
Q_ASSERT((pos == Data::GrowsAtBeginning && this->freeSpaceAtBegin() >= n) ||
(pos == Data::GrowsAtEnd && this->freeSpaceAtEnd() >= n));
- Inserter(this, pos).insert(i, copy, n);
+ if (growsAtBegin) {
+ // copy construct items in reverse order at the begin
+ Q_ASSERT(this->freeSpaceAtBegin() >= n);
+ while (n--) {
+ new (this->begin() - 1) T(copy);
+ --this->ptr;
+ ++this->size;
+ }
+ } else {
+ Inserter(this).insert(i, copy, n);
+ }
}
template<typename... Args>
@@ -813,15 +819,18 @@ public:
}
}
T tmp(std::forward<Args>(args)...);
- typename QArrayData::GrowthPosition pos = QArrayData::GrowsAtEnd;
- if (this->size != 0 && i <= (this->size >> 1))
- pos = QArrayData::GrowsAtBeginning;
- if (detach ||
- (pos == QArrayData::GrowsAtBeginning && !this->freeSpaceAtBegin()) ||
- (pos == QArrayData::GrowsAtEnd && !this->freeSpaceAtEnd()))
- this->reallocateAndGrow(pos, 1);
-
- Inserter(this, pos).insertOne(i, std::move(tmp));
+ const bool growsAtBegin = this->size != 0 && i == 0;
+ const auto pos = growsAtBegin ? Data::GrowsAtBeginning : Data::GrowsAtEnd;
+
+ this->detachAndGrow(pos, 1, nullptr, nullptr);
+ if (growsAtBegin) {
+ Q_ASSERT(this->freeSpaceAtBegin());
+ new (this->begin() - 1) T(std::move(tmp));
+ --this->ptr;
+ ++this->size;
+ } else {
+ Inserter(this).insertOne(i, std::move(tmp));
+ }
}
void erase(T *b, qsizetype n)
@@ -839,7 +848,7 @@ public:
// erase by moving towards the end.
std::destroy(b, e);
- if (b == this->begin()) {
+ if (b == this->begin() && e != this->end()) {
this->ptr = e;
} else if (e != this->end()) {
memmove(static_cast<void *>(b), static_cast<const void *>(e), (static_cast<const T *>(this->end()) - e)*sizeof(T));
@@ -913,6 +922,26 @@ public:
++this->size;
}
}
+
+ // slightly higher level API than copyAppend() that also preallocates space
+ void growAppend(const T *b, const T *e)
+ {
+ if (b == e)
+ return;
+ Q_ASSERT(b < e);
+ const qsizetype n = e - b;
+ DataPointer old;
+
+ // points into range:
+ if (QtPrivate::q_points_into_range(b, this->begin(), this->end())) {
+ this->detachAndGrow(QArrayData::GrowsAtEnd, n, &b, &old);
+ } else {
+ this->detachAndGrow(QArrayData::GrowsAtEnd, n, nullptr, nullptr);
+ }
+ Q_ASSERT(this->freeSpaceAtEnd() >= n);
+ // b might be updated so use [b, n)
+ this->copyAppend(b, b + n);
+ }
};
} // namespace QtPrivate
diff --git a/src/corelib/tools/qarraydatapointer.h b/src/corelib/tools/qarraydatapointer.h
index f6aabeee65..af60a105fe 100644
--- a/src/corelib/tools/qarraydatapointer.h
+++ b/src/corelib/tools/qarraydatapointer.h
@@ -166,19 +166,56 @@ public:
reallocateAndGrow(QArrayData::GrowsAtEnd, 0, old);
}
- // pass in a pointer to a default constructed QADP, to keep it alive beyond the detach() call
- void detachAndGrow(QArrayData::GrowthPosition where, qsizetype n, QArrayDataPointer *old = nullptr)
+ /*! \internal
+
+ Detaches this (optionally) and grows to accommodate the free space for
+ \a n elements at the required side. The side is determined from \a pos.
+
+ \a data pointer can be provided when the caller knows that \a data
+ points into range [this->begin(), this->end()). In case it is, *data
+ would be updated so that it continues to point to the element it was
+ pointing to before the data move. if \a data does not point into range,
+ one can/should pass \c nullptr.
+
+ Similarly to \a data, \a old, pointer to a default-constructed QADP, can
+ be provided when the caller expects to e.g. copy the data from this to
+ itself:
+ \code
+ QList<T> list(5);
+ qsizetype pos = getArbitraryPos();
+ list.insert(pos, list.begin(), list.end());
+ \endcode
+
+ The default rule would be: \a data and \a old must either both be valid
+ pointers, or both equal to \c nullptr.
+ */
+ void detachAndGrow(QArrayData::GrowthPosition where, qsizetype n, const T **data,
+ QArrayDataPointer *old)
{
- if (!needsDetach()) {
- if (!n ||
- (where == QArrayData::GrowsAtBeginning && freeSpaceAtBegin() >= n) ||
- (where == QArrayData::GrowsAtEnd && freeSpaceAtEnd() >= n))
+ const bool detach = needsDetach();
+ bool readjusted = false;
+ if (!detach) {
+ if (!n || (where == QArrayData::GrowsAtBeginning && freeSpaceAtBegin() >= n)
+ || (where == QArrayData::GrowsAtEnd && freeSpaceAtEnd() >= n))
return;
+ readjusted = tryReadjustFreeSpace(where, n, data);
+ Q_ASSERT(!readjusted
+ || (where == QArrayData::GrowsAtBeginning && freeSpaceAtBegin() >= n)
+ || (where == QArrayData::GrowsAtEnd && freeSpaceAtEnd() >= n));
}
- reallocateAndGrow(where, n, old);
+
+ if (!readjusted)
+ reallocateAndGrow(where, n, old);
}
- Q_NEVER_INLINE void reallocateAndGrow(QArrayData::GrowthPosition where, qsizetype n, QArrayDataPointer *old = nullptr)
+ /*! \internal
+
+ Reallocates to accommodate the free space for \a n elements at the
+ required side. The side is determined from \a pos. Might also shrink
+ when n < 0.
+ */
+ Q_NEVER_INLINE void reallocateAndGrow(QArrayData::GrowthPosition where, qsizetype n,
+ QArrayDataPointer *old = nullptr)
{
if constexpr (QTypeInfo<T>::isRelocatable && alignof(T) <= alignof(std::max_align_t)) {
if (where == QArrayData::GrowsAtEnd && !old && !needsDetach() && n > 0) {
@@ -188,9 +225,10 @@ public:
}
QArrayDataPointer dp(allocateGrow(*this, n, where));
+ if (n > 0)
+ Q_CHECK_PTR(dp.data());
if (where == QArrayData::GrowsAtBeginning) {
Q_ASSERT(dp.ptr);
- dp.ptr += n;
Q_ASSERT(dp.freeSpaceAtBegin() >= n);
} else {
Q_ASSERT(dp.freeSpaceAtEnd() >= n);
@@ -211,6 +249,77 @@ public:
old->swap(dp);
}
+ /*! \internal
+
+ Attempts to relocate [begin(), end()) to accommodate the free space for
+ \a n elements at the required side. The side is determined from \a pos.
+
+ Returns \c true if the internal data is moved. Returns \c false when
+ there is no point in moving the data or the move is impossible. If \c
+ false is returned, it is the responsibility of the caller to figure out
+ how to accommodate the free space for \a n elements at \a pos.
+
+ This function expects that certain preconditions are met, e.g. the
+ detach is not needed, n > 0 and so on. This is intentional to reduce the
+ number of if-statements when the caller knows that preconditions would
+ be satisfied.
+
+ \sa reallocateAndGrow
+ */
+ bool tryReadjustFreeSpace(QArrayData::GrowthPosition pos, qsizetype n, const T **data = nullptr)
+ {
+ Q_ASSERT(!this->needsDetach());
+ Q_ASSERT(n > 0);
+ Q_ASSERT((pos == QArrayData::GrowsAtEnd && this->freeSpaceAtEnd() < n)
+ || (pos == QArrayData::GrowsAtBeginning && this->freeSpaceAtBegin() < n));
+
+ const qsizetype capacity = this->constAllocatedCapacity();
+ const qsizetype freeAtBegin = this->freeSpaceAtBegin();
+ const qsizetype freeAtEnd = this->freeSpaceAtEnd();
+
+ qsizetype dataStartOffset = 0;
+ // algorithm:
+ // a. GrowsAtEnd: relocate if space at begin AND size < (capacity * 2) / 3
+ // [all goes to free space at end]:
+ // new free space at begin = 0
+ //
+ // b. GrowsAtBeginning: relocate if space at end AND size < capacity / 3
+ // [balance the free space]:
+ // new free space at begin = n + (total free space - n) / 2
+ if (pos == QArrayData::GrowsAtEnd && freeAtBegin >= n
+ && ((3 * this->size) < (2 * capacity))) {
+ // dataStartOffset = 0; - done in declaration
+ } else if (pos == QArrayData::GrowsAtBeginning && freeAtEnd >= n
+ && ((3 * this->size) < capacity)) {
+ // total free space == capacity - size
+ dataStartOffset = n + qMax(0, (capacity - this->size - n) / 2);
+ } else {
+ // nothing to do otherwise
+ return false;
+ }
+
+ relocate(dataStartOffset - freeAtBegin, data);
+
+ Q_ASSERT((pos == QArrayData::GrowsAtEnd && this->freeSpaceAtEnd() >= n)
+ || (pos == QArrayData::GrowsAtBeginning && this->freeSpaceAtBegin() >= n));
+ return true;
+ }
+
+ /*! \internal
+
+ Relocates [begin(), end()) by \a offset and updates \a data if it is not
+ \c nullptr and points into [begin(), end()).
+ */
+ void relocate(qsizetype offset, const T **data = nullptr)
+ {
+ T *res = this->ptr + offset;
+ QtPrivate::q_relocate_overlap_n(this->ptr, this->size, res);
+ // first update data pointer, then this->ptr
+ if (data && QtPrivate::q_points_into_range(*data, this->begin(), this->end()))
+ *data += offset;
+ this->ptr = res;
+ }
+
// forwards from QArrayData
qsizetype allocatedCapacity() noexcept { return d ? d->allocatedCapacity() : 0; }
qsizetype constAllocatedCapacity() const noexcept { return d ? d->constAllocatedCapacity() : 0; }
@@ -262,10 +371,9 @@ public:
// Idea: * when growing backwards, adjust pointer to prepare free space at the beginning
// * when growing forward, adjust by the previous data pointer offset
-
- // TODO: what's with CapacityReserved?
- dataPtr += (position == QArrayData::GrowsAtBeginning) ? qMax(0, (header->alloc - from.size - n) / 2)
- : from.freeSpaceAtBegin();
+ dataPtr += (position == QArrayData::GrowsAtBeginning)
+ ? n + qMax(0, (header->alloc - from.size - n) / 2)
+ : from.freeSpaceAtBegin();
header->flags = from.flags();
return QArrayDataPointer(header, dataPtr);
}
diff --git a/src/corelib/tools/qcontainertools_impl.h b/src/corelib/tools/qcontainertools_impl.h
index f4dfecffce..13d74c6cb3 100644
--- a/src/corelib/tools/qcontainertools_impl.h
+++ b/src/corelib/tools/qcontainertools_impl.h
@@ -53,12 +53,26 @@
#include <cstring>
#include <iterator>
#include <memory>
+#include <algorithm>
QT_BEGIN_NAMESPACE
namespace QtPrivate
{
+/*!
+ \internal
+
+ Returns whether \a p is within a range [b, e). In simplest form equivalent to:
+ b <= p < e.
+*/
+template<typename T, typename Cmp = std::less<>>
+static constexpr bool q_points_into_range(const T *p, const T *b, const T *e,
+ Cmp less = {}) noexcept
+{
+ return !less(p, b) && less(p, e);
+}
+
template <typename T, typename N>
void q_uninitialized_relocate_n(T* first, N n, T* out)
{
@@ -75,6 +89,116 @@ void q_uninitialized_relocate_n(T* first, N n, T* out)
}
}
+template<typename iterator, typename N>
+void q_relocate_overlap_n_left_move(iterator first, N n, iterator d_first)
+{
+ // requires: [first, n) is a valid range
+ // requires: d_first + n is reachable from d_first
+ // requires: iterator is at least a random access iterator
+ // requires: value_type(iterator) has a non-throwing destructor
+
+ Q_ASSERT(n);
+ Q_ASSERT(d_first < first); // only allow moves to the "left"
+ using T = typename std::iterator_traits<iterator>::value_type;
+
+ // Watches passed iterator. Unless commit() is called, all the elements that
+ // the watched iterator passes through are deleted at the end of object
+ // lifetime. freeze() could be used to stop watching the passed iterator and
+ // remain at current place.
+ //
+ // requires: the iterator is expected to always point to an invalid object
+ // (to uninitialized memory)
+ struct Destructor
+ {
+ iterator *iter;
+ iterator end;
+ iterator intermediate;
+
+ Destructor(iterator &it) noexcept : iter(std::addressof(it)), end(it) { }
+ void commit() noexcept { iter = std::addressof(end); }
+ void freeze() noexcept
+ {
+ intermediate = *iter;
+ iter = std::addressof(intermediate);
+ }
+ ~Destructor() noexcept
+ {
+ for (const int step = *iter < end ? 1 : -1; *iter != end;) {
+ std::advance(*iter, step);
+ (*iter)->~T();
+ }
+ }
+ } destroyer(d_first);
+
+ const iterator d_last = d_first + n;
+ // Note: use pair and explicitly copy iterators from it to prevent
+ // accidental reference semantics instead of copy. equivalent to:
+ //
+ // auto [overlapBegin, overlapEnd] = std::minmax(d_last, first);
+ auto pair = std::minmax(d_last, first);
+
+ // overlap area between [d_first, d_first + n) and [first, first + n) or an
+ // uninitialized memory area between the two ranges
+ iterator overlapBegin = pair.first;
+ iterator overlapEnd = pair.second;
+
+ // move construct elements in uninitialized region
+ while (d_first != overlapBegin) {
+ // account for std::reverse_iterator, cannot use new(d_first) directly
+ new (std::addressof(*d_first)) T(std::move_if_noexcept(*first));
+ ++d_first;
+ ++first;
+ }
+
+ // cannot commit but have to stop - there might be an overlap region
+ // which we don't want to delete (because it's part of existing data)
+ destroyer.freeze();
+
+ // move assign elements in overlap region
+ while (d_first != d_last) {
+ *d_first = std::move_if_noexcept(*first);
+ ++d_first;
+ ++first;
+ }
+
+ Q_ASSERT(d_first == destroyer.end + n);
+ destroyer.commit(); // can commit here as ~T() below does not throw
+
+ while (first != overlapEnd)
+ (--first)->~T();
+}
+
+/*!
+ \internal
+
+ Relocates a range [first, n) to [d_first, n) taking care of potential memory
+ overlaps. This is a generic equivalent of memmove.
+
+ If an exception is thrown during the relocation, all the relocated elements
+ are destroyed and [first, n) may contain valid but unspecified values,
+ including moved-from values (basic exception safety).
+*/
+template<typename T, typename N>
+void q_relocate_overlap_n(T *first, N n, T *d_first)
+{
+ static_assert(std::is_nothrow_destructible_v<T>,
+ "This algorithm requires that T has a non-throwing destructor");
+
+ if (n == N(0) || first == d_first || first == nullptr || d_first == nullptr)
+ return;
+
+ if constexpr (QTypeInfo<T>::isRelocatable) {
+ std::memmove(static_cast<void *>(d_first), static_cast<const void *>(first), n * sizeof(T));
+ } else { // generic version has to be used
+ if (d_first < first) {
+ q_relocate_overlap_n_left_move(first, n, d_first);
+ } else { // first < d_first
+ auto rfirst = std::make_reverse_iterator(first + n);
+ auto rd_first = std::make_reverse_iterator(d_first + n);
+ q_relocate_overlap_n_left_move(rfirst, n, rd_first);
+ }
+ }
+}
template <typename Iterator>
using IfIsInputIterator = typename std::enable_if<
diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp
index c2fd9db879..580b94561c 100644
--- a/src/corelib/tools/qhash.cpp
+++ b/src/corelib/tools/qhash.cpp
@@ -2407,11 +2407,10 @@ size_t qHash(long double key, size_t seed) noexcept
hashes. A multi-valued hash is a hash that allows multiple values
with the same key.
- Because QMultiHash inherits QHash, all of QHash's functionality also
- applies to QMultiHash. For example, you can use isEmpty() to test
+ QMultiHash mostly mirrors QHash's API. For example, you can use isEmpty() to test
whether the hash is empty, and you can traverse a QMultiHash using
QHash's iterator classes (for example, QHashIterator). But opposed to
- QHash, it provides an insert() function will allow the insertion of
+ QHash, it provides an insert() function that allows the insertion of
multiple items with the same key. The replace() function corresponds to
QHash::insert(). It also provides convenient operator+() and
operator+=().
diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h
index f7f9178c98..fbf9b5b5f8 100644
--- a/src/corelib/tools/qhash.h
+++ b/src/corelib/tools/qhash.h
@@ -1754,6 +1754,8 @@ public:
qsizetype count(const Key &key) const noexcept
{
+ if (!d)
+ return 0;
auto it = d->find(key);
if (it.isUnused())
return 0;
@@ -1769,6 +1771,8 @@ public:
qsizetype count(const Key &key, const T &value) const noexcept
{
+ if (!d)
+ return 0;
auto it = d->find(key);
if (it.isUnused())
return 0;
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index 517ba10326..05dade69e9 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -674,9 +674,10 @@ inline void QList<T>::resize_internal(qsizetype newSize)
Q_ASSERT(newSize >= 0);
if (d->needsDetach() || newSize > capacity() - d.freeSpaceAtBegin()) {
- d.reallocateAndGrow(QArrayData::GrowsAtEnd, newSize - d.size);
- } else if (newSize < size())
+ d.detachAndGrow(QArrayData::GrowsAtEnd, newSize - d.size, nullptr, nullptr);
+ } else if (newSize < size()) {
d->truncate(newSize);
+ }
}
template <typename T>
@@ -759,12 +760,7 @@ inline T QList<T>::value(qsizetype i, parameter_type defaultValue) const
template <typename T>
inline void QList<T>::append(const_iterator i1, const_iterator i2)
{
- if (i1 == i2)
- return;
- const auto distance = std::distance(i1, i2);
- DataPointer oldData;
- d.detachAndGrow(QArrayData::GrowsAtEnd, distance, &oldData);
- d->copyAppend(i1, i2);
+ d->growAppend(i1, i2);
}
template <typename T>
@@ -776,7 +772,9 @@ inline void QList<T>::append(QList<T> &&other)
if (other.d->needsDetach() || !std::is_nothrow_move_constructible_v<T>)
return append(other);
- d.detachAndGrow(QArrayData::GrowsAtEnd, other.size());
+ // due to precondition &other != this, we can unconditionally modify 'this'
+ d.detachAndGrow(QArrayData::GrowsAtEnd, other.size(), nullptr, nullptr);
+ Q_ASSERT(d.freeSpaceAtEnd() >= other.size());
d->moveAppend(other.begin(), other.end());
}
@@ -794,8 +792,9 @@ inline typename QList<T>::iterator
QList<T>::insert(qsizetype i, qsizetype n, parameter_type t)
{
Q_ASSERT_X(size_t(i) <= size_t(d->size), "QList<T>::insert", "index out of range");
-
- d->insert(i, n, t);
+ Q_ASSERT_X(n >= 0, "QList::insert", "invalid count");
+ if (Q_LIKELY(n))
+ d->insert(i, n, t);
return d.begin() + i;
}
@@ -845,8 +844,11 @@ inline QList<T> &QList<T>::fill(parameter_type t, qsizetype newSize)
// we're detached
const T copy(t);
d->assign(d.begin(), d.begin() + qMin(size(), newSize), t);
- if (newSize > size())
+ if (newSize > size()) {
d->copyAppend(newSize - size(), copy);
+ } else if (newSize < size()) {
+ d->truncate(newSize);
+ }
}
return *this;
}
diff --git a/src/corelib/tools/qmargins.cpp b/src/corelib/tools/qmargins.cpp
index 5b3c04d11e..8a6e50ca24 100644
--- a/src/corelib/tools/qmargins.cpp
+++ b/src/corelib/tools/qmargins.cpp
@@ -508,10 +508,9 @@ QDebug operator<<(QDebug dbg, const QMargins &m)
Returns \c true if all margins are very close to 0; otherwise returns
false.
- \sa qFuzzyIsNull
+ \sa {<QtGlobal>::}{qFuzzyIsNull}
*/
-
/*!
\fn qreal QMarginsF::left() const
diff --git a/src/corelib/tools/qscopedvaluerollback.cpp b/src/corelib/tools/qscopedvaluerollback.cpp
index baca7c8229..0c1c43ac49 100644
--- a/src/corelib/tools/qscopedvaluerollback.cpp
+++ b/src/corelib/tools/qscopedvaluerollback.cpp
@@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE
The template can only be instantiated with a type that supports assignment.
- \sa QScopedPointer
+ \sa QScopedPointer, QScopeGuard
*/
/*!
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h
index 6a99602153..0cd811825c 100644
--- a/src/corelib/tools/qvarlengtharray.h
+++ b/src/corelib/tools/qvarlengtharray.h
@@ -633,8 +633,8 @@ Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthA
qsizetype offset = qsizetype(before - ptr);
if (n != 0) {
+ const T copy(t); // `t` could alias an element in [begin(), end()[
resize(s + n);
- const T copy(t);
if (!QTypeInfo<T>::isRelocatable) {
T *b = ptr + offset;
T *j = ptr + s;
diff --git a/src/dbus/doc/src/qt6-changes.qdoc b/src/dbus/doc/src/qt6-changes.qdoc
index 14cd728c19..f438a172b9 100644
--- a/src/dbus/doc/src/qt6-changes.qdoc
+++ b/src/dbus/doc/src/qt6-changes.qdoc
@@ -44,23 +44,23 @@
\section1 The QtDBus module has undergone some basic consolidation and
cleanup. There should be minimal porting effort to be able to switch to Qt6.
- \section2 QDBusMessage
+ \section2 The QDBusMessage class
The QDBusMessage::call() and QDBusMessage::asyncCall() methods with a fixed
size of arguments have been removed in Qt6.
- \section2 QDBusArgument
+ \section2 The QDBusArgument class
The QDBusArgument::operator<<() specializations for QHash, QMap and QList
have been unified into common specializations for associative containers.
- \section2 QDBusConnection
+ \section2 The QDBusConnection class
The QDBusConnection::sender() function has been removed in Qt6.
- \section2 QDBusMessage
+ \section2 The QDBusMessage class
The QDBusMessage::createErrorReply() function now takes the QString \c name
argument by const reference instead of taking by value.
- \section2 QDBusPendingReply
- QDBusPendingReply has been changed to be a varadic template class in order
+ \section2 The QDBusPendingReply class
+ QDBusPendingReply has been changed to be a variadic template class in order
to support more than 8 template parameters now. The template parameters
are the types that will be used to extract the contents of the reply's data.
*/
diff --git a/src/gui/doc/src/coordsys.qdoc b/src/gui/doc/src/coordsys.qdoc
index ed413b500f..4df7151750 100644
--- a/src/gui/doc/src/coordsys.qdoc
+++ b/src/gui/doc/src/coordsys.qdoc
@@ -119,7 +119,7 @@
\table
\header
- \li {3,1} QRectF
+ \li {2,1} QRectF
\row
\li \inlineimage qrect-diagram-zero.png
\li \inlineimage qrectf-diagram-one.png
diff --git a/src/gui/doc/src/qt6-changes.qdoc b/src/gui/doc/src/qt6-changes.qdoc
index 94073a3fb8..b835706f80 100644
--- a/src/gui/doc/src/qt6-changes.qdoc
+++ b/src/gui/doc/src/qt6-changes.qdoc
@@ -43,18 +43,18 @@
\section1 Kernel classes
- \section2 QBitmap
+ \section2 The QBitmap class
Implicit construction of a QBitmap from a QPixmap is no longer supported.
The constructor and assignment operator have been made explicit and marked as
deprecated. Use the new static factory function \l{QBitmap::}{fromPixmap} instead.
- \section2 QCursor
+ \section2 The QCursor class
Implicit construction of a QCursor from a QPixmap is no longer supported, the
constructor has been made explicit.
- \section2 QKeyCombination
+ \section2 The QKeyCombination class
QKeyCombination is a new class for storing a combination of a key with an
optional modifier. It should be used as a replacement for combining values from
@@ -70,7 +70,7 @@
\section1 Text classes
- \section2 QFontDatabase
+ \section2 The QFontDatabase class
The QFontDatabase class has now only static member functions. The constructor
has been deprecated. Instead of e.g.
@@ -85,7 +85,7 @@
const QStringList fontFamilies = QFontDatabase::families();
\endcode
- \section2 QFont
+ \section2 The QFont class
The numerical values of the QFont::Weight enumerator have been changed to
be in line with OpenType weight values. QFont::setWeight() expects an enum value
@@ -117,7 +117,7 @@
In addition, the class \l QOpenGLWidget has been moved to a new module, named
Qt OpenGL Widgets.
- \section2 QOpenGLContext
+ \section2 The QOpenGLContext class
The QOpenGLContext::versionFunctions() function is replaced by
QOpenGLVersionFunctionsFactory::get(). QOpenGLVersionFunctionsFactory is a public
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index fdb2ab0f9b..4f31414e10 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -174,7 +174,7 @@ void QPixmapIconEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mode
auto paintDevice = painter->device();
qreal dpr = paintDevice ? paintDevice->devicePixelRatio() : qApp->devicePixelRatio();
const QSize pixmapSize = rect.size() * dpr;
- QPixmap px = pixmap(pixmapSize, mode, state);
+ QPixmap px = scaledPixmap(pixmapSize, mode, state, dpr);
painter->drawPixmap(rect, px);
}
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 7ca5b13373..9a9ab873ff 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -1709,10 +1709,14 @@ void QImage::fill(uint pixel)
w, d->height, d->bytes_per_line);
return;
} else if (d->depth == 16) {
+ if (d->format == Format_RGB444)
+ pixel |= 0xf000;
qt_rectfill<quint16>(reinterpret_cast<quint16*>(d->data), pixel,
0, 0, d->width, d->height, d->bytes_per_line);
return;
} else if (d->depth == 24) {
+ if (d->format == Format_RGB666)
+ pixel |= 0xfc0000;
qt_rectfill<quint24>(reinterpret_cast<quint24*>(d->data), pixel,
0, 0, d->width, d->height, d->bytes_per_line);
return;
@@ -1781,6 +1785,8 @@ void QImage::fill(const QColor &color)
if (!d)
return;
+ QRgba64 opaque = color.rgba64();
+ opaque.setAlpha(65535);
switch (d->format) {
case QImage::Format_RGB32:
case QImage::Format_ARGB32:
@@ -1799,12 +1805,10 @@ void QImage::fill(const QColor &color)
fill(ARGB2RGBA(qPremultiply(color.rgba())));
break;
case QImage::Format_BGR30:
- case QImage::Format_A2BGR30_Premultiplied:
- fill(qConvertRgb64ToRgb30<PixelOrderBGR>(color.rgba64()));
+ fill(qConvertRgb64ToRgb30<PixelOrderBGR>(opaque));
break;
case QImage::Format_RGB30:
- case QImage::Format_A2RGB30_Premultiplied:
- fill(qConvertRgb64ToRgb30<PixelOrderRGB>(color.rgba64()));
+ fill(qConvertRgb64ToRgb30<PixelOrderRGB>(opaque));
break;
case QImage::Format_RGB16:
fill((uint) qConvertRgb32To16(color.rgba()));
@@ -1827,19 +1831,18 @@ void QImage::fill(const QColor &color)
else
fill((uint) 0);
break;
- case QImage::Format_RGBX64: {
- QRgba64 c = color.rgba64();
- c.setAlpha(65535);
- qt_rectfill<quint64>(reinterpret_cast<quint64*>(d->data), c,
+ case QImage::Format_RGBX64:
+ qt_rectfill<quint64>(reinterpret_cast<quint64*>(d->data), opaque,
0, 0, d->width, d->height, d->bytes_per_line);
break;
-
- }
case QImage::Format_RGBA64:
- case QImage::Format_RGBA64_Premultiplied:
qt_rectfill<quint64>(reinterpret_cast<quint64*>(d->data), color.rgba64(),
0, 0, d->width, d->height, d->bytes_per_line);
break;
+ case QImage::Format_RGBA64_Premultiplied:
+ qt_rectfill<quint64>(reinterpret_cast<quint64 *>(d->data), color.rgba64().premultiplied(),
+ 0, 0, d->width, d->height, d->bytes_per_line);
+ break;
default: {
QPainter p(this);
p.setCompositionMode(QPainter::CompositionMode_Source);
@@ -2467,7 +2470,7 @@ void QImage::setPixel(int x, int y, uint index_or_rgb)
((uint *)s)[x] = index_or_rgb;
return;
case Format_RGB16:
- ((quint16 *)s)[x] = qConvertRgb32To16(qUnpremultiply(index_or_rgb));
+ ((quint16 *)s)[x] = qConvertRgb32To16(index_or_rgb);
return;
case Format_RGBX8888:
((uint *)s)[x] = ARGB2RGBA(0xff000000 | index_or_rgb);
@@ -2488,6 +2491,10 @@ void QImage::setPixel(int x, int y, uint index_or_rgb)
case Format_A2RGB30_Premultiplied:
((uint *)s)[x] = qConvertArgb32ToA2rgb30<PixelOrderRGB>(index_or_rgb);
return;
+ case Format_RGBA64:
+ case Format_RGBA64_Premultiplied:
+ ((QRgba64 *)s)[x] = QRgba64::fromArgb32(index_or_rgb);
+ return;
case Format_Invalid:
case NImageFormats:
Q_ASSERT(false);
@@ -2497,7 +2504,10 @@ void QImage::setPixel(int x, int y, uint index_or_rgb)
}
const QPixelLayout *layout = &qPixelLayouts[d->format];
- layout->storeFromARGB32PM(s, &index_or_rgb, x, 1, nullptr, nullptr);
+ if (!hasAlphaChannel())
+ layout->storeFromRGB32(s, &index_or_rgb, x, 1, nullptr, nullptr);
+ else
+ layout->storeFromARGB32PM(s, &index_or_rgb, x, 1, nullptr, nullptr);
}
/*!
diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp
index 611cbb1df1..fccf67b428 100644
--- a/src/gui/image/qimagereader.cpp
+++ b/src/gui/image/qimagereader.cpp
@@ -769,7 +769,7 @@ bool QImageReader::decideFormatFromContent() const
otherwise left unchanged.
If the device is not already open, QImageReader will attempt to
- open the device in \l QIODevice::ReadOnly mode by calling
+ open the device in \l {QIODeviceBase::}{ReadOnly} mode by calling
open(). Note that this does not work for certain devices, such as
QProcess, QTcpSocket and QUdpSocket, where more logic is required
to open the device.
@@ -799,7 +799,7 @@ QIODevice *QImageReader::device() const
/*!
Sets the file name of QImageReader to \a fileName. Internally,
QImageReader will create a QFile object and open it in \l
- QIODevice::ReadOnly mode, and use this when reading images.
+ {QIODeviceBase::}{ReadOnly} mode, and use this when reading images.
If \a fileName does not include a file extension (e.g., .png or .bmp),
QImageReader will cycle through all supported extensions until it finds
diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp
index de913af320..20a86b4f8f 100644
--- a/src/gui/image/qpnghandler.cpp
+++ b/src/gui/image/qpnghandler.cpp
@@ -500,7 +500,7 @@ static void read_image_scaled(QImage *outImage, png_structp png_ptr, png_infop i
extern "C" {
static void qt_png_warning(png_structp /*png_ptr*/, png_const_charp message)
{
- qCWarning(lcImageIo, "libpng warning: %s", message);
+ qCInfo(lcImageIo, "libpng warning: %s", message);
}
}
@@ -590,7 +590,7 @@ bool QPngHandlerPrivate::readPngHeader()
png_get_iCCP(png_ptr, info_ptr, &name, &compressionType, &profileData, &profLen);
colorSpace = QColorSpace::fromIccProfile(QByteArray((const char *)profileData, profLen));
if (!colorSpace.isValid()) {
- qCWarning(lcImageIo) << "QPngHandler: Failed to parse ICC profile";
+ qCDebug(lcImageIo) << "QPngHandler: Failed to parse ICC profile";
} else {
QColorSpacePrivate *csD = QColorSpacePrivate::get(colorSpace);
if (csD->description.isEmpty())
diff --git a/src/gui/image/qxpmhandler.cpp b/src/gui/image/qxpmhandler.cpp
index 7b545614a7..8ec09f2480 100644
--- a/src/gui/image/qxpmhandler.cpp
+++ b/src/gui/image/qxpmhandler.cpp
@@ -934,7 +934,7 @@ static bool read_xpm_body(
colorMap.insert(xpmHash(QLatin1String(index.constData())), 0);
}
} else {
- QRgb c_rgb;
+ QRgb c_rgb = 0;
if (((buf.length()-1) % 3) && (buf[0] == '#')) {
buf.truncate(((buf.length()-1) / 4 * 3) + 1); // remove alpha channel left by imagemagick
}
diff --git a/src/gui/itemmodels/qfilesystemmodel.cpp b/src/gui/itemmodels/qfilesystemmodel.cpp
index 70c274b816..e0274e5fef 100644
--- a/src/gui/itemmodels/qfilesystemmodel.cpp
+++ b/src/gui/itemmodels/qfilesystemmodel.cpp
@@ -391,8 +391,11 @@ QFileSystemModelPrivate::QFileSystemNode *QFileSystemModelPrivate::node(const QS
if (absolutePath.endsWith(QLatin1Char('/')))
trailingSeparator = QLatin1String("\\");
int r = 0;
- QFileSystemModelPrivate::QFileSystemNode *rootNode = const_cast<QFileSystemModelPrivate::QFileSystemNode*>(&root);
- if (!root.children.contains(host.toLower())) {
+ auto rootNode = const_cast<QFileSystemModelPrivate::QFileSystemNode*>(&root);
+ auto it = root.children.constFind(host);
+ if (it != root.children.cend()) {
+ host = it.key(); // Normalize case for lookup in visibleLocation()
+ } else {
if (pathElements.count() == 1 && !absolutePath.endsWith(QLatin1Char('/')))
return rootNode;
QFileInfo info(host);
diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp
index 234296271b..03c7b5c152 100644
--- a/src/gui/itemmodels/qstandarditemmodel.cpp
+++ b/src/gui/itemmodels/qstandarditemmodel.cpp
@@ -968,31 +968,29 @@ void QStandardItem::clearData()
*/
QVariant QStandardItem::data(int role) const
{
- QModelRoleData result(role);
- multiData(result);
- return result.data();
+ Q_D(const QStandardItem);
+ const int r = (role == Qt::EditRole) ? Qt::DisplayRole : role;
+ for (const auto &value : d->values) {
+ if (value.role == r)
+ return value.value;
+ }
+ return QVariant();
}
-void QStandardItem::multiData(QModelRoleDataSpan roleDataSpan) const
-{
- Q_D(const QStandardItem);
+/*!
+ \since 6.0
- const auto valuesBegin = d->values.begin();
- const auto valuesEnd = d->values.end();
+ Fills the \a roleDataSpan span with the data from this item.
- for (auto &roleData : roleDataSpan) {
- const int role = (roleData.role() == Qt::EditRole) ? Qt::DisplayRole : roleData.role();
- const auto hasSameRole = [role](const QStandardItemData &data)
- {
- return data.role == role;
- };
+ The default implementation simply calls data() for each role
+ in the span.
- auto dataIt = std::find_if(valuesBegin, valuesEnd, hasSameRole);
- if (dataIt != valuesEnd)
- roleData.setData(dataIt->value);
- else
- roleData.clearData();
- }
+ \sa data()
+*/
+void QStandardItem::multiData(QModelRoleDataSpan roleDataSpan) const
+{
+ for (auto &roleData : roleDataSpan)
+ roleData.setData(data(roleData.role()));
}
/*!
@@ -2846,10 +2844,11 @@ QVariant QStandardItemModel::data(const QModelIndex &index, int role) const
*/
void QStandardItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
{
- Q_D(const QStandardItemModel);
- QStandardItem *item = d->itemFromIndex(index);
- if (item)
- item->multiData(roleDataSpan);
+ // Cannot offer a better implementation; users may be overriding
+ // data(), and thus multiData() may fall out of sync for them.
+ // The base class' implementation will simply call data() in a loop,
+ // so it's fine.
+ QAbstractItemModel::multiData(index, roleDataSpan);
}
/*!
diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp
index 0caba17ddd..751ef65c8b 100644
--- a/src/gui/kernel/qevent.cpp
+++ b/src/gui/kernel/qevent.cpp
@@ -253,6 +253,12 @@ QInputEvent::~QInputEvent()
*/
/*!
+ \fn const QList<QEventPoint> &QPointerEvent::points() const
+
+ Returns a list of points in this pointer event.
+*/
+
+/*!
\fn QPointingDevice::PointerType QPointerEvent::pointerType() const
Returns the type of point that generated the event.
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 259399e029..e452e97cd8 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -2176,7 +2176,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
processMouseEvent(e); // the original mouse event
return;
}
- if (mouseMove && !positionChanged) {
+ if (type == QEvent::MouseMove && !positionChanged) {
// On Windows, and possibly other platforms, a touchpad can send a mouse move
// that does not change position, between a press and a release. This may
// confuse applications, so we always filter out these mouse events for
diff --git a/src/gui/kernel/qoffscreensurface_platform.h b/src/gui/kernel/qoffscreensurface_platform.h
index f95b606dba..addba347b9 100644
--- a/src/gui/kernel/qoffscreensurface_platform.h
+++ b/src/gui/kernel/qoffscreensurface_platform.h
@@ -44,7 +44,7 @@
#include <QtGui/qoffscreensurface.h>
#if defined(Q_OS_ANDROID)
-QT_FORWARD_DECLARE_CLASS(ANativeWindow);
+struct ANativeWindow;
#endif
QT_BEGIN_NAMESPACE
diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp
index f9e984c9cb..0bee2968f7 100644
--- a/src/gui/kernel/qplatformwindow.cpp
+++ b/src/gui/kernel/qplatformwindow.cpp
@@ -678,16 +678,16 @@ void QPlatformWindow::invalidateSurface()
{
}
-static QSize fixInitialSize(QSize size, const QWindow *w,
- int defaultWidth, int defaultHeight)
+static QSize fixInitialSize(QSize size, const QWindow *w, int deviceIndependentDefaultWidth,
+ int deviceIndependentDefaultHeight)
{
if (size.width() == 0) {
const int minWidth = w->minimumWidth();
- size.setWidth(minWidth > 0 ? minWidth : defaultWidth);
+ size.setWidth(minWidth > 0 ? minWidth : deviceIndependentDefaultWidth);
}
if (size.height() == 0) {
const int minHeight = w->minimumHeight();
- size.setHeight(minHeight > 0 ? minHeight : defaultHeight);
+ size.setHeight(minHeight > 0 ? minHeight : deviceIndependentDefaultHeight);
}
return size;
}
@@ -700,6 +700,10 @@ static QSize fixInitialSize(QSize size, const QWindow *w,
layout new windows to optimize usage of the available desktop space.
However if the given window already has geometry which the application has
initialized, it takes priority.
+
+ \a initialGeometry has to be provided in native pixels.
+ \a defaultWidth has to be provided in device independent pixels
+ \a defaultHeight has to be provided in device independent pixels
*/
QRect QPlatformWindow::initialGeometry(const QWindow *w, const QRect &initialGeometry,
int defaultWidth, int defaultHeight,
@@ -709,9 +713,10 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w, const QRect &initialGeo
*resultingScreenReturn = w->screen();
if (!w->isTopLevel()) {
const qreal factor = QHighDpiScaling::factor(w);
- const QSize size = fixInitialSize(QHighDpi::fromNative(initialGeometry.size(), factor),
- w, defaultWidth, defaultHeight);
- return QRect(initialGeometry.topLeft(), QHighDpi::toNative(size, factor));
+ const QSize deviceIndependentSize =
+ fixInitialSize(QHighDpi::fromNative(initialGeometry.size(), factor), w,
+ defaultWidth, defaultHeight);
+ return QRect(initialGeometry.topLeft(), QHighDpi::toNative(deviceIndependentSize, factor));
}
const auto *wp = qt_window_private(const_cast<QWindow*>(w));
const bool position = wp->positionAutomatic && w->type() != Qt::Popup;
@@ -725,26 +730,28 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w, const QRect &initialGeo
if (resultingScreenReturn)
*resultingScreenReturn = screen;
// initialGeometry refers to window's screen
- QRect rect(QHighDpi::fromNativePixels(initialGeometry, w));
+ QRect deviceIndependentRect(QHighDpi::fromNativePixels(initialGeometry, w));
if (wp->resizeAutomatic)
- rect.setSize(fixInitialSize(rect.size(), w, defaultWidth, defaultHeight));
+ deviceIndependentRect.setSize(
+ fixInitialSize(deviceIndependentRect.size(), w, defaultWidth, defaultHeight));
if (position) {
- const QRect availableGeometry = screen->availableGeometry();
+ const QRect availableDeviceIndependentGeometry = screen->availableGeometry();
// Center unless the geometry ( + unknown window frame) is too large for the screen).
- if (rect.height() < (availableGeometry.height() * 8) / 9
- && rect.width() < (availableGeometry.width() * 8) / 9) {
+ if (deviceIndependentRect.height() < (availableDeviceIndependentGeometry.height() * 8) / 9
+ && deviceIndependentRect.width()
+ < (availableDeviceIndependentGeometry.width() * 8) / 9) {
const QWindow *tp = w->transientParent();
if (tp) {
// A transient window should be centered w.r.t. its transient parent.
- rect.moveCenter(tp->geometry().center());
+ deviceIndependentRect.moveCenter(tp->geometry().center());
} else {
// Center the window on the screen. (Only applicable on platforms
// which do not provide a better way.)
- rect.moveCenter(availableGeometry.center());
+ deviceIndependentRect.moveCenter(availableDeviceIndependentGeometry.center());
}
}
}
- return QHighDpi::toNativePixels(rect, screen);
+ return QHighDpi::toNativePixels(deviceIndependentRect, screen);
}
/*!
diff --git a/src/gui/math3d/qmatrix4x4.h b/src/gui/math3d/qmatrix4x4.h
index 402f27fcb5..ec4253133a 100644
--- a/src/gui/math3d/qmatrix4x4.h
+++ b/src/gui/math3d/qmatrix4x4.h
@@ -157,14 +157,14 @@ public:
QTransform toTransform() const;
QTransform toTransform(float distanceToPlane) const;
- QPoint map(const QPoint& point) const;
- QPointF map(const QPointF& point) const;
+ inline QPoint map(const QPoint& point) const;
+ inline QPointF map(const QPointF& point) const;
#ifndef QT_NO_VECTOR3D
- QVector3D map(const QVector3D& point) const;
- QVector3D mapVector(const QVector3D& vector) const;
+ inline QVector3D map(const QVector3D& point) const;
+ inline QVector3D mapVector(const QVector3D& vector) const;
#endif
#ifndef QT_NO_VECTOR4D
- QVector4D map(const QVector4D& point) const;
+ inline QVector4D map(const QVector4D& point) const;
#endif
QRect mapRect(const QRect& rect) const;
QRectF mapRect(const QRectF& rect) const;
diff --git a/src/gui/math3d/qquaternion.cpp b/src/gui/math3d/qquaternion.cpp
index 440ed3c99b..86e7d8ce62 100644
--- a/src/gui/math3d/qquaternion.cpp
+++ b/src/gui/math3d/qquaternion.cpp
@@ -527,7 +527,11 @@ void QQuaternion::getEulerAngles(float *pitch, float *yaw, float *roll) const
zw /= lengthSquared;
}
- *pitch = std::asin(-2.0f * (yz - xw));
+ const float sinp = -2.0f * (yz - xw);
+ if (std::abs(sinp) >= 1.0f)
+ *pitch = std::copysign(M_PI_2, sinp);
+ else
+ *pitch = std::asin(sinp);
if (*pitch < M_PI_2) {
if (*pitch > -M_PI_2) {
*yaw = std::atan2(2.0f * (xz + yw), 1.0f - 2.0f * (xx + yy));
diff --git a/src/gui/painting/qcolorspace.cpp b/src/gui/painting/qcolorspace.cpp
index ed25ead262..c9c32c6bb7 100644
--- a/src/gui/painting/qcolorspace.cpp
+++ b/src/gui/painting/qcolorspace.cpp
@@ -331,6 +331,7 @@ void QColorSpacePrivate::setTransferFunction()
}
trc[1] = trc[0];
trc[2] = trc[0];
+ lut.generated.storeRelease(0);
}
QColorTransform QColorSpacePrivate::transformationToColorSpace(const QColorSpacePrivate *out) const
diff --git a/src/gui/painting/qcolortransfertable_p.h b/src/gui/painting/qcolortransfertable_p.h
index fdf68b78da..2d8f41e086 100644
--- a/src/gui/painting/qcolortransfertable_p.h
+++ b/src/gui/painting/qcolortransfertable_p.h
@@ -136,7 +136,7 @@ public:
return 1.0f;
if (!m_table16.isEmpty()) {
float v = x * 65535.0f;
- uint32_t i = std::floor(resultLargerThan * (m_tableSize - 1)) + 1;
+ uint32_t i = std::floor(resultLargerThan * (m_tableSize - 1));
for ( ; i < m_tableSize; ++i) {
if (m_table16[i] > v)
break;
@@ -145,14 +145,14 @@ public:
return 1.0f;
float y1 = m_table16[i - 1];
float y2 = m_table16[i];
- Q_ASSERT(x >= y1 && x < y2);
+ Q_ASSERT(v >= y1 && v <= y2);
float fr = (v - y1) / (y2 - y1);
return (i + fr) * (1.0f / (m_tableSize - 1));
}
if (!m_table8.isEmpty()) {
float v = x * 255.0f;
- uint32_t i = std::floor(resultLargerThan * (m_tableSize - 1)) + 1;
+ uint32_t i = std::floor(resultLargerThan * (m_tableSize - 1));
for ( ; i < m_tableSize; ++i) {
if (m_table8[i] > v)
break;
@@ -161,7 +161,7 @@ public:
return 1.0f;
float y1 = m_table8[i - 1];
float y2 = m_table8[i];
- Q_ASSERT(x >= y1 && x < y2);
+ Q_ASSERT(v >= y1 && v <= y2);
float fr = (v - y1) / (y2 - y1);
return (i + fr) * (1.0f / (m_tableSize - 1));
}
diff --git a/src/gui/painting/qcolortrc_p.h b/src/gui/painting/qcolortrc_p.h
index 3ef9d442fc..058be3c7ce 100644
--- a/src/gui/painting/qcolortrc_p.h
+++ b/src/gui/painting/qcolortrc_p.h
@@ -114,7 +114,7 @@ public:
if (x >= 0.0f && x <= 1.0f)
return applyInverse(x);
if (m_type == Type::Function)
- return std::copysign(applyInverse(x), x);
+ return std::copysign(applyInverse(std::abs(x)), x);
if (m_type == Type::Table)
return x < 0.0f ? 0.0f : 1.0f;
return x;
diff --git a/src/gui/painting/qcosmeticstroker.cpp b/src/gui/painting/qcosmeticstroker.cpp
index 2b7ad91ec5..5b00362c66 100644
--- a/src/gui/painting/qcosmeticstroker.cpp
+++ b/src/gui/painting/qcosmeticstroker.cpp
@@ -377,14 +377,14 @@ bool QCosmeticStroker::clipLine(qreal &x1, qreal &y1, qreal &x2, qreal &y2)
void QCosmeticStroker::drawLine(const QPointF &p1, const QPointF &p2)
{
- if (p1 == p2) {
+ QPointF start = p1 * state->matrix;
+ QPointF end = p2 * state->matrix;
+
+ if (start == end) {
drawPoints(&p1, 1);
return;
}
- QPointF start = p1 * state->matrix;
- QPointF end = p2 * state->matrix;
-
patternOffset = state->lastPen.dashOffset()*64;
lastPixel.x = INT_MIN;
lastPixel.y = INT_MIN;
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index ee0e17d917..3cff7386e1 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -2407,6 +2407,7 @@ static inline SourceFetchProc64 getSourceFetch64(TextureBlendType blendType, QIm
#define FIXPT_BITS 8
#define FIXPT_SIZE (1<<FIXPT_BITS)
+#define FIXPT_MAX (INT_MAX >> (FIXPT_BITS + 1))
static uint qt_gradient_pixel_fixed(const QGradientData *data, int fixed_pos)
{
@@ -2503,10 +2504,12 @@ static inline const BlendType * QT_FASTCALL qt_fetch_linear_gradient_template(
const BlendType *end = buffer + length;
if (affine) {
if (inc > qreal(-1e-5) && inc < qreal(1e-5)) {
- GradientBase::memfill(buffer, GradientBase::fetchSingle(data->gradient, int(t * FIXPT_SIZE)), length);
+ if (std::abs(t) < FIXPT_MAX)
+ GradientBase::memfill(buffer, GradientBase::fetchSingle(data->gradient, int(t * FIXPT_SIZE)), length);
+ else
+ GradientBase::memfill(buffer, GradientBase::fetchSingle(data->gradient, t / GRADIENT_STOPTABLE_SIZE), length);
} else {
- if (t+inc*length < qreal(INT_MAX >> (FIXPT_BITS + 1)) &&
- t+inc*length > qreal(INT_MIN >> (FIXPT_BITS + 1))) {
+ if (std::abs(t) < FIXPT_MAX && std::abs(inc) < FIXPT_MAX && std::abs(t + inc * length) < FIXPT_MAX) {
// we can use fixed point math
int t_fixed = int(t * FIXPT_SIZE);
int inc_fixed = int(inc * FIXPT_SIZE);
diff --git a/src/gui/painting/qicc.cpp b/src/gui/painting/qicc.cpp
index 5e30ace549..09ac40b50e 100644
--- a/src/gui/painting/qicc.cpp
+++ b/src/gui/painting/qicc.cpp
@@ -52,7 +52,7 @@
#include <array>
QT_BEGIN_NAMESPACE
-Q_LOGGING_CATEGORY(lcIcc, "qt.gui.icc")
+Q_LOGGING_CATEGORY(lcIcc, "qt.gui.icc", QtWarningMsg)
struct ICCProfileHeader
{
@@ -165,7 +165,7 @@ struct XYZTagData : GenericTagData {
struct CurvTagData : GenericTagData {
quint32_be valueCount;
- quint16_be value[1];
+ // followed by curv values: quint16_be[]
};
struct ParaTagData : GenericTagData {
@@ -237,18 +237,20 @@ static bool isValidIccProfile(const ICCProfileHeader &header)
}
if (header.profileClass != uint(ProfileClass::Input)
- && header.profileClass != uint(ProfileClass::Display)) {
- qCWarning(lcIcc, "Unsupported ICC profile class %x", quint32(header.profileClass));
+ && header.profileClass != uint(ProfileClass::Display)
+ && (header.profileClass != uint(ProfileClass::Output)
+ || header.inputColorSpace != uint(ColorSpaceType::Gray))) {
+ qCInfo(lcIcc, "Unsupported ICC profile class 0x%x", quint32(header.profileClass));
return false;
}
if (header.inputColorSpace != uint(ColorSpaceType::Rgb)
&& header.inputColorSpace != uint(ColorSpaceType::Gray)) {
- qCWarning(lcIcc, "Unsupported ICC input color space %x", quint32(header.inputColorSpace));
+ qCInfo(lcIcc, "Unsupported ICC input color space 0x%x", quint32(header.inputColorSpace));
return false;
}
if (header.pcs != 0x58595a20 /* 'XYZ '*/) {
// ### support PCSLAB
- qCWarning(lcIcc, "Unsupported ICC profile connection space %x", quint32(header.pcs));
+ qCInfo(lcIcc, "Unsupported ICC profile connection space 0x%x", quint32(header.pcs));
return false;
}
@@ -468,25 +470,26 @@ bool parseTRC(const QByteArray &data, const TagEntry &tagEntry, QColorTrc &gamma
const GenericTagData trcData = qFromUnaligned<GenericTagData>(data.constData()
+ tagEntry.offset);
if (trcData.type == quint32(Tag::curv)) {
+ Q_STATIC_ASSERT(sizeof(CurvTagData) == 12);
const CurvTagData curv = qFromUnaligned<CurvTagData>(data.constData() + tagEntry.offset);
if (curv.valueCount > (1 << 16))
return false;
if (tagEntry.size - 12 < 2 * curv.valueCount)
return false;
+ const auto valueOffset = tagEntry.offset + sizeof(CurvTagData);
if (curv.valueCount == 0) {
gamma.m_type = QColorTrc::Type::Function;
gamma.m_fun = QColorTransferFunction(); // Linear
} else if (curv.valueCount == 1) {
- float g = curv.value[0] * (1.0f / 256.0f);
+ const quint16 v = qFromBigEndian<quint16>(data.constData() + valueOffset);
gamma.m_type = QColorTrc::Type::Function;
- gamma.m_fun = QColorTransferFunction::fromGamma(g);
+ gamma.m_fun = QColorTransferFunction::fromGamma(v * (1.0f / 256.0f));
} else {
QList<quint16> tabl;
tabl.resize(curv.valueCount);
static_assert(sizeof(GenericTagData) == 2 * sizeof(quint32_be),
"GenericTagData has padding. The following code is a subject to UB.");
- const auto offset = tagEntry.offset + sizeof(GenericTagData) + sizeof(quint32_be);
- qFromBigEndian<quint16>(data.constData() + offset, curv.valueCount, tabl.data());
+ qFromBigEndian<quint16>(data.constData() + valueOffset, curv.valueCount, tabl.data());
QColorTransferTable table = QColorTransferTable(curv.valueCount, std::move(tabl));
QColorTransferFunction curve;
if (!table.checkValidity()) {
@@ -524,6 +527,8 @@ bool parseTRC(const QByteArray &data, const TagEntry &tagEntry, QColorTrc &gamma
return false;
std::array<quint32_be, 3> parameters =
qFromUnaligned<decltype(parameters)>(data.constData() + parametersOffset);
+ if (parameters[1] == 0)
+ return false;
float g = fromFixedS1516(parameters[0]);
float a = fromFixedS1516(parameters[1]);
float b = fromFixedS1516(parameters[2]);
@@ -537,6 +542,8 @@ bool parseTRC(const QByteArray &data, const TagEntry &tagEntry, QColorTrc &gamma
return false;
std::array<quint32_be, 4> parameters =
qFromUnaligned<decltype(parameters)>(data.constData() + parametersOffset);
+ if (parameters[1] == 0)
+ return false;
float g = fromFixedS1516(parameters[0]);
float a = fromFixedS1516(parameters[1]);
float b = fromFixedS1516(parameters[2]);
@@ -646,7 +653,7 @@ bool fromIccProfile(const QByteArray &data, QColorSpace *colorSpace)
const ICCProfileHeader header = qFromUnaligned<ICCProfileHeader>(data.constData());
if (!isValidIccProfile(header))
return false; // if failed we already printing a warning
- if (qsizetype(header.profileSize) > data.size()) {
+ if (qsizetype(header.profileSize) > data.size() || qsizetype(header.profileSize) < qsizetype(sizeof(ICCProfileHeader))) {
qCWarning(lcIcc) << "fromIccProfile: failed size sanity 2";
return false;
}
@@ -698,7 +705,7 @@ bool fromIccProfile(const QByteArray &data, QColorSpace *colorSpace)
if (!tagIndex.contains(Tag::rXYZ) || !tagIndex.contains(Tag::gXYZ) || !tagIndex.contains(Tag::bXYZ) ||
!tagIndex.contains(Tag::rTRC) || !tagIndex.contains(Tag::gTRC) || !tagIndex.contains(Tag::bTRC) ||
!tagIndex.contains(Tag::wtpt)) {
- qCWarning(lcIcc) << "fromIccProfile: Unsupported ICC profile - not three component matrix based";
+ qCInfo(lcIcc) << "fromIccProfile: Unsupported ICC profile - not three component matrix based";
return false;
}
} else {
@@ -753,12 +760,12 @@ bool fromIccProfile(const QByteArray &data, QColorSpace *colorSpace)
} else {
colorspaceDPtr->primaries = QColorSpace::Primaries::Custom;
// Calculate chromaticity from xyz (assuming y == 1.0f).
- float y = 1.0f / (1.0f + whitePoint.z - whitePoint.x);
+ float y = 1.0f / (1.0f + whitePoint.z + whitePoint.x);
float x = whitePoint.x * y;
QColorSpacePrimaries primaries(QColorSpace::Primaries::SRgb);
primaries.whitePoint = QPointF(x,y);
if (!primaries.areValid()) {
- qCWarning(lcIcc) << "fromIccProfile: Invalid ICC profile - invalid white-point";
+ qCWarning(lcIcc, "fromIccProfile: Invalid ICC profile - invalid white-point(%f, %f)", x, y);
return false;
}
colorspaceDPtr->toXyz = primaries.toXyzMatrix();
diff --git a/src/gui/painting/qmemrotate.cpp b/src/gui/painting/qmemrotate.cpp
index 5c04bcb795..b3bee9e5e7 100644
--- a/src/gui/painting/qmemrotate.cpp
+++ b/src/gui/painting/qmemrotate.cpp
@@ -44,12 +44,11 @@ QT_BEGIN_NAMESPACE
static const int tileSize = 32;
-template <class T>
-static
-inline void qt_memrotate90_tiled(const T *src, int w, int h, int sstride, T *dest, int dstride)
+template<class T>
+static inline void qt_memrotate90_tiled(const T *src, int w, int h, int isstride, T *dest, int idstride)
{
- sstride /= sizeof(T);
- dstride /= sizeof(T);
+ const qsizetype sstride = isstride / sizeof(T);
+ const qsizetype dstride = idstride / sizeof(T);
const int pack = sizeof(quint32) / sizeof(T);
const int unaligned =
@@ -103,11 +102,11 @@ inline void qt_memrotate90_tiled(const T *src, int w, int h, int sstride, T *des
}
}
-template <class T>
-static
-inline void qt_memrotate90_tiled_unpacked(const T *src, int w, int h, int sstride, T *dest,
- int dstride)
+template<class T>
+static inline void qt_memrotate90_tiled_unpacked(const T *src, int w, int h, int isstride, T *dest, int idstride)
{
+ const qsizetype sstride = isstride;
+ const qsizetype dstride = idstride;
const int numTilesX = (w + tileSize - 1) / tileSize;
const int numTilesY = (h + tileSize - 1) / tileSize;
@@ -131,12 +130,11 @@ inline void qt_memrotate90_tiled_unpacked(const T *src, int w, int h, int sstrid
}
}
-template <class T>
-static
-inline void qt_memrotate270_tiled(const T *src, int w, int h, int sstride, T *dest, int dstride)
+template<class T>
+static inline void qt_memrotate270_tiled(const T *src, int w, int h, int isstride, T *dest, int idstride)
{
- sstride /= sizeof(T);
- dstride /= sizeof(T);
+ const qsizetype sstride = isstride / sizeof(T);
+ const qsizetype dstride = idstride / sizeof(T);
const int pack = sizeof(quint32) / sizeof(T);
const int unaligned =
@@ -190,11 +188,11 @@ inline void qt_memrotate270_tiled(const T *src, int w, int h, int sstride, T *de
}
}
-template <class T>
-static
-inline void qt_memrotate270_tiled_unpacked(const T *src, int w, int h, int sstride, T *dest,
- int dstride)
+template<class T>
+static inline void qt_memrotate270_tiled_unpacked(const T *src, int w, int h, int isstride, T *dest, int idstride)
{
+ const qsizetype sstride = isstride;
+ const qsizetype dstride = idstride;
const int numTilesX = (w + tileSize - 1) / tileSize;
const int numTilesY = (h + tileSize - 1) / tileSize;
@@ -246,10 +244,12 @@ inline void qt_memrotate90_template<quint64>(const quint64 *src, int w, int h, i
qt_memrotate90_tiled_unpacked(src, w, h, sstride, dest, dstride);
}
-template <class T>
-static
-inline void qt_memrotate180_template(const T *src, int w, int h, int sstride, T *dest, int dstride)
+template<class T>
+static inline void qt_memrotate180_template(const T *src, int w, int h, int isstride, T *dest, int idstride)
{
+ const qsizetype sstride = isstride;
+ const qsizetype dstride = idstride;
+
const char *s = (const char*)(src) + (h - 1) * sstride;
for (int dy = 0; dy < h; ++dy) {
T *d = reinterpret_cast<T*>((char *)(dest) + dy * dstride);
diff --git a/src/gui/painting/qpagesize.h b/src/gui/painting/qpagesize.h
index 72d24ed938..f4e7af0f6c 100644
--- a/src/gui/painting/qpagesize.h
+++ b/src/gui/painting/qpagesize.h
@@ -224,7 +224,7 @@ public:
};
QPageSize();
- explicit QPageSize(PageSizeId pageSizeId);
+ Q_IMPLICIT QPageSize(PageSizeId pageSizeId);
explicit QPageSize(const QSize &pointSize,
const QString &name = QString(),
SizeMatchPolicy matchPolicy = FuzzyMatch);
diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp
index 7e26928e32..d752c01f6a 100644
--- a/src/gui/painting/qpaintengineex.cpp
+++ b/src/gui/painting/qpaintengineex.cpp
@@ -385,7 +385,7 @@ QPainterState *QPaintEngineEx::createState(QPainterState *orig) const
Q_GUI_EXPORT extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale); // qtransform.cpp
-void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
+void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &inPen)
{
#ifdef QT_DEBUG_DRAW
qDebug() << "QPaintEngineEx::stroke()" << pen;
@@ -403,6 +403,38 @@ void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
d->stroker.setCubicToHook(qpaintengineex_cubicTo);
}
+ QRectF clipRect;
+ QPen pen = inPen;
+ if (pen.style() > Qt::SolidLine) {
+ QRectF cpRect = path.controlPointRect();
+ const QTransform &xf = state()->matrix;
+ if (pen.isCosmetic()) {
+ clipRect = d->exDeviceRect;
+ cpRect.translate(xf.dx(), xf.dy());
+ } else {
+ clipRect = xf.inverted().mapRect(QRectF(d->exDeviceRect));
+ }
+ // Check to avoid generating unwieldy amount of dashes that will not be visible anyway
+ QRectF extentRect = cpRect & clipRect;
+ qreal extent = qMax(extentRect.width(), extentRect.height());
+ qreal patternLength = 0;
+ const QList<qreal> pattern = pen.dashPattern();
+ const int patternSize = qMin(pattern.size(), 32);
+ for (int i = 0; i < patternSize; i++)
+ patternLength += qMax(pattern.at(i), qreal(0));
+ if (pen.widthF())
+ patternLength *= pen.widthF();
+ if (qFuzzyIsNull(patternLength)) {
+ pen.setStyle(Qt::NoPen);
+ } else if (extent / patternLength > 10000) {
+ // approximate stream of tiny dashes with semi-transparent solid line
+ pen.setStyle(Qt::SolidLine);
+ QColor color(pen.color());
+ color.setAlpha(color.alpha() / 2);
+ pen.setColor(color);
+ }
+ }
+
if (!qpen_fast_equals(pen, d->strokerPen)) {
d->strokerPen = pen;
d->stroker.setJoinStyle(pen.joinStyle());
@@ -430,14 +462,8 @@ void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
return;
}
- if (pen.style() > Qt::SolidLine) {
- if (pen.isCosmetic()) {
- d->activeStroker->setClipRect(d->exDeviceRect);
- } else {
- QRectF clipRect = state()->matrix.inverted().mapRect(QRectF(d->exDeviceRect));
- d->activeStroker->setClipRect(clipRect);
- }
- }
+ if (!clipRect.isNull())
+ d->activeStroker->setClipRect(clipRect);
if (d->activeStroker == &d->stroker)
d->stroker.setForceOpen(path.hasExplicitOpen());
diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp
index 38acc66ba4..9479cadd8f 100644
--- a/src/gui/painting/qpainterpath.cpp
+++ b/src/gui/painting/qpainterpath.cpp
@@ -1369,7 +1369,7 @@ void QPainterPath::addRegion(const QRegion &region)
*/
Qt::FillRule QPainterPath::fillRule() const
{
- return isEmpty() ? Qt::OddEvenFill : d_func()->fillRule;
+ return !d_func() ? Qt::OddEvenFill : d_func()->fillRule;
}
/*!
diff --git a/src/gui/painting/qpainterpath_p.h b/src/gui/painting/qpainterpath_p.h
index 24feaf410b..c283b7f27e 100644
--- a/src/gui/painting/qpainterpath_p.h
+++ b/src/gui/painting/qpainterpath_p.h
@@ -292,7 +292,6 @@ inline void QPainterPathPrivate::clear()
elements.clear();
cStart = 0;
- fillRule = Qt::OddEvenFill;
bounds = {};
controlBounds = {};
diff --git a/src/gui/painting/qpixellayout.cpp b/src/gui/painting/qpixellayout.cpp
index 3b05e98318..c0b0b1c2e8 100644
--- a/src/gui/painting/qpixellayout.cpp
+++ b/src/gui/painting/qpixellayout.cpp
@@ -1303,7 +1303,7 @@ static void QT_FASTCALL storeRGB64FromRGB32(uchar *dest, const uint *src, int in
{
QRgba64 *d = reinterpret_cast<QRgba64 *>(dest) + index;
for (int i = 0; i < count; ++i)
- d[i] = QRgba64::fromArgb32(src[i]);
+ d[i] = QRgba64::fromArgb32(src[i] | 0xff000000);
}
static const uint *QT_FASTCALL fetchRGBA64ToARGB32PM(uint *buffer, const uchar *src, int index, int count,
@@ -1315,12 +1315,24 @@ static const uint *QT_FASTCALL fetchRGBA64ToARGB32PM(uint *buffer, const uchar *
return buffer;
}
+template<bool Mask>
static void QT_FASTCALL storeRGBA64FromARGB32PM(uchar *dest, const uint *src, int index, int count,
const QList<QRgb> *, QDitherInfo *)
{
QRgba64 *d = reinterpret_cast<QRgba64 *>(dest) + index;
- for (int i = 0; i < count; ++i)
+ for (int i = 0; i < count; ++i) {
d[i] = QRgba64::fromArgb32(src[i]).unpremultiplied();
+ if (Mask)
+ d[i].setAlpha(65535);
+ }
+}
+
+static void QT_FASTCALL storeRGBA64FromARGB32(uchar *dest, const uint *src, int index, int count,
+ const QList<QRgb> *, QDitherInfo *)
+{
+ QRgba64 *d = reinterpret_cast<QRgba64 *>(dest) + index;
+ for (int i = 0; i < count; ++i)
+ d[i] = QRgba64::fromArgb32(src[i]);
}
// Note:
@@ -1407,15 +1419,15 @@ QPixelLayout qPixelLayouts[QImage::NImageFormats] = {
{ false, false, QPixelLayout::BPP64, nullptr,
convertPassThrough, nullptr,
fetchRGB64ToRGB32, fetchPassThrough64,
- storeRGB64FromRGB32, storeRGB64FromRGB32 }, // Format_RGBX64
+ storeRGBA64FromARGB32PM<true>, storeRGB64FromRGB32 }, // Format_RGBX64
{ true, false, QPixelLayout::BPP64, nullptr,
convertARGB32ToARGB32PM, nullptr,
fetchRGBA64ToARGB32PM, fetchRGBA64ToRGBA64PM,
- storeRGBA64FromARGB32PM, storeRGB64FromRGB32 }, // Format_RGBA64
+ storeRGBA64FromARGB32PM<false>, storeRGB64FromRGB32 }, // Format_RGBA64
{ true, true, QPixelLayout::BPP64, nullptr,
convertPassThrough, nullptr,
fetchRGB64ToRGB32, fetchPassThrough64,
- storeRGB64FromRGB32, storeRGB64FromRGB32 }, // Format_RGBA64_Premultiplied
+ storeRGBA64FromARGB32, storeRGB64FromRGB32 }, // Format_RGBA64_Premultiplied
{ false, false, QPixelLayout::BPP16, nullptr,
convertGrayscale16ToRGB32, convertGrayscale16ToRGBA64,
fetchGrayscale16ToRGB32, fetchGrayscale16ToRGBA64,
diff --git a/src/gui/painting/qrasterizer.cpp b/src/gui/painting/qrasterizer.cpp
index 48d41f41f0..e851a3876a 100644
--- a/src/gui/painting/qrasterizer.cpp
+++ b/src/gui/painting/qrasterizer.cpp
@@ -864,7 +864,7 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
if (leftWidth == QScFixedFactor)
coverage[0] = rightWidth * 255;
else
- coverage[0] = (leftWidth + rightWidth) * 255;
+ coverage[0] = (rightWidth + leftWidth - QScFixedFactor) * 255;
x[0] = iLeft;
len[0] = 1;
} else {
diff --git a/src/gui/platform/unix/dbusmenu/qdbusmenuconnection.cpp b/src/gui/platform/unix/dbusmenu/qdbusmenuconnection.cpp
index 7f7c3975e8..d6eb8c255c 100644
--- a/src/gui/platform/unix/dbusmenu/qdbusmenuconnection.cpp
+++ b/src/gui/platform/unix/dbusmenu/qdbusmenuconnection.cpp
@@ -106,13 +106,7 @@ void QDBusMenuConnection::unregisterTrayIconMenu(QDBusTrayIcon *item)
bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item)
{
- bool success = connection().registerService(item->instanceId());
- if (!success) {
- qWarning() << "failed to register service" << item->instanceId();
- return false;
- }
-
- success = connection().registerObject(StatusNotifierItemPath, item);
+ bool success = connection().registerObject(StatusNotifierItemPath, item);
if (!success) {
unregisterTrayIcon(item);
qWarning() << "failed to register" << item->instanceId() << StatusNotifierItemPath;
@@ -127,21 +121,18 @@ bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item)
bool QDBusMenuConnection::registerTrayIconWithWatcher(QDBusTrayIcon *item)
{
+ Q_UNUSED(item);
QDBusMessage registerMethod = QDBusMessage::createMethodCall(
StatusNotifierWatcherService, StatusNotifierWatcherPath, StatusNotifierWatcherService,
QLatin1String("RegisterStatusNotifierItem"));
- registerMethod.setArguments(QVariantList() << item->instanceId());
+ registerMethod.setArguments(QVariantList() << m_connection.baseService());
return m_connection.callWithCallback(registerMethod, this, SIGNAL(trayIconRegistered()), SLOT(dbusError(QDBusError)));
}
-bool QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item)
+void QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item)
{
unregisterTrayIconMenu(item);
connection().unregisterObject(StatusNotifierItemPath);
- bool success = connection().unregisterService(item->instanceId());
- if (!success)
- qWarning() << "failed to unregister service" << item->instanceId();
- return success;
}
#endif // QT_NO_SYSTEMTRAYICON
diff --git a/src/gui/platform/unix/dbusmenu/qdbusmenuconnection_p.h b/src/gui/platform/unix/dbusmenu/qdbusmenuconnection_p.h
index acd34c20ac..37183b021d 100644
--- a/src/gui/platform/unix/dbusmenu/qdbusmenuconnection_p.h
+++ b/src/gui/platform/unix/dbusmenu/qdbusmenuconnection_p.h
@@ -79,7 +79,7 @@ public:
void unregisterTrayIconMenu(QDBusTrayIcon *item);
bool registerTrayIcon(QDBusTrayIcon *item);
bool registerTrayIconWithWatcher(QDBusTrayIcon *item);
- bool unregisterTrayIcon(QDBusTrayIcon *item);
+ void unregisterTrayIcon(QDBusTrayIcon *item);
#endif // QT_NO_SYSTEMTRAYICON
Q_SIGNALS:
diff --git a/src/gui/platform/unix/dbustray/qdbustrayicon.cpp b/src/gui/platform/unix/dbustray/qdbustrayicon.cpp
index 1194e4ac66..892a99d726 100644
--- a/src/gui/platform/unix/dbustray/qdbustrayicon.cpp
+++ b/src/gui/platform/unix/dbustray/qdbustrayicon.cpp
@@ -208,6 +208,14 @@ QTemporaryFile *QDBusTrayIcon::tempIcon(const QIcon &icon)
uint pid = session.interface()->servicePid(KDEWatcherService).value();
QString processName = QLockFilePrivate::processNameByPid(pid);
necessary = processName.endsWith(QLatin1String("indicator-application-service"));
+ if (!necessary) {
+ necessary = session.interface()->isServiceRegistered(
+ QStringLiteral("com.canonical.indicator.application"));
+ }
+ if (!necessary) {
+ necessary = session.interface()->isServiceRegistered(
+ QStringLiteral("org.ayatana.indicator.application"));
+ }
if (!necessary && QGuiApplication::desktopSettingsAware()) {
// Accessing to process name might be not allowed if the application
// is confined, thus we can just rely on the current desktop in use
diff --git a/src/gui/platform/unix/qxkbcommon.cpp b/src/gui/platform/unix/qxkbcommon.cpp
index f8ef8479e1..4e254044de 100644
--- a/src/gui/platform/unix/qxkbcommon.cpp
+++ b/src/gui/platform/unix/qxkbcommon.cpp
@@ -93,6 +93,7 @@ static constexpr const auto KeyTbl = qMakeArray(
Xkb2Qt<XKB_KEY_Clear, Qt::Key_Delete>,
Xkb2Qt<XKB_KEY_Pause, Qt::Key_Pause>,
Xkb2Qt<XKB_KEY_Print, Qt::Key_Print>,
+ Xkb2Qt<XKB_KEY_Sys_Req, Qt::Key_SysReq>,
Xkb2Qt<0x1005FF60, Qt::Key_SysReq>, // hardcoded Sun SysReq
Xkb2Qt<0x1007ff00, Qt::Key_SysReq>, // hardcoded X386 SysReq
@@ -551,6 +552,12 @@ static int keysymToQtKey_internal(xkb_keysym_t keysym, Qt::KeyboardModifiers mod
auto it = std::lower_bound(KeyTbl.cbegin(), KeyTbl.cend(), searchKey);
if (it != KeyTbl.end() && !(searchKey < *it))
qtKey = it->qt;
+
+ // translate Super/Hyper keys to Meta if we're using them as the MetaModifier
+ if (superAsMeta && (qtKey == Qt::Key_Super_L || qtKey == Qt::Key_Super_R))
+ qtKey = Qt::Key_Meta;
+ if (hyperAsMeta && (qtKey == Qt::Key_Hyper_L || qtKey == Qt::Key_Hyper_R))
+ qtKey = Qt::Key_Meta;
}
if (qtKey)
@@ -577,12 +584,6 @@ static int keysymToQtKey_internal(xkb_keysym_t keysym, Qt::KeyboardModifiers mod
}
}
- // translate Super/Hyper keys to Meta if we're using them as the MetaModifier
- if (superAsMeta && (qtKey == Qt::Key_Super_L || qtKey == Qt::Key_Super_R))
- qtKey = Qt::Key_Meta;
- if (hyperAsMeta && (qtKey == Qt::Key_Hyper_L || qtKey == Qt::Key_Hyper_R))
- qtKey = Qt::Key_Meta;
-
return qtKey;
}
diff --git a/src/gui/platform/windows/qwindowsnativeinterface.cpp b/src/gui/platform/windows/qwindowsnativeinterface.cpp
index cacfceeb7c..850713db2c 100644
--- a/src/gui/platform/windows/qwindowsnativeinterface.cpp
+++ b/src/gui/platform/windows/qwindowsnativeinterface.cpp
@@ -53,6 +53,7 @@ using namespace QNativeInterface::Private;
/*!
\class QNativeInterface::QWGLContext
+ \inheaderfile QOpenGLContext
\since 6.0
\brief Native interface to a WGL context on Windows.
diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp
index 5fdd3b7179..53e47b027c 100644
--- a/src/gui/rhi/qrhigles2.cpp
+++ b/src/gui/rhi/qrhigles2.cpp
@@ -1149,7 +1149,29 @@ void QRhiGles2::setShaderResources(QRhiCommandBuffer *cb, QRhiShaderResourceBind
}
}
- const bool srbChanged = gfxPsD ? (cbD->currentGraphicsSrb != srb) : (cbD->currentComputeSrb != srb);
+ bool srbChanged = gfxPsD ? (cbD->currentGraphicsSrb != srb) : (cbD->currentComputeSrb != srb);
+
+ // The Command::BindShaderResources command generated below is what will
+ // cause uniforms to be set (glUniformNxx). This needs some special
+ // handling here in this backend without real uniform buffers, because,
+ // like in other backends, we optimize out the setShaderResources when the
+ // srb that was set before is attempted to be set again on the command
+ // buffer, but that is incorrect if the same srb is now used with another
+ // pipeline. (because that could mean a glUseProgram not followed by
+ // up-to-date glUniform calls, i.e. with GL we have a strong dependency
+ // between the pipeline (== program) and the srb, unlike other APIs) This
+ // is the reason there is a second level of srb(+generation) tracking in
+ // the pipeline objects.
+ if (gfxPsD && (gfxPsD->currentSrb != srb || gfxPsD->currentSrbGeneration != srbD->generation)) {
+ srbChanged = true;
+ gfxPsD->currentSrb = srb;
+ gfxPsD->currentSrbGeneration = srbD->generation;
+ } else if (compPsD && (compPsD->currentSrb != srb || compPsD->currentSrbGeneration != srbD->generation)) {
+ srbChanged = true;
+ compPsD->currentSrb = srb;
+ compPsD->currentSrbGeneration = srbD->generation;
+ }
+
if (srbChanged || cbD->currentSrbGeneration != srbD->generation || srbD->hasDynamicOffset) {
if (gfxPsD) {
cbD->currentGraphicsSrb = srb;
@@ -4580,6 +4602,9 @@ bool QGles2GraphicsPipeline::create()
memset(uniformState, 0, sizeof(uniformState));
+ currentSrb = nullptr;
+ currentSrbGeneration = 0;
+
generation += 1;
rhiD->registerResource(this);
return true;
@@ -4653,6 +4678,9 @@ bool QGles2ComputePipeline::create()
memset(uniformState, 0, sizeof(uniformState));
+ currentSrb = nullptr;
+ currentSrbGeneration = 0;
+
generation += 1;
rhiD->registerResource(this);
return true;
diff --git a/src/gui/rhi/qrhigles2_p_p.h b/src/gui/rhi/qrhigles2_p_p.h
index a336497b63..49ab684363 100644
--- a/src/gui/rhi/qrhigles2_p_p.h
+++ b/src/gui/rhi/qrhigles2_p_p.h
@@ -290,6 +290,8 @@ struct QGles2GraphicsPipeline : public QRhiGraphicsPipeline
QGles2UniformDescriptionVector uniforms;
QGles2SamplerDescriptionVector samplers;
QGles2UniformState uniformState[QGles2UniformState::MAX_TRACKED_LOCATION + 1];
+ QRhiShaderResourceBindings *currentSrb = nullptr;
+ uint currentSrbGeneration = 0;
uint generation = 0;
friend class QRhiGles2;
};
@@ -305,6 +307,8 @@ struct QGles2ComputePipeline : public QRhiComputePipeline
QGles2UniformDescriptionVector uniforms;
QGles2SamplerDescriptionVector samplers;
QGles2UniformState uniformState[QGles2UniformState::MAX_TRACKED_LOCATION + 1];
+ QRhiShaderResourceBindings *currentSrb = nullptr;
+ uint currentSrbGeneration = 0;
uint generation = 0;
friend class QRhiGles2;
};
diff --git a/src/gui/rhi/qrhimetal.mm b/src/gui/rhi/qrhimetal.mm
index 9e0655ef06..71f6eabb4c 100644
--- a/src/gui/rhi/qrhimetal.mm
+++ b/src/gui/rhi/qrhimetal.mm
@@ -224,7 +224,11 @@ struct QMetalBufferData
bool managed;
bool slotted;
id<MTLBuffer> buf[QMTL_FRAMES_IN_FLIGHT];
- QVarLengthArray<QRhiResourceUpdateBatchPrivate::BufferOp, 16> pendingUpdates[QMTL_FRAMES_IN_FLIGHT];
+ struct BufferUpdate {
+ int offset;
+ QRhiBufferData data;
+ };
+ QVarLengthArray<BufferUpdate, 16> pendingUpdates[QMTL_FRAMES_IN_FLIGHT];
};
struct QMetalRenderBufferData
@@ -1699,8 +1703,11 @@ void QRhiMetal::enqueueResourceUpdates(QRhiCommandBuffer *cb, QRhiResourceUpdate
if (u.type == QRhiResourceUpdateBatchPrivate::BufferOp::DynamicUpdate) {
QMetalBuffer *bufD = QRHI_RES(QMetalBuffer, u.buf);
Q_ASSERT(bufD->m_type == QRhiBuffer::Dynamic);
- for (int i = 0; i < QMTL_FRAMES_IN_FLIGHT; ++i)
- bufD->d->pendingUpdates[i].append(u);
+ for (int i = 0; i < QMTL_FRAMES_IN_FLIGHT; ++i) {
+ if (u.offset == 0 && u.data.size() == bufD->m_size)
+ bufD->d->pendingUpdates[i].clear();
+ bufD->d->pendingUpdates[i].append({ u.offset, u.data });
+ }
} else if (u.type == QRhiResourceUpdateBatchPrivate::BufferOp::StaticUpload) {
// Due to the Metal API the handling of static and dynamic buffers is
// basically the same. So go through the same pendingUpdates machinery.
@@ -1708,8 +1715,7 @@ void QRhiMetal::enqueueResourceUpdates(QRhiCommandBuffer *cb, QRhiResourceUpdate
Q_ASSERT(bufD->m_type != QRhiBuffer::Dynamic);
Q_ASSERT(u.offset + u.data.size() <= bufD->m_size);
for (int i = 0, ie = bufD->d->slotted ? QMTL_FRAMES_IN_FLIGHT : 1; i != ie; ++i)
- bufD->d->pendingUpdates[i].append(
- QRhiResourceUpdateBatchPrivate::BufferOp::dynamicUpdate(u.buf, u.offset, u.data.size(), u.data.constData()));
+ bufD->d->pendingUpdates[i].append({ u.offset, u.data });
} else if (u.type == QRhiResourceUpdateBatchPrivate::BufferOp::Read) {
QMetalBuffer *bufD = QRHI_RES(QMetalBuffer, u.buf);
executeBufferHostWritesForCurrentFrame(bufD);
@@ -1869,8 +1875,7 @@ void QRhiMetal::executeBufferHostWritesForSlot(QMetalBuffer *bufD, int slot)
void *p = [bufD->d->buf[slot] contents];
int changeBegin = -1;
int changeEnd = -1;
- for (const QRhiResourceUpdateBatchPrivate::BufferOp &u : qAsConst(bufD->d->pendingUpdates[slot])) {
- Q_ASSERT(bufD == QRHI_RES(QMetalBuffer, u.buf));
+ for (const QMetalBufferData::BufferUpdate &u : qAsConst(bufD->d->pendingUpdates[slot])) {
memcpy(static_cast<char *>(p) + u.offset, u.data.constData(), size_t(u.data.size()));
if (changeBegin == -1 || u.offset < changeBegin)
changeBegin = u.offset;
@@ -2285,6 +2290,9 @@ void QMetalBuffer::endFullDynamicBufferUpdateForCurrentFrame()
static inline MTLPixelFormat toMetalTextureFormat(QRhiTexture::Format format, QRhiTexture::Flags flags, const QRhiMetalData *d)
{
+#ifndef Q_OS_MACOS
+ Q_UNUSED(d);
+#endif
const bool srgb = flags.testFlag(QRhiTexture::sRGB);
switch (format) {
case QRhiTexture::RGBA8:
@@ -3787,10 +3795,42 @@ QRhiRenderTarget *QMetalSwapChain::currentFrameRenderTarget()
return &rtWrapper;
}
+#ifdef TARGET_IPHONE_SIMULATOR
+API_AVAILABLE(ios(13.0))
+#endif
+static inline CAMetalLayer *layerForWindow(QWindow *window)
+{
+ Q_ASSERT(window);
+#ifdef Q_OS_MACOS
+ NSView *view = reinterpret_cast<NSView *>(window->winId());
+#else
+ UIView *view = reinterpret_cast<UIView *>(window->winId());
+#endif
+ Q_ASSERT(view);
+ return static_cast<CAMetalLayer *>(view.layer);
+}
+
QSize QMetalSwapChain::surfacePixelSize()
{
+#ifdef TARGET_IPHONE_SIMULATOR
+ if (@available(ios 13.0, *)) {
+#endif
+
Q_ASSERT(m_window);
- return m_window->size() * m_window->devicePixelRatio();
+ CAMetalLayer *layer = d->layer;
+ if (!layer)
+ layer = layerForWindow(m_window);
+
+ CGSize layerSize = layer.bounds.size;
+ layerSize.width *= layer.contentsScale;
+ layerSize.height *= layer.contentsScale;
+ return QSizeF::fromCGSize(layerSize).toSize();
+
+#ifdef TARGET_IPHONE_SIMULATOR
+ } else {
+ return QSize();
+ }
+#endif
}
QRhiRenderPassDescriptor *QMetalSwapChain::newCompatibleRenderPassDescriptor()
@@ -3849,13 +3889,7 @@ bool QMetalSwapChain::createOrResize()
return false;
}
-#ifdef Q_OS_MACOS
- NSView *view = reinterpret_cast<NSView *>(window->winId());
-#else
- UIView *view = reinterpret_cast<UIView *>(window->winId());
-#endif
- Q_ASSERT(view);
- d->layer = static_cast<CAMetalLayer *>(view.layer);
+ d->layer = layerForWindow(window);
Q_ASSERT(d->layer);
chooseFormats();
diff --git a/src/gui/text/freetype/qfontengine_ft.cpp b/src/gui/text/freetype/qfontengine_ft.cpp
index 42cf147901..59300b6eca 100644
--- a/src/gui/text/freetype/qfontengine_ft.cpp
+++ b/src/gui/text/freetype/qfontengine_ft.cpp
@@ -1078,7 +1078,11 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph,
renderMode = FT_RENDER_MODE_MONO;
break;
case Format_A32:
- Q_ASSERT(hsubpixel || vfactor != 1);
+ if (!hsubpixel && vfactor == 1) {
+ qWarning("Format_A32 requested, but subpixel layout is unknown.");
+ return nullptr;
+ }
+
renderMode = hsubpixel ? FT_RENDER_MODE_LCD : FT_RENDER_MODE_LCD_V;
break;
case Format_A8:
diff --git a/src/gui/text/qcssparser.cpp b/src/gui/text/qcssparser.cpp
index 9670568792..417587fab0 100644
--- a/src/gui/text/qcssparser.cpp
+++ b/src/gui/text/qcssparser.cpp
@@ -1143,14 +1143,14 @@ static bool setFontSizeFromValue(QCss::Value value, QFont *font, int *fontSizeAd
s.chop(2);
value.variant = s;
if (value.variant.convert(QMetaType::fromType<qreal>())) {
- font->setPointSizeF(value.variant.toReal());
+ font->setPointSizeF(qBound(qreal(0), value.variant.toReal(), qreal(1 << 24) - 1));
valid = true;
}
} else if (s.endsWith(QLatin1String("px"), Qt::CaseInsensitive)) {
s.chop(2);
value.variant = s;
if (value.variant.convert(QMetaType::fromType<int>())) {
- font->setPixelSize(value.variant.toInt());
+ font->setPixelSize(qBound(0, value.variant.toInt(), (1 << 24) - 1));
valid = true;
}
}
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index cf2573c984..203230636b 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -304,10 +304,12 @@ void QFontDatabasePrivate::invalidate()
emit static_cast<QGuiApplication *>(QCoreApplication::instance())->fontDatabaseChanged();
}
-QtFontFamily *QFontDatabasePrivate::family(const QString &f, FamilyRequestFlags flags)
+QtFontFamily *QFontDatabasePrivate::family(const QString &family, FamilyRequestFlags flags)
{
QtFontFamily *fam = nullptr;
+ const QString f = family.trimmed();
+
int low = 0;
int high = count;
int pos = count / 2;
diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp
index 341fd2a0e7..42c17ced58 100644
--- a/src/gui/text/qfontmetrics.cpp
+++ b/src/gui/text/qfontmetrics.cpp
@@ -261,9 +261,8 @@ bool QFontMetrics::operator ==(const QFontMetrics &other) const
The ascent of a font is the distance from the baseline to the
highest position characters extend to. In practice, some font
designers break this rule, e.g. when they put more than one accent
- on top of a character, or to accommodate an unusual character in
- an exotic language, so it is possible (though rare) that this
- value will be too small.
+ on top of a character, or to accommodate a certain character, so it
+ is possible (though rare) that this value will be too small.
\sa descent()
*/
@@ -298,8 +297,8 @@ int QFontMetrics::capHeight() const
The descent is the distance from the base line to the lowest point
characters extend to. In practice, some font designers break this rule,
- e.g. to accommodate an unusual character in an exotic language, so
- it is possible (though rare) that this value will be too small.
+ e.g. to accommodate a certain character, so it is possible (though
+ rare) that this value will be too small.
\sa ascent()
*/
@@ -1075,9 +1074,8 @@ bool QFontMetricsF::operator ==(const QFontMetricsF &other) const
The ascent of a font is the distance from the baseline to the
highest position characters extend to. In practice, some font
designers break this rule, e.g. when they put more than one accent
- on top of a character, or to accommodate an unusual character in
- an exotic language, so it is possible (though rare) that this
- value will be too small.
+ on top of a character, or to accommodate a certain character, so
+ it is possible (though rare) that this value will be too small.
\sa descent()
*/
@@ -1113,8 +1111,8 @@ qreal QFontMetricsF::capHeight() const
The descent is the distance from the base line to the lowest point
characters extend to. (Note that this is different from X, which
adds 1 pixel.) In practice, some font designers break this rule,
- e.g. to accommodate an unusual character in an exotic language, so
- it is possible (though rare) that this value will be too small.
+ e.g. to accommodate a certain character, so it is possible (though
+ rare) that this value will be too small.
\sa ascent()
*/
diff --git a/src/gui/text/qtextdocumentwriter.cpp b/src/gui/text/qtextdocumentwriter.cpp
index 31dfb9436f..74db049aa6 100644
--- a/src/gui/text/qtextdocumentwriter.cpp
+++ b/src/gui/text/qtextdocumentwriter.cpp
@@ -182,7 +182,7 @@ QByteArray QTextDocumentWriter::format () const
unchanged.
If the device is not already open, QTextDocumentWriter will attempt to
- open the device in \l QIODevice::WriteOnly mode by calling open().
+ open the device in \l {QIODeviceBase::}{WriteOnly} mode by calling open().
\note This will not work for certain devices, such as QProcess,
QTcpSocket and QUdpSocket, where some configuration is required before
@@ -211,7 +211,8 @@ QIODevice *QTextDocumentWriter::device () const
/*!
Sets the name of the file to be written to \a fileName. Internally,
QTextDocumentWriter will create a QFile and open it in \l
- QIODevice::WriteOnly mode, and use this file when writing the document.
+ {QIODeviceBase::}{WriteOnly} mode, and use this file when writing the
+ document.
\sa fileName(), setDevice()
*/
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index d3a28d8d02..94c0addeaa 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
@@ -258,7 +258,7 @@ struct QBidiAlgorithm {
for (int i = 0; i < length; ++i) {
int pos = i;
char32_t uc = text[i].unicode();
- if (QChar::isHighSurrogate(uc) && i < length - 1) {
+ if (QChar::isHighSurrogate(uc) && i < length - 1 && text[i + 1].isLowSurrogate()) {
++i;
analysis[i].bidiDirection = QChar::DirNSM;
uc = QChar::surrogateToUcs4(ushort(uc), text[i].unicode());
@@ -1373,9 +1373,15 @@ static void applyVisibilityRules(ushort ucs, QGlyphLayout *glyphs, uint glyphPos
if (!fontEngine->symbol) {
// U+00AD [SOFT HYPHEN] is a default ignorable codepoint,
// so we replace its glyph and metrics with ones for
- // U+002D [HYPHEN-MINUS] and make it visible if it appears at line-break
+ // U+002D [HYPHEN-MINUS] or U+2010 [HYPHEN] and make
+ // it visible if it appears at line-break
const uint engineIndex = glyphs->glyphs[glyphPosition] & 0xff000000;
- glyphs->glyphs[glyphPosition] = fontEngine->glyphIndex('-');
+ glyph_t glyph = fontEngine->glyphIndex(0x002d);
+ if (glyph == 0)
+ glyph = fontEngine->glyphIndex(0x2010);
+ if (glyph == 0)
+ glyph = fontEngine->glyphIndex(0x00ad);
+ glyphs->glyphs[glyphPosition] = glyph;
if (Q_LIKELY(glyphs->glyphs[glyphPosition] != 0)) {
glyphs->glyphs[glyphPosition] |= engineIndex;
QGlyphLayout tmp = glyphs->mid(glyphPosition, 1);
@@ -1546,12 +1552,21 @@ void QTextEngine::shapeText(int item) const
si.num_glyphs = glyph_pos;
}
+
if (Q_UNLIKELY(si.num_glyphs == 0)) {
- Q_UNREACHABLE(); // ### report shaping errors somehow
+ if (Q_UNLIKELY(!ensureSpace(si.glyph_data_offset + 1))) {
+ qWarning() << "Unable to allocate space for place-holder glyph";
+ return;
+ }
+
+ si.num_glyphs = 1;
+
+ // Overwrite with 0 token to indicate failure
+ QGlyphLayout g = availableGlyphs(&si);
+ g.glyphs[0] = 0;
return;
}
-
layoutData->used += si.num_glyphs;
QGlyphLayout glyphs = shapedGlyphs(&si);
diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp
index 996980b764..2772f8bdc3 100644
--- a/src/gui/text/qtexthtmlparser.cpp
+++ b/src/gui/text/qtexthtmlparser.cpp
@@ -1671,7 +1671,7 @@ void QTextHtmlParser::applyAttributes(const QStringList &attributes)
node->tableCellRowSpan = qMax(1, node->tableCellRowSpan);
} else if (key == QLatin1String("colspan")) {
if (setIntAttribute(&node->tableCellColSpan, value))
- node->tableCellColSpan = qMax(1, node->tableCellColSpan);
+ node->tableCellColSpan = qBound(1, node->tableCellColSpan, 20480);
}
break;
case Html_table:
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index d303219bb9..c1a27b2556 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -820,6 +820,10 @@ QTextLine QTextLayout::createLine()
int l = d->lines.size();
if (l && d->lines.at(l-1).length < 0) {
QTextLine(l-1, d).setNumColumns(INT_MAX);
+ if (d->maxWidth > QFIXED_MAX / 2) {
+ qWarning("QTextLayout: text too long, truncated.");
+ return QTextLine();
+ }
}
int from = l > 0 ? d->lines.at(l-1).from + d->lines.at(l-1).length + d->lines.at(l-1).trailingSpaces : 0;
int strlen = d->layoutData->string.length();
@@ -1295,13 +1299,13 @@ void QTextLayout::drawCursor(QPainter *p, const QPointF &pos, int cursorPosition
bool rightToLeft = d->isRightToLeft();
if (itm >= 0) {
const QScriptItem &si = d->layoutData->items.at(itm);
- if (si.ascent > 0)
+ if (si.ascent >= 0)
base = si.ascent;
- if (si.descent > 0)
+ if (si.descent >= 0)
descent = si.descent;
rightToLeft = si.analysis.bidiLevel % 2;
}
- qreal y = position.y() + (sl.y + sl.base() - base).toReal();
+ qreal y = position.y() + (sl.y + sl.base() + sl.descent - base - descent).toReal();
bool toggleAntialiasing = !(p->renderHints() & QPainter::Antialiasing)
&& (p->transform().type() > QTransform::TxTranslate);
if (toggleAntialiasing)
diff --git a/src/network/.prev_configure.cmake b/src/network/.prev_configure.cmake
new file mode 100644
index 0000000000..2a07ddd485
--- /dev/null
+++ b/src/network/.prev_configure.cmake
@@ -0,0 +1,431 @@
+
+
+#### Inputs
+
+
+
+#### Libraries
+
+qt_find_package(WrapBrotli PROVIDED_TARGETS WrapBrotli::WrapBrotliDec MODULE_NAME network QMAKE_LIB brotli)
+qt_find_package(Libproxy PROVIDED_TARGETS PkgConfig::Libproxy MODULE_NAME network QMAKE_LIB libproxy)
+qt_find_package(WrapOpenSSLHeaders PROVIDED_TARGETS WrapOpenSSLHeaders::WrapOpenSSLHeaders MODULE_NAME network QMAKE_LIB openssl/nolink)
+# openssl_headers
+qt_config_compile_test(openssl_headers
+ LIBRARIES
+ WrapOpenSSLHeaders::WrapOpenSSLHeaders
+ CODE
+"
+#include <openssl/ssl.h>
+#include <openssl/opensslv.h>
+#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10101000L
+# error OpenSSL >= 1.1.1 is required
+#endif
+#if !defined(OPENSSL_NO_EC) && !defined(SSL_CTRL_SET_CURVES)
+# error OpenSSL was reported as >= 1.1.1 but is missing required features, possibly it is libressl which is unsupported
+#endif
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+
+ /* END TEST: */
+ return 0;
+}
+")
+
+qt_find_package(WrapOpenSSL PROVIDED_TARGETS WrapOpenSSL::WrapOpenSSL MODULE_NAME network QMAKE_LIB openssl)
+# openssl
+qt_config_compile_test(openssl
+ LIBRARIES
+ WrapOpenSSL::WrapOpenSSL
+ CODE
+"
+#include <openssl/ssl.h>
+#include <openssl/opensslv.h>
+#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10101000L
+# error OpenSSL >= 1.1.1 is required
+#endif
+#if !defined(OPENSSL_NO_EC) && !defined(SSL_CTRL_SET_CURVES)
+# error OpenSSL was reported as >= 1.1.1 but is missing required features, possibly it is libressl which is unsupported
+#endif
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+SSL_free(SSL_new(0));
+ /* END TEST: */
+ return 0;
+}
+")
+
+qt_find_package(GSSAPI PROVIDED_TARGETS GSSAPI::GSSAPI MODULE_NAME network QMAKE_LIB gssapi)
+
+
+#### Tests
+
+# getifaddrs
+qt_config_compile_test(getifaddrs
+ LABEL "getifaddrs()"
+ CODE
+"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/if.h>
+#include <ifaddrs.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+ifaddrs *list;
+getifaddrs(&list);
+freeifaddrs(list);
+ /* END TEST: */
+ return 0;
+}
+"# FIXME: use: unmapped library: network
+)
+
+# ipv6ifname
+qt_config_compile_test(ipv6ifname
+ LABEL "IPv6 ifname"
+ CODE
+"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/if.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+char buf[IFNAMSIZ];
+if_nametoindex(\"eth0\");
+if_indextoname(1, buf);
+if_freenameindex(if_nameindex());
+ /* END TEST: */
+ return 0;
+}
+"# FIXME: use: unmapped library: network
+)
+
+# linux-netlink
+qt_config_compile_test(linux_netlink
+ LABEL "Linux AF_NETLINK sockets"
+ CODE
+"
+#include <asm/types.h>
+#include <linux/netlink.h>
+#include <linux/rtnetlink.h>
+#include <sys/socket.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+struct rtattr rta = { };
+struct ifinfomsg ifi = {};
+struct ifaddrmsg ifa = {};
+struct ifa_cacheinfo ci;
+ci.ifa_prefered = ci.ifa_valid = 0;
+(void)RTM_NEWLINK; (void)RTM_NEWADDR;
+(void)IFLA_ADDRESS; (void)IFLA_IFNAME;
+(void)IFA_ADDRESS; (void)IFA_LABEL; (void)IFA_CACHEINFO;
+(void)(IFA_F_SECONDARY | IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_MANAGETEMPADDR);
+ /* END TEST: */
+ return 0;
+}
+")
+
+# sctp
+qt_config_compile_test(sctp
+ LABEL "SCTP support"
+ CODE
+"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/sctp.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+sctp_initmsg sctpInitMsg;
+socklen_t sctpInitMsgSize = sizeof(sctpInitMsg);
+(void) socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP);
+(void) getsockopt(-1, SOL_SCTP, SCTP_INITMSG, &sctpInitMsg, &sctpInitMsgSize);
+ /* END TEST: */
+ return 0;
+}
+"# FIXME: use: unmapped library: network
+)
+
+# dtls
+qt_config_compile_test(dtls
+ LABEL "DTLS support in OpenSSL"
+ LIBRARIES
+ WrapOpenSSLHeaders::WrapOpenSSLHeaders
+ CODE
+"
+#include <openssl/ssl.h>
+#if defined(OPENSSL_NO_DTLS) || !defined(DTLS1_2_VERSION)
+# error OpenSSL without DTLS support
+#endif
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+
+ /* END TEST: */
+ return 0;
+}
+")
+
+# ocsp
+qt_config_compile_test(ocsp
+ LABEL "OCSP stapling support in OpenSSL"
+ LIBRARIES
+ WrapOpenSSLHeaders::WrapOpenSSLHeaders
+ CODE
+"
+#include <openssl/ssl.h>
+#include <openssl/ocsp.h>
+#if defined(OPENSSL_NO_OCSP) || defined(OPENSSL_NO_TLSEXT)
+# error OpenSSL without OCSP stapling
+#endif
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+
+ /* END TEST: */
+ return 0;
+}
+")
+
+# netlistmgr
+qt_config_compile_test(netlistmgr
+ LABEL "Network List Manager"
+ CODE
+"
+#include <netlistmgr.h>
+#include <wrl/client.h>
+
+int main(int argc, char **argv)
+{
+ (void)argc; (void)argv;
+ /* BEGIN TEST: */
+using namespace Microsoft::WRL;
+ComPtr<INetworkListManager> networkListManager;
+ComPtr<IConnectionPoint> connectionPoint;
+ComPtr<IConnectionPointContainer> connectionPointContainer;
+networkListManager.As(&connectionPointContainer);
+connectionPointContainer->FindConnectionPoint(IID_INetworkConnectionEvents, &connectionPoint);
+ /* END TEST: */
+ return 0;
+}
+"# FIXME: qmake: LIBS += -lOle32
+)
+
+
+
+#### Features
+
+qt_feature("getifaddrs" PUBLIC
+ LABEL "getifaddrs()"
+ CONDITION TEST_getifaddrs
+)
+qt_feature_definition("getifaddrs" "QT_NO_GETIFADDRS" NEGATE VALUE "1")
+qt_feature("ipv6ifname" PUBLIC
+ LABEL "IPv6 ifname"
+ CONDITION TEST_ipv6ifname
+)
+qt_feature_definition("ipv6ifname" "QT_NO_IPV6IFNAME" NEGATE VALUE "1")
+qt_feature("libproxy" PRIVATE
+ LABEL "libproxy"
+ AUTODETECT OFF
+ CONDITION Libproxy_FOUND
+)
+qt_feature("linux-netlink" PRIVATE
+ LABEL "Linux AF_NETLINK"
+ CONDITION LINUX AND NOT ANDROID AND TEST_linux_netlink
+)
+qt_feature("openssl" PRIVATE
+ LABEL "OpenSSL"
+ CONDITION QT_FEATURE_openssl_runtime OR QT_FEATURE_openssl_linked
+ ENABLE false
+)
+qt_feature_definition("openssl" "QT_NO_OPENSSL" NEGATE)
+qt_feature_config("openssl" QMAKE_PUBLIC_QT_CONFIG)
+qt_feature("openssl-runtime"
+ AUTODETECT NOT WASM
+ CONDITION NOT QT_FEATURE_securetransport AND NOT QT_FEATURE_schannel AND TEST_openssl_headers
+ ENABLE INPUT_openssl STREQUAL 'yes' OR INPUT_openssl STREQUAL 'runtime'
+ DISABLE INPUT_openssl STREQUAL 'no' OR INPUT_openssl STREQUAL 'linked' OR INPUT_ssl STREQUAL 'no'
+)
+qt_feature("openssl-linked" PRIVATE
+ LABEL " Qt directly linked to OpenSSL"
+ AUTODETECT OFF
+ CONDITION NOT QT_FEATURE_securetransport AND NOT QT_FEATURE_schannel AND TEST_openssl
+ ENABLE INPUT_openssl STREQUAL 'linked'
+)
+qt_feature_definition("openssl-linked" "QT_LINKED_OPENSSL")
+qt_feature("securetransport" PUBLIC
+ LABEL "SecureTransport"
+ CONDITION APPLE AND ( INPUT_openssl STREQUAL '' OR INPUT_openssl STREQUAL 'no' )
+ DISABLE INPUT_ssl STREQUAL 'no'
+)
+qt_feature_definition("securetransport" "QT_SECURETRANSPORT")
+qt_feature("schannel" PUBLIC
+ LABEL "Schannel"
+ AUTODETECT OFF
+ CONDITION WIN32 AND ( INPUT_openssl STREQUAL '' OR INPUT_openssl STREQUAL 'no' )
+ DISABLE INPUT_ssl STREQUAL 'no'
+)
+qt_feature_definition("schannel" "QT_SCHANNEL")
+qt_feature("ssl" PUBLIC
+ LABEL "SSL"
+ CONDITION QT_FEATURE_securetransport OR QT_FEATURE_openssl OR QT_FEATURE_schannel
+)
+qt_feature_definition("ssl" "QT_NO_SSL" NEGATE VALUE "1")
+qt_feature("dtls" PUBLIC
+ SECTION "Networking"
+ LABEL "DTLS"
+ PURPOSE "Provides a DTLS implementation"
+ CONDITION QT_FEATURE_openssl AND QT_FEATURE_udpsocket AND TEST_dtls
+)
+qt_feature("ocsp" PUBLIC
+ SECTION "Networking"
+ LABEL "OCSP-stapling"
+ PURPOSE "Provides OCSP stapling support"
+ CONDITION QT_FEATURE_opensslv11 AND TEST_ocsp
+)
+qt_feature("opensslv11" PUBLIC
+ LABEL "OpenSSL 1.1"
+ CONDITION QT_FEATURE_openssl
+)
+qt_feature("sctp" PUBLIC
+ LABEL "SCTP"
+ AUTODETECT OFF
+ CONDITION TEST_sctp
+)
+qt_feature_definition("sctp" "QT_NO_SCTP" NEGATE VALUE "1")
+qt_feature("system-proxies" PRIVATE
+ LABEL "Use system proxies"
+)
+qt_feature("http" PUBLIC
+ SECTION "Networking"
+ LABEL "HTTP"
+ PURPOSE "Provides support for the Hypertext Transfer Protocol in QNetworkAccessManager."
+ CONDITION QT_FEATURE_thread
+)
+qt_feature_definition("http" "QT_NO_HTTP" NEGATE VALUE "1")
+qt_feature("udpsocket" PUBLIC
+ SECTION "Networking"
+ LABEL "QUdpSocket"
+ PURPOSE "Provides access to UDP sockets."
+)
+qt_feature_definition("udpsocket" "QT_NO_UDPSOCKET" NEGATE VALUE "1")
+qt_feature("networkproxy" PUBLIC
+ SECTION "Networking"
+ LABEL "QNetworkProxy"
+ PURPOSE "Provides network proxy support."
+)
+qt_feature_definition("networkproxy" "QT_NO_NETWORKPROXY" NEGATE VALUE "1")
+qt_feature("socks5" PUBLIC
+ SECTION "Networking"
+ LABEL "SOCKS5"
+ PURPOSE "Provides SOCKS5 support in QNetworkProxy."
+ CONDITION QT_FEATURE_networkproxy
+)
+qt_feature_definition("socks5" "QT_NO_SOCKS5" NEGATE VALUE "1")
+qt_feature("networkinterface" PUBLIC
+ SECTION "Networking"
+ LABEL "QNetworkInterface"
+ PURPOSE "Supports enumerating a host's IP addresses and network interfaces."
+ CONDITION NOT WASM
+)
+qt_feature_definition("networkinterface" "QT_NO_NETWORKINTERFACE" NEGATE VALUE "1")
+qt_feature("networkdiskcache" PUBLIC
+ SECTION "Networking"
+ LABEL "QNetworkDiskCache"
+ PURPOSE "Provides a disk cache for network resources."
+ CONDITION QT_FEATURE_temporaryfile
+)
+qt_feature_definition("networkdiskcache" "QT_NO_NETWORKDISKCACHE" NEGATE VALUE "1")
+qt_feature("brotli" PUBLIC
+ SECTION "Networking"
+ LABEL "Brotli Decompression Support"
+ PURPOSE "Support for downloading and decompressing resources compressed with Brotli through QNetworkAccessManager."
+ CONDITION WrapBrotli_FOUND
+)
+qt_feature_definition("brotli" "QT_NO_BROTLI" NEGATE VALUE "1")
+qt_feature("localserver" PUBLIC
+ SECTION "Networking"
+ LABEL "QLocalServer"
+ PURPOSE "Provides a local socket based server."
+ CONDITION QT_FEATURE_temporaryfile
+)
+qt_feature_definition("localserver" "QT_NO_LOCALSERVER" NEGATE VALUE "1")
+qt_feature("dnslookup" PUBLIC
+ SECTION "Networking"
+ LABEL "QDnsLookup"
+ PURPOSE "Provides API for DNS lookups."
+)
+qt_feature("gssapi" PUBLIC
+ SECTION "Networking"
+ LABEL "GSSAPI"
+ PURPOSE "Enable SPNEGO authentication through GSSAPI"
+ CONDITION NOT WIN32 AND GSSAPI_FOUND
+)
+qt_feature_definition("gssapi" "QT_NO_GSSAPI" NEGATE VALUE "1")
+qt_feature("sspi" PUBLIC
+ SECTION "Networking"
+ LABEL "SSPI"
+ PURPOSE "Enable NTLM/SPNEGO authentication through SSPI"
+ CONDITION WIN32
+)
+qt_feature_definition("sspi" "QT_NO_SSPI" NEGATE VALUE "1")
+qt_feature("netlistmgr" PRIVATE
+ SECTION "Networking"
+ LABEL "Network List Manager"
+ PURPOSE "Use Network List Manager to keep track of network connectivity"
+ CONDITION WIN32 AND TEST_netlistmgr
+)
+qt_feature("topleveldomain" PUBLIC
+ SECTION "Networking"
+ LABEL "qTopLevelDomain()"
+ PURPOSE "Provides support for extracting the top level domain from URLs. If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie."
+)
+qt_configure_add_summary_section(NAME "Qt Network")
+qt_configure_add_summary_entry(ARGS "getifaddrs")
+qt_configure_add_summary_entry(ARGS "ipv6ifname")
+qt_configure_add_summary_entry(ARGS "libproxy")
+qt_configure_add_summary_entry(
+ ARGS "linux-netlink"
+ CONDITION LINUX
+)
+qt_configure_add_summary_entry(
+ ARGS "securetransport"
+ CONDITION APPLE
+)
+qt_configure_add_summary_entry(
+ ARGS "schannel"
+ CONDITION WIN32
+)
+qt_configure_add_summary_entry(ARGS "openssl")
+qt_configure_add_summary_entry(ARGS "openssl-linked")
+qt_configure_add_summary_entry(ARGS "opensslv11")
+qt_configure_add_summary_entry(ARGS "dtls")
+qt_configure_add_summary_entry(ARGS "ocsp")
+qt_configure_add_summary_entry(ARGS "sctp")
+qt_configure_add_summary_entry(ARGS "system-proxies")
+qt_configure_add_summary_entry(ARGS "gssapi")
+qt_configure_add_summary_entry(ARGS "brotli")
+qt_configure_end_summary_section() # end of "Qt Network" section
+qt_configure_add_report_entry(
+ TYPE NOTE
+ MESSAGE "When linking against OpenSSL, you can override the default library names through OPENSSL_LIBS. For example: OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked"
+ CONDITION QT_FEATURE_openssl_linked AND ( NOT TEST_openssl.source EQUAL 0 ) AND INPUT_openssl.prefix STREQUAL '' AND INPUT_openssl.libs STREQUAL '' AND INPUT_openssl.libs.debug STREQUAL '' OR FIXME
+)
diff --git a/src/network/access/qdecompresshelper.cpp b/src/network/access/qdecompresshelper.cpp
index 2e44a58cf4..d0e75ef0dc 100644
--- a/src/network/access/qdecompresshelper.cpp
+++ b/src/network/access/qdecompresshelper.cpp
@@ -405,6 +405,11 @@ void QDecompressHelper::setArchiveBombDetectionEnabled(bool enable)
countHelper->setArchiveBombDetectionEnabled(enable);
}
+void QDecompressHelper::setMinimumArchiveBombSize(qint64 threshold)
+{
+ minimumArchiveBombSize = threshold;
+}
+
bool QDecompressHelper::isPotentialArchiveBomb() const
{
if (!archiveBombDetectionEnabled)
@@ -413,6 +418,9 @@ bool QDecompressHelper::isPotentialArchiveBomb() const
if (totalCompressedBytes == 0)
return false;
+ if (totalUncompressedBytes <= minimumArchiveBombSize)
+ return false;
+
// Some protection against malicious or corrupted compressed files that expand far more than
// is reasonable.
double ratio = double(totalUncompressedBytes) / double(totalCompressedBytes);
diff --git a/src/network/access/qdecompresshelper_p.h b/src/network/access/qdecompresshelper_p.h
index 4e66581022..6a77775790 100644
--- a/src/network/access/qdecompresshelper_p.h
+++ b/src/network/access/qdecompresshelper_p.h
@@ -92,6 +92,7 @@ public:
void clear();
void setArchiveBombDetectionEnabled(bool enable);
+ void setMinimumArchiveBombSize(qint64 threshold);
static bool isSupportedEncoding(const QByteArray &encoding);
static QByteArrayList acceptedEncoding();
@@ -119,6 +120,7 @@ private:
// Used for calculating the ratio
bool archiveBombDetectionEnabled = true;
+ qint64 minimumArchiveBombSize = 10 * 1024 * 1024;
qint64 totalUncompressedBytes = 0;
qint64 totalCompressedBytes = 0;
diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp
index 8f77911341..8f2ad8391b 100644
--- a/src/network/access/qhttp2protocolhandler.cpp
+++ b/src/network/access/qhttp2protocolhandler.cpp
@@ -495,6 +495,10 @@ bool QHttp2ProtocolHandler::sendHEADERS(Stream &stream)
#ifndef QT_NO_NETWORKPROXY
useProxy = m_connection->d_func()->networkProxy.type() != QNetworkProxy::NoProxy;
#endif
+ if (stream.request().withCredentials()) {
+ m_connection->d_func()->createAuthorization(m_socket, stream.request());
+ stream.request().d->needResendWithCredentials = false;
+ }
const auto headers = build_headers(stream.request(), maxHeaderListSize, useProxy);
if (!headers.size()) // nothing fits into maxHeaderListSize
return false;
@@ -520,7 +524,7 @@ bool QHttp2ProtocolHandler::sendDATA(Stream &stream)
Q_ASSERT(replyPrivate);
auto slot = std::min<qint32>(sessionSendWindowSize, stream.sendWindow);
- while (!stream.data()->atEnd() && slot) {
+ while (replyPrivate->totallyUploadedData < request.contentLength() && slot) {
qint64 chunkSize = 0;
const uchar *src =
reinterpret_cast<const uchar *>(stream.data()->readPointer(slot, chunkSize));
@@ -1020,8 +1024,10 @@ void QHttp2ProtocolHandler::handleContinuedHEADERS()
if (activeStreams.contains(streamID)) {
Stream &stream = activeStreams[streamID];
updateStream(stream, decoder.decodedHeader());
- // No DATA frames.
- if (continuedFrames[0].flags() & FrameFlag::END_STREAM) {
+ // Needs to resend the request; we should finish and delete the current stream
+ const bool needResend = stream.request().d->needResendWithCredentials;
+ // No DATA frames. Or needs to resend.
+ if (continuedFrames[0].flags() & FrameFlag::END_STREAM || needResend) {
finishStream(stream);
deleteActiveStream(stream.streamID);
}
@@ -1089,7 +1095,7 @@ bool QHttp2ProtocolHandler::acceptSetting(Http2::Settings identifier, quint32 ne
if (identifier == Settings::MAX_FRAME_SIZE_ID) {
if (newValue < Http2::minPayloadLimit || newValue > Http2::maxPayloadSize) {
- connectionError(PROTOCOL_ERROR, "SETTGINGS max frame size is out of range");
+ connectionError(PROTOCOL_ERROR, "SETTINGS max frame size is out of range");
return false;
}
maxFrameSize = newValue;
@@ -1109,7 +1115,7 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader
Qt::ConnectionType connectionType)
{
const auto httpReply = stream.reply();
- const auto &httpRequest = stream.request();
+ auto &httpRequest = stream.request();
Q_ASSERT(httpReply || stream.state == Stream::remoteReserved);
if (!httpReply) {
@@ -1147,6 +1153,7 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader
if (name == ":status") {
statusCode = value.left(3).toInt();
httpReply->setStatusCode(statusCode);
+ m_channel->lastStatus = statusCode; // Mostly useless for http/2, needed for auth
httpReplyPrivate->reasonPhrase = QString::fromLatin1(value.mid(4));
} else if (name == ":version") {
httpReplyPrivate->majorVersion = value.at(5) - '0';
@@ -1166,6 +1173,63 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader
}
}
+ const auto handleAuth = [&, this](const QByteArray &authField, bool isProxy) -> bool {
+ Q_ASSERT(httpReply);
+ const auto auth = authField.trimmed();
+ if (auth.startsWith("Negotiate") || auth.startsWith("NTLM")) {
+ // @todo: We're supposed to fall back to http/1.1:
+ // https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/http2-on-iis#when-is-http2-not-supported
+ // "Windows authentication (NTLM/Kerberos/Negotiate) is not supported with HTTP/2.
+ // In this case IIS will fall back to HTTP/1.1."
+ // Though it might be OK to ignore this. The server shouldn't let us connect with
+ // HTTP/2 if it doesn't support us using it.
+ } else if (!auth.isEmpty()) {
+ // Somewhat mimics parts of QHttpNetworkConnectionChannel::handleStatus
+ bool resend = false;
+ const bool authenticateHandled = m_connection->d_func()->handleAuthenticateChallenge(
+ m_socket, httpReply, isProxy, resend);
+ if (authenticateHandled && resend) {
+ httpReply->d_func()->eraseData();
+ // Add the request back in queue, we'll retry later now that
+ // we've gotten some username/password set on it:
+ httpRequest.d->needResendWithCredentials = true;
+ m_channel->h2RequestsToSend.insert(httpRequest.priority(), stream.httpPair);
+ httpReply->d_func()->clearHeaders();
+ // If we have data we were uploading we need to reset it:
+ if (stream.data()) {
+ stream.data()->reset();
+ httpReplyPrivate->totallyUploadedData = 0;
+ }
+ return true;
+ } // else: Authentication failed or was cancelled
+ }
+ return false;
+ };
+
+ if (httpReply) {
+ // See Note further down. These statuses would in HTTP/1.1 be handled
+ // by QHttpNetworkConnectionChannel::handleStatus. But because h2 has
+ // multiple streams/requests in a single channel this structure does not
+ // map properly to that function.
+ if (httpReply->statusCode() == 401) {
+ const auto wwwAuth = httpReply->headerField("www-authenticate");
+ if (handleAuth(wwwAuth, false)) {
+ sendRST_STREAM(stream.streamID, CANCEL);
+ markAsReset(stream.streamID);
+ // The stream is finalized and deleted after returning
+ return;
+ } // else: errors handled later
+ } else if (httpReply->statusCode() == 407) {
+ const auto proxyAuth = httpReply->headerField("proxy-authenticate");
+ if (handleAuth(proxyAuth, true)) {
+ sendRST_STREAM(stream.streamID, CANCEL);
+ markAsReset(stream.streamID);
+ // The stream is finalized and deleted after returning
+ return;
+ } // else: errors handled later
+ }
+ }
+
if (QHttpNetworkReply::isHttpRedirect(statusCode) && redirectUrl.isValid())
httpReply->setRedirectUrl(redirectUrl);
@@ -1177,15 +1241,16 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader
httpReplyPrivate->decompressHelper.setArchiveBombDetectionEnabled(false);
}
- if (QHttpNetworkReply::isHttpRedirect(statusCode)
- || statusCode == 401 || statusCode == 407) {
- // These are the status codes that can trigger uploadByteDevice->reset()
- // in QHttpNetworkConnectionChannel::handleStatus. Alas, we have no
- // single request/reply, we multiplex several requests and thus we never
- // simply call 'handleStatus'. If we have byte-device - we try to reset
- // it here, we don't (and can't) handle any error during reset operation.
- if (stream.data())
+ if (QHttpNetworkReply::isHttpRedirect(statusCode)) {
+ // Note: This status code can trigger uploadByteDevice->reset() in
+ // QHttpNetworkConnectionChannel::handleStatus. Alas, we have no single
+ // request/reply, we multiplex several requests and thus we never simply
+ // call 'handleStatus'. If we have a byte-device - we try to reset it
+ // here, we don't (and can't) handle any error during reset operation.
+ if (stream.data()) {
stream.data()->reset();
+ httpReplyPrivate->totallyUploadedData = 0;
+ }
}
if (connectionType == Qt::DirectConnection)
@@ -1259,10 +1324,12 @@ void QHttp2ProtocolHandler::finishStream(Stream &stream, Qt::ConnectionType conn
if (stream.data())
stream.data()->disconnect(this);
- if (connectionType == Qt::DirectConnection)
- emit httpReply->finished();
- else
- QMetaObject::invokeMethod(httpReply, "finished", connectionType);
+ if (!stream.request().d->needResendWithCredentials) {
+ if (connectionType == Qt::DirectConnection)
+ emit httpReply->finished();
+ else
+ QMetaObject::invokeMethod(httpReply, "finished", connectionType);
+ }
}
qCDebug(QT_HTTP2) << "stream" << stream.streamID << "closed";
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 3508f9a629..021c1ce62d 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -506,8 +506,8 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket
channels[i].authenticator = QAuthenticator();
// authentication is cancelled, send the current contents to the user.
- emit channels[i].reply->headerChanged();
- emit channels[i].reply->readyRead();
+ emit reply->headerChanged();
+ emit reply->readyRead();
QNetworkReply::NetworkError errorCode =
isProxy
? QNetworkReply::ProxyAuthenticationRequiredError
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 1ba833aef4..fddec35a3c 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -687,17 +687,19 @@ bool QHttpNetworkConnectionChannel::resetUploadData()
//this happens if server closes connection while QHttpNetworkConnectionPrivate::_q_startNextRequest is pending
return false;
}
- QNonContiguousByteDevice* uploadByteDevice = request.uploadByteDevice();
- if (!uploadByteDevice)
- return true;
-
- if (uploadByteDevice->reset()) {
+ if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct
+ || switchedToHttp2) {
+ // The else branch doesn't make any sense for HTTP/2, since 1 channel is multiplexed into
+ // many streams. And having one stream fail to reset upload data should not completely close
+ // the channel. Handled in the http2 protocol handler.
+ } else if (QNonContiguousByteDevice *uploadByteDevice = request.uploadByteDevice()) {
+ if (!uploadByteDevice->reset()) {
+ connection->d_func()->emitReplyError(socket, reply, QNetworkReply::ContentReSendError);
+ return false;
+ }
written = 0;
- return true;
- } else {
- connection->d_func()->emitReplyError(socket, reply, QNetworkReply::ContentReSendError);
- return false;
}
+ return true;
}
#ifndef QT_NO_NETWORKPROXY
diff --git a/src/network/access/qhttpnetworkrequest.cpp b/src/network/access/qhttpnetworkrequest.cpp
index c0b2167d15..3518dba9ed 100644
--- a/src/network/access/qhttpnetworkrequest.cpp
+++ b/src/network/access/qhttpnetworkrequest.cpp
@@ -65,6 +65,7 @@ QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(const QHttpNetworkRequest
ssl(other.ssl),
preConnect(other.preConnect),
ignoreDecompressionRatio(other.ignoreDecompressionRatio),
+ needResendWithCredentials(other.needResendWithCredentials),
redirectCount(other.redirectCount),
redirectPolicy(other.redirectPolicy),
peerVerifyName(other.peerVerifyName)
@@ -91,7 +92,8 @@ bool QHttpNetworkRequestPrivate::operator==(const QHttpNetworkRequestPrivate &ot
&& (ssl == other.ssl)
&& (preConnect == other.preConnect)
&& (redirectPolicy == other.redirectPolicy)
- && (peerVerifyName == other.peerVerifyName);
+ && (peerVerifyName == other.peerVerifyName)
+ && (needResendWithCredentials == other.needResendWithCredentials);
}
QByteArray QHttpNetworkRequest::methodName() const
diff --git a/src/network/access/qhttpnetworkrequest_p.h b/src/network/access/qhttpnetworkrequest_p.h
index 1a38b24a8a..f18ab1c877 100644
--- a/src/network/access/qhttpnetworkrequest_p.h
+++ b/src/network/access/qhttpnetworkrequest_p.h
@@ -185,6 +185,7 @@ public:
bool ssl;
bool preConnect;
bool ignoreDecompressionRatio = false;
+ bool needResendWithCredentials = false;
int redirectCount;
QNetworkRequest::RedirectPolicy redirectPolicy;
QString peerVerifyName;
diff --git a/src/network/access/qnetworkdiskcache.cpp b/src/network/access/qnetworkdiskcache.cpp
index 1ee075cb71..8c71da7f46 100644
--- a/src/network/access/qnetworkdiskcache.cpp
+++ b/src/network/access/qnetworkdiskcache.cpp
@@ -417,18 +417,7 @@ QIODevice *QNetworkDiskCache::data(const QUrl &url)
buffer->setData(d->lastItem.data.data());
} else {
buffer.reset(new QBuffer);
- // ### verify that QFile uses the fd size and not the file name
- qint64 size = file->size() - file->pos();
- const uchar *p = nullptr;
-#if !defined(Q_OS_INTEGRITY)
- p = file->map(file->pos(), size);
-#endif
- if (p) {
- buffer->setData((const char *)p, size);
- file.take()->setParent(buffer.data());
- } else {
- buffer->setData(file->readAll());
- }
+ buffer->setData(file->readAll());
}
}
buffer->open(QBuffer::ReadOnly);
diff --git a/src/network/configure.cmake b/src/network/configure.cmake
index b3c9087127..84a3609d24 100644
--- a/src/network/configure.cmake
+++ b/src/network/configure.cmake
@@ -232,12 +232,6 @@ connectionPointContainer->FindConnectionPoint(IID_INetworkConnectionEvents, &con
#### Features
-qt_feature("corewlan" PUBLIC PRIVATE
- LABEL "CoreWLan"
- CONDITION libs.corewlan OR FIXME
- EMIT_IF APPLE
-)
-qt_feature_definition("corewlan" "QT_NO_COREWLAN" NEGATE VALUE "1")
qt_feature("getifaddrs" PUBLIC
LABEL "getifaddrs()"
CONDITION TEST_getifaddrs
@@ -405,10 +399,6 @@ qt_feature("topleveldomain" PUBLIC
PURPOSE "Provides support for extracting the top level domain from URLs. If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie."
)
qt_configure_add_summary_section(NAME "Qt Network")
-qt_configure_add_summary_entry(
- ARGS "corewlan"
- CONDITION APPLE
-)
qt_configure_add_summary_entry(ARGS "getifaddrs")
qt_configure_add_summary_entry(ARGS "ipv6ifname")
qt_configure_add_summary_entry(ARGS "libproxy")
@@ -434,8 +424,10 @@ qt_configure_add_summary_entry(ARGS "system-proxies")
qt_configure_add_summary_entry(ARGS "gssapi")
qt_configure_add_summary_entry(ARGS "brotli")
qt_configure_end_summary_section() # end of "Qt Network" section
+# special case begin
qt_configure_add_report_entry(
TYPE NOTE
MESSAGE "When linking against OpenSSL, you can override the default library names through OPENSSL_LIBS. For example: OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked"
CONDITION NOT ANDROID AND QT_FEATURE_openssl_linked AND ( NOT TEST_openssl.source EQUAL 0 ) AND INPUT_openssl.prefix STREQUAL '' AND INPUT_openssl.libs STREQUAL '' AND INPUT_openssl.libs.debug STREQUAL '' OR FIXME
)
+# special case end
diff --git a/src/network/configure.json b/src/network/configure.json
index 3234fa6474..a8c23eae2c 100644
--- a/src/network/configure.json
+++ b/src/network/configure.json
@@ -40,18 +40,6 @@
"-lbrotlidec"
]
},
- "corewlan": {
- "label": "CoreWLan",
- "export": "",
- "test": {
- "lang": "objc++",
- "include": [ "CoreWLAN/CoreWLAN.h", "CoreWLAN/CWInterface.h" ],
- "main": "[CWInterface interfaceWithName:@\"en2\"];"
- },
- "sources": [
- "-framework CoreWLAN -framework Foundation"
- ]
- },
"network": {
"sources": [
{ "type": "makeSpec", "spec": "NETWORK" }
@@ -249,12 +237,6 @@
},
"features": {
- "corewlan": {
- "label": "CoreWLan",
- "condition": "libs.corewlan",
- "emitIf": "config.darwin",
- "output": [ "feature", "privateFeature" ]
- },
"getifaddrs": {
"label": "getifaddrs()",
"condition": "tests.getifaddrs",
@@ -460,11 +442,6 @@ For example:
{
"section": "Qt Network",
"entries": [
- {
- "type": "feature",
- "args": "corewlan",
- "condition": "config.darwin"
- },
"getifaddrs", "ipv6ifname", "libproxy",
{
"type": "feature",
diff --git a/src/network/doc/src/qt6-changes.qdoc b/src/network/doc/src/qt6-changes.qdoc
index 01602cfca9..888825a572 100644
--- a/src/network/doc/src/qt6-changes.qdoc
+++ b/src/network/doc/src/qt6-changes.qdoc
@@ -115,8 +115,8 @@
\li QNetworkRequest::HTTP2WasUsedAttribute (use QNetworkRequest::Http2WasUsedAttribute).
\endlist
- QNetworkRequest::FollowRedirectsAttribute is removed in Qt 6, see the section
- about redirects handling below.
+ QNetworkRequest::FollowRedirectsAttribute is removed in Qt 6, see
+ \l {Redirect policies}{the section about redirects handling} below.
\section2 Configuring QSslSocket
diff --git a/src/network/kernel/qnetworkinterface.cpp b/src/network/kernel/qnetworkinterface.cpp
index eed57f8a32..6e87a783a8 100644
--- a/src/network/kernel/qnetworkinterface.cpp
+++ b/src/network/kernel/qnetworkinterface.cpp
@@ -552,9 +552,11 @@ bool QNetworkAddressEntry::isPermanent() const
Specifies the flags associated with this network interface. The
possible values are:
- \value IsUp the network interface is active
- \value IsRunning the network interface has resources
- allocated
+ \value IsUp the network interface is "up" -
+ enabled by administrative action
+ \value IsRunning the network interface is operational:
+ configured "up" and (typically)
+ physically connected to a network
\value CanBroadcast the network interface works in
broadcast mode
\value IsLoopBack the network interface is a loopback
diff --git a/src/network/kernel/qt_attribution.json b/src/network/kernel/qt_attribution.json
index 2a3bd3122f..3713973543 100644
--- a/src/network/kernel/qt_attribution.json
+++ b/src/network/kernel/qt_attribution.json
@@ -20,7 +20,7 @@ supported by Qt (by the QNetworkCookieJar class).",
"Homepage": "Consult https://github.com/publicsuffix/list for the sha1 but download from ...",
"Homepage": "http://publicsuffix.org/",
- "Version": "f8247fa33109a86679b1c8edb109542b85851110, fetched on 2020-11-05",
+ "Version": "f2cce86a42f38265c67caa32c6e0ff61793bb534, fetched on 2021-01-21",
"License": "Mozilla Public License 2.0",
"LicenseFile": "PSL-LICENSE.txt",
"LicenseId": "MPL-2.0",
diff --git a/src/network/kernel/qurltlds_p.h b/src/network/kernel/qurltlds_p.h
index 156765e2a6..63e34db70c 100644
--- a/src/network/kernel/qurltlds_p.h
+++ b/src/network/kernel/qurltlds_p.h
@@ -61,14812 +61,14845 @@ QT_BEGIN_NAMESPACE
// for instructions see the program at
// util/publicSuffix/
-static const quint16 tldCount = 9079;
+static const quint16 tldCount = 9117;
// After the tldCount "real" entries in tldIndices, include a final entry
// that records the sum of the lengths of all the chunks, i.e. the index
// just past the end of tldChunks.
static constexpr quint32 tldIndices[tldCount + 1] = {
0,
-0,
-0,
-0,
-0,
-31,
-31,
-56,
-56,
-108,
-122,
-128,
-163,
-168,
-184,
-184,
-220,
-232,
-232,
-232,
-250,
-258,
-258,
-258,
-258,
-296,
-322,
-322,
-332,
-332,
-368,
-396,
-420,
-420,
-457,
-471,
-471,
-489,
+39,
+64,
+81,
+81,
+81,
+87,
+113,
+134,
+134,
+152,
+152,
+160,
+177,
+183,
+218,
+244,
+244,
+264,
+271,
+284,
+306,
+336,
+360,
+360,
+383,
+394,
+394,
+394,
+394,
+394,
+399,
+399,
+399,
+416,
+443,
+454,
+454,
+454,
+479,
+500,
+507,
507,
507,
-523,
-555,
-598,
-598,
-598,
-615,
-621,
-629,
-629,
-629,
-649,
-649,
-670,
+541,
+541,
+541,
+548,
+562,
+562,
+593,
+597,
+635,
+641,
+641,
+652,
+665,
+665,
680,
680,
-687,
-696,
-696,
-696,
-706,
-706,
-706,
-706,
-722,
-722,
-722,
-729,
-729,
-729,
-742,
-760,
-760,
-760,
-768,
-774,
-784,
-803,
-817,
-817,
-832,
-861,
-872,
-872,
-872,
-901,
-917,
-963,
-963,
-963,
-995,
-995,
-995,
-1031,
-1051,
-1058,
-1066,
-1106,
-1116,
-1127,
-1127,
-1139,
-1139,
-1160,
-1160,
-1202,
-1202,
-1202,
-1202,
-1217,
-1217,
-1217,
-1217,
-1223,
-1259,
-1259,
-1275,
-1275,
-1288,
-1288,
-1288,
-1288,
+699,
+699,
+709,
+709,
+709,
+724,
+730,
+776,
+785,
+791,
+799,
+805,
+828,
+834,
+843,
+853,
+853,
+882,
+882,
+882,
+882,
+892,
+897,
+903,
+913,
+913,
+930,
+936,
+948,
+977,
+1032,
+1048,
+1061,
+1061,
+1067,
+1095,
+1095,
+1121,
+1121,
+1130,
+1146,
+1172,
+1172,
+1172,
+1172,
+1172,
+1172,
+1172,
+1178,
+1178,
+1197,
+1225,
+1225,
+1235,
+1254,
+1254,
+1280,
1302,
-1309,
-1324,
-1324,
-1324,
-1324,
-1324,
-1324,
-1342,
-1362,
-1383,
-1383,
-1414,
-1425,
-1443,
-1453,
-1489,
+1319,
+1346,
+1354,
+1391,
+1395,
+1411,
+1436,
+1452,
+1458,
+1458,
+1477,
+1481,
+1481,
+1481,
+1481,
+1492,
+1499,
+1499,
+1515,
1543,
-1556,
-1556,
+1543,
+1543,
+1543,
+1555,
+1559,
1574,
-1583,
-1604,
-1604,
-1618,
-1625,
-1625,
-1635,
-1653,
-1706,
-1706,
-1706,
-1706,
-1718,
-1718,
-1718,
-1748,
-1748,
-1748,
-1767,
-1776,
-1776,
-1776,
-1788,
-1798,
-1798,
-1798,
-1798,
-1798,
-1819,
-1828,
-1828,
-1828,
+1574,
+1598,
+1630,
+1642,
+1654,
+1654,
+1670,
+1670,
+1686,
+1710,
+1710,
+1726,
+1726,
+1742,
+1756,
+1756,
+1756,
+1769,
+1804,
+1804,
+1810,
+1816,
+1832,
+1832,
+1832,
1838,
-1846,
1854,
-1859,
-1912,
-1946,
-1946,
-1953,
-1965,
-1971,
-1971,
-1979,
-1997,
-1997,
-1997,
-1997,
-2029,
-2041,
-2074,
-2084,
-2084,
+1854,
+1854,
+1854,
+1858,
+1885,
+1924,
+1952,
+1967,
+1967,
+1977,
+2005,
+2024,
+2036,
2084,
-2090,
-2131,
-2131,
-2169,
-2175,
+2100,
+2126,
+2126,
+2138,
+2174,
2201,
-2218,
-2228,
-2228,
-2228,
-2247,
-2270,
-2307,
-2307,
-2307,
-2307,
-2323,
-2331,
-2339,
-2375,
-2375,
-2398,
-2432,
-2445,
-2445,
-2467,
-2476,
-2491,
-2509,
-2509,
-2520,
-2520,
-2576,
-2599,
-2599,
-2628,
-2628,
-2635,
-2651,
-2651,
-2663,
-2700,
-2700,
+2246,
+2246,
+2279,
+2286,
+2330,
+2366,
+2366,
+2372,
+2415,
+2424,
+2443,
+2462,
+2482,
+2488,
+2534,
+2534,
+2557,
+2587,
+2597,
+2623,
+2623,
+2642,
+2686,
+2698,
2717,
-2722,
-2740,
-2758,
-2776,
-2776,
-2825,
-2825,
-2849,
-2849,
-2876,
-2876,
-2886,
-2886,
-2886,
-2910,
-2910,
-2914,
-2914,
-2914,
-2914,
-2929,
-2929,
-2929,
-2929,
+2754,
+2754,
+2771,
+2795,
+2828,
+2855,
+2884,
2944,
-2952,
-2952,
-2961,
-2973,
-2978,
-2997,
-2997,
-3005,
-3030,
-3059,
-3078,
-3106,
-3106,
-3106,
-3115,
-3121,
-3121,
-3146,
-3146,
-3146,
-3181,
-3188,
-3188,
-3214,
-3214,
-3214,
-3214,
-3238,
-3254,
-3254,
-3286,
-3317,
-3317,
-3330,
-3346,
-3356,
-3356,
-3356,
-3374,
-3408,
-3421,
-3421,
-3421,
-3435,
-3451,
-3489,
-3504,
-3504,
-3504,
-3537,
-3541,
-3559,
-3582,
-3582,
-3626,
-3626,
-3632,
-3642,
-3642,
-3655,
-3655,
-3655,
-3677,
-3694,
-3694,
-3700,
-3726,
-3726,
-3726,
-3742,
-3759,
-3767,
-3807,
-3830,
-3859,
-3910,
-3917,
-3917,
-3943,
-3973,
-4001,
-4029,
-4029,
-4029,
-4029,
-4029,
-4048,
-4053,
-4053,
-4061,
-4070,
-4078,
-4092,
-4116,
-4153,
+2980,
+2980,
+3042,
+3042,
+3110,
+3117,
+3127,
+3140,
+3154,
+3164,
+3164,
+3164,
+3169,
+3213,
+3231,
+3253,
+3260,
+3298,
+3322,
+3322,
+3365,
+3376,
+3386,
+3386,
+3393,
+3401,
+3417,
+3417,
+3430,
+3488,
+3488,
+3516,
+3563,
+3578,
+3593,
+3609,
+3624,
+3624,
+3638,
+3675,
+3721,
+3731,
+3731,
+3736,
+3751,
+3780,
+3820,
+3820,
+3858,
+3868,
+3920,
+3926,
+3947,
+3947,
+3961,
+3961,
+3961,
+3978,
+3978,
+3987,
+4006,
+4015,
+4031,
+4037,
+4056,
+4067,
+4067,
+4067,
+4067,
+4091,
+4091,
+4099,
+4099,
+4117,
4153,
-4153,
-4184,
-4228,
-4228,
-4235,
-4276,
-4276,
-4285,
-4285,
-4294,
-4328,
-4337,
-4337,
-4337,
-4337,
-4354,
-4370,
-4398,
-4398,
+4170,
+4170,
+4187,
+4187,
+4187,
+4205,
+4205,
+4205,
+4205,
+4226,
+4226,
+4226,
+4226,
+4234,
+4252,
+4252,
+4260,
+4260,
+4260,
+4278,
+4313,
+4313,
+4331,
+4344,
+4390,
+4390,
+4390,
+4414,
+4435,
+4435,
4435,
-4445,
+4450,
4467,
-4482,
-4482,
-4514,
-4514,
-4514,
-4514,
-4528,
-4556,
-4566,
-4566,
-4596,
-4596,
-4596,
-4608,
-4608,
-4608,
-4621,
-4627,
-4657,
-4657,
-4657,
-4657,
-4671,
-4680,
-4690,
-4690,
-4698,
-4739,
-4761,
-4774,
-4805,
-4805,
-4823,
-4833,
-4843,
-4843,
-4843,
-4855,
-4855,
-4855,
-4855,
-4855,
-4873,
-4873,
-4894,
-4894,
-4919,
-4937,
-4951,
-4958,
-4963,
-4963,
-4977,
-5004,
-5030,
-5030,
-5030,
-5030,
-5030,
+4467,
+4467,
+4467,
+4467,
+4479,
+4535,
+4584,
+4595,
+4595,
+4595,
+4654,
+4669,
+4669,
+4669,
+4713,
+4734,
+4776,
+4776,
+4811,
+4811,
+4828,
+4839,
+4839,
+4839,
+4857,
+4887,
+4887,
+4921,
+4932,
+4948,
+4953,
+4953,
+4965,
+4970,
+4970,
+4970,
+4998,
+5013,
+5013,
+5013,
+5013,
+5013,
+5013,
5030,
-5057,
-5073,
-5090,
-5105,
-5105,
-5118,
-5118,
-5118,
-5133,
-5144,
-5144,
-5154,
-5164,
+5048,
+5048,
+5048,
+5048,
+5048,
+5048,
+5078,
+5078,
+5078,
+5078,
+5078,
+5103,
+5127,
+5127,
+5150,
5164,
5164,
5164,
-5170,
-5179,
-5185,
-5201,
-5217,
-5217,
-5225,
+5175,
+5183,
+5211,
+5211,
+5227,
+5239,
+5239,
5249,
-5262,
-5262,
-5289,
-5289,
-5307,
-5307,
-5307,
-5307,
-5316,
-5354,
-5367,
-5367,
-5406,
-5406,
-5439,
-5446,
-5446,
-5446,
-5460,
-5475,
-5485,
-5485,
-5500,
-5510,
-5510,
-5551,
-5551,
-5551,
-5557,
-5557,
-5564,
-5564,
-5591,
-5601,
-5619,
-5627,
-5633,
-5655,
-5655,
-5662,
-5669,
-5669,
-5684,
-5699,
-5706,
-5713,
-5713,
-5721,
-5721,
-5721,
-5721,
-5721,
-5721,
-5734,
-5734,
-5755,
+5261,
+5277,
+5277,
+5277,
+5277,
+5296,
+5296,
+5336,
+5336,
+5336,
+5342,
+5342,
+5342,
+5386,
+5419,
+5441,
+5466,
+5466,
+5466,
+5488,
+5488,
+5507,
+5511,
+5511,
+5528,
+5545,
+5545,
+5573,
+5573,
+5588,
+5614,
+5624,
+5624,
+5634,
+5634,
+5661,
+5661,
+5661,
+5679,
+5679,
+5679,
+5689,
+5709,
+5709,
+5747,
+5759,
+5759,
+5759,
+5759,
+5759,
+5759,
+5777,
5794,
-5794,
-5813,
-5813,
-5822,
-5844,
-5853,
-5859,
-5872,
-5880,
+5834,
+5854,
+5854,
+5873,
5894,
-5900,
-5919,
-5919,
-5919,
-5952,
-5952,
-5966,
-5973,
-5973,
-5973,
-5973,
-5998,
-5998,
-6009,
-6025,
-6025,
-6025,
-6025,
-6025,
-6037,
-6043,
-6043,
-6052,
-6059,
-6059,
-6059,
-6059,
-6075,
-6091,
-6097,
-6110,
-6117,
-6117,
-6117,
-6117,
-6117,
-6117,
-6153,
-6177,
-6188,
-6200,
-6230,
-6253,
-6253,
-6253,
-6273,
-6293,
-6293,
-6293,
-6303,
-6326,
-6340,
-6350,
-6376,
-6398,
-6407,
-6407,
-6427,
-6427,
+5918,
+5993,
+5993,
+5993,
+6020,
+6020,
+6020,
+6039,
+6039,
+6062,
+6062,
+6067,
+6067,
+6067,
+6074,
+6088,
+6105,
+6118,
+6138,
+6138,
+6161,
+6161,
+6161,
+6169,
+6169,
+6169,
+6175,
+6175,
+6196,
+6215,
+6280,
+6297,
+6317,
+6321,
+6357,
+6399,
+6420,
+6420,
+6420,
+6420,
+6420,
+6420,
6456,
-6479,
-6494,
-6494,
-6516,
-6528,
-6545,
-6587,
-6587,
-6624,
-6667,
-6682,
-6695,
-6702,
-6706,
-6706,
-6712,
-6746,
+6482,
+6482,
+6482,
+6536,
+6541,
+6554,
+6578,
+6578,
+6602,
+6602,
+6618,
+6618,
+6618,
+6618,
+6618,
+6626,
+6626,
+6626,
+6626,
+6626,
+6640,
+6640,
+6640,
+6656,
+6656,
+6656,
+6662,
+6662,
+6662,
+6662,
+6678,
+6678,
+6725,
+6744,
+6744,
+6744,
6753,
-6767,
-6767,
-6767,
-6774,
-6780,
-6780,
+6762,
+6775,
6799,
-6806,
-6829,
-6829,
-6848,
-6855,
-6862,
-6869,
-6886,
-6899,
-6912,
-6928,
-6935,
-6935,
-6941,
-6960,
-6960,
-6967,
-7001,
-7001,
-7007,
+6812,
+6826,
+6836,
+6836,
+6858,
+6914,
+6914,
+6949,
+6989,
+6989,
+6999,
+6999,
+7008,
+7008,
7014,
-7045,
-7082,
+7040,
+7078,
7096,
-7103,
-7109,
-7115,
-7147,
-7165,
-7224,
-7257,
-7306,
-7306,
-7345,
-7352,
-7359,
-7395,
-7419,
-7439,
-7439,
-7439,
-7451,
-7465,
-7482,
-7489,
-7513,
-7520,
-7542,
-7562,
+7113,
+7113,
+7130,
+7130,
+7130,
+7130,
+7153,
+7153,
+7153,
+7159,
+7159,
+7159,
+7175,
+7175,
+7175,
+7190,
+7222,
+7222,
+7222,
+7240,
+7240,
+7276,
+7283,
+7310,
+7310,
+7310,
+7310,
+7323,
+7341,
+7341,
+7366,
+7366,
+7366,
+7415,
+7415,
+7415,
+7420,
+7420,
+7438,
+7446,
+7457,
+7475,
+7493,
+7493,
+7528,
+7569,
7569,
-7610,
+7569,
+7584,
+7584,
+7593,
+7593,
+7593,
+7593,
+7601,
+7622,
7633,
-7645,
-7669,
-7690,
-7706,
-7720,
-7740,
-7747,
-7754,
+7670,
+7670,
+7701,
+7701,
+7725,
+7764,
7764,
-7777,
-7777,
-7777,
-7777,
-7784,
-7802,
-7823,
-7845,
-7845,
-7845,
-7870,
-7900,
-7927,
-7979,
-8045,
-8052,
-8098,
-8118,
+7783,
+7783,
+7783,
+7806,
+7806,
+7806,
+7849,
+7854,
+7887,
+7887,
+7894,
+7901,
+7921,
+7921,
+7928,
+7934,
+7934,
+7971,
+7995,
+8010,
+8010,
+8029,
+8067,
+8081,
+8095,
+8114,
+8137,
8137,
-8176,
-8188,
-8193,
-8200,
-8200,
-8220,
-8241,
-8256,
-8256,
-8285,
-8301,
-8308,
-8329,
-8352,
-8378,
-8393,
-8400,
-8417,
-8451,
-8474,
-8505,
-8512,
-8512,
-8529,
-8529,
-8545,
-8549,
-8577,
-8577,
-8584,
-8584,
-8625,
-8625,
-8638,
-8638,
-8672,
-8672,
-8690,
-8731,
-8731,
-8782,
-8796,
-8822,
-8849,
-8860,
-8860,
-8860,
-8878,
-8884,
-8884,
-8893,
-8893,
-8900,
-8900,
-8979,
-8998,
-9005,
-9005,
-9026,
-9033,
-9040,
-9051,
-9058,
-9073,
-9084,
-9101,
-9125,
-9146,
-9169,
-9191,
-9191,
+8137,
+8160,
+8160,
+8167,
+8180,
+8184,
+8237,
+8250,
+8268,
+8268,
+8286,
+8306,
+8313,
+8320,
+8320,
+8337,
+8359,
+8389,
+8403,
+8470,
+8470,
+8470,
+8483,
+8498,
+8527,
+8531,
+8531,
+8551,
+8563,
+8581,
+8588,
+8594,
+8601,
+8601,
+8608,
+8608,
+8646,
+8694,
+8705,
+8705,
+8712,
+8716,
+8744,
+8770,
+8783,
+8794,
+8804,
+8820,
+8827,
+8827,
+8837,
+8866,
+8866,
+8883,
+8910,
+8910,
+8925,
+8925,
+8925,
+8948,
+8964,
+8971,
+8986,
+8986,
+8986,
+9001,
+9001,
+9019,
+9043,
+9074,
+9081,
+9117,
+9117,
+9126,
+9155,
+9159,
+9159,
+9168,
+9186,
9217,
-9224,
-9256,
-9263,
-9263,
-9263,
-9263,
-9316,
-9316,
-9345,
-9377,
-9384,
-9417,
-9436,
-9479,
-9479,
-9479,
-9506,
-9513,
-9527,
-9576,
-9589,
-9621,
-9628,
-9644,
-9717,
-9727,
-9740,
-9794,
-9801,
-9808,
-9829,
-9855,
-9855,
-9890,
-9930,
-9955,
+9249,
+9262,
+9262,
+9275,
+9296,
+9319,
+9319,
+9355,
+9371,
+9378,
+9419,
+9448,
+9448,
+9455,
+9472,
+9492,
+9492,
+9530,
+9551,
+9573,
+9598,
+9598,
+9631,
+9671,
+9671,
+9676,
+9676,
+9686,
+9691,
+9725,
+9737,
+9752,
+9757,
+9788,
+9788,
+9788,
+9788,
+9795,
+9815,
+9822,
+9822,
+9822,
+9838,
+9845,
+9852,
+9862,
+9869,
+9884,
+9893,
+9893,
+9893,
+9893,
+9934,
+9934,
+9941,
+9941,
+9948,
+9948,
+9993,
9993,
-10011,
-10038,
-10067,
-10094,
-10123,
-10130,
-10143,
-10185,
-10192,
-10213,
-10213,
-10213,
-10226,
-10233,
-10233,
-10233,
-10275,
-10275,
-10275,
-10287,
-10302,
-10302,
-10302,
-10309,
-10309,
-10316,
-10332,
-10370,
-10395,
-10395,
-10395,
-10409,
-10416,
-10425,
-10436,
-10436,
-10436,
-10454,
-10465,
-10498,
-10505,
-10505,
-10527,
-10534,
-10541,
-10606,
+9993,
+9993,
+10013,
+10013,
+10020,
+10020,
+10044,
+10056,
+10056,
+10062,
+10077,
+10119,
+10161,
+10183,
+10190,
+10208,
+10232,
+10245,
+10289,
+10296,
+10303,
+10329,
+10336,
+10366,
+10391,
+10407,
+10407,
+10427,
+10459,
+10482,
+10489,
+10496,
+10503,
+10516,
+10533,
+10551,
+10558,
+10558,
+10565,
+10581,
+10595,
+10602,
+10602,
+10602,
+10609,
+10609,
+10622,
+10622,
10636,
-10660,
-10660,
-10660,
-10689,
-10696,
-10696,
-10696,
-10703,
-10715,
-10715,
-10725,
-10739,
-10774,
-10793,
-10806,
-10806,
-10826,
-10859,
-10879,
-10927,
-10927,
-10982,
-10982,
-10987,
-11028,
-11045,
-11045,
-11062,
-11078,
-11124,
-11138,
-11145,
-11165,
-11165,
-11172,
-11172,
-11181,
-11189,
-11213,
-11234,
-11241,
-11268,
-11275,
-11296,
-11296,
-11314,
-11362,
-11369,
-11383,
-11413,
-11419,
-11419,
-11433,
-11456,
-11469,
-11474,
-11499,
-11499,
-11506,
-11506,
-11513,
-11520,
-11531,
-11553,
-11553,
-11574,
-11591,
-11596,
-11596,
-11596,
-11639,
-11639,
-11673,
-11673,
-11673,
-11688,
-11706,
-11715,
-11736,
-11757,
-11793,
-11793,
-11793,
-11803,
-11832,
-11832,
-11865,
-11865,
-11889,
-11896,
-11896,
-11940,
-11940,
-11940,
-11950,
-11958,
-11985,
-11985,
-11985,
-11985,
-11985,
-11985,
-12029,
-12069,
-12097,
-12097,
-12101,
-12115,
-12131,
-12173,
-12180,
-12208,
-12230,
-12230,
-12243,
-12243,
-12281,
-12287,
-12297,
-12297,
-12297,
-12327,
-12327,
-12333,
-12345,
-12355,
-12380,
-12380,
-12380,
-12380,
-12380,
-12399,
-12440,
-12445,
-12488,
-12488,
-12494,
-12494,
-12494,
-12513,
-12520,
-12524,
-12531,
-12531,
-12531,
-12531,
-12531,
-12557,
-12557,
-12557,
-12567,
+10684,
+10710,
+10724,
+10738,
+10745,
+10763,
+10770,
+10797,
+10817,
+10844,
+10858,
+10881,
+10898,
+10909,
+10916,
+10916,
+10916,
+10916,
+10941,
+10951,
+10951,
+10978,
+10995,
+10995,
+11011,
+11036,
+11058,
+11065,
+11065,
+11099,
+11115,
+11154,
+11154,
+11168,
+11199,
+11199,
+11206,
+11214,
+11245,
+11277,
+11304,
+11329,
+11347,
+11356,
+11356,
+11381,
+11407,
+11414,
+11437,
+11482,
+11526,
+11526,
+11562,
+11569,
+11584,
+11628,
+11660,
+11690,
+11699,
+11728,
+11738,
+11738,
+11738,
+11750,
+11767,
+11767,
+11806,
+11816,
+11848,
+11867,
+11871,
+11903,
+11920,
+11932,
+11943,
+11979,
+11994,
+12012,
+12055,
+12062,
+12075,
+12092,
+12098,
+12146,
+12153,
+12153,
+12164,
+12172,
+12197,
+12197,
+12197,
+12204,
+12204,
+12204,
+12235,
+12253,
+12267,
+12304,
+12311,
+12335,
+12354,
+12378,
+12427,
+12437,
+12437,
+12479,
+12486,
+12522,
+12535,
+12542,
+12549,
+12559,
+12566,
12578,
-12604,
-12621,
-12621,
-12641,
-12641,
-12641,
-12641,
-12648,
-12648,
-12656,
-12656,
-12686,
-12690,
+12611,
+12628,
+12652,
+12665,
+12671,
12712,
-12730,
-12736,
-12736,
-12740,
-12740,
-12775,
-12775,
-12808,
-12815,
-12826,
-12826,
-12826,
-12826,
-12826,
-12905,
-12943,
-12943,
-12943,
-12943,
-12969,
+12712,
+12712,
+12712,
+12729,
+12729,
+12746,
+12751,
+12779,
+12779,
+12786,
+12824,
+12841,
+12848,
+12869,
+12876,
+12876,
+12876,
+12898,
+12930,
+12951,
12969,
-12977,
-13013,
13013,
-13013,
-13030,
-13030,
-13030,
-13058,
-13072,
-13084,
-13084,
-13092,
-13107,
-13139,
-13146,
-13166,
-13200,
-13200,
-13200,
-13207,
-13220,
-13236,
-13236,
-13236,
-13257,
-13261,
-13261,
+13019,
+13019,
+13019,
+13026,
+13026,
+13049,
+13073,
+13105,
+13125,
+13141,
+13141,
+13182,
+13192,
+13192,
+13228,
+13228,
+13241,
+13282,
13282,
-13313,
-13340,
-13340,
-13340,
-13340,
-13371,
-13371,
-13371,
-13389,
-13389,
-13400,
-13400,
-13400,
-13446,
-13478,
-13478,
-13478,
-13478,
-13478,
-13498,
-13514,
-13544,
-13571,
-13590,
-13590,
-13590,
-13590,
-13597,
-13597,
-13604,
-13604,
-13616,
-13616,
-13616,
-13616,
-13636,
-13636,
-13636,
-13636,
-13650,
-13662,
-13662,
-13672,
-13672,
-13672,
-13700,
+13282,
+13282,
+13297,
+13297,
+13297,
+13315,
+13324,
+13335,
+13382,
+13391,
+13391,
+13417,
+13417,
+13440,
+13469,
+13476,
+13496,
+13530,
+13530,
+13548,
+13548,
+13570,
+13580,
+13580,
+13599,
+13609,
+13627,
+13627,
+13634,
+13634,
+13634,
+13634,
+13634,
+13663,
+13663,
+13663,
+13674,
+13674,
+13686,
+13686,
13707,
-13722,
-13733,
+13714,
+13714,
+13714,
13733,
13733,
-13733,
-13759,
-13759,
-13759,
-13759,
-13778,
-13778,
-13812,
-13819,
-13819,
-13829,
-13849,
-13862,
-13862,
-13874,
-13895,
-13895,
-13910,
-13910,
-13926,
-13939,
-13939,
-13952,
-13952,
-13967,
-13983,
-13983,
-14001,
-14001,
-14010,
-14010,
-14010,
-14016,
-14016,
-14016,
-14016,
-14035,
-14050,
-14073,
-14073,
-14110,
-14110,
-14152,
-14163,
-14163,
-14163,
-14163,
-14163,
-14183,
-14192,
-14192,
-14202,
-14219,
-14219,
-14219,
-14219,
-14219,
-14219,
-14219,
+13781,
+13793,
+13793,
+13793,
+13809,
+13809,
+13825,
+13876,
+13886,
+13896,
+13925,
+13958,
+13958,
+13999,
+13999,
+13999,
+13999,
+14018,
+14039,
+14039,
+14046,
+14055,
+14055,
+14059,
+14100,
+14115,
+14129,
+14142,
+14142,
+14148,
+14173,
+14209,
+14209,
+14209,
+14224,
+14224,
+14224,
+14224,
+14224,
+14224,
14229,
-14250,
-14278,
-14294,
-14294,
-14315,
-14319,
-14334,
-14341,
-14348,
-14390,
-14400,
-14400,
+14244,
+14263,
+14263,
+14271,
+14271,
+14271,
+14288,
+14288,
+14288,
+14335,
+14335,
+14344,
+14363,
+14363,
+14363,
+14394,
14415,
-14469,
-14469,
-14469,
-14469,
-14469,
-14494,
-14494,
-14494,
-14505,
-14521,
-14527,
-14541,
-14570,
-14581,
-14581,
-14581,
-14590,
-14624,
-14630,
-14636,
-14636,
-14644,
-14648,
-14672,
-14692,
-14692,
-14712,
-14712,
+14446,
+14495,
+14512,
+14512,
+14518,
+14535,
+14535,
+14548,
+14557,
+14571,
+14582,
+14614,
+14614,
+14635,
+14649,
+14649,
+14656,
+14663,
+14684,
+14689,
+14689,
+14689,
+14689,
+14689,
+14689,
+14689,
+14701,
+14701,
+14713,
+14713,
+14725,
14725,
-14737,
-14737,
-14737,
-14770,
-14770,
-14770,
-14770,
-14791,
-14802,
-14824,
-14824,
-14824,
-14852,
-14852,
-14852,
-14852,
+14725,
+14725,
+14762,
+14807,
+14807,
+14814,
+14834,
+14846,
+14846,
14857,
-14872,
-14902,
-14902,
-14902,
-14928,
-14946,
-14962,
-14967,
-14967,
-14972,
-14986,
-15042,
-15054,
-15054,
-15054,
-15068,
-15100,
-15139,
-15139,
-15148,
-15171,
-15171,
-15192,
-15192,
-15192,
-15238,
-15256,
-15256,
-15256,
-15256,
-15256,
-15256,
-15256,
-15294,
-15294,
-15306,
-15306,
-15306,
-15324,
-15331,
-15352,
-15352,
-15352,
-15356,
-15369,
-15393,
-15393,
-15399,
-15399,
-15409,
-15409,
-15433,
-15447,
-15470,
-15470,
-15470,
+14864,
+14864,
+14871,
+14879,
+14879,
+14892,
+14892,
+14932,
+14932,
+14942,
+14949,
+14949,
+14961,
+14961,
+14976,
+14990,
+14990,
+15038,
+15038,
+15057,
+15078,
+15078,
+15078,
+15078,
+15091,
+15091,
+15098,
+15098,
+15098,
+15105,
+15105,
+15105,
+15105,
+15105,
+15105,
+15105,
+15113,
+15128,
+15140,
+15140,
+15140,
+15152,
+15164,
+15178,
+15195,
+15207,
+15223,
+15234,
+15251,
+15251,
+15251,
+15271,
+15287,
+15287,
+15297,
+15328,
+15345,
+15345,
+15383,
+15412,
+15412,
+15412,
+15412,
+15437,
15470,
15470,
-15470,
-15482,
-15482,
-15506,
-15506,
+15490,
+15490,
+15490,
+15490,
+15495,
+15504,
+15514,
+15514,
+15514,
+15514,
+15522,
+15528,
+15528,
+15528,
+15528,
+15528,
15539,
-15560,
-15611,
-15641,
-15641,
+15539,
+15575,
+15575,
+15575,
+15575,
+15575,
+15595,
+15610,
+15628,
15641,
-15663,
-15676,
-15676,
-15698,
-15698,
-15698,
-15705,
-15705,
-15705,
-15726,
-15741,
-15741,
-15745,
-15762,
-15762,
-15762,
-15783,
-15801,
-15813,
-15827,
-15841,
-15841,
-15880,
-15889,
-15899,
-15899,
-15915,
-15915,
-15931,
-15950,
-15957,
-15967,
-15967,
-15967,
-15976,
-15976,
-16005,
-16005,
-16005,
-16037,
-16077,
-16098,
-16111,
-16111,
-16128,
-16128,
-16142,
-16142,
-16142,
-16142,
-16142,
-16157,
-16163,
-16190,
-16201,
-16226,
-16237,
-16243,
-16282,
-16299,
-16308,
-16319,
-16319,
-16328,
-16337,
-16353,
-16372,
-16372,
-16412,
-16412,
-16433,
-16433,
-16440,
-16456,
-16500,
-16500,
-16526,
-16526,
-16526,
-16531,
-16551,
-16577,
+15651,
+15664,
+15675,
+15675,
+15680,
+15690,
+15690,
+15704,
+15719,
+15740,
+15740,
+15740,
+15740,
+15740,
+15740,
+15740,
+15740,
+15752,
+15759,
+15759,
+15816,
+15844,
+15844,
+15844,
+15844,
+15852,
+15859,
+15867,
+15888,
+15936,
+15936,
+15989,
+16014,
+16014,
+16028,
+16028,
+16042,
+16069,
+16076,
+16076,
+16092,
+16099,
+16108,
+16118,
+16118,
+16123,
+16123,
+16141,
+16158,
+16178,
+16193,
+16205,
+16223,
+16223,
+16223,
+16233,
+16233,
+16233,
+16256,
+16271,
+16271,
+16283,
+16302,
+16310,
+16310,
+16316,
+16338,
+16358,
+16358,
+16358,
+16368,
+16376,
+16409,
+16409,
+16442,
+16442,
+16451,
+16451,
+16451,
+16451,
+16472,
+16487,
+16506,
+16558,
+16579,
+16579,
+16593,
16593,
16593,
-16631,
-16648,
-16664,
-16664,
-16664,
-16670,
-16688,
-16688,
-16694,
-16707,
-16707,
-16716,
-16737,
-16755,
-16755,
+16607,
+16607,
+16607,
+16623,
+16661,
+16684,
+16742,
+16742,
+16742,
16762,
-16769,
-16769,
-16776,
-16791,
-16805,
-16811,
-16811,
-16811,
-16856,
-16856,
-16862,
-16862,
-16862,
-16862,
-16880,
-16886,
-16900,
-16900,
-16964,
-16964,
-16979,
-16979,
+16762,
+16762,
+16778,
+16815,
+16844,
+16922,
+16922,
+16922,
+16950,
+16968,
+16968,
16987,
-17007,
-17007,
-17023,
-17023,
-17023,
-17073,
-17073,
-17073,
-17100,
-17116,
-17116,
-17116,
-17116,
-17116,
-17116,
-17116,
+17003,
+17003,
+17015,
+17015,
+17015,
+17035,
+17035,
+17035,
+17063,
+17079,
+17079,
+17079,
+17093,
+17110,
17127,
-17133,
-17143,
-17143,
-17143,
-17143,
-17143,
-17143,
-17143,
-17143,
-17160,
-17177,
-17191,
-17191,
-17204,
-17216,
-17216,
-17236,
-17236,
-17236,
-17257,
-17257,
-17262,
-17282,
-17301,
-17317,
-17336,
+17140,
+17158,
+17178,
+17192,
+17219,
+17219,
+17219,
+17238,
+17254,
+17254,
+17264,
+17264,
+17279,
+17279,
+17279,
+17279,
+17279,
+17293,
+17293,
+17293,
+17293,
+17304,
+17331,
+17331,
+17347,
+17366,
17366,
17391,
-17391,
-17412,
-17460,
-17460,
-17460,
-17468,
-17468,
-17468,
-17482,
-17504,
-17504,
-17504,
-17521,
-17521,
-17534,
-17553,
-17553,
-17567,
-17577,
-17583,
-17583,
-17593,
-17617,
-17632,
-17644,
-17678,
-17694,
-17694,
-17710,
-17710,
-17727,
-17727,
-17727,
-17727,
-17731,
-17731,
-17751,
-17751,
-17789,
-17789,
-17830,
-17864,
-17864,
+17423,
+17427,
+17427,
+17427,
+17432,
+17432,
+17432,
+17451,
+17451,
+17458,
+17462,
+17462,
+17477,
+17488,
+17515,
+17568,
+17580,
+17580,
+17603,
+17603,
+17615,
+17615,
+17638,
+17668,
+17677,
+17714,
+17714,
+17746,
+17746,
+17762,
+17771,
+17771,
+17771,
+17771,
+17771,
+17793,
+17793,
+17826,
+17826,
+17826,
+17837,
+17861,
+17881,
17889,
-17906,
-17912,
-17920,
-17952,
-17952,
-17952,
-17973,
+17889,
+17889,
+17889,
+17889,
+17889,
+17889,
+17889,
+17889,
+17889,
+17904,
+17904,
+17917,
+17917,
+17917,
+17917,
+17935,
+17956,
17973,
-17992,
-17992,
-17998,
-18033,
-18052,
-18078,
-18088,
+18008,
+18008,
+18017,
+18027,
+18027,
+18048,
+18065,
+18065,
+18065,
+18071,
+18075,
+18075,
18103,
18103,
18103,
-18145,
-18145,
-18152,
-18157,
-18186,
-18186,
-18186,
-18196,
-18202,
-18240,
-18257,
-18266,
-18266,
-18266,
-18266,
-18285,
-18295,
-18295,
-18324,
-18351,
-18374,
-18396,
-18396,
-18414,
-18414,
-18420,
-18431,
-18454,
-18454,
-18454,
-18487,
-18487,
-18487,
-18515,
-18533,
-18533,
-18533,
-18549,
-18555,
-18555,
-18555,
-18561,
-18561,
-18565,
-18582,
-18582,
-18582,
-18582,
-18605,
-18610,
-18610,
-18610,
-18632,
-18632,
-18632,
-18657,
-18657,
-18688,
-18688,
-18688,
-18688,
-18711,
-18727,
-18775,
-18775,
-18775,
-18775,
-18775,
-18775,
-18781,
-18801,
-18815,
-18835,
-18841,
-18841,
-18841,
-18872,
-18872,
-18885,
-18895,
-18895,
-18895,
-18918,
-18938,
-18938,
-18938,
-18938,
-18954,
-18962,
-18972,
-19033,
-19052,
-19064,
-19064,
-19080,
-19080,
-19104,
-19110,
-19123,
+18168,
+18168,
+18201,
+18213,
+18225,
+18264,
+18274,
+18292,
+18292,
+18298,
+18298,
+18327,
+18338,
+18390,
+18390,
+18390,
+18410,
+18410,
+18410,
+18410,
+18417,
+18417,
+18432,
+18432,
+18432,
+18438,
+18451,
+18451,
+18467,
+18467,
+18481,
+18485,
+18502,
+18502,
+18532,
+18548,
+18548,
+18564,
+18564,
+18564,
+18575,
+18591,
+18591,
+18637,
+18663,
+18680,
+18680,
+18691,
+18691,
+18691,
+18691,
+18691,
+18691,
+18699,
+18699,
+18715,
+18715,
+18715,
+18715,
+18715,
+18715,
+18715,
+18715,
+18715,
+18728,
+18728,
+18741,
+18741,
+18741,
+18771,
+18789,
+18795,
+18813,
+18825,
+18825,
+18864,
+18880,
+18880,
+18880,
+18880,
+18896,
+18896,
+18896,
+18896,
+18901,
+18931,
+18953,
+18964,
+18964,
+18984,
+18984,
+18993,
+19016,
+19025,
+19036,
+19051,
+19072,
+19089,
+19114,
+19121,
+19121,
+19121,
+19141,
19141,
-19156,
-19156,
-19156,
-19166,
-19166,
-19187,
-19199,
-19239,
-19258,
-19258,
-19275,
-19291,
-19297,
-19334,
-19337,
-19364,
-19367,
+19158,
+19158,
+19203,
+19203,
+19203,
+19242,
+19242,
+19242,
+19287,
+19287,
+19287,
+19301,
+19316,
+19338,
+19338,
+19338,
+19358,
19391,
-19405,
-19408,
-19408,
-19416,
-19425,
-19446,
-19461,
-19470,
-19488,
-19494,
-19500,
-19522,
-19561,
+19419,
+19419,
+19443,
+19443,
+19456,
+19468,
+19468,
+19468,
+19479,
+19479,
+19495,
+19512,
+19512,
+19512,
+19540,
+19540,
+19552,
+19552,
+19552,
19586,
-19589,
-19608,
-19619,
-19622,
-19676,
-19682,
-19688,
-19691,
-19704,
-19707,
-19727,
-19730,
+19586,
+19586,
+19586,
+19594,
+19605,
+19605,
+19630,
+19634,
+19634,
+19644,
+19673,
+19694,
+19714,
+19714,
19733,
-19739,
-19754,
-19754,
-19760,
+19743,
+19759,
19766,
-19775,
-19814,
-19841,
-19859,
-19862,
-19865,
-19868,
-19871,
-19871,
-19871,
-19874,
-19907,
-19907,
-19928,
-19931,
-19934,
-19937,
+19778,
+19797,
+19811,
+19825,
+19842,
+19842,
+19878,
+19878,
+19878,
+19887,
+19887,
+19905,
+19905,
+19905,
+19905,
+19922,
19940,
-19982,
-19994,
-20012,
-20015,
-20021,
-20077,
-20077,
-20077,
-20077,
-20080,
-20080,
-20091,
-20091,
-20094,
-20129,
-20137,
-20149,
-20149,
-20169,
-20175,
-20195,
-20207,
-20213,
-20213,
-20213,
-20216,
-20239,
-20248,
-20273,
-20277,
-20282,
-20304,
+19959,
+19959,
+19995,
+20003,
+20018,
+20068,
+20076,
+20092,
+20101,
+20117,
+20148,
+20151,
+20199,
+20199,
+20219,
+20219,
+20225,
+20231,
+20242,
+20262,
+20268,
+20294,
+20307,
20313,
-20326,
-20338,
-20341,
-20357,
-20360,
-20368,
-20427,
-20433,
+20325,
+20351,
+20351,
+20374,
+20391,
+20407,
20433,
+20443,
20446,
-20449,
-20509,
-20535,
-20544,
+20453,
+20466,
+20472,
+20558,
20564,
-20582,
-20592,
-20595,
-20608,
-20628,
-20628,
-20631,
-20664,
-20673,
-20691,
-20703,
-20710,
-20724,
-20743,
-20790,
-20815,
-20835,
-20857,
-20876,
-20879,
-20882,
-20882,
-20904,
-20927,
+20599,
+20621,
+20627,
+20630,
+20630,
+20653,
+20669,
+20672,
+20675,
+20682,
+20682,
+20685,
+20696,
+20696,
+20756,
+20759,
+20781,
+20805,
+20808,
+20843,
+20859,
+20859,
+20862,
+20890,
+20916,
20936,
-20942,
-20966,
-20972,
-20972,
-20987,
-21013,
-21030,
-21035,
+20936,
+20936,
+20946,
+20968,
+20971,
+20982,
+20985,
+20985,
+20998,
+21001,
+21001,
+21010,
+21026,
21047,
-21050,
-21072,
-21099,
+21073,
+21073,
+21104,
21113,
-21155,
-21178,
+21129,
+21158,
+21182,
+21182,
+21198,
21206,
-21215,
+21221,
+21224,
+21224,
+21224,
21227,
-21230,
-21230,
-21230,
-21230,
-21230,
-21230,
-21237,
+21235,
21259,
-21277,
+21266,
+21275,
+21281,
+21281,
+21298,
21315,
-21318,
-21327,
-21354,
+21332,
+21335,
+21338,
+21341,
+21341,
+21360,
+21363,
21366,
-21412,
-21438,
-21453,
-21468,
-21485,
-21490,
-21510,
-21510,
-21510,
-21566,
+21382,
+21382,
+21385,
+21402,
+21405,
+21428,
+21431,
+21449,
+21449,
+21452,
+21472,
+21481,
+21514,
+21544,
21569,
-21572,
-21587,
-21590,
-21599,
+21602,
21605,
-21634,
-21634,
-21656,
-21656,
-21659,
-21659,
-21678,
-21681,
+21623,
+21623,
+21627,
+21630,
+21643,
+21649,
+21684,
21684,
-21752,
-21752,
-21752,
-21779,
-21789,
-21792,
-21812,
-21865,
+21691,
+21691,
+21697,
+21704,
+21718,
+21727,
+21784,
+21793,
+21813,
+21813,
+21829,
+21832,
+21835,
+21838,
+21841,
+21841,
+21852,
21904,
-21936,
-21957,
-21966,
-21975,
-21987,
-22009,
-22024,
-22027,
-22050,
-22066,
-22083,
-22086,
-22098,
-22101,
-22107,
-22110,
-22116,
-22122,
-22173,
-22192,
-22231,
-22268,
-22286,
-22322,
-22322,
-22331,
-22334,
-22346,
-22356,
-22376,
-22376,
+21922,
+21922,
+21935,
+21935,
+21945,
+21945,
+21981,
+21984,
+21997,
+22018,
+22046,
+22065,
+22068,
+22068,
+22108,
+22114,
+22117,
+22121,
+22148,
+22148,
+22151,
+22174,
+22189,
+22204,
+22240,
+22273,
+22289,
+22304,
+22318,
+22342,
+22378,
22383,
-22394,
22404,
-22417,
-22436,
-22443,
-22466,
-22466,
-22472,
-22504,
-22504,
-22504,
-22504,
-22523,
-22542,
+22407,
+22425,
+22425,
+22461,
+22493,
+22493,
+22493,
+22503,
+22528,
+22534,
+22540,
22546,
-22563,
-22595,
-22598,
-22612,
-22615,
-22615,
-22615,
-22638,
-22657,
-22682,
-22703,
-22728,
-22739,
-22771,
-22780,
-22792,
-22824,
-22842,
-22842,
-22845,
-22858,
-22877,
-22896,
-22896,
-22907,
-22940,
+22549,
+22575,
+22608,
+22617,
+22617,
+22620,
+22635,
+22640,
+22673,
+22713,
+22746,
+22752,
+22755,
+22791,
+22831,
+22873,
+22904,
+22910,
+22913,
+22925,
+22928,
22946,
-22955,
-22955,
-22980,
-23002,
-23012,
-23012,
-23048,
-23059,
-23059,
-23059,
-23074,
-23074,
-23074,
-23078,
-23084,
-23097,
-23100,
-23100,
-23103,
-23149,
-23155,
-23187,
-23193,
-23210,
-23216,
-23250,
-23262,
-23292,
-23315,
-23318,
-23339,
-23362,
-23371,
-23371,
-23371,
-23392,
-23421,
-23477,
-23503,
-23581,
-23595,
-23607,
-23628,
-23664,
-23690,
+22969,
+23005,
+23005,
+23008,
+23042,
+23055,
+23058,
+23079,
+23079,
+23098,
+23119,
+23119,
+23129,
+23154,
+23173,
+23185,
+23199,
+23202,
+23202,
+23202,
+23208,
+23221,
+23221,
+23233,
+23240,
+23243,
+23246,
+23258,
+23267,
+23267,
+23282,
+23307,
+23327,
+23340,
+23343,
+23343,
+23343,
+23346,
+23349,
+23358,
+23361,
+23409,
+23439,
+23442,
+23442,
+23445,
+23464,
+23464,
+23476,
+23482,
+23504,
+23525,
+23540,
+23540,
+23547,
+23553,
+23553,
+23563,
+23587,
+23605,
+23611,
+23631,
+23631,
+23657,
+23677,
+23677,
+23677,
23693,
-23696,
-23723,
-23741,
-23750,
-23759,
-23768,
-23774,
-23787,
-23787,
-23824,
-23857,
-23870,
+23700,
+23728,
+23731,
+23746,
+23763,
+23789,
+23789,
+23814,
+23830,
+23853,
+23872,
+23875,
23885,
-23926,
+23914,
23939,
-23947,
-23957,
-23957,
-23957,
-23994,
-24024,
-24039,
-24045,
-24045,
-24048,
-24068,
-24071,
-24087,
-24126,
-24139,
-24150,
-24171,
-24171,
+23942,
+23942,
+23949,
+23971,
+23984,
+23999,
+24002,
+24040,
+24043,
+24110,
+24120,
+24133,
+24136,
+24146,
24174,
-24201,
-24210,
-24210,
+24184,
+24203,
+24207,
24210,
-24210,
-24210,
-24236,
-24256,
-24256,
-24270,
-24276,
-24276,
-24286,
-24286,
-24286,
-24286,
+24228,
+24235,
+24251,
+24258,
+24268,
+24274,
+24281,
+24288,
24298,
-24331,
-24362,
-24368,
-24385,
-24385,
-24385,
-24385,
-24385,
-24409,
-24429,
-24443,
-24450,
-24450,
-24450,
-24468,
-24474,
-24484,
-24484,
-24484,
-24502,
-24502,
-24502,
-24535,
-24535,
-24535,
-24535,
-24545,
-24567,
-24583,
-24599,
-24599,
-24628,
-24628,
-24628,
-24650,
-24663,
-24666,
-24672,
-24672,
-24672,
-24698,
-24725,
-24732,
-24771,
-24771,
-24787,
-24803,
-24803,
-24803,
-24847,
-24856,
-24856,
-24867,
-24904,
-24916,
-24925,
-24925,
-24925,
-24925,
-24948,
-24974,
-24974,
-24987,
-25021,
-25028,
-25028,
-25032,
-25032,
-25042,
-25042,
-25042,
-25042,
-25076,
-25081,
-25103,
-25103,
-25103,
-25124,
-25140,
+24301,
+24389,
+24454,
+24478,
+24478,
+24478,
+24488,
+24514,
+24549,
+24565,
+24578,
+24606,
+24609,
+24626,
+24646,
+24678,
+24678,
+24684,
+24701,
+24733,
+24745,
+24773,
+24773,
+24780,
+24794,
+24807,
+24817,
+24827,
+24833,
+24833,
+24839,
+24864,
+24871,
+24882,
+24888,
+24910,
+24917,
+24917,
+24955,
+24955,
+24979,
+24986,
+24986,
+24993,
+25000,
+25007,
+25019,
+25049,
+25056,
+25056,
+25073,
+25086,
+25093,
+25100,
+25107,
+25120,
+25133,
25140,
-25157,
-25164,
-25164,
-25164,
-25164,
-25164,
-25164,
-25164,
-25164,
-25164,
-25182,
-25182,
-25182,
-25188,
-25188,
-25188,
-25188,
-25201,
-25201,
-25201,
-25216,
-25248,
-25259,
-25259,
-25270,
-25270,
-25270,
-25289,
-25289,
-25295,
-25332,
-25332,
-25342,
-25342,
-25342,
-25342,
-25387,
-25413,
-25428,
-25433,
-25455,
-25473,
-25514,
-25536,
-25552,
-25552,
-25552,
-25552,
-25578,
-25597,
-25604,
-25604,
-25636,
-25636,
-25646,
-25663,
-25663,
-25689,
-25689,
-25699,
-25699,
-25721,
-25721,
-25721,
-25746,
-25792,
-25859,
-25877,
-25887,
-25898,
-25898,
-25898,
-25898,
-25919,
-25945,
-25957,
-25973,
-25990,
-26056,
-26071,
-26071,
-26083,
-26099,
-26099,
-26099,
-26121,
-26121,
-26151,
-26194,
-26194,
-26212,
-26240,
-26271,
-26271,
-26279,
-26279,
-26279,
-26279,
-26290,
-26290,
-26296,
-26306,
-26322,
-26334,
-26353,
-26353,
-26386,
-26407,
-26430,
-26442,
-26460,
-26460,
+25161,
+25161,
+25189,
+25206,
+25206,
+25213,
+25222,
+25267,
+25304,
+25345,
+25345,
+25345,
+25363,
+25363,
+25370,
+25373,
+25373,
+25373,
+25395,
+25411,
+25425,
+25445,
+25445,
+25452,
+25462,
+25475,
+25511,
+25535,
+25560,
+25575,
+25582,
+25589,
+25601,
+25607,
+25610,
+25654,
+25679,
+25698,
+25705,
+25711,
+25711,
+25718,
+25724,
+25724,
+25724,
+25766,
+25766,
+25809,
+25828,
+25852,
+25852,
+25867,
+25867,
+25891,
+25934,
+25969,
+25986,
+26015,
+26041,
+26070,
+26095,
+26109,
+26129,
+26129,
+26150,
+26157,
+26175,
+26189,
+26229,
+26244,
+26244,
+26244,
+26244,
+26263,
+26263,
+26288,
+26326,
+26340,
+26340,
+26347,
+26382,
+26412,
+26448,
+26468,
26474,
-26474,
-26482,
-26503,
-26513,
-26531,
-26531,
-26565,
-26565,
-26565,
-26601,
-26619,
-26626,
-26640,
-26659,
-26659,
-26679,
-26703,
-26703,
-26703,
-26713,
-26728,
-26728,
-26728,
-26737,
-26756,
-26771,
-26800,
-26819,
-26819,
-26823,
-26823,
-26823,
-26835,
-26835,
-26835,
-26857,
-26857,
-26857,
-26883,
-26911,
-26911,
-26920,
-26942,
-26971,
+26481,
+26488,
+26524,
+26563,
+26596,
+26596,
+26613,
+26627,
+26671,
+26710,
+26722,
+26729,
+26773,
+26812,
+26826,
+26844,
+26861,
+26876,
+26905,
+26905,
+26905,
+26919,
+26938,
+26970,
+26970,
+26970,
+26988,
27001,
-27019,
-27019,
-27024,
-27041,
-27075,
-27120,
-27137,
-27153,
-27153,
-27165,
-27165,
-27172,
-27185,
-27185,
-27203,
-27228,
-27238,
-27268,
-27283,
-27283,
-27283,
-27283,
-27309,
-27346,
-27346,
-27346,
-27346,
-27351,
-27360,
-27381,
-27406,
-27406,
-27406,
-27422,
-27447,
-27466,
+27025,
+27025,
+27025,
+27054,
+27060,
+27073,
+27099,
+27133,
+27140,
+27157,
+27184,
+27231,
+27257,
+27271,
+27293,
+27312,
+27330,
+27392,
+27401,
+27401,
+27426,
+27433,
+27445,
+27482,
+27489,
27489,
-27505,
-27522,
-27536,
+27524,
27556,
-27560,
-27578,
-27578,
-27593,
-27599,
-27631,
-27631,
-27631,
-27644,
-27656,
-27683,
-27683,
-27683,
-27683,
-27696,
-27718,
-27722,
-27729,
-27729,
-27729,
-27765,
-27765,
-27778,
-27800,
-27821,
-27821,
+27563,
+27570,
+27570,
+27587,
+27600,
+27600,
+27623,
+27623,
+27673,
+27673,
+27688,
+27688,
+27688,
+27688,
+27694,
+27701,
+27706,
+27706,
+27728,
+27775,
+27782,
+27806,
+27828,
+27828,
+27834,
+27840,
27853,
-27853,
-27853,
-27881,
-27881,
-27910,
-27910,
-27921,
-27943,
-27943,
-27964,
+27862,
+27868,
+27899,
+27906,
+27923,
+27937,
+27956,
+27963,
27974,
+27981,
28010,
-28026,
28046,
-28061,
-28073,
-28073,
-28073,
-28073,
+28050,
+28078,
+28085,
+28085,
28092,
-28110,
+28099,
+28105,
28128,
-28142,
-28142,
+28146,
28153,
-28199,
-28199,
-28199,
-28213,
-28228,
-28234,
-28274,
-28282,
-28282,
-28282,
-28282,
-28282,
-28282,
-28282,
-28320,
-28320,
-28340,
-28340,
-28351,
-28369,
-28384,
-28407,
-28419,
-28419,
-28428,
-28428,
-28428,
-28428,
-28444,
-28444,
-28444,
-28444,
-28463,
-28472,
-28472,
-28478,
-28501,
-28510,
-28510,
-28523,
-28523,
-28523,
-28563,
-28584,
-28603,
-28618,
+28170,
+28190,
+28197,
+28215,
+28225,
+28232,
+28251,
+28251,
+28251,
+28258,
+28271,
+28278,
+28278,
+28285,
+28300,
+28300,
+28325,
+28325,
+28325,
+28332,
+28362,
+28392,
+28401,
+28401,
+28416,
+28423,
+28468,
+28475,
+28488,
+28495,
+28504,
+28511,
+28558,
+28565,
+28588,
+28588,
28622,
-28638,
-28638,
-28658,
-28675,
-28675,
-28689,
-28746,
-28746,
-28746,
-28772,
-28772,
-28798,
+28629,
+28629,
+28647,
+28660,
+28672,
+28683,
+28683,
+28698,
+28705,
+28712,
+28712,
+28730,
+28761,
+28776,
+28800,
28826,
-28836,
-28845,
-28845,
-28861,
-28861,
-28871,
-28885,
-28885,
-28908,
-28908,
-28922,
-28922,
-28946,
-28982,
-28982,
-28982,
-28982,
-28982,
-28996,
-29003,
-29003,
-29033,
-29045,
-29045,
-29045,
-29045,
-29045,
-29045,
-29045,
-29045,
-29071,
-29071,
-29071,
-29071,
-29089,
-29089,
-29095,
-29095,
-29095,
-29110,
-29125,
-29145,
-29145,
-29145,
-29145,
-29145,
-29145,
-29173,
-29177,
-29194,
-29200,
-29212,
-29212,
-29212,
-29212,
-29226,
-29230,
-29230,
-29230,
-29237,
-29272,
-29272,
-29272,
-29272,
-29299,
-29314,
-29314,
-29319,
-29338,
-29338,
-29380,
-29380,
-29396,
-29434,
-29434,
-29434,
-29464,
-29481,
-29502,
-29521,
-29521,
-29521,
-29521,
-29521,
+28832,
+28870,
+28882,
+28905,
+28926,
+28926,
+28933,
+28933,
+28933,
+28958,
+28965,
+28981,
+28981,
+28988,
+29022,
+29034,
+29034,
+29056,
+29070,
+29086,
+29093,
+29099,
+29099,
+29111,
+29118,
+29118,
+29138,
+29138,
+29155,
+29155,
+29188,
+29231,
+29231,
+29231,
+29245,
+29245,
+29251,
+29263,
+29284,
+29290,
+29313,
+29313,
+29349,
+29362,
+29362,
+29393,
+29393,
+29407,
+29407,
+29447,
+29453,
+29453,
+29470,
+29470,
+29498,
29530,
29530,
-29550,
-29550,
-29561,
-29561,
-29561,
-29581,
-29619,
-29619,
-29637,
-29637,
-29637,
-29657,
-29657,
-29669,
-29674,
-29678,
-29678,
-29688,
-29707,
-29727,
-29766,
-29803,
-29803,
-29829,
-29829,
-29834,
-29834,
-29863,
-29870,
-29870,
-29877,
-29877,
-29877,
-29877,
-29877,
-29922,
-29928,
-29950,
-29980,
+29570,
+29570,
+29576,
+29576,
+29597,
+29610,
+29610,
+29620,
+29620,
+29620,
+29636,
+29661,
+29665,
+29665,
+29665,
+29680,
+29680,
+29693,
+29693,
+29693,
+29693,
+29698,
+29705,
+29738,
+29747,
+29765,
+29765,
+29775,
+29795,
+29795,
+29818,
+29818,
+29833,
+29885,
+29885,
+29919,
+29919,
+29953,
29980,
-29980,
-30001,
-30020,
-30037,
-30065,
-30072,
-30072,
-30085,
+29988,
+30004,
+30023,
+30027,
+30040,
+30057,
+30064,
+30064,
+30073,
+30098,
30098,
-30104,
+30110,
+30110,
+30110,
30130,
-30148,
-30148,
-30154,
-30179,
-30213,
-30227,
-30227,
-30255,
-30278,
-30278,
-30308,
-30337,
-30337,
-30337,
-30337,
+30138,
+30164,
+30164,
+30168,
+30181,
+30185,
+30210,
+30223,
+30223,
+30251,
+30307,
+30346,
+30346,
30359,
30365,
-30378,
-30378,
-30384,
-30384,
-30394,
-30412,
-30412,
-30423,
-30433,
-30443,
-30443,
-30455,
-30486,
-30493,
-30493,
-30493,
-30493,
-30565,
-30565,
-30576,
-30581,
-30609,
-30609,
-30609,
-30609,
-30628,
-30628,
-30639,
-30660,
+30365,
+30375,
+30408,
+30408,
+30416,
+30416,
+30422,
+30422,
+30422,
+30422,
+30422,
+30422,
+30444,
+30469,
+30506,
+30506,
+30514,
+30514,
+30540,
+30561,
+30575,
+30601,
+30601,
+30601,
+30617,
+30617,
+30652,
+30663,
30667,
-30692,
-30714,
-30714,
-30714,
-30721,
-30768,
-30768,
-30768,
-30801,
-30808,
-30822,
-30822,
-30843,
-30868,
-30880,
-30902,
-30923,
-30923,
-30942,
-30942,
-30942,
-30967,
-30981,
-30988,
-31001,
-31001,
+30674,
+30688,
+30695,
+30725,
+30725,
+30749,
+30760,
+30778,
+30786,
+30786,
+30799,
+30805,
+30809,
+30809,
+30845,
+30845,
+30845,
+30871,
+30871,
+30911,
+30932,
+30932,
+30947,
+30953,
+30957,
+30976,
+30976,
+30985,
+30991,
+30991,
+31008,
31024,
-31052,
-31086,
-31086,
-31086,
-31086,
-31105,
-31122,
-31136,
-31136,
-31166,
-31180,
-31187,
+31055,
+31055,
+31072,
+31112,
+31120,
+31128,
+31137,
+31181,
+31205,
+31205,
+31205,
+31205,
+31205,
31227,
31227,
-31232,
-31236,
-31236,
+31234,
+31273,
+31273,
31273,
-31293,
-31297,
-31308,
-31308,
-31315,
-31334,
-31353,
-31353,
-31373,
-31373,
-31406,
-31436,
-31441,
-31441,
-31448,
-31448,
-31464,
-31464,
-31471,
-31487,
-31487,
-31554,
-31569,
-31600,
-31624,
-31640,
-31650,
-31654,
-31654,
-31654,
-31675,
-31682,
-31682,
-31682,
-31698,
-31698,
-31708,
-31720,
-31749,
-31769,
-31789,
-31789,
-31789,
-31789,
-31804,
-31804,
-31808,
-31813,
-31848,
+31273,
+31281,
+31317,
+31327,
+31348,
+31384,
+31392,
+31409,
+31409,
+31417,
+31446,
+31446,
+31446,
+31446,
+31446,
+31463,
+31463,
+31463,
+31463,
+31463,
+31483,
+31490,
+31490,
+31500,
+31500,
+31500,
+31525,
+31584,
+31584,
+31594,
+31594,
+31594,
+31636,
+31647,
+31647,
+31667,
+31667,
+31688,
+31692,
+31692,
+31704,
+31719,
+31734,
+31734,
+31739,
+31739,
+31739,
+31755,
+31786,
+31807,
+31807,
+31807,
+31807,
+31822,
+31834,
+31838,
+31856,
+31856,
31876,
-31883,
-31912,
+31884,
+31908,
+31908,
+31908,
31912,
-31943,
-31943,
-31956,
-31956,
-31969,
-31979,
-31986,
-31986,
-32010,
-32010,
-32017,
-32024,
-32036,
-32046,
-32052,
-32059,
-32066,
-32090,
-32090,
-32105,
-32135,
-32167,
-32167,
-32197,
-32197,
-32207,
-32221,
-32221,
-32231,
-32252,
-32252,
-32252,
-32263,
-32291,
-32308,
-32315,
-32322,
-32322,
-32370,
-32377,
-32420,
-32468,
-32481,
+31932,
+31954,
+31960,
+31960,
+31990,
+31990,
+32000,
+32000,
+32029,
+32054,
+32094,
+32101,
+32101,
+32111,
+32111,
+32200,
+32217,
+32226,
+32230,
+32230,
+32230,
+32230,
+32244,
+32270,
+32270,
+32295,
+32311,
+32311,
+32311,
+32325,
+32329,
+32341,
+32350,
+32387,
+32404,
+32414,
+32422,
+32443,
+32449,
+32449,
+32449,
+32469,
+32489,
+32489,
+32496,
+32496,
32502,
32502,
-32530,
+32507,
+32524,
32542,
-32562,
-32562,
-32575,
-32607,
-32638,
-32646,
-32684,
-32684,
+32551,
+32571,
+32604,
+32620,
+32639,
+32663,
+32668,
+32674,
+32689,
32710,
32710,
-32729,
-32729,
-32729,
-32750,
-32770,
-32770,
-32816,
-32816,
-32816,
-32833,
-32848,
-32855,
-32867,
-32867,
+32710,
+32710,
+32720,
+32720,
+32720,
+32775,
+32775,
+32775,
+32775,
+32828,
+32864,
+32864,
+32864,
+32864,
+32880,
32901,
-32908,
-32915,
-32937,
-32937,
-32937,
-32975,
-32975,
-32995,
-33002,
-33024,
-33024,
-33045,
-33060,
-33060,
-33078,
-33085,
-33116,
-33138,
-33149,
-33156,
-33169,
-33169,
-33181,
-33188,
-33197,
-33216,
-33232,
-33232,
-33232,
-33239,
-33259,
-33279,
-33334,
-33341,
-33375,
-33395,
-33409,
-33440,
-33466,
-33509,
-33516,
-33530,
-33537,
-33544,
-33544,
-33569,
-33589,
-33614,
-33638,
-33638,
-33638,
-33672,
-33672,
-33680,
-33680,
-33693,
-33700,
-33704,
-33715,
-33722,
-33722,
-33722,
-33740,
-33772,
-33791,
-33828,
-33854,
-33861,
-33868,
-33892,
-33909,
-33916,
-33916,
-33923,
-33930,
-33930,
-33947,
-33947,
-33954,
-33961,
-33994,
-34008,
-34024,
-34028,
-34068,
+32928,
+32953,
+32964,
+32964,
+32976,
+32976,
+32976,
+32976,
+32976,
+32997,
+33013,
+33043,
+33043,
+33075,
+33107,
+33122,
+33168,
+33182,
+33193,
+33193,
+33218,
+33218,
+33234,
+33240,
+33264,
+33304,
+33347,
+33359,
+33359,
+33359,
+33359,
+33368,
+33384,
+33384,
+33428,
+33428,
+33428,
+33428,
+33450,
+33459,
+33459,
+33478,
+33489,
+33489,
+33489,
+33496,
+33496,
+33507,
+33541,
+33577,
+33577,
+33587,
+33587,
+33604,
+33616,
+33642,
+33642,
+33642,
+33642,
+33642,
+33642,
+33654,
+33662,
+33662,
+33662,
+33679,
+33679,
+33716,
+33716,
+33726,
+33726,
+33733,
+33733,
+33766,
+33766,
+33766,
+33770,
+33770,
+33782,
+33806,
+33815,
+33815,
+33834,
+33834,
+33834,
+33834,
+33850,
+33864,
+33885,
+33885,
+33895,
+33895,
+33895,
+33931,
+33938,
+33938,
+33944,
+33971,
+33977,
+34000,
+34000,
+34032,
+34036,
+34036,
+34053,
+34053,
34068,
34082,
-34106,
-34143,
-34143,
-34143,
-34154,
-34154,
-34166,
-34190,
-34212,
-34228,
-34228,
-34228,
-34247,
-34247,
-34261,
-34280,
-34287,
-34303,
-34313,
-34335,
-34335,
-34335,
-34361,
-34367,
-34390,
-34405,
-34437,
-34444,
-34451,
-34472,
-34500,
-34507,
-34507,
-34507,
-34517,
-34524,
-34541,
-34560,
-34567,
-34567,
-34567,
-34567,
-34574,
-34589,
-34589,
-34597,
-34652,
-34663,
-34670,
-34689,
-34708,
-34731,
-34752,
-34759,
-34766,
-34773,
-34790,
-34797,
-34797,
-34811,
-34811,
-34811,
-34818,
-34826,
-34826,
-34830,
-34837,
-34853,
-34853,
-34880,
-34908,
-34908,
-34915,
-34952,
-34959,
-34959,
-34966,
-34966,
+34082,
+34099,
+34110,
+34110,
+34115,
+34148,
+34148,
+34148,
+34148,
+34161,
+34175,
+34194,
+34194,
+34194,
+34249,
+34249,
+34253,
+34253,
+34253,
+34253,
+34253,
+34264,
+34264,
+34264,
+34272,
+34272,
+34279,
+34284,
+34292,
+34317,
+34323,
+34323,
+34323,
+34360,
+34360,
+34380,
+34411,
+34411,
+34433,
+34433,
+34454,
+34454,
+34454,
+34477,
+34477,
+34481,
+34481,
+34498,
+34504,
+34504,
+34521,
+34521,
+34556,
+34566,
+34572,
+34593,
+34593,
+34617,
+34617,
+34617,
+34640,
+34640,
+34640,
+34658,
+34665,
+34680,
+34698,
+34698,
+34698,
+34723,
+34723,
+34723,
+34723,
+34729,
+34753,
+34768,
+34768,
+34768,
+34768,
+34768,
+34768,
+34768,
+34768,
+34786,
+34799,
+34824,
+34824,
+34839,
+34859,
+34897,
+34897,
+34897,
+34906,
+34945,
+34945,
+34987,
34987,
-35005,
-35026,
-35033,
-35033,
-35033,
-35062,
-35082,
-35099,
-35112,
+34987,
+34987,
+34993,
+35016,
+35025,
+35035,
+35035,
+35074,
+35074,
+35080,
+35080,
+35091,
+35098,
35119,
-35126,
-35139,
-35139,
-35179,
-35196,
-35216,
-35234,
-35234,
-35234,
+35147,
+35147,
+35147,
+35159,
+35165,
+35165,
+35165,
+35177,
+35204,
+35211,
+35211,
+35211,
+35233,
+35233,
+35233,
35241,
35241,
35241,
-35247,
-35261,
-35261,
-35261,
-35261,
-35300,
-35322,
-35345,
-35345,
-35349,
-35376,
-35376,
-35392,
-35392,
-35410,
-35410,
-35410,
-35410,
-35417,
-35443,
-35443,
-35443,
-35443,
-35453,
-35453,
-35501,
-35512,
-35521,
+35273,
+35273,
+35273,
+35296,
+35303,
+35303,
+35308,
+35308,
+35308,
+35336,
+35344,
+35355,
+35360,
+35360,
+35385,
+35403,
+35403,
+35436,
+35436,
+35436,
+35447,
+35447,
+35470,
+35476,
+35517,
+35528,
35537,
35537,
-35548,
-35566,
-35572,
-35589,
-35589,
-35619,
-35626,
-35640,
-35647,
-35647,
-35656,
-35680,
-35700,
-35700,
-35724,
-35742,
-35742,
-35749,
-35768,
-35768,
-35801,
-35801,
-35858,
-35858,
-35877,
-35889,
-35934,
-35972,
-35987,
-35987,
-35987,
-35999,
-36021,
-36027,
-36027,
-36039,
-36053,
-36053,
-36068,
-36075,
-36082,
-36100,
-36115,
-36115,
-36122,
-36133,
-36133,
-36170,
-36176,
-36176,
-36176,
-36192,
-36205,
-36211,
-36211,
-36211,
-36273,
-36286,
-36300,
-36300,
-36316,
-36329,
-36329,
-36350,
-36356,
-36356,
+35537,
+35563,
+35611,
+35622,
+35622,
+35631,
+35631,
+35655,
+35655,
+35661,
+35661,
+35674,
+35687,
+35687,
+35693,
+35693,
+35702,
+35711,
+35711,
+35722,
+35722,
+35741,
+35759,
+35759,
+35775,
+35775,
+35775,
+35775,
+35782,
+35782,
+35845,
+35845,
+35865,
+35903,
+35927,
+35949,
+35955,
+35961,
+35961,
+35974,
+35998,
+36040,
+36040,
+36058,
+36058,
+36058,
+36093,
+36093,
+36093,
+36093,
+36135,
+36143,
+36160,
+36171,
+36180,
+36189,
+36196,
+36196,
+36196,
+36224,
+36255,
+36262,
+36337,
+36337,
+36337,
+36349,
36356,
-36365,
-36382,
-36426,
-36448,
-36448,
-36458,
-36458,
-36473,
-36486,
-36486,
-36497,
-36502,
-36502,
-36502,
-36533,
-36559,
-36585,
-36585,
-36585,
-36599,
-36603,
-36620,
-36620,
-36620,
-36638,
-36638,
-36677,
-36677,
-36689,
-36714,
-36744,
-36766,
-36777,
-36790,
-36802,
+36370,
+36401,
+36401,
+36420,
+36420,
+36434,
+36434,
+36462,
+36462,
+36474,
+36481,
+36481,
+36481,
+36481,
+36481,
+36481,
+36481,
+36488,
+36488,
+36488,
+36505,
+36544,
+36571,
+36571,
+36587,
+36616,
+36616,
+36628,
+36680,
+36690,
+36690,
+36711,
+36732,
+36732,
+36736,
+36754,
+36754,
+36761,
+36761,
+36794,
36812,
-36825,
-36864,
-36874,
-36874,
-36893,
-36925,
-36945,
-36945,
-37001,
-37001,
-37019,
-37027,
-37048,
-37075,
-37081,
-37111,
-37122,
-37122,
-37122,
-37139,
-37146,
-37171,
-37171,
-37171,
-37184,
-37191,
-37195,
-37195,
-37195,
-37202,
-37218,
-37218,
-37218,
-37218,
-37231,
-37272,
-37278,
-37294,
-37311,
-37326,
-37326,
-37326,
-37340,
-37373,
-37379,
-37395,
-37408,
-37408,
-37417,
-37417,
-37430,
-37438,
-37464,
-37482,
-37482,
-37526,
-37540,
-37540,
-37552,
-37568,
-37568,
-37568,
-37568,
-37568,
-37586,
+36849,
+36860,
+36860,
+36898,
+36918,
+36927,
+36944,
+36957,
+36957,
+36962,
+36977,
+37000,
+37017,
+37017,
+37017,
+37017,
+37032,
+37032,
+37038,
+37054,
+37054,
+37063,
+37063,
+37063,
+37088,
+37135,
+37145,
+37156,
+37169,
+37181,
+37210,
+37254,
+37254,
+37285,
+37316,
+37333,
+37378,
+37391,
+37422,
+37444,
+37444,
+37444,
+37444,
+37444,
+37460,
+37460,
+37518,
+37518,
+37541,
+37576,
37593,
-37621,
-37621,
-37621,
-37651,
-37663,
-37663,
-37663,
-37683,
-37715,
-37715,
-37728,
-37735,
-37758,
-37758,
-37796,
-37817,
-37823,
-37830,
-37830,
-37841,
-37859,
-37872,
-37902,
-37925,
-37983,
-38000,
-38013,
-38013,
-38013,
-38013,
-38024,
-38040,
-38040,
-38064,
-38064,
-38080,
-38080,
-38097,
+37610,
+37614,
+37619,
+37625,
+37625,
+37629,
+37649,
+37670,
+37698,
+37714,
+37727,
+37739,
+37739,
+37739,
+37762,
+37762,
+37790,
+37790,
+37807,
+37807,
+37807,
+37862,
+37878,
+37893,
+37900,
+37920,
+37951,
+37951,
+37976,
+37985,
+37985,
+38021,
+38051,
+38065,
+38065,
+38065,
+38065,
+38081,
+38081,
38112,
-38129,
-38129,
-38145,
-38155,
-38161,
-38174,
-38186,
-38203,
-38211,
-38211,
-38211,
-38218,
-38228,
-38228,
-38234,
-38234,
-38240,
-38246,
-38252,
-38286,
-38295,
-38312,
-38312,
-38321,
+38112,
+38150,
+38150,
+38150,
+38150,
+38150,
+38150,
+38150,
+38167,
+38178,
+38206,
+38238,
+38238,
+38261,
+38296,
+38296,
38321,
38321,
-38326,
-38338,
-38349,
-38358,
-38373,
-38409,
-38409,
+38363,
+38389,
+38389,
+38389,
+38403,
+38403,
38415,
38431,
-38453,
-38472,
-38472,
-38476,
-38483,
-38542,
-38542,
-38542,
-38565,
-38579,
-38579,
-38601,
-38611,
-38631,
-38631,
-38631,
-38655,
-38655,
-38655,
-38655,
-38655,
-38655,
-38661,
-38661,
-38673,
-38673,
-38680,
-38680,
-38680,
-38686,
-38686,
-38719,
-38719,
-38719,
-38728,
-38744,
-38756,
-38769,
-38769,
-38786,
-38803,
-38811,
-38811,
-38811,
-38811,
-38825,
-38825,
-38837,
-38850,
-38850,
-38865,
-38877,
-38877,
-38877,
-38888,
-38928,
-38928,
-38940,
-38958,
-38972,
-38993,
-38993,
-39002,
-39002,
-39032,
-39051,
+38431,
+38445,
+38473,
+38525,
+38571,
+38578,
+38578,
+38578,
+38589,
+38589,
+38589,
+38589,
+38604,
+38618,
+38618,
+38618,
+38624,
+38624,
+38634,
+38640,
+38640,
+38647,
+38685,
+38685,
+38694,
+38714,
+38729,
+38729,
+38729,
+38755,
+38755,
+38760,
+38760,
+38778,
+38778,
+38814,
+38814,
+38830,
+38842,
+38857,
+38857,
+38867,
+38882,
+38882,
+38893,
+38893,
+38893,
+38911,
+38911,
+38911,
+38925,
+38925,
+38932,
+38939,
+38939,
+38945,
+38953,
+38953,
+38953,
+38960,
+38960,
+38994,
+39004,
+39004,
+39004,
+39004,
+39014,
+39019,
39051,
-39058,
-39093,
-39100,
-39119,
+39073,
+39073,
+39095,
+39095,
39137,
-39152,
-39175,
-39175,
-39191,
+39162,
+39162,
+39167,
+39167,
+39188,
+39205,
39210,
-39226,
-39252,
-39277,
-39283,
-39283,
-39283,
+39223,
+39223,
+39223,
+39237,
+39255,
+39280,
+39280,
39311,
-39370,
-39395,
-39400,
-39408,
-39415,
-39443,
-39443,
-39449,
-39476,
-39476,
-39482,
-39501,
-39511,
-39557,
-39565,
-39572,
+39358,
+39406,
+39406,
+39406,
+39429,
+39444,
+39454,
+39487,
+39487,
+39503,
+39516,
+39516,
+39516,
+39522,
+39540,
+39540,
+39559,
+39559,
+39559,
+39569,
39591,
39591,
-39624,
-39624,
-39644,
-39644,
-39651,
+39611,
+39611,
+39611,
+39611,
+39619,
+39619,
+39619,
+39619,
+39631,
+39646,
+39646,
39651,
-39667,
-39677,
-39677,
-39677,
-39691,
-39696,
-39725,
-39725,
-39752,
-39752,
-39752,
-39760,
-39782,
-39788,
-39806,
-39806,
-39841,
-39854,
-39872,
-39896,
-39896,
-39896,
-39896,
-39896,
-39907,
-39907,
-39907,
-39917,
-39927,
-39927,
-39948,
-39948,
-39961,
-39971,
-39981,
-39981,
-40018,
-40032,
-40032,
-40032,
-40036,
-40056,
-40056,
-40056,
-40056,
-40056,
-40060,
-40060,
+39657,
+39657,
+39657,
+39657,
+39674,
+39729,
+39729,
+39758,
+39772,
+39789,
+39875,
+39887,
+39887,
+39887,
+39887,
+39944,
+39944,
+39983,
+39999,
+39999,
+40015,
+40019,
+40049,
+40064,
+40064,
40073,
-40082,
-40082,
-40093,
-40093,
-40093,
-40100,
-40107,
-40129,
-40135,
-40157,
-40167,
-40206,
-40206,
-40227,
-40260,
-40267,
-40267,
-40267,
-40289,
-40299,
-40311,
-40321,
-40321,
-40321,
-40321,
-40321,
-40341,
-40357,
-40375,
-40375,
-40387,
-40387,
-40387,
-40387,
-40387,
-40405,
-40405,
-40416,
+40073,
+40080,
+40089,
+40089,
+40089,
+40089,
+40094,
+40094,
+40101,
+40112,
+40128,
+40155,
+40187,
+40187,
+40187,
+40194,
+40194,
+40221,
+40258,
+40258,
+40265,
+40272,
+40272,
+40279,
+40283,
+40290,
+40290,
+40307,
+40336,
+40370,
+40370,
+40370,
+40389,
+40389,
+40406,
+40429,
+40429,
+40429,
+40429,
+40429,
+40429,
+40429,
+40436,
40447,
40447,
-40499,
-40513,
-40513,
-40513,
-40513,
-40561,
-40591,
-40607,
-40628,
-40628,
-40661,
-40661,
-40661,
-40661,
-40661,
-40661,
-40668,
-40668,
-40689,
-40698,
-40725,
-40732,
-40764,
-40776,
-40813,
-40827,
-40827,
-40835,
+40447,
+40464,
+40478,
+40487,
+40487,
+40520,
+40520,
+40526,
+40526,
+40531,
+40531,
+40549,
+40568,
+40574,
+40574,
+40616,
+40623,
+40630,
+40630,
+40644,
+40666,
+40666,
+40695,
+40703,
+40703,
+40711,
+40711,
+40718,
+40723,
+40736,
+40736,
+40736,
+40746,
+40785,
+40795,
+40804,
+40804,
+40816,
40835,
-40848,
-40848,
-40854,
-40870,
+40851,
+40877,
40891,
-40900,
-40920,
40931,
-40947,
-40963,
-40963,
-40963,
-40985,
-40985,
-41000,
-41000,
-41035,
-41054,
-41054,
-41084,
-41099,
-41099,
-41106,
-41116,
-41116,
-41116,
-41116,
-41129,
-41129,
-41137,
-41137,
-41137,
-41137,
-41156,
-41170,
-41181,
-41206,
-41213,
-41213,
-41213,
-41230,
-41230,
-41251,
-41251,
-41261,
-41275,
-41275,
-41296,
-41296,
-41314,
-41314,
-41347,
-41347,
-41373,
-41381,
-41381,
-41395,
-41413,
-41413,
-41413,
-41446,
-41463,
-41463,
-41463,
-41478,
-41478,
-41478,
-41489,
-41489,
-41503,
-41503,
-41503,
-41503,
-41547,
-41547,
-41547,
-41557,
-41569,
+40938,
+40976,
+40986,
+41006,
+41006,
+41013,
+41025,
+41031,
+41045,
+41045,
+41097,
+41118,
+41118,
+41143,
+41157,
+41183,
+41194,
+41194,
+41236,
+41264,
+41286,
+41286,
+41327,
+41334,
+41334,
+41334,
+41334,
+41352,
+41352,
+41358,
+41358,
+41358,
+41375,
+41383,
+41383,
+41398,
+41423,
+41423,
+41467,
+41467,
+41474,
+41490,
+41490,
+41521,
+41521,
+41521,
+41559,
+41566,
41576,
41598,
-41598,
-41604,
-41611,
-41649,
-41681,
-41700,
-41733,
-41746,
-41753,
-41784,
-41784,
-41804,
-41804,
-41829,
-41838,
-41838,
-41863,
-41863,
-41863,
-41863,
-41863,
-41863,
-41904,
-41904,
-41939,
-41939,
-41939,
-41977,
-41977,
-41977,
-41986,
-41986,
-42064,
-42071,
-42071,
-42078,
-42078,
-42078,
-42078,
-42078,
-42094,
-42094,
-42099,
-42137,
-42137,
+41643,
+41667,
+41680,
+41703,
+41703,
+41703,
+41714,
+41752,
+41761,
+41768,
+41775,
+41789,
+41789,
+41825,
+41841,
+41841,
+41841,
+41871,
+41906,
+41906,
+41936,
+41975,
+41990,
+41990,
+41990,
+41990,
+42030,
+42030,
+42056,
+42056,
+42066,
+42066,
+42097,
+42097,
+42124,
+42141,
+42141,
+42141,
+42147,
+42154,
42161,
-42161,
-42218,
-42224,
-42224,
-42224,
-42224,
-42243,
-42308,
-42308,
+42177,
+42177,
+42203,
+42210,
+42210,
+42210,
+42210,
+42210,
+42222,
+42222,
+42222,
+42244,
+42244,
+42300,
+42300,
42322,
-42343,
-42343,
-42352,
-42384,
-42384,
-42392,
-42392,
-42400,
-42414,
-42414,
-42414,
-42414,
-42455,
-42477,
-42477,
-42511,
+42346,
+42356,
+42356,
+42387,
+42387,
+42387,
+42413,
+42413,
+42434,
+42434,
+42487,
+42507,
+42514,
42528,
-42541,
-42541,
-42541,
-42541,
-42541,
-42557,
-42557,
-42577,
-42606,
-42632,
-42632,
-42632,
-42639,
-42659,
-42659,
-42672,
-42684,
-42684,
+42528,
+42528,
+42548,
+42582,
+42582,
+42588,
+42631,
+42649,
+42656,
+42676,
42684,
42704,
-42704,
-42719,
-42719,
-42748,
-42758,
-42776,
-42789,
-42843,
-42850,
-42875,
-42882,
-42887,
-42901,
-42915,
-42915,
-42915,
-42915,
-42915,
-42920,
-42927,
-42933,
-42952,
-42973,
-43005,
-43015,
-43015,
-43015,
-43015,
-43025,
-43039,
-43039,
-43048,
-43059,
-43059,
-43066,
+42718,
+42743,
+42764,
+42777,
+42783,
+42802,
+42829,
+42855,
+42869,
+42869,
+42869,
+42869,
+42879,
+42879,
+42891,
+42891,
+42919,
+42919,
+42934,
+42950,
+42950,
+42992,
+43012,
+43012,
+43021,
+43033,
+43033,
+43056,
43066,
-43083,
-43083,
-43083,
-43083,
-43090,
-43090,
-43106,
-43114,
-43136,
-43155,
-43155,
-43193,
-43218,
-43218,
-43227,
-43255,
-43275,
-43292,
-43292,
-43292,
-43318,
-43331,
-43331,
-43339,
-43350,
-43362,
-43362,
-43375,
-43375,
-43375,
-43389,
-43389,
-43389,
-43404,
-43437,
-43437,
-43449,
+43079,
+43079,
+43079,
+43088,
+43095,
+43163,
+43163,
+43163,
+43163,
+43171,
+43171,
+43194,
+43217,
+43217,
+43223,
+43252,
+43252,
+43267,
+43281,
+43304,
+43322,
+43348,
+43359,
+43392,
+43402,
+43441,
+43441,
+43441,
+43468,
43468,
43468,
-43490,
-43497,
-43509,
-43509,
-43533,
-43542,
-43553,
-43599,
-43629,
-43629,
-43664,
+43485,
+43489,
+43519,
+43526,
+43526,
+43564,
+43564,
+43564,
+43583,
+43583,
+43605,
+43609,
+43621,
+43640,
+43651,
+43651,
+43655,
+43662,
+43662,
43685,
-43699,
-43705,
43712,
-43737,
-43750,
-43769,
-43803,
-43803,
-43810,
-43810,
-43810,
-43827,
-43833,
-43851,
-43851,
-43851,
-43851,
-43857,
-43895,
-43895,
-43895,
-43895,
-43911,
-43922,
-43922,
-43950,
-43961,
-43965,
+43728,
+43733,
+43752,
+43760,
+43775,
+43786,
+43786,
+43796,
+43811,
+43846,
+43862,
+43862,
+43892,
+43930,
+43930,
+43956,
43986,
-43986,
-43996,
-44056,
-44079,
-44097,
-44110,
-44110,
-44110,
-44110,
-44110,
-44119,
-44136,
-44153,
-44163,
-44163,
-44183,
-44183,
+44006,
+44006,
+44016,
+44059,
+44059,
+44084,
+44091,
+44091,
+44105,
+44113,
+44128,
+44157,
+44167,
+44173,
+44195,
+44195,
+44195,
+44213,
+44213,
44213,
44238,
-44238,
-44263,
-44271,
-44271,
-44281,
-44281,
-44295,
-44295,
-44314,
-44314,
-44332,
-44332,
-44332,
-44337,
-44337,
-44337,
-44357,
-44394,
-44407,
-44407,
-44407,
-44407,
-44428,
-44428,
-44428,
-44447,
-44457,
-44462,
-44472,
-44472,
-44502,
-44502,
-44502,
-44508,
-44508,
-44508,
-44521,
-44521,
-44521,
-44527,
-44534,
-44534,
-44534,
-44534,
-44548,
-44548,
-44548,
-44548,
-44548,
-44548,
-44548,
-44578,
-44600,
-44600,
-44615,
-44631,
-44631,
-44675,
-44692,
-44712,
-44712,
-44712,
-44712,
-44712,
-44712,
-44744,
-44759,
-44775,
-44775,
-44798,
-44805,
-44805,
-44805,
-44821,
-44821,
-44821,
-44821,
-44828,
-44840,
-44840,
-44877,
-44890,
-44890,
-44890,
-44909,
-44909,
-44924,
-44937,
-44943,
-44943,
+44255,
+44316,
+44316,
+44327,
+44327,
+44335,
+44335,
+44335,
+44335,
+44372,
+44372,
+44372,
+44372,
+44379,
+44402,
+44431,
+44454,
+44470,
+44486,
+44486,
+44512,
+44512,
+44525,
+44538,
+44555,
+44574,
+44574,
+44574,
+44583,
+44583,
+44583,
+44583,
+44597,
+44617,
+44627,
+44627,
+44666,
+44666,
+44666,
+44673,
+44673,
+44673,
+44736,
+44736,
+44736,
+44736,
+44743,
+44763,
+44787,
+44804,
+44819,
+44819,
+44835,
+44848,
+44886,
+44886,
+44915,
+44944,
44949,
-44957,
-44965,
-44977,
-44977,
-44977,
-44983,
-44989,
-44989,
-45018,
-45018,
-45032,
-45032,
-45032,
-45078,
-45103,
-45144,
-45167,
-45198,
+44949,
+44949,
+44949,
+44976,
+44976,
+45008,
+45008,
+45028,
+45028,
+45062,
+45062,
+45069,
+45069,
+45095,
+45095,
+45095,
+45105,
+45122,
+45143,
+45153,
+45153,
+45153,
+45153,
+45153,
+45153,
+45153,
+45153,
+45158,
+45158,
+45158,
+45186,
45198,
-45206,
-45237,
+45225,
+45225,
45243,
-45255,
-45259,
-45267,
-45285,
-45307,
-45307,
-45307,
-45325,
-45332,
-45352,
-45374,
-45374,
-45374,
-45374,
-45383,
-45387,
-45391,
-45409,
-45409,
-45445,
-45445,
-45467,
-45488,
-45488,
-45488,
-45488,
-45502,
-45553,
-45580,
-45606,
-45606,
-45635,
-45654,
-45654,
-45661,
-45661,
-45679,
-45691,
-45717,
-45726,
-45731,
-45731,
-45744,
-45744,
-45744,
+45270,
+45287,
+45287,
+45287,
+45316,
+45348,
+45365,
+45372,
+45381,
+45381,
+45402,
+45402,
+45420,
+45420,
+45435,
+45435,
+45448,
+45448,
+45499,
+45507,
+45507,
+45529,
+45547,
+45547,
+45547,
+45556,
+45573,
+45583,
+45593,
+45609,
+45620,
+45620,
+45663,
+45688,
+45705,
+45705,
+45711,
+45729,
45752,
+45766,
+45772,
45782,
-45794,
-45794,
-45801,
-45806,
-45806,
-45806,
-45806,
-45811,
+45799,
45811,
-45811,
-45830,
-45830,
-45830,
-45834,
-45834,
-45856,
-45856,
-45900,
-45922,
-45922,
-45922,
-45955,
-45959,
-45963,
-45970,
-45997,
-45997,
-46010,
-46010,
-46019,
-46019,
-46045,
+45866,
+45866,
+45903,
+45903,
+45903,
+45903,
+45924,
+45974,
+45978,
+45994,
+45994,
+45998,
46045,
-46059,
-46079,
-46079,
+46060,
46083,
-46090,
-46090,
-46090,
-46090,
-46112,
-46117,
-46117,
-46135,
-46135,
-46141,
-46151,
-46151,
-46160,
-46176,
-46205,
-46205,
+46083,
+46114,
+46123,
+46130,
+46180,
+46186,
+46201,
+46201,
+46201,
46259,
-46283,
-46283,
-46300,
-46300,
-46321,
-46321,
-46340,
-46352,
-46372,
-46372,
-46378,
-46378,
-46378,
-46396,
+46280,
+46291,
+46295,
+46301,
+46347,
+46347,
46396,
-46427,
+46412,
+46455,
+46455,
+46455,
46460,
-46485,
-46485,
-46502,
-46502,
-46543,
-46543,
-46551,
-46551,
-46551,
-46559,
-46572,
-46572,
-46572,
-46588,
-46588,
-46588,
-46598,
-46598,
-46598,
-46605,
-46645,
-46645,
-46652,
-46686,
-46698,
-46705,
-46705,
-46705,
-46715,
+46487,
+46509,
+46509,
+46509,
+46523,
+46565,
+46578,
+46578,
+46578,
+46584,
+46594,
+46594,
+46638,
+46659,
+46659,
+46671,
+46671,
+46691,
+46691,
+46691,
+46718,
+46718,
46732,
-46743,
-46825,
-46837,
-46849,
-46856,
-46880,
-46880,
-46880,
-46880,
-46888,
-46888,
-46914,
-46914,
-46914,
-46914,
-46924,
-46966,
-46966,
-46966,
-46970,
-46987,
-46997,
-46997,
-46997,
-47014,
-47033,
-47054,
-47059,
-47088,
-47107,
-47107,
-47114,
-47131,
-47131,
-47148,
-47148,
-47177,
-47177,
-47190,
-47212,
-47212,
-47212,
-47229,
-47229,
-47238,
-47238,
-47238,
-47238,
-47262,
-47262,
-47262,
-47262,
-47285,
-47295,
-47295,
-47304,
-47318,
-47326,
-47345,
-47345,
-47351,
-47351,
-47351,
-47370,
-47375,
-47387,
-47387,
-47387,
-47387,
-47408,
-47444,
-47451,
-47462,
-47462,
-47470,
-47499,
+46742,
+46759,
+46759,
+46787,
+46803,
+46803,
+46816,
+46844,
+46867,
+46867,
+46898,
+46898,
+46920,
+46963,
+46991,
+47006,
+47016,
+47016,
+47028,
+47043,
+47047,
+47047,
+47047,
+47078,
+47093,
+47100,
+47120,
+47125,
+47139,
+47139,
+47143,
+47162,
+47162,
+47182,
+47182,
+47204,
+47204,
+47223,
+47223,
+47234,
+47234,
+47234,
+47239,
+47239,
+47247,
+47247,
+47253,
+47287,
+47287,
+47287,
+47287,
+47287,
+47306,
+47346,
+47376,
+47376,
+47412,
+47412,
+47412,
+47412,
+47412,
+47412,
+47420,
+47429,
+47438,
+47438,
+47438,
+47438,
+47449,
+47449,
+47465,
+47465,
+47479,
+47498,
+47498,
+47498,
+47498,
+47510,
+47532,
+47540,
+47547,
+47553,
47553,
47553,
47553,
+47569,
+47569,
47589,
-47612,
-47612,
-47624,
-47685,
-47685,
-47685,
-47702,
-47702,
-47702,
-47724,
-47724,
-47733,
-47743,
-47743,
-47754,
-47754,
-47769,
-47778,
+47589,
+47589,
+47631,
+47637,
+47637,
+47637,
+47637,
+47653,
+47653,
+47653,
+47672,
+47672,
+47672,
+47703,
+47703,
+47703,
+47711,
+47725,
+47725,
+47748,
47778,
-47788,
-47788,
-47788,
-47800,
-47811,
-47811,
-47837,
-47862,
-47862,
-47869,
-47887,
+47790,
+47790,
+47815,
+47815,
+47815,
+47842,
+47842,
+47858,
+47880,
+47880,
+47880,
+47880,
+47910,
+47910,
47921,
-47927,
-47957,
-47957,
-48001,
-48006,
-48006,
-48006,
-48016,
-48016,
-48023,
-48023,
+47948,
+47959,
+47959,
+47959,
+47979,
+47979,
+47984,
+48010,
+48019,
48035,
48035,
-48053,
-48080,
-48095,
-48114,
-48114,
-48127,
-48127,
-48131,
-48144,
-48144,
-48155,
-48155,
-48155,
-48155,
-48155,
-48161,
-48161,
-48196,
-48196,
-48230,
-48230,
-48247,
-48247,
-48271,
-48271,
-48275,
-48275,
-48288,
-48302,
-48302,
-48314,
-48333,
-48353,
-48359,
-48359,
-48384,
-48392,
-48433,
-48433,
-48433,
-48441,
-48452,
-48456,
-48475,
-48498,
-48503,
-48508,
-48508,
-48514,
-48545,
-48573,
-48573,
-48613,
-48613,
-48613,
-48613,
-48630,
-48630,
-48630,
-48630,
-48652,
-48652,
-48658,
-48658,
-48658,
-48658,
-48658,
-48690,
-48690,
-48690,
-48700,
-48700,
-48708,
-48733,
-48749,
-48749,
-48774,
-48781,
-48801,
-48855,
-48880,
-48891,
-48895,
+48054,
+48054,
+48089,
+48089,
+48105,
+48115,
+48121,
+48135,
+48159,
+48169,
+48169,
+48169,
+48169,
+48187,
+48187,
+48187,
+48227,
+48244,
+48256,
+48272,
+48272,
+48287,
+48287,
+48287,
+48287,
+48287,
+48309,
+48341,
+48341,
+48351,
+48351,
+48351,
+48380,
+48380,
+48380,
+48386,
+48414,
+48439,
+48455,
+48491,
+48505,
+48517,
+48517,
+48517,
+48517,
+48562,
+48577,
+48577,
+48589,
+48594,
+48631,
+48631,
+48644,
+48644,
+48644,
+48648,
+48660,
+48667,
+48685,
+48685,
+48695,
+48695,
+48695,
+48695,
+48710,
+48710,
+48710,
+48727,
+48753,
+48753,
+48769,
+48769,
+48775,
+48788,
+48788,
+48802,
+48830,
+48834,
+48873,
+48873,
+48882,
+48886,
+48898,
+48915,
48915,
-48944,
-48965,
-48973,
-49032,
-49032,
-49041,
-49060,
-49060,
-49088,
-49121,
-49138,
-49164,
-49171,
-49171,
-49186,
-49192,
-49208,
-49222,
-49243,
-49272,
-49323,
-49323,
-49357,
-49357,
-49357,
-49357,
-49392,
+48950,
+49002,
+49019,
+49019,
+49029,
+49029,
+49068,
+49068,
+49068,
+49090,
+49090,
+49106,
+49106,
+49106,
+49113,
+49148,
+49163,
+49163,
+49206,
+49229,
+49253,
+49281,
+49281,
+49281,
+49281,
+49295,
+49307,
+49311,
+49327,
+49343,
+49360,
+49403,
49403,
49403,
-49417,
-49428,
+49429,
+49429,
+49434,
+49434,
+49434,
+49434,
+49444,
+49444,
+49460,
+49460,
49496,
-49515,
-49525,
-49525,
-49525,
-49525,
-49532,
-49532,
-49532,
-49604,
-49659,
-49714,
-49714,
-49722,
-49744,
-49744,
-49744,
-49744,
-49744,
-49748,
-49756,
-49756,
-49756,
+49503,
+49538,
+49574,
+49574,
+49574,
+49574,
+49612,
+49612,
+49651,
+49661,
+49686,
+49686,
+49695,
+49710,
+49710,
+49725,
+49742,
+49742,
+49742,
+49742,
+49742,
+49757,
+49757,
49762,
-49769,
-49769,
-49775,
-49775,
-49783,
-49783,
-49795,
-49795,
-49813,
-49833,
-49833,
-49858,
-49893,
-49911,
+49815,
+49835,
+49863,
+49863,
+49869,
+49888,
+49907,
+49907,
49917,
-49926,
-49938,
-49948,
-49948,
-49948,
-49948,
-49948,
-49966,
-49966,
-49966,
-49982,
-49982,
-49982,
-49993,
-50033,
-50068,
-50068,
-50068,
-50068,
-50068,
-50080,
+49940,
+49940,
+49946,
+49963,
+49998,
+50017,
+50031,
+50052,
+50074,
+50074,
50085,
-50114,
-50129,
-50142,
-50147,
-50147,
-50147,
-50147,
-50165,
-50174,
-50174,
-50174,
-50191,
+50085,
+50105,
+50105,
+50123,
+50123,
+50136,
+50152,
+50192,
+50192,
+50212,
+50212,
+50226,
50226,
-50231,
-50284,
-50295,
-50295,
-50295,
-50295,
-50300,
-50318,
-50318,
-50341,
-50360,
-50360,
-50360,
-50371,
-50371,
-50371,
+50259,
+50259,
+50259,
+50282,
+50287,
+50315,
+50320,
+50320,
+50320,
+50320,
50379,
-50400,
-50400,
-50411,
-50411,
-50446,
-50453,
-50453,
-50453,
-50480,
-50492,
-50509,
-50509,
-50509,
+50396,
+50412,
+50412,
+50412,
+50412,
+50443,
+50466,
+50466,
+50489,
+50489,
+50503,
+50503,
+50503,
+50503,
50521,
-50521,
-50521,
-50521,
-50533,
-50539,
-50549,
-50593,
-50593,
-50600,
-50600,
-50619,
-50619,
-50635,
+50529,
+50529,
+50556,
+50575,
+50575,
+50581,
+50581,
+50581,
+50585,
+50585,
+50598,
+50598,
+50598,
+50598,
+50598,
+50611,
+50636,
+50636,
50646,
-50646,
-50662,
-50672,
-50672,
-50672,
-50672,
-50696,
-50696,
-50696,
-50718,
-50726,
-50737,
-50744,
-50761,
-50792,
-50792,
-50811,
-50838,
-50857,
-50857,
-50857,
-50857,
-50857,
-50874,
-50909,
-50919,
-50923,
-50923,
-50929,
-50935,
-50935,
-50956,
-50956,
-50964,
-50964,
-50988,
-50988,
-50995,
-50995,
-51002,
-51036,
-51057,
-51075,
-51089,
-51098,
-51116,
-51159,
-51179,
-51222,
-51222,
-51240,
-51271,
-51324,
-51324,
-51334,
-51350,
-51370,
-51370,
-51370,
-51409,
-51409,
-51432,
-51444,
-51444,
-51450,
-51450,
-51450,
-51487,
-51487,
-51500,
-51552,
-51583,
-51629,
-51629,
-51648,
-51666,
-51688,
-51704,
-51704,
-51704,
-51725,
-51743,
-51743,
-51743,
-51783,
-51783,
-51783,
-51811,
-51847,
-51847,
-51853,
-51866,
-51875,
+50661,
+50661,
+50661,
+50680,
+50680,
+50713,
+50713,
+50729,
+50753,
+50753,
+50759,
+50791,
+50806,
+50806,
+50806,
+50806,
+50806,
+50814,
+50831,
+50831,
+50831,
+50878,
+50897,
+50897,
+50921,
+50943,
+50949,
+50960,
+50981,
+50991,
+51008,
+51020,
+51020,
+51035,
+51045,
+51045,
+51085,
+51110,
+51123,
+51123,
+51142,
+51176,
+51204,
+51204,
+51214,
+51214,
+51214,
+51214,
+51232,
+51239,
+51239,
+51279,
+51279,
+51279,
+51279,
+51279,
+51295,
+51295,
+51314,
+51340,
+51358,
+51383,
+51414,
+51434,
+51434,
+51434,
+51440,
+51440,
+51459,
+51465,
+51484,
+51502,
+51502,
+51519,
+51536,
+51536,
+51551,
+51551,
+51557,
+51557,
+51557,
+51564,
+51573,
+51573,
+51573,
+51580,
+51580,
+51594,
+51594,
+51610,
+51610,
+51625,
+51625,
+51669,
+51669,
+51669,
+51720,
+51720,
+51720,
+51720,
+51730,
+51730,
+51730,
+51730,
+51750,
+51793,
+51800,
+51810,
+51821,
+51827,
+51852,
+51865,
+51869,
+51869,
51875,
-51892,
-51907,
-51907,
-51921,
-51964,
-52010,
-52051,
-52051,
-52068,
-52068,
-52068,
-52068,
-52068,
-52076,
-52076,
-52094,
-52103,
-52130,
-52154,
-52154,
-52160,
-52165,
-52172,
-52190,
-52190,
-52201,
-52207,
-52207,
-52215,
-52215,
-52215,
-52215,
-52215,
-52237,
-52237,
-52237,
-52244,
-52272,
-52272,
-52272,
-52281,
-52281,
-52297,
-52318,
-52329,
-52347,
-52347,
-52347,
-52347,
-52361,
-52361,
-52388,
-52412,
-52412,
-52412,
-52422,
-52430,
-52459,
-52465,
-52497,
-52512,
-52556,
-52556,
-52587,
-52594,
-52601,
-52633,
-52633,
-52639,
-52651,
-52687,
-52687,
-52708,
-52708,
-52720,
-52720,
-52720,
-52739,
-52773,
-52773,
-52795,
-52818,
-52818,
-52825,
-52864,
-52864,
-52896,
-52896,
-52896,
-52896,
-52903,
-52914,
-52948,
+51911,
+51911,
+51911,
+51934,
+51953,
+51953,
+51953,
+51967,
+51967,
+51967,
+51980,
+51985,
+51985,
+51985,
+51985,
+51985,
+51985,
+51996,
+52044,
+52044,
+52044,
+52065,
+52065,
+52079,
+52093,
+52105,
+52105,
+52112,
+52136,
+52136,
+52158,
+52167,
+52194,
+52211,
+52232,
+52266,
+52290,
+52321,
+52321,
+52338,
+52371,
+52371,
+52371,
+52371,
+52376,
+52401,
+52415,
+52415,
+52425,
+52425,
+52435,
+52435,
+52443,
+52443,
+52455,
+52491,
+52506,
+52547,
+52567,
+52567,
+52584,
+52588,
+52598,
+52638,
+52643,
+52664,
+52664,
+52664,
+52664,
+52664,
+52693,
+52701,
+52701,
+52740,
+52775,
+52775,
+52813,
+52824,
+52849,
+52849,
+52862,
+52877,
+52890,
+52890,
+52890,
+52906,
+52931,
+52952,
+52952,
+52952,
+52952,
52968,
-52968,
-52968,
-52968,
-52985,
-52985,
-52985,
-52992,
-53001,
-53001,
-53001,
+52977,
+52995,
+52995,
+52995,
53010,
-53027,
-53042,
-53052,
-53052,
-53082,
-53109,
-53109,
-53109,
-53117,
-53125,
-53125,
-53143,
-53171,
-53171,
-53171,
-53187,
-53197,
-53197,
-53197,
-53197,
-53234,
-53234,
-53234,
-53251,
-53251,
-53270,
-53270,
-53270,
-53293,
-53318,
-53344,
-53344,
-53351,
-53351,
-53368,
-53374,
-53374,
-53374,
-53392,
-53424,
-53424,
-53441,
-53467,
-53467,
-53474,
-53474,
-53505,
-53520,
-53524,
-53524,
-53524,
-53531,
-53578,
-53578,
-53594,
-53613,
-53613,
-53629,
-53629,
-53651,
-53684,
-53684,
-53693,
-53693,
-53715,
-53715,
-53754,
-53754,
-53800,
-53800,
-53800,
-53806,
-53806,
-53806,
-53823,
-53848,
-53865,
-53875,
-53905,
-53914,
-53914,
-53914,
-53937,
-53937,
-53955,
-53980,
-53997,
-53997,
-53997,
-54013,
-54024,
-54024,
-54035,
-54053,
-54053,
-54091,
+53010,
+53039,
+53039,
+53039,
+53056,
+53056,
+53065,
+53077,
+53095,
+53113,
+53142,
+53142,
+53151,
+53151,
+53167,
+53167,
+53192,
+53192,
+53198,
+53198,
+53198,
+53226,
+53226,
+53226,
+53232,
+53276,
+53288,
+53288,
+53301,
+53301,
+53301,
+53301,
+53301,
+53301,
+53301,
+53301,
+53313,
+53336,
+53345,
+53363,
+53384,
+53384,
+53413,
+53413,
+53421,
+53421,
+53428,
+53450,
+53472,
+53510,
+53510,
+53510,
+53540,
+53540,
+53546,
+53558,
+53558,
+53558,
+53558,
+53558,
+53570,
+53570,
+53591,
+53611,
+53650,
+53664,
+53671,
+53710,
+53722,
+53722,
+53741,
+53771,
+53780,
+53827,
+53833,
+53863,
+53868,
+53880,
+53893,
+53893,
+53907,
+53919,
+53939,
+53939,
+53956,
+54004,
+54004,
+54004,
+54021,
+54021,
+54045,
+54045,
+54060,
+54060,
+54060,
+54060,
+54060,
+54060,
+54077,
+54077,
54091,
-54098,
-54106,
-54106,
-54114,
-54136,
-54142,
-54182,
-54204,
-54236,
-54252,
-54258,
-54300,
-54300,
-54300,
-54319,
-54319,
-54338,
+54115,
+54124,
+54175,
+54175,
+54175,
+54194,
+54194,
+54221,
+54272,
+54302,
+54314,
+54324,
+54324,
+54324,
+54336,
+54349,
54369,
-54383,
-54383,
-54417,
-54417,
-54443,
-54451,
+54369,
+54369,
+54431,
+54431,
54451,
-54465,
-54465,
-54472,
-54472,
-54472,
-54487,
-54506,
-54510,
-54529,
-54529,
-54539,
-54539,
-54561,
-54567,
-54567,
-54567,
-54578,
-54595,
-54595,
-54621,
-54621,
-54640,
-54640,
-54656,
-54666,
+54479,
+54526,
+54526,
+54568,
+54577,
+54577,
+54577,
+54587,
+54609,
+54609,
+54616,
+54637,
+54658,
+54665,
+54665,
+54681,
+54692,
54692,
-54711,
-54711,
-54711,
-54725,
-54732,
-54732,
-54732,
-54732,
-54732,
-54732,
+54705,
+54705,
54738,
-54754,
-54761,
-54766,
-54766,
-54809,
-54821,
-54826,
-54848,
-54848,
-54848,
-54887,
-54887,
-54919,
-54919,
-54928,
-54928,
-54971,
-54998,
-55005,
-55012,
-55012,
-55016,
-55022,
-55022,
-55033,
-55071,
-55071,
-55071,
-55098,
-55098,
-55114,
-55130,
-55130,
-55163,
-55182,
-55209,
-55235,
-55241,
-55258,
-55258,
-55258,
-55258,
-55258,
-55258,
-55274,
-55302,
-55325,
-55325,
-55325,
-55357,
-55357,
-55368,
-55393,
-55393,
-55416,
-55431,
-55452,
-55478,
-55495,
-55495,
-55495,
-55495,
+54750,
+54764,
+54764,
+54770,
+54770,
+54779,
+54779,
+54779,
+54810,
+54810,
+54843,
+54874,
+54874,
+54874,
+54874,
+54900,
+54913,
+54913,
+54929,
+54956,
+54985,
+54991,
+55048,
+55048,
+55069,
+55069,
+55105,
+55105,
+55112,
+55127,
+55127,
+55133,
+55153,
+55171,
+55203,
+55215,
+55250,
+55262,
+55262,
+55272,
+55272,
+55272,
+55286,
+55286,
+55296,
+55336,
+55336,
+55390,
+55390,
+55390,
+55390,
+55421,
+55421,
+55428,
+55460,
+55487,
+55487,
55505,
-55523,
-55539,
-55539,
-55539,
-55539,
-55546,
-55546,
-55559,
-55566,
-55566,
-55566,
-55566,
-55566,
-55572,
-55572,
-55593,
-55608,
-55623,
-55623,
-55651,
-55672,
-55672,
-55672,
-55687,
-55687,
-55701,
-55727,
-55727,
-55759,
-55768,
-55768,
-55778,
-55778,
-55778,
-55785,
-55785,
-55794,
-55794,
-55794,
-55819,
-55833,
-55840,
-55862,
-55862,
-55867,
-55867,
-55867,
-55867,
-55883,
-55928,
-55928,
-55928,
-55928,
-55928,
-55962,
-55962,
-55962,
-55962,
-55962,
-55962,
-55962,
-55962,
-55985,
-56007,
-56017,
-56017,
-56017,
-56035,
-56045,
-56054,
-56067,
-56067,
-56067,
-56086,
-56086,
-56105,
-56118,
-56118,
-56125,
-56165,
-56179,
-56212,
-56212,
-56212,
-56222,
-56222,
-56222,
-56245,
-56259,
-56279,
-56279,
-56297,
-56297,
-56297,
-56303,
-56317,
-56336,
-56336,
-56358,
-56358,
-56358,
-56365,
-56365,
-56398,
-56434,
-56434,
-56434,
-56451,
-56487,
-56513,
-56529,
-56529,
-56529,
-56539,
-56539,
-56549,
-56568,
-56585,
-56585,
-56629,
-56642,
-56649,
-56669,
-56669,
-56687,
-56687,
-56704,
-56716,
-56780,
-56780,
-56780,
-56780,
-56780,
-56780,
-56780,
-56780,
-56794,
-56794,
-56800,
-56800,
-56816,
-56826,
-56826,
-56835,
+55505,
+55521,
+55521,
+55525,
+55530,
+55541,
+55551,
+55551,
+55551,
+55564,
+55564,
+55585,
+55585,
+55585,
+55585,
+55610,
+55661,
+55661,
+55681,
+55698,
+55716,
+55716,
+55725,
+55734,
+55751,
+55812,
+55823,
+55832,
+55832,
+55832,
+55871,
+55889,
+55889,
+55905,
+55905,
+55905,
+55948,
+55956,
+55971,
+55971,
+55971,
+56009,
+56037,
+56037,
+56037,
+56044,
+56044,
+56044,
+56044,
+56044,
+56044,
+56074,
+56074,
+56074,
+56078,
+56119,
+56131,
+56152,
+56159,
+56186,
+56248,
+56252,
+56252,
+56256,
+56256,
+56256,
+56256,
+56283,
+56295,
+56342,
+56367,
+56367,
+56367,
+56382,
+56394,
+56415,
+56415,
+56421,
+56421,
+56421,
+56486,
+56499,
+56499,
+56531,
+56531,
+56531,
+56560,
+56597,
+56604,
+56612,
+56621,
+56656,
+56656,
+56656,
+56671,
+56671,
+56671,
+56684,
+56684,
+56684,
+56684,
+56684,
+56684,
+56684,
+56702,
+56710,
+56718,
+56738,
+56738,
+56755,
+56770,
+56785,
+56821,
+56821,
+56832,
+56832,
+56832,
+56832,
56880,
-56896,
56906,
-56919,
-56939,
-56953,
-56953,
-56953,
-56953,
-56953,
-56953,
-56953,
-56963,
-56995,
-57005,
-57014,
-57032,
-57053,
-57053,
-57067,
-57067,
-57067,
-57093,
-57093,
-57152,
-57152,
-57152,
-57152,
-57175,
-57175,
-57175,
-57180,
-57220,
-57239,
-57260,
-57268,
-57290,
-57299,
-57299,
-57299,
-57329,
-57345,
-57345,
-57375,
-57385,
-57385,
-57391,
-57408,
-57427,
-57451,
-57479,
-57493,
-57509,
-57575,
-57602,
-57602,
-57602,
-57602,
-57602,
-57602,
-57611,
-57611,
-57634,
-57634,
-57641,
-57646,
+56914,
+56914,
+56914,
+56914,
+56914,
+56914,
+56922,
+56922,
+56931,
+56940,
+56940,
+56950,
+56972,
+56990,
+57000,
+57006,
+57006,
+57006,
+57030,
+57054,
+57063,
+57095,
+57095,
+57095,
+57095,
+57100,
+57100,
+57100,
+57100,
+57100,
+57129,
+57129,
+57129,
+57147,
+57147,
+57184,
+57203,
+57203,
+57215,
+57258,
+57286,
+57308,
+57308,
+57308,
+57335,
+57352,
+57352,
+57382,
+57403,
+57415,
+57450,
+57457,
+57478,
+57499,
+57506,
+57506,
+57523,
+57545,
+57545,
+57566,
+57579,
+57589,
+57597,
+57632,
+57659,
57667,
-57685,
-57723,
-57723,
-57735,
-57745,
-57764,
-57764,
-57770,
-57770,
-57781,
-57803,
-57822,
-57843,
-57843,
-57843,
-57843,
-57843,
-57843,
-57851,
-57851,
-57857,
+57696,
+57696,
+57705,
+57743,
+57751,
+57798,
+57818,
+57830,
57857,
-57871,
-57871,
-57890,
-57890,
-57890,
-57890,
-57902,
-57902,
-57914,
-57914,
-57937,
-57937,
-57937,
-57937,
-57937,
-57945,
-57988,
-57999,
-58006,
-58040,
-58058,
-58068,
-58068,
-58068,
-58068,
-58068,
-58082,
-58082,
-58082,
-58103,
-58103,
-58140,
-58158,
-58158,
-58168,
-58168,
-58175,
-58216,
-58216,
-58216,
-58216,
-58216,
-58223,
+57865,
+57865,
+57895,
+57940,
+57976,
+57976,
+57976,
+57976,
+57976,
+57976,
+57976,
+57976,
+57976,
+58011,
+58016,
+58016,
+58052,
+58066,
+58066,
+58066,
+58066,
+58089,
+58089,
+58089,
+58105,
+58105,
+58123,
+58160,
+58179,
+58179,
+58179,
+58179,
+58179,
+58187,
+58187,
+58187,
+58210,
+58227,
58227,
-58260,
-58274,
-58297,
-58315,
-58332,
-58332,
-58332,
-58332,
-58332,
-58357,
-58368,
-58385,
-58385,
-58399,
-58428,
-58449,
-58449,
-58457,
-58469,
-58469,
-58484,
-58491,
-58491,
-58491,
-58514,
-58514,
-58514,
-58514,
-58521,
-58543,
-58543,
-58556,
-58573,
-58608,
+58254,
+58254,
+58254,
+58254,
+58254,
+58254,
+58271,
+58290,
+58305,
+58318,
+58336,
+58336,
+58353,
+58353,
+58353,
+58365,
+58365,
+58365,
+58377,
+58425,
+58425,
+58446,
+58446,
+58446,
+58446,
+58456,
+58456,
+58470,
+58495,
+58495,
+58495,
+58495,
+58495,
+58508,
+58508,
+58530,
+58564,
+58574,
+58574,
+58574,
58615,
-58629,
-58629,
-58629,
-58629,
-58629,
-58643,
-58671,
-58671,
-58671,
-58671,
-58671,
-58687,
-58687,
-58737,
-58741,
-58741,
-58785,
-58810,
+58658,
+58658,
+58686,
+58686,
+58686,
+58686,
+58686,
+58686,
+58703,
+58703,
+58738,
+58767,
+58767,
+58767,
+58767,
+58774,
+58774,
+58774,
+58781,
+58781,
+58781,
+58781,
+58781,
+58781,
+58781,
+58795,
+58795,
+58812,
+58836,
+58836,
+58844,
+58844,
58865,
-58898,
-58898,
-58903,
-58903,
-58903,
-58903,
-58918,
-58918,
-58918,
-58918,
-58918,
-58918,
-58955,
-58981,
-58994,
-59001,
-59031,
-59031,
-59045,
-59054,
-59063,
-59112,
-59148,
-59165,
-59188,
-59218,
-59218,
-59251,
-59270,
-59315,
-59339,
-59359,
-59359,
-59365,
+58865,
+58871,
+58881,
+58908,
+58908,
+58908,
+58927,
+58927,
+58927,
+58941,
+58941,
+58941,
+58941,
+58941,
+58941,
+58941,
+58959,
+58959,
+58959,
+58959,
+58966,
+58966,
+58980,
+58980,
+59006,
+59016,
+59016,
+59032,
+59055,
+59067,
+59067,
+59092,
+59092,
+59097,
+59116,
+59135,
+59154,
+59154,
+59164,
+59181,
+59209,
+59268,
+59268,
+59281,
+59281,
+59294,
+59310,
+59329,
+59329,
+59329,
+59360,
+59367,
+59367,
+59378,
+59385,
59385,
-59399,
-59399,
-59399,
-59399,
-59399,
-59399,
-59399,
+59385,
+59385,
+59385,
+59385,
+59385,
+59385,
+59385,
+59409,
+59413,
59413,
-59432,
-59432,
-59443,
-59462,
-59477,
-59477,
-59511,
-59511,
-59539,
-59555,
+59413,
+59420,
+59420,
+59449,
+59449,
+59449,
+59467,
+59467,
+59486,
+59501,
+59507,
+59507,
+59533,
+59540,
+59553,
+59553,
+59553,
+59553,
+59553,
+59553,
59572,
59572,
-59576,
-59589,
-59629,
-59645,
-59668,
-59709,
-59726,
-59726,
+59592,
+59601,
+59618,
+59654,
+59659,
+59659,
+59659,
+59659,
+59659,
+59669,
+59687,
+59717,
+59717,
+59717,
+59717,
+59717,
59744,
-59761,
-59761,
-59790,
-59806,
-59806,
-59823,
-59823,
-59831,
-59831,
-59831,
-59842,
-59842,
-59842,
-59842,
-59842,
-59853,
-59866,
-59912,
-59912,
-59931,
-59931,
-59937,
-59944,
-59952,
-59989,
-59989,
-60000,
-60000,
-60000,
-60000,
-60029,
-60036,
-60044,
-60044,
-60051,
-60081,
-60081,
-60103,
-60103,
-60122,
-60132,
-60157,
-60157,
-60167,
-60186,
-60208,
-60225,
-60225,
-60243,
-60250,
-60269,
-60286,
-60324,
-60324,
-60336,
-60341,
-60358,
-60369,
-60369,
-60369,
-60369,
-60369,
-60393,
-60400,
-60407,
-60438,
-60455,
-60492,
-60492,
-60514,
-60514,
-60528,
-60528,
-60565,
-60596,
-60603,
-60603,
-60603,
-60603,
-60626,
-60645,
-60660,
-60664,
-60673,
-60683,
-60683,
-60688,
-60688,
-60688,
-60707,
-60707,
-60707,
-60719,
-60733,
-60733,
-60733,
-60752,
-60752,
-60759,
+59771,
+59803,
+59813,
+59836,
+59876,
+59899,
+59899,
+59899,
+59899,
+59919,
+59919,
+59927,
+59956,
+59975,
+59975,
+59975,
+59993,
+60046,
+60068,
+60087,
+60087,
+60117,
+60117,
+60117,
+60117,
+60127,
+60127,
+60127,
+60142,
+60163,
+60163,
+60179,
+60202,
+60211,
+60245,
+60245,
+60245,
+60245,
+60263,
+60282,
+60294,
+60294,
+60294,
+60318,
+60318,
+60318,
+60318,
+60327,
+60327,
+60327,
+60390,
+60390,
+60395,
+60395,
+60395,
+60395,
+60410,
+60424,
+60444,
+60502,
+60502,
+60502,
+60529,
+60546,
+60573,
+60573,
+60588,
+60609,
+60609,
+60613,
+60613,
+60613,
+60659,
+60700,
+60714,
+60714,
+60714,
+60723,
+60739,
+60739,
+60739,
+60753,
+60753,
+60753,
60759,
60759,
-60759,
-60783,
-60796,
-60796,
-60816,
-60816,
-60842,
-60842,
-60842,
-60842,
-60854,
-60880,
-60880,
-60908,
-60917,
-60933,
-60939,
-60951,
-60951,
-60951,
-60951,
-60951,
-60957,
-60957,
-60981,
-60981,
-60981,
-60981,
-60988,
-60988,
-61006,
-61006,
-61012,
-61012,
-61041,
-61053,
-61107,
-61107,
-61107,
-61149,
-61156,
-61167,
+60766,
+60781,
+60810,
+60835,
+60835,
+60835,
+60835,
+60882,
+60891,
+60891,
+60909,
+60927,
+60927,
+60927,
+60927,
+60927,
+60927,
+60927,
+60927,
+60953,
+60959,
+60970,
+60970,
+60991,
+60991,
+61001,
+61037,
+61074,
+61074,
+61093,
+61102,
+61102,
+61112,
+61124,
+61132,
+61141,
+61141,
+61141,
+61141,
+61172,
+61172,
61172,
-61196,
-61207,
-61232,
-61241,
-61241,
-61291,
-61326,
-61326,
-61326,
-61331,
-61339,
+61184,
+61200,
+61200,
+61200,
+61222,
+61237,
+61247,
+61247,
+61261,
+61261,
+61269,
+61269,
+61269,
+61269,
+61269,
+61269,
+61274,
+61274,
+61292,
+61320,
+61320,
+61327,
61355,
-61373,
-61373,
-61388,
-61415,
-61427,
-61447,
-61447,
-61471,
-61491,
-61496,
-61496,
-61503,
-61503,
-61503,
-61503,
-61520,
-61520,
-61534,
-61541,
-61541,
-61541,
-61566,
-61566,
-61573,
-61584,
-61624,
-61645,
-61645,
-61683,
-61683,
-61683,
-61700,
-61726,
-61770,
-61789,
-61795,
-61815,
-61815,
-61834,
+61368,
+61368,
+61368,
+61379,
+61386,
+61386,
+61386,
+61403,
+61425,
+61453,
+61469,
+61480,
+61487,
+61487,
+61487,
+61487,
+61487,
+61487,
+61487,
+61514,
+61514,
+61522,
+61532,
+61532,
+61532,
+61568,
+61587,
+61599,
+61622,
+61622,
+61622,
+61627,
+61627,
+61627,
+61647,
+61647,
+61652,
+61652,
+61652,
+61652,
+61676,
+61692,
+61692,
+61692,
+61732,
+61732,
+61732,
+61732,
+61732,
+61732,
+61755,
+61755,
+61755,
+61755,
+61755,
+61788,
+61788,
+61788,
+61788,
+61788,
+61826,
+61826,
+61836,
61849,
-61871,
-61871,
-61885,
-61885,
-61885,
-61885,
-61901,
-61901,
-61924,
-61924,
-61944,
-61981,
-61981,
+61889,
+61934,
+61934,
+61934,
+61949,
+61949,
+61949,
+61955,
+61955,
+61955,
+61955,
+61955,
+61955,
+61955,
+61966,
+61974,
+61974,
+61974,
61981,
61981,
61981,
-61981,
-61981,
-61990,
-61990,
-61990,
-62006,
-62020,
-62037,
-62037,
-62079,
-62084,
-62105,
-62105,
-62105,
-62105,
-62131,
-62147,
-62147,
-62147,
-62174,
-62181,
-62181,
+61998,
+62018,
+62061,
+62080,
+62088,
+62122,
+62133,
+62149,
+62166,
+62182,
+62182,
+62188,
+62188,
+62188,
62197,
-62232,
-62232,
-62248,
-62255,
-62283,
-62296,
-62326,
-62343,
-62343,
-62357,
-62376,
+62205,
+62211,
+62211,
+62211,
+62234,
+62234,
+62239,
+62247,
+62267,
+62267,
+62286,
+62286,
+62286,
+62286,
+62286,
+62308,
+62308,
+62308,
+62308,
+62323,
+62334,
+62375,
62383,
-62391,
-62391,
-62398,
-62398,
-62398,
-62411,
-62437,
-62466,
-62466,
-62466,
-62506,
-62536,
-62547,
-62576,
-62576,
-62589,
-62589,
-62589,
-62589,
-62589,
-62589,
-62601,
-62601,
-62624,
-62624,
-62654,
-62674,
-62697,
-62714,
-62714,
-62714,
-62714,
-62760,
-62760,
-62760,
-62769,
-62769,
-62811,
-62819,
-62835,
-62835,
-62840,
-62847,
+62393,
+62414,
+62427,
+62494,
+62504,
+62525,
+62525,
+62525,
+62525,
+62525,
+62525,
+62563,
+62563,
+62571,
+62583,
+62583,
+62583,
+62594,
+62608,
+62636,
+62648,
+62648,
+62648,
+62648,
+62680,
+62693,
+62693,
+62702,
+62702,
+62702,
+62720,
+62732,
+62757,
+62772,
+62778,
+62793,
+62813,
+62830,
62847,
-62847,
-62866,
-62898,
-62898,
-62898,
-62923,
-62923,
-62960,
-62971,
-62971,
-62971,
-62971,
-62971,
-62971,
-62991,
-62991,
-62991,
-62991,
-63002,
-63002,
-63039,
-63046,
-63065,
-63085,
-63099,
-63099,
-63115,
-63150,
+62862,
+62888,
+62888,
+62900,
+62924,
+62934,
+62934,
+62934,
+62953,
+63001,
+63006,
+63006,
+63006,
+63006,
+63006,
+63012,
+63012,
+63025,
+63025,
+63025,
+63057,
+63063,
+63063,
+63081,
+63081,
+63098,
+63118,
+63135,
+63135,
+63135,
+63135,
+63154,
63170,
-63187,
-63187,
-63195,
-63209,
-63218,
-63247,
-63280,
-63297,
-63297,
-63308,
-63320,
-63320,
-63330,
-63330,
-63330,
-63337,
-63337,
-63368,
-63378,
-63388,
-63412,
-63412,
-63449,
-63449,
-63449,
-63449,
-63468,
-63468,
-63468,
-63475,
-63504,
-63517,
-63517,
-63517,
-63524,
-63524,
-63524,
+63183,
+63183,
+63183,
+63183,
+63183,
+63183,
+63202,
+63202,
+63202,
+63202,
+63231,
+63242,
+63248,
+63248,
+63265,
+63265,
+63265,
+63265,
+63265,
+63277,
+63287,
+63311,
+63321,
+63336,
+63336,
+63348,
+63348,
+63366,
+63366,
+63366,
+63366,
+63366,
+63373,
+63373,
+63373,
+63384,
+63384,
+63389,
+63394,
+63407,
+63407,
+63425,
+63444,
+63492,
+63515,
63542,
63542,
63542,
-63558,
-63602,
-63602,
-63624,
-63624,
-63624,
-63624,
-63656,
-63665,
-63721,
-63721,
-63736,
-63736,
-63795,
-63806,
+63569,
+63569,
+63586,
+63586,
+63613,
+63613,
+63626,
+63654,
+63659,
+63659,
+63659,
+63693,
+63693,
+63710,
+63710,
+63737,
+63741,
+63741,
+63778,
+63778,
+63778,
+63784,
63806,
-63840,
-63859,
-63859,
-63859,
-63877,
-63885,
-63885,
-63902,
-63930,
-63930,
-63930,
-63930,
-63953,
-63978,
-63978,
-63978,
-63978,
-63978,
-63989,
-64008,
-64035,
-64047,
-64047,
-64047,
-64047,
-64066,
-64114,
-64126,
-64126,
-64171,
-64171,
-64171,
-64171,
-64171,
-64190,
-64213,
-64236,
-64236,
-64260,
-64276,
-64276,
-64276,
-64287,
-64287,
-64304,
-64311,
-64311,
-64311,
-64338,
-64359,
-64377,
-64387,
-64387,
-64387,
-64394,
-64408,
-64408,
-64408,
+63833,
+63846,
+63879,
+63887,
+63887,
+63887,
+63887,
+63916,
+63926,
+63933,
+63952,
+63956,
+63990,
+64002,
+64017,
+64028,
+64028,
+64045,
+64097,
+64130,
+64130,
+64140,
+64148,
+64154,
+64168,
+64196,
+64218,
+64225,
+64225,
+64231,
+64256,
+64277,
+64294,
+64308,
+64313,
+64320,
+64320,
+64325,
+64325,
+64345,
+64345,
+64345,
+64345,
+64345,
+64386,
+64386,
+64393,
+64399,
+64405,
64420,
-64452,
-64477,
-64477,
-64477,
-64484,
-64493,
-64497,
-64515,
-64542,
-64557,
-64570,
-64591,
-64591,
-64604,
-64604,
-64620,
-64640,
-64697,
-64697,
-64702,
-64702,
-64719,
-64719,
-64719,
-64719,
-64735,
-64770,
-64777,
-64777,
-64800,
-64812,
-64812,
-64812,
-64812,
-64837,
-64856,
-64856,
-64856,
-64873,
-64886,
-64896,
-64910,
-64931,
-64931,
-64931,
-64956,
-64956,
-64956,
-64997,
-65016,
-65023,
-65039,
-65058,
-65068,
-65089,
-65089,
-65089,
-65094,
-65112,
-65112,
-65126,
-65126,
-65126,
-65126,
-65147,
-65147,
-65163,
-65163,
-65180,
-65195,
-65230,
-65230,
-65243,
+64427,
+64435,
+64435,
+64435,
+64445,
+64445,
+64445,
+64472,
+64472,
+64513,
+64528,
+64528,
+64539,
+64562,
+64562,
+64568,
+64568,
+64568,
+64586,
+64624,
+64650,
+64650,
+64662,
+64662,
+64668,
+64677,
+64677,
+64677,
+64677,
+64677,
+64677,
+64677,
+64698,
+64715,
+64746,
+64760,
+64774,
+64794,
+64794,
+64819,
+64836,
+64836,
+64862,
+64874,
+64880,
+64899,
+64916,
+64916,
+64916,
+64948,
+64965,
+64965,
+64990,
+65011,
+65060,
+65067,
+65081,
+65081,
+65081,
+65097,
+65097,
+65113,
+65133,
+65152,
+65152,
+65179,
+65196,
+65234,
65253,
-65253,
-65253,
-65277,
-65284,
-65297,
-65297,
-65297,
-65304,
-65304,
-65323,
-65323,
-65340,
-65383,
-65408,
-65408,
-65443,
-65443,
-65457,
-65457,
-65457,
-65467,
-65471,
-65478,
-65522,
-65542,
-65542,
-65553,
-65553,
-65570,
-65602,
-65609,
-65625,
-65645,
-65679,
-65679,
-65679,
-65687,
-65734,
-65752,
-65787,
-65828,
-65828,
-65841,
-65841,
-65848,
-65848,
-65854,
-65854,
-65872,
-65872,
-65879,
-65890,
-65890,
-65903,
-65913,
-65913,
-65913,
-65913,
-65961,
-65971,
-65971,
-66000,
-66005,
-66026,
-66026,
-66026,
-66026,
-66068,
-66082,
-66082,
-66082,
-66099,
+65272,
+65272,
+65279,
+65279,
+65318,
+65318,
+65364,
+65364,
+65424,
+65493,
+65493,
+65499,
+65499,
+65499,
+65518,
+65525,
+65525,
+65534,
+65534,
+65534,
+65534,
+65541,
+65566,
+65595,
+65595,
+65595,
+65613,
+65681,
+65690,
+65690,
+65711,
+65728,
+65747,
+65762,
+65785,
+65785,
+65809,
+65809,
+65820,
+65826,
+65835,
+65861,
+65883,
+65912,
+65918,
+65918,
+65936,
+65936,
+65936,
+65936,
+65941,
+65941,
+65951,
+65967,
+65973,
+65979,
+65979,
+66008,
+66008,
+66008,
+66013,
+66013,
+66030,
+66030,
+66045,
+66045,
+66045,
+66052,
+66052,
+66052,
+66052,
+66094,
+66098,
+66105,
66105,
-66126,
-66143,
66143,
66143,
-66160,
-66180,
-66222,
-66231,
-66239,
-66250,
-66250,
-66250,
-66250,
-66289,
-66293,
-66293,
-66293,
-66302,
-66302,
-66302,
-66321,
-66341,
-66366,
-66398,
-66409,
-66409,
-66409,
-66415,
-66415,
-66415,
-66425,
-66473,
+66191,
+66196,
+66196,
+66226,
+66226,
+66253,
+66268,
+66268,
+66305,
+66305,
+66305,
+66317,
+66324,
+66324,
+66324,
+66330,
+66330,
+66346,
+66346,
+66346,
+66369,
+66408,
+66408,
+66408,
+66426,
+66426,
+66426,
+66435,
+66443,
+66443,
+66443,
+66443,
+66443,
+66443,
+66443,
+66443,
+66450,
+66450,
+66450,
+66466,
+66471,
+66492,
66507,
66507,
-66514,
-66542,
-66575,
-66575,
-66575,
-66581,
-66581,
-66610,
-66632,
-66632,
-66632,
-66632,
-66632,
-66632,
-66644,
-66644,
-66644,
-66644,
-66653,
-66653,
-66653,
-66676,
-66676,
-66696,
-66716,
-66731,
-66731,
-66731,
-66731,
-66731,
-66731,
-66755,
-66790,
-66790,
-66832,
-66832,
-66832,
-66832,
-66832,
-66856,
-66881,
-66881,
-66899,
-66938,
-66958,
-66958,
-66958,
-66958,
-66974,
-66974,
-66974,
-66974,
-67003,
-67003,
-67019,
-67019,
-67043,
-67051,
-67051,
-67051,
-67051,
-67051,
-67068,
+66530,
+66543,
+66564,
+66576,
+66576,
+66576,
+66591,
+66628,
+66628,
+66628,
+66628,
+66628,
+66667,
+66691,
+66691,
+66698,
+66748,
+66760,
+66777,
+66777,
+66795,
+66817,
+66817,
+66836,
+66854,
+66854,
+66854,
+66866,
+66888,
+66904,
+66914,
+66924,
+66924,
+66924,
+66953,
+66968,
+66999,
+66999,
+67011,
+67011,
+67011,
+67031,
+67031,
+67031,
+67042,
+67092,
67107,
-67114,
-67114,
-67135,
-67135,
-67135,
-67135,
-67151,
+67126,
+67132,
+67143,
67151,
-67168,
-67168,
-67168,
-67177,
-67186,
-67237,
-67237,
-67237,
-67247,
-67273,
-67290,
-67290,
-67290,
-67295,
-67312,
-67318,
-67318,
-67318,
-67318,
-67334,
-67344,
-67354,
-67377,
-67383,
-67383,
-67390,
-67399,
-67399,
-67399,
-67415,
-67415,
-67415,
-67442,
-67465,
-67465,
-67475,
-67475,
-67498,
-67513,
-67513,
+67160,
+67160,
+67166,
+67180,
+67180,
+67180,
+67180,
+67180,
+67195,
+67195,
+67195,
+67195,
+67195,
+67206,
+67211,
+67217,
+67217,
+67234,
+67234,
+67276,
+67276,
+67276,
+67287,
+67287,
+67287,
+67297,
+67310,
+67343,
+67360,
+67370,
+67370,
+67386,
+67427,
+67460,
+67480,
+67480,
+67480,
+67511,
67529,
67529,
-67529,
-67539,
-67578,
-67578,
-67578,
-67600,
-67611,
-67639,
-67639,
-67654,
-67673,
-67703,
-67703,
-67712,
-67712,
-67728,
-67728,
-67728,
-67735,
-67735,
-67756,
-67756,
-67771,
-67790,
-67790,
-67790,
-67790,
-67790,
-67790,
-67816,
-67816,
-67826,
-67826,
-67832,
-67842,
-67842,
-67842,
-67864,
-67864,
-67870,
-67929,
-67952,
-67964,
-67964,
-68001,
-68001,
-68026,
-68039,
-68039,
-68039,
-68068,
-68068,
-68080,
-68097,
-68097,
-68125,
-68125,
-68125,
-68156,
-68156,
-68156,
-68156,
-68179,
-68211,
-68217,
-68217,
-68237,
-68237,
-68237,
-68237,
-68250,
-68287,
-68299,
-68299,
-68336,
-68366,
-68366,
-68366,
-68366,
-68384,
-68393,
-68423,
-68451,
-68470,
-68480,
-68480,
-68480,
-68480,
-68480,
-68490,
-68505,
-68521,
-68587,
-68600,
-68614,
-68614,
-68649,
-68657,
-68657,
-68677,
-68677,
-68677,
-68677,
-68718,
-68718,
-68734,
-68734,
-68783,
-68783,
-68783,
-68798,
-68817,
-68822,
-68822,
-68850,
-68860,
-68860,
-68860,
-68860,
-68892,
-68917,
-68928,
-68938,
-68938,
-68945,
-68970,
-68992,
-69003,
-69028,
-69028,
-69039,
-69039,
-69039,
-69049,
-69058,
-69086,
-69086,
-69093,
-69103,
-69132,
-69132,
-69147,
-69162,
-69177,
-69177,
-69177,
-69191,
-69201,
-69223,
-69223,
-69223,
-69234,
-69255,
-69255,
-69285,
-69285,
-69311,
-69311,
-69311,
-69311,
-69330,
-69349,
-69349,
-69367,
-69367,
-69367,
-69385,
-69385,
-69385,
-69385,
-69394,
+67546,
+67579,
+67617,
+67617,
+67634,
+67634,
+67658,
+67658,
+67665,
+67679,
+67679,
+67696,
+67732,
+67748,
+67748,
+67748,
+67758,
+67758,
+67758,
+67758,
+67758,
+67758,
+67765,
+67780,
+67791,
+67791,
+67791,
+67791,
+67812,
+67822,
+67822,
+67844,
+67844,
+67844,
+67858,
+67884,
+67884,
+67884,
+67897,
+67897,
+67905,
+67905,
+67939,
+67950,
+67950,
+67950,
+67950,
+67965,
+67977,
+67977,
+67977,
+67977,
+68005,
+68025,
+68025,
+68025,
+68036,
+68036,
+68046,
+68060,
+68106,
+68124,
+68140,
+68162,
+68162,
+68162,
+68162,
+68174,
+68212,
+68212,
+68212,
+68212,
+68239,
+68239,
+68265,
+68265,
+68272,
+68290,
+68290,
+68323,
+68323,
+68332,
+68332,
+68332,
+68332,
+68342,
+68359,
+68359,
+68359,
+68387,
+68387,
+68387,
+68387,
+68387,
+68402,
+68402,
+68402,
+68417,
+68440,
+68445,
+68454,
+68454,
+68461,
+68461,
+68482,
+68482,
+68482,
+68512,
+68553,
+68563,
+68563,
+68563,
+68563,
+68563,
+68563,
+68583,
+68583,
+68618,
+68627,
+68627,
+68645,
+68645,
+68645,
+68660,
+68666,
+68676,
+68676,
+68697,
+68697,
+68697,
+68702,
+68715,
+68752,
+68767,
+68787,
+68787,
+68808,
+68808,
+68808,
+68827,
+68857,
+68857,
+68871,
+68895,
+68895,
+68910,
+68924,
+68955,
+68968,
+68989,
+68989,
+68989,
+69014,
+69014,
+69035,
+69035,
+69035,
+69062,
+69062,
+69069,
+69077,
+69077,
+69092,
+69107,
+69127,
+69127,
+69127,
+69145,
+69157,
+69157,
+69164,
+69164,
+69171,
+69171,
+69178,
+69178,
+69256,
+69270,
+69270,
+69322,
+69322,
+69336,
+69344,
+69344,
+69375,
69394,
-69394,
-69406,
-69412,
-69430,
-69441,
-69462,
-69462,
-69462,
-69507,
-69507,
-69507,
-69521,
-69539,
-69547,
-69547,
-69554,
-69592,
-69627,
-69633,
-69633,
-69649,
-69666,
-69666,
-69684,
-69701,
-69708,
-69722,
-69730,
-69730,
-69787,
-69787,
-69787,
-69805,
-69805,
-69838,
+69452,
+69452,
+69452,
+69452,
+69465,
+69488,
+69508,
+69508,
+69514,
+69514,
+69524,
+69552,
+69552,
+69552,
+69552,
+69569,
+69575,
+69595,
+69595,
+69602,
+69643,
+69661,
+69667,
+69681,
+69681,
+69692,
+69699,
+69699,
+69721,
+69721,
+69721,
+69740,
+69740,
+69760,
+69766,
+69774,
+69774,
+69783,
+69815,
69838,
-69838,
-69838,
-69838,
-69838,
-69838,
-69838,
-69838,
-69862,
-69862,
-69872,
-69872,
-69903,
-69919,
-69919,
+69848,
+69848,
+69848,
+69848,
+69848,
+69861,
+69871,
+69871,
+69881,
69924,
-69929,
-69929,
-69944,
-69950,
-69959,
-69976,
-69996,
-70003,
-70017,
-70030,
-70030,
-70030,
-70046,
-70046,
-70058,
+69940,
+69947,
+69947,
+69977,
+69989,
+69989,
+70005,
+70005,
+70016,
+70016,
70058,
70058,
-70058,
-70079,
-70097,
-70114,
-70114,
-70114,
-70130,
-70150,
-70200,
-70207,
-70207,
-70213,
-70213,
-70213,
-70227,
-70237,
-70237,
-70237,
-70237,
-70250,
-70263,
-70307,
-70307,
-70360,
-70389,
-70406,
-70427,
-70434,
-70441,
-70441,
-70480,
-70511,
-70535,
-70535,
-70551,
-70605,
-70605,
-70620,
-70620,
-70634,
-70657,
-70657,
-70657,
-70667,
-70667,
-70667,
-70679,
-70679,
-70697,
-70721,
-70745,
-70757,
-70763,
-70763,
-70778,
-70812,
-70812,
-70818,
-70818,
-70818,
+70068,
+70098,
+70098,
+70110,
+70126,
+70137,
+70146,
+70165,
+70177,
+70177,
+70177,
+70177,
+70183,
+70183,
+70183,
+70196,
+70223,
+70223,
+70239,
+70258,
+70258,
+70258,
+70296,
+70296,
+70306,
+70314,
+70330,
+70345,
+70369,
+70369,
+70369,
+70369,
+70369,
+70413,
+70430,
+70430,
+70463,
+70463,
+70479,
+70479,
+70479,
+70486,
+70520,
+70546,
+70559,
+70559,
+70570,
+70619,
+70685,
+70723,
+70742,
+70742,
+70756,
+70784,
+70784,
+70784,
+70791,
+70809,
+70816,
70823,
-70845,
-70882,
-70882,
-70891,
-70891,
-70923,
-70923,
-70932,
-70964,
-70982,
+70830,
+70837,
+70837,
+70856,
+70863,
+70870,
+70877,
+70877,
+70877,
+70884,
+70903,
+70915,
+70925,
+70925,
+70925,
+70954,
+70968,
+70975,
+70975,
+70975,
70982,
-70996,
-70996,
-71018,
-71028,
-71028,
-71049,
-71062,
-71062,
-71096,
-71096,
-71096,
-71096,
-71133,
-71143,
-71143,
-71143,
-71143,
-71171,
-71171,
-71171,
-71236,
-71236,
-71271,
-71280,
-71280,
-71285,
-71285,
-71285,
-71310,
-71317,
-71328,
-71334,
-71360,
-71382,
-71413,
+70989,
+71010,
+71027,
+71036,
+71036,
+71065,
+71065,
+71079,
+71104,
+71111,
+71119,
+71162,
+71181,
+71181,
+71196,
+71238,
+71269,
+71276,
+71281,
+71281,
+71298,
+71311,
+71311,
+71352,
+71352,
+71359,
+71359,
+71372,
+71395,
+71395,
+71395,
+71404,
71428,
-71434,
-71459,
-71483,
-71520,
-71538,
-71538,
+71428,
+71428,
+71449,
+71449,
+71471,
+71478,
+71478,
+71478,
+71478,
+71487,
+71487,
+71494,
+71494,
+71525,
+71532,
+71532,
71544,
-71563,
-71572,
-71572,
-71572,
-71607,
-71607,
-71629,
-71649,
-71658,
-71668,
-71668,
-71701,
-71714,
-71743,
-71743,
-71743,
-71743,
-71743,
-71773,
-71773,
-71793,
-71827,
-71827,
-71851,
-71872,
-71872,
-71878,
-71884,
-71884,
-71901,
-71907,
-71907,
-71922,
-71922,
-71922,
-71927,
-71932,
-71944,
-71944,
-72000,
-72000,
-72017,
-72041,
-72058,
-72058,
-72078,
-72078,
-72107,
-72130,
-72130,
-72163,
-72179,
-72179,
-72195,
-72207,
-72207,
-72207,
-72207,
-72219,
-72226,
-72226,
-72244,
-72251,
-72273,
-72291,
-72291,
-72302,
-72325,
-72330,
-72330,
-72330,
+71544,
+71544,
+71567,
+71584,
+71584,
+71591,
+71591,
+71618,
+71631,
+71638,
+71648,
+71648,
+71655,
+71677,
+71684,
+71699,
+71706,
+71706,
+71713,
+71713,
+71740,
+71763,
+71768,
+71784,
+71812,
+71830,
+71864,
+71882,
+71882,
+71882,
+71910,
+71928,
+71939,
+71977,
+71984,
+71984,
+71999,
+71999,
+71999,
+72023,
+72023,
+72023,
+72037,
+72037,
+72037,
+72081,
+72112,
+72158,
+72177,
+72229,
+72229,
+72253,
+72263,
+72263,
+72278,
+72283,
+72283,
+72283,
+72283,
+72294,
+72294,
+72315,
72330,
-72342,
-72357,
-72367,
+72350,
+72350,
72375,
-72375,
-72391,
-72411,
-72411,
-72427,
-72427,
-72434,
+72388,
+72388,
+72388,
+72408,
72434,
-72448,
-72463,
-72480,
-72486,
-72486,
-72486,
-72520,
-72520,
-72553,
-72560,
-72560,
-72560,
-72560,
-72572,
-72572,
-72602,
-72616,
+72462,
+72482,
+72524,
+72530,
+72530,
+72585,
+72600,
72636,
-72641,
-72651,
-72651,
-72651,
-72659,
-72659,
-72668,
-72668,
-72695,
-72695,
-72706,
-72706,
-72706,
+72672,
+72679,
+72686,
72717,
-72717,
-72729,
-72773,
-72773,
-72773,
-72773,
-72773,
-72783,
-72802,
-72820,
-72836,
-72863,
-72874,
-72874,
-72906,
-72906,
-72906,
-72922,
-72930,
-72940,
-72950,
-72950,
-72950,
-72971,
-72990,
-73007,
-73042,
-73042,
-73042,
-73042,
-73042,
-73042,
-73042,
-73056,
-73072,
-73079,
-73104,
-73129,
-73135,
-73135,
-73135,
-73135,
-73152,
-73163,
-73163,
-73181,
-73181,
-73181,
-73190,
-73222,
-73229,
-73252,
-73268,
-73268,
-73273,
-73283,
-73283,
-73283,
-73289,
-73289,
-73299,
-73313,
-73331,
-73331,
-73331,
-73331,
-73371,
-73393,
-73393,
-73393,
-73393,
-73393,
-73393,
-73393,
-73393,
-73413,
-73413,
-73413,
-73413,
-73427,
-73438,
-73438,
+72749,
+72749,
+72749,
+72749,
+72756,
+72762,
+72798,
+72824,
+72843,
+72867,
+72867,
+72885,
+72897,
+72897,
+72903,
+72916,
+72938,
+72983,
+72983,
+73006,
+73020,
+73036,
+73065,
+73084,
+73103,
+73110,
+73110,
+73146,
+73153,
+73153,
+73160,
+73160,
+73177,
+73184,
+73191,
+73205,
+73248,
+73290,
+73304,
+73355,
+73355,
+73355,
+73355,
+73361,
+73361,
+73367,
+73367,
+73374,
+73390,
+73408,
+73408,
+73420,
+73431,
73438,
+73448,
+73448,
73455,
73455,
-73455,
+73482,
+73482,
73493,
-73525,
-73525,
-73525,
-73525,
-73525,
-73548,
-73548,
-73560,
-73567,
-73567,
-73567,
-73567,
-73567,
-73574,
-73592,
-73613,
-73634,
-73634,
-73654,
-73654,
-73683,
-73699,
-73724,
-73741,
-73769,
-73778,
-73778,
-73797,
-73834,
-73847,
-73885,
-73885,
-73897,
-73921,
-73940,
-73940,
-73940,
-73958,
-73958,
-73958,
-73977,
-73995,
-74036,
-74036,
-74036,
-74036,
-74036,
-74044,
-74044,
-74063,
-74078,
-74093,
-74093,
-74102,
-74102,
-74112,
-74112,
-74120,
-74120,
-74120,
-74120,
-74129,
-74145,
-74145,
-74156,
-74173,
-74190,
-74204,
-74211,
-74211,
-74230,
-74230,
-74230,
-74239,
-74258,
-74294,
-74294,
-74329,
-74329,
-74329,
-74346,
-74398,
-74398,
-74398,
-74409,
-74469,
-74499,
-74499,
-74499,
-74506,
-74521,
-74536,
-74543,
+73516,
+73554,
+73591,
+73600,
+73600,
+73607,
+73632,
+73646,
+73674,
+73680,
+73690,
+73697,
+73704,
+73727,
+73744,
+73761,
+73767,
+73774,
+73801,
+73819,
+73826,
+73826,
+73826,
+73833,
+73840,
+73859,
+73888,
+73912,
+73919,
+73930,
+73937,
+73959,
+73959,
+73966,
+73990,
+74000,
+74000,
+74012,
+74019,
+74045,
+74045,
+74070,
+74077,
+74077,
+74094,
+74119,
+74139,
+74153,
+74169,
+74176,
+74229,
+74263,
+74277,
+74314,
+74314,
+74344,
+74358,
+74365,
+74411,
+74441,
+74455,
+74461,
+74475,
+74489,
+74489,
+74489,
+74489,
+74503,
+74524,
74543,
-74554,
-74554,
-74570,
-74570,
-74588,
-74611,
-74611,
-74611,
-74637,
-74646,
-74646,
-74667,
-74701,
-74701,
-74701,
-74720,
-74720,
-74720,
-74720,
-74737,
-74742,
-74742,
-74747,
-74787,
-74838,
-74838,
-74838,
-74838,
-74849,
-74849,
-74849,
-74864,
-74886,
-74921,
-74931,
-74931,
-74950,
-74968,
-74968,
-74980,
-74980,
+74550,
+74568,
+74580,
+74596,
+74610,
+74621,
+74628,
+74657,
+74684,
+74709,
+74709,
+74716,
+74744,
+74744,
+74783,
+74845,
+74850,
+74887,
+74904,
+74904,
+74918,
+74933,
+74961,
+74961,
74995,
-74995,
-74995,
-75032,
-75032,
-75032,
-75053,
-75053,
-75082,
-75082,
-75082,
-75096,
-75096,
-75096,
-75106,
-75106,
-75106,
-75116,
-75152,
-75152,
-75152,
-75168,
-75196,
-75196,
-75206,
-75224,
-75224,
-75224,
-75236,
-75247,
-75247,
-75247,
-75265,
-75265,
-75265,
-75276,
-75350,
-75363,
-75363,
-75363,
-75363,
-75363,
-75378,
-75378,
-75388,
-75404,
-75404,
-75404,
-75404,
-75404,
-75425,
-75435,
-75448,
-75448,
-75448,
-75463,
-75499,
-75506,
-75539,
-75549,
-75566,
-75576,
-75576,
-75576,
-75616,
-75631,
-75644,
-75669,
-75669,
-75669,
-75683,
-75683,
-75683,
-75706,
-75737,
-75737,
-75782,
-75782,
-75805,
-75805,
-75816,
-75816,
-75830,
-75839,
-75859,
+75002,
+75002,
+75023,
+75023,
+75030,
+75072,
+75079,
+75079,
+75110,
+75117,
+75138,
+75170,
+75179,
+75193,
+75213,
+75220,
+75227,
+75238,
+75246,
+75253,
+75278,
+75285,
+75292,
+75292,
+75311,
+75311,
+75341,
+75358,
+75358,
+75392,
+75421,
+75438,
+75450,
+75456,
+75474,
+75480,
+75501,
+75514,
+75521,
+75521,
+75546,
+75574,
+75600,
+75623,
+75623,
+75642,
+75655,
+75662,
+75694,
+75701,
+75724,
+75724,
+75740,
+75769,
+75801,
+75808,
+75826,
+75826,
+75841,
75865,
-75893,
-75900,
-75900,
-75924,
-75962,
-75962,
-75975,
-75997,
-75997,
-75997,
-76014,
-76014,
-76030,
-76030,
-76030,
-76043,
-76088,
-76107,
-76122,
-76141,
-76200,
-76205,
-76211,
-76211,
-76211,
-76211,
-76241,
-76241,
-76278,
-76287,
-76287,
-76299,
-76313,
-76344,
-76361,
-76361,
-76361,
-76386,
-76406,
-76406,
-76413,
-76423,
-76434,
-76440,
-76440,
-76497,
-76521,
-76528,
-76567,
-76567,
-76567,
-76567,
-76567,
-76567,
-76567,
-76590,
-76614,
-76614,
-76627,
-76640,
-76659,
-76671,
-76680,
-76687,
-76687,
-76687,
-76687,
-76696,
-76707,
-76732,
-76732,
-76749,
-76749,
-76749,
-76767,
-76777,
-76786,
-76797,
-76807,
-76807,
-76807,
-76813,
-76813,
-76813,
-76840,
-76840,
-76846,
-76864,
-76885,
-76901,
-76901,
-76914,
-76914,
-76927,
-76927,
-76954,
-76954,
-76954,
-76954,
-76985,
-76992,
-76992,
-77001,
-77001,
-77015,
-77029,
-77039,
-77059,
-77077,
-77114,
+75879,
+75879,
+75879,
+75910,
+75919,
+75938,
+75945,
+75952,
+76008,
+76018,
+76057,
+76064,
+76071,
+76078,
+76078,
+76100,
+76100,
+76100,
+76133,
+76177,
+76177,
+76187,
+76222,
+76222,
+76222,
+76246,
+76286,
+76309,
+76318,
+76346,
+76346,
+76346,
+76354,
+76371,
+76371,
+76412,
+76421,
+76436,
+76446,
+76453,
+76475,
+76506,
+76513,
+76520,
+76543,
+76570,
+76577,
+76615,
+76615,
+76639,
+76672,
+76706,
+76713,
+76720,
+76736,
+76736,
+76736,
+76768,
+76775,
+76788,
+76805,
+76827,
+76843,
+76850,
+76857,
+76880,
+76895,
+76902,
+76929,
+76969,
+76976,
+76982,
+77036,
+77043,
+77043,
+77050,
+77050,
+77057,
+77071,
+77087,
+77100,
77114,
-77135,
-77170,
-77170,
-77186,
-77186,
-77186,
-77216,
-77263,
-77280,
-77312,
-77312,
-77312,
-77312,
-77312,
-77330,
+77128,
+77142,
+77159,
+77192,
+77206,
+77213,
+77226,
+77226,
+77292,
+77292,
+77310,
+77310,
+77326,
77346,
-77377,
-77400,
-77400,
-77416,
-77442,
-77442,
-77452,
-77452,
-77452,
-77471,
-77471,
-77471,
-77479,
-77479,
-77479,
-77496,
-77496,
-77496,
-77503,
-77515,
-77522,
-77534,
-77558,
-77558,
-77581,
-77599,
-77633,
-77655,
-77662,
-77662,
-77662,
-77662,
-77702,
-77716,
-77716,
-77755,
-77770,
-77770,
-77805,
-77812,
-77827,
-77834,
-77841,
-77851,
-77858,
-77865,
-77883,
-77883,
-77883,
-77890,
+77375,
+77402,
+77402,
+77425,
+77456,
+77467,
+77467,
+77474,
+77484,
+77484,
+77491,
+77505,
+77505,
+77520,
+77520,
+77541,
+77555,
+77569,
+77576,
+77576,
+77589,
+77603,
+77610,
+77649,
+77681,
+77681,
+77688,
+77724,
+77751,
+77758,
+77792,
+77792,
+77792,
+77798,
+77813,
+77820,
+77853,
+77860,
+77860,
77897,
-77904,
-77926,
-77953,
-77973,
-77991,
-77998,
-78015,
-78015,
-78082,
-78103,
-78125,
-78132,
-78132,
-78138,
-78154,
-78154,
-78168,
-78184,
-78184,
-78205,
-78205,
-78221,
-78221,
-78221,
-78221,
-78247,
-78247,
-78254,
-78265,
-78265,
-78272,
-78303,
-78303,
-78310,
-78328,
-78353,
-78363,
-78379,
-78386,
-78401,
-78401,
-78401,
-78419,
-78419,
-78419,
-78419,
-78419,
-78426,
-78443,
-78443,
-78443,
-78456,
-78464,
-78464,
-78471,
+77945,
+77954,
+77954,
+77980,
+77993,
+78011,
+78011,
+78011,
+78027,
+78054,
+78085,
+78085,
+78105,
+78112,
+78119,
+78152,
+78173,
+78188,
+78188,
+78195,
+78223,
+78242,
+78249,
+78300,
+78300,
+78332,
+78339,
+78339,
+78354,
+78354,
+78394,
+78394,
+78418,
+78425,
+78448,
+78455,
78489,
-78495,
-78512,
-78512,
-78535,
-78535,
-78535,
-78547,
-78564,
+78507,
+78532,
+78532,
+78549,
+78563,
78585,
-78617,
-78651,
+78592,
+78606,
+78613,
+78613,
+78620,
+78648,
78692,
-78699,
-78718,
-78739,
-78757,
-78770,
-78786,
-78793,
-78801,
-78837,
-78837,
-78844,
-78844,
-78851,
-78872,
-78872,
-78872,
-78916,
-78923,
-78923,
-78948,
-78961,
-78961,
+78714,
+78758,
+78805,
+78825,
+78839,
+78885,
+78934,
+78979,
78984,
-78984,
-79012,
-79029,
-79029,
-79029,
-79045,
-79087,
-79104,
-79119,
-79138,
-79157,
-79178,
-79189,
-79196,
-79283,
-79290,
-79302,
+79016,
+79016,
+79030,
+79050,
+79057,
+79070,
+79070,
+79070,
+79070,
+79070,
+79077,
+79095,
+79102,
+79102,
+79110,
+79148,
+79176,
+79183,
+79195,
+79195,
+79195,
+79202,
+79202,
+79254,
+79268,
+79268,
+79276,
+79300,
79315,
-79330,
-79337,
-79344,
-79344,
-79369,
-79369,
-79369,
-79380,
+79332,
+79332,
+79340,
+79359,
+79378,
79390,
-79408,
-79428,
-79428,
-79442,
-79459,
-79466,
-79491,
-79491,
-79502,
-79513,
-79529,
-79548,
-79548,
-79555,
-79555,
-79562,
-79562,
-79562,
-79562,
-79569,
-79601,
-79601,
-79608,
-79642,
+79404,
+79429,
+79441,
+79453,
+79462,
+79462,
+79485,
+79492,
+79492,
+79492,
+79492,
+79492,
+79512,
+79530,
+79542,
+79552,
+79552,
+79560,
+79588,
+79595,
+79623,
+79652,
+79661,
79661,
-79697,
-79710,
-79719,
-79719,
-79726,
-79759,
-79771,
-79799,
-79817,
-79825,
-79858,
-79866,
-79866,
-79866,
-79880,
-79887,
-79933,
-79933,
-79940,
-79957,
-79964,
-79964,
-79989,
-80021,
+79696,
+79721,
+79721,
+79731,
+79731,
+79738,
+79749,
+79749,
+79778,
+79796,
+79796,
+79804,
+79804,
+79811,
+79811,
+79811,
+79846,
+79857,
+79865,
+79890,
+79890,
+79890,
+79897,
+79916,
+79916,
+79923,
+79948,
+79987,
+79987,
+79987,
+79987,
+80003,
+80047,
80060,
-80067,
-80096,
-80116,
-80140,
-80156,
-80163,
-80173,
-80180,
-80187,
-80214,
-80236,
-80277,
-80284,
-80315,
-80345,
-80345,
-80345,
-80365,
-80375,
-80392,
-80392,
+80068,
+80098,
+80098,
+80098,
+80098,
+80098,
+80127,
+80136,
+80136,
+80136,
+80157,
+80177,
+80177,
+80212,
+80237,
+80237,
+80247,
+80265,
+80278,
+80278,
+80278,
+80290,
+80308,
+80341,
+80348,
+80356,
+80356,
+80356,
+80387,
+80387,
80403,
-80425,
-80425,
-80430,
-80463,
-80490,
-80497,
-80514,
-80514,
-80539,
-80560,
-80566,
-80615,
-80653,
-80653,
-80653,
-80727,
-80739,
-80774,
-80774,
-80781,
-80801,
-80814,
-80849,
-80878,
-80878,
-80912,
-80929,
-80936,
-80982,
-80993,
-81004,
-81047,
-81080,
-81094,
-81108,
-81123,
-81141,
-81141,
-81141,
-81148,
-81148,
-81148,
-81168,
-81187,
-81187,
-81187,
-81187,
-81199,
-81199,
-81229,
-81234,
-81234,
-81234,
-81234,
-81234,
-81234,
+80418,
+80447,
+80447,
+80453,
+80453,
+80453,
+80479,
+80479,
+80495,
+80495,
+80495,
+80495,
+80495,
+80507,
+80507,
+80507,
+80507,
+80507,
+80507,
+80513,
+80542,
+80573,
+80573,
+80579,
+80579,
+80579,
+80610,
+80620,
+80620,
+80620,
+80636,
+80636,
+80636,
+80663,
+80672,
+80672,
+80672,
+80689,
+80734,
+80734,
+80734,
+80743,
+80771,
+80780,
+80780,
+80789,
+80789,
+80820,
+80828,
+80870,
+80897,
+80908,
+80934,
+80947,
+80947,
+80959,
+80996,
+81025,
+81025,
+81025,
+81037,
+81037,
+81037,
+81037,
+81037,
+81037,
+81044,
+81057,
+81057,
+81091,
+81099,
+81109,
+81126,
+81142,
+81142,
+81157,
+81157,
+81189,
+81189,
+81217,
81248,
81248,
-81248,
-81248,
-81260,
-81267,
-81283,
-81290,
-81315,
-81346,
-81353,
-81389,
-81389,
-81403,
+81255,
+81279,
+81289,
+81289,
+81316,
+81316,
+81316,
+81334,
+81334,
+81345,
+81350,
+81378,
+81391,
+81415,
81426,
-81453,
-81453,
-81473,
-81480,
-81492,
-81505,
-81517,
-81559,
-81559,
-81559,
-81608,
-81615,
-81615,
-81622,
-81622,
-81622,
-81629,
-81649,
-81649,
-81671,
-81678,
-81695,
-81708,
-81714,
-81721,
-81746,
-81746,
-81763,
-81789,
-81806,
-81832,
-81832,
-81832,
-81842,
-81849,
-81849,
-81868,
-81876,
-81888,
-81888,
-81902,
-81927,
-81954,
-81985,
-81992,
-82023,
-82081,
-82081,
-82123,
-82140,
-82155,
-82155,
-82155,
-82174,
-82174,
-82174,
-82198,
-82198,
-82198,
-82234,
-82241,
-82287,
-82294,
-82332,
-82332,
-82364,
-82364,
-82364,
-82364,
-82376,
-82376,
-82390,
+81446,
+81446,
+81488,
+81523,
+81523,
+81533,
+81533,
+81551,
+81580,
+81593,
+81605,
+81605,
+81605,
+81605,
+81612,
+81631,
+81661,
+81681,
+81697,
+81733,
+81733,
+81733,
+81745,
+81770,
+81770,
+81781,
+81781,
+81781,
+81794,
+81805,
+81805,
+81805,
+81837,
+81837,
+81848,
+81866,
+81866,
+81866,
+81866,
+81872,
+81872,
+81880,
+81891,
+81891,
+81912,
+81912,
+81937,
+81937,
+81943,
+81959,
+81971,
+82016,
+82029,
+82071,
+82071,
+82071,
+82071,
+82071,
+82082,
+82082,
+82094,
+82101,
+82101,
+82108,
+82121,
+82141,
+82154,
+82154,
+82154,
+82154,
+82166,
+82166,
+82173,
+82204,
+82230,
+82249,
+82298,
+82320,
+82348,
+82348,
+82348,
+82373,
+82389,
+82389,
+82405,
82405,
-82488,
-82514,
-82514,
-82526,
-82526,
-82526,
-82526,
-82526,
-82533,
-82533,
-82533,
-82563,
-82579,
-82579,
-82579,
-82607,
-82607,
-82633,
-82633,
-82640,
-82640,
-82651,
-82672,
-82688,
-82688,
-82688,
-82717,
-82728,
-82734,
-82741,
-82759,
-82766,
-82792,
-82792,
-82813,
-82831,
-82831,
-82831,
-82910,
-82910,
-82910,
-82973,
-82992,
-82999,
-82999,
-83010,
-83010,
+82412,
+82426,
+82433,
+82433,
+82440,
+82463,
+82492,
+82499,
+82499,
+82525,
+82542,
+82560,
+82576,
+82600,
+82613,
+82613,
+82628,
+82642,
+82664,
+82713,
+82747,
+82747,
+82754,
+82763,
+82787,
+82808,
+82808,
+82828,
+82835,
+82842,
+82863,
+82880,
+82880,
+82880,
+82891,
+82891,
+82918,
+82923,
+82958,
+82965,
+82972,
+82972,
+82972,
+82972,
+82979,
+82989,
+83011,
+83021,
+83021,
+83021,
83028,
-83056,
-83061,
-83072,
-83077,
-83077,
-83084,
-83084,
-83093,
-83114,
-83121,
-83132,
-83139,
-83150,
-83168,
+83028,
+83035,
+83059,
+83066,
+83066,
+83066,
+83082,
+83082,
+83082,
+83100,
+83100,
+83100,
+83126,
+83126,
+83126,
+83126,
+83157,
+83157,
+83157,
+83157,
83168,
-83178,
-83194,
-83245,
-83263,
-83278,
-83292,
-83292,
-83292,
-83341,
-83354,
-83383,
-83383,
-83383,
-83393,
-83402,
-83402,
-83402,
-83418,
-83434,
-83443,
-83443,
-83468,
-83468,
-83481,
-83481,
-83518,
-83536,
-83565,
+83186,
+83210,
+83210,
+83210,
+83229,
+83235,
+83243,
+83279,
+83307,
+83316,
+83325,
+83353,
+83374,
+83374,
+83384,
+83405,
+83419,
+83425,
+83455,
+83471,
+83483,
+83490,
+83510,
+83515,
+83515,
+83549,
+83555,
+83555,
83595,
83595,
-83644,
-83656,
-83678,
-83678,
-83725,
-83725,
-83757,
-83793,
-83827,
-83856,
-83856,
-83920,
-83981,
-83981,
-83981,
-83981,
-83995,
-83995,
-83995,
-84019,
-84027,
-84027,
-84036,
+83595,
+83595,
+83602,
+83668,
+83696,
+83696,
+83696,
+83696,
+83696,
+83702,
+83718,
+83734,
+83734,
+83771,
+83810,
+83818,
+83836,
+83836,
+83836,
+83867,
+83867,
+83874,
+83874,
+83900,
+83923,
+83923,
+83958,
+83982,
+84022,
+84029,
+84044,
+84044,
+84051,
+84051,
84067,
-84073,
-84088,
-84095,
-84095,
-84095,
-84095,
-84125,
-84132,
-84144,
-84183,
-84188,
-84188,
-84188,
-84188,
-84188,
-84188,
-84188,
-84188,
-84222,
-84254,
-84266,
-84277,
-84277,
-84294,
-84294,
-84294,
-84314,
-84326,
-84326,
-84340,
-84340,
-84359,
-84359,
-84372,
-84380,
-84395,
-84395,
+84084,
+84134,
+84149,
+84192,
+84198,
+84205,
+84211,
+84241,
+84259,
+84270,
+84288,
+84310,
+84339,
+84346,
+84353,
+84400,
+84400,
+84400,
+84400,
84421,
-84421,
-84428,
84428,
-84473,
-84496,
-84506,
-84532,
-84532,
-84532,
-84532,
-84574,
-84581,
-84626,
-84643,
-84681,
-84721,
+84444,
+84487,
+84507,
+84539,
+84575,
+84575,
+84587,
+84587,
+84602,
+84614,
+84621,
+84628,
+84642,
+84653,
+84653,
+84663,
+84690,
+84699,
+84706,
84731,
-84731,
-84731,
-84756,
-84795,
-84795,
-84795,
-84810,
-84815,
-84825,
-84825,
-84825,
-84858,
-84863,
-84887,
-84902,
-84917,
-84924,
-84955,
-84968,
-84968,
-84975,
-85009,
-85009,
-85009,
-85009,
-85030,
-85030,
-85030,
-85060,
-85086,
-85086,
-85086,
-85086,
-85086,
-85096,
-85096,
-85096,
-85096,
-85096,
-85162,
-85162,
-85162,
-85179,
-85203,
-85203,
-85221,
-85221,
-85221,
-85227,
-85264,
-85264,
-85269,
-85298,
-85305,
-85327,
-85327,
-85353,
-85374,
-85374,
-85374,
+84738,
+84767,
+84774,
+84781,
+84799,
+84816,
+84823,
+84836,
+84843,
+84850,
+84872,
+84879,
+84886,
+84886,
+84886,
+84893,
+84900,
+84921,
+84946,
+84953,
+84967,
+84974,
+84981,
+84988,
+85004,
+85004,
+85004,
+85022,
+85050,
+85050,
+85050,
+85057,
+85071,
+85071,
+85115,
+85135,
+85135,
+85154,
+85174,
+85190,
+85217,
+85243,
+85250,
+85250,
+85276,
+85284,
+85295,
+85313,
+85313,
+85330,
+85330,
+85330,
+85330,
+85337,
+85344,
+85354,
85374,
-85374,
-85396,
-85396,
-85396,
-85410,
-85422,
-85422,
-85458,
-85458,
-85492,
-85492,
-85513,
+85381,
+85393,
+85400,
+85414,
+85429,
+85452,
+85459,
+85496,
+85520,
85520,
-85545,
-85545,
-85545,
-85572,
-85572,
-85583,
+85534,
+85534,
+85540,
+85547,
+85547,
+85547,
+85594,
85594,
-85620,
-85646,
-85675,
-85675,
-85680,
-85723,
-85723,
+85611,
+85611,
+85633,
+85679,
+85716,
+85732,
+85732,
85767,
-85786,
-85802,
-85802,
-85802,
-85831,
-85860,
-85882,
-85882,
-85882,
-85899,
-85899,
-85926,
-85926,
-85950,
-85958,
-85995,
-86012,
-86012,
-86012,
-86048,
-86048,
-86067,
-86078,
-86097,
-86119,
-86119,
-86119,
-86139,
-86160,
-86160,
-86180,
-86192,
-86209,
-86209,
-86221,
-86244,
-86244,
-86262,
-86299,
-86307,
-86329,
-86336,
-86336,
-86343,
-86343,
-86343,
-86343,
-86343,
-86360,
-86367,
-86377,
-86377,
-86377,
-86393,
-86404,
-86417,
-86427,
-86443,
-86474,
-86486,
-86493,
-86545,
-86545,
-86545,
-86579,
-86584,
-86584,
-86617,
-86627,
-86662,
-86692,
-86720,
-86720,
-86720,
-86742,
-86755,
-86764,
-86764,
-86774,
-86784,
-86784,
-86784,
-86800,
-86827,
-86854,
-86854,
-86854,
-86887,
-86896,
-86908,
-86920,
-86920,
-86929,
-86940,
-86952,
-87003,
-87011,
-87011,
-87029,
-87040,
-87040,
-87056,
-87068,
-87088,
-87088,
-87088,
-87088,
-87108,
-87134,
-87134,
-87134,
-87142,
-87150,
-87162,
-87187,
-87187,
-87187,
-87194,
-87194,
-87194,
-87221,
-87243,
-87284,
-87284,
-87284,
-87284,
-87294,
-87321,
-87321,
-87328,
-87372,
-87386,
-87386,
-87399,
-87437,
+85782,
+85791,
+85804,
+85818,
+85828,
+85828,
+85828,
+85855,
+85855,
+85855,
+85878,
+85902,
+85909,
+85923,
+85930,
+85973,
+85996,
+86028,
+86070,
+86117,
+86117,
+86137,
+86144,
+86144,
+86152,
+86159,
+86181,
+86195,
+86195,
+86202,
+86220,
+86239,
+86239,
+86239,
+86246,
+86265,
+86272,
+86272,
+86296,
+86303,
+86317,
+86340,
+86340,
+86356,
+86368,
+86386,
+86419,
+86419,
+86448,
+86475,
+86482,
+86482,
+86497,
+86520,
+86520,
+86520,
+86530,
+86530,
+86544,
+86576,
+86576,
+86583,
+86583,
+86637,
+86651,
+86668,
+86668,
+86668,
+86679,
+86679,
+86679,
+86701,
+86735,
+86772,
+86772,
+86779,
+86779,
+86798,
+86841,
+86848,
+86848,
+86848,
+86882,
+86903,
+86903,
+86912,
+86924,
+86924,
+86924,
+86950,
+86957,
+86973,
+86982,
+86989,
+86989,
+87009,
+87036,
+87036,
+87036,
+87045,
+87058,
+87094,
+87094,
+87094,
+87120,
+87120,
+87168,
+87174,
+87174,
+87195,
+87211,
+87239,
+87239,
+87239,
+87239,
+87282,
+87282,
+87307,
+87307,
+87307,
+87307,
+87312,
+87338,
+87345,
+87354,
+87382,
+87390,
+87422,
+87440,
+87447,
87457,
-87473,
-87473,
-87497,
-87509,
-87533,
-87597,
-87597,
-87616,
-87633,
-87671,
-87671,
-87690,
-87703,
-87714,
-87714,
-87714,
-87729,
-87729,
-87729,
-87735,
-87764,
-87764,
-87774,
-87822,
-87832,
-87832,
-87832,
-87840,
-87845,
-87865,
-87865,
-87871,
-87895,
-87895,
-87903,
-87903,
-87903,
-87903,
-87926,
-87937,
-87956,
-87956,
-87976,
-88003,
-88012,
-88012,
-88012,
-88017,
-88029,
-88029,
-88052,
+87472,
+87472,
+87489,
+87489,
+87512,
+87556,
+87556,
+87575,
+87599,
+87599,
+87610,
+87610,
+87610,
+87631,
+87668,
+87680,
+87680,
+87680,
+87693,
+87719,
+87736,
+87787,
+87818,
+87825,
+87831,
+87831,
+87831,
+87831,
+87843,
+87880,
+87892,
+87909,
+87909,
+87909,
+87929,
+87951,
+87951,
+87973,
+87973,
+87997,
+88019,
+88031,
+88031,
+88040,
+88040,
+88060,
+88067,
88074,
-88074,
-88150,
-88150,
-88175,
-88183,
-88200,
-88200,
-88206,
-88206,
-88214,
-88239,
-88239,
-88251,
-88251,
-88287,
-88311,
-88311,
-88311,
-88311,
-88336,
+88081,
+88111,
+88137,
+88144,
+88144,
+88156,
+88163,
+88163,
+88192,
+88192,
+88192,
+88192,
+88192,
+88192,
+88192,
+88192,
+88211,
+88218,
+88218,
+88245,
+88245,
+88271,
+88286,
+88293,
+88306,
88336,
88336,
88336,
88336,
-88357,
-88357,
-88357,
-88376,
-88412,
-88412,
-88420,
-88439,
-88474,
-88486,
+88348,
+88370,
+88370,
+88370,
+88394,
+88394,
+88394,
+88409,
+88409,
+88434,
+88448,
+88462,
+88484,
88512,
-88512,
-88529,
-88538,
-88548,
-88548,
-88556,
-88556,
-88579,
-88625,
-88625,
-88635,
-88635,
-88635,
-88647,
-88647,
-88659,
-88659,
-88659,
-88659,
-88709,
-88747,
-88747,
-88761,
-88778,
-88789,
-88800,
-88852,
-88852,
-88880,
-88892,
-88892,
-88892,
-88892,
-88904,
+88525,
+88551,
+88584,
+88592,
+88599,
+88611,
+88667,
+88667,
+88684,
+88696,
+88696,
+88728,
+88728,
+88728,
+88744,
+88744,
+88771,
+88792,
+88814,
+88814,
+88814,
+88832,
+88832,
+88832,
+88842,
+88849,
+88849,
+88854,
+88868,
+88876,
+88916,
88916,
-88925,
-88925,
-88955,
-88996,
-89007,
-89007,
+88941,
+88941,
+88976,
+88976,
+88985,
+88993,
+89008,
+89008,
+89008,
+89027,
89027,
89027,
-89047,
-89066,
-89081,
-89081,
-89094,
-89101,
-89112,
-89112,
-89112,
-89131,
-89148,
-89148,
-89148,
-89148,
-89184,
-89196,
-89231,
-89246,
-89276,
-89307,
-89317,
-89324,
-89324,
-89355,
-89379,
-89379,
-89379,
-89410,
-89426,
-89444,
-89473,
-89511,
-89511,
-89511,
-89523,
-89523,
-89523,
-89523,
-89523,
-89543,
-89554,
+89040,
+89064,
+89064,
+89064,
+89064,
+89105,
+89113,
+89120,
+89142,
+89142,
+89142,
+89150,
+89197,
+89197,
+89197,
+89204,
+89210,
+89210,
+89230,
+89248,
+89275,
+89303,
+89303,
+89310,
+89310,
+89321,
+89321,
+89339,
+89374,
+89374,
+89374,
+89391,
+89417,
+89442,
+89442,
+89451,
+89461,
+89461,
+89461,
+89471,
+89471,
+89525,
+89525,
+89541,
+89541,
89561,
-89574,
-89584,
-89584,
-89601,
-89601,
-89618,
-89637,
-89647,
-89656,
-89656,
-89656,
-89656,
-89656,
-89656,
-89675,
-89694,
-89694,
-89694,
-89704,
-89714,
-89734,
-89745,
-89745,
-89773,
-89782,
-89782,
-89815,
-89838,
-89847,
-89852,
-89871,
-89899,
-89899,
-89918,
-89926,
-89926,
-89926,
-89926,
-89943,
-89959,
-89959,
-89969,
-89983,
-89998,
-90017,
-90050,
-90050,
+89592,
+89602,
+89614,
+89636,
+89636,
+89650,
+89684,
+89684,
+89707,
+89733,
+89733,
+89733,
+89746,
+89746,
+89746,
+89746,
+89746,
+89785,
+89785,
+89785,
+89802,
+89802,
+89802,
+89812,
+89819,
+89819,
+89826,
+89826,
+89826,
+89826,
+89826,
+89826,
+89826,
+89844,
+89851,
+89866,
+89876,
+89917,
+89929,
+89948,
+89973,
+89987,
+90013,
+90013,
+90020,
+90020,
+90051,
+90060,
90070,
90070,
-90083,
-90083,
-90083,
-90083,
-90130,
-90130,
-90151,
-90165,
-90172,
-90197,
-90214,
-90232,
-90256,
-90256,
-90256,
-90256,
-90256,
-90256,
-90262,
-90272,
-90299,
-90317,
-90333,
-90351,
-90351,
-90351,
-90351,
-90359,
-90359,
-90372,
-90407,
-90431,
-90440,
-90440,
-90440,
-90456,
-90464,
-90470,
-90495,
-90552,
-90583,
-90583,
-90583,
-90597,
-90608,
-90671,
-90681,
-90696,
-90702,
-90702,
-90715,
-90715,
-90730,
-90730,
-90730,
-90756,
-90756,
-90768,
-90802,
-90802,
-90845,
-90855,
-90855,
-90855,
-90879,
-90923,
-90947,
-90953,
-90968,
-90975,
-90982,
-90993,
-91027,
-91043,
-91051,
-91132,
-91139,
-91139,
-91139,
-91139,
-91175,
-91189,
-91204,
-91204,
-91211,
-91239,
-91263,
-91302,
-91325,
-91344,
-91344,
-91363,
-91385,
+90077,
+90088,
+90096,
+90096,
+90096,
+90096,
+90116,
+90142,
+90156,
+90168,
+90175,
+90186,
+90192,
+90212,
+90238,
+90265,
+90277,
+90301,
+90301,
+90301,
+90306,
+90306,
+90384,
+90384,
+90398,
+90418,
+90438,
+90467,
+90474,
+90486,
+90504,
+90513,
+90513,
+90513,
+90529,
+90538,
+90546,
+90557,
+90564,
+90585,
+90592,
+90604,
+90622,
+90627,
+90642,
+90642,
+90652,
+90659,
+90659,
+90666,
+90666,
+90666,
+90686,
+90706,
+90743,
+90743,
+90750,
+90750,
+90750,
+90770,
+90786,
+90830,
+90849,
+90856,
+90856,
+90856,
+90881,
+90896,
+90910,
+90956,
+90969,
+90991,
+90999,
+91007,
+91021,
+91036,
+91036,
+91054,
+91059,
+91101,
+91120,
+91159,
+91177,
+91217,
+91236,
+91268,
+91285,
+91293,
+91300,
+91300,
+91300,
+91300,
+91310,
+91348,
+91379,
+91386,
+91386,
+91408,
91415,
-91422,
-91422,
-91422,
-91439,
-91458,
-91465,
-91465,
-91473,
-91478,
-91489,
-91529,
-91536,
-91544,
-91549,
-91578,
-91585,
-91605,
-91605,
+91438,
+91455,
+91455,
+91474,
+91474,
+91485,
+91485,
+91492,
+91513,
+91546,
+91546,
+91553,
+91553,
+91553,
+91566,
+91566,
+91566,
+91581,
+91596,
+91596,
+91615,
+91615,
+91629,
+91629,
91637,
91637,
-91657,
-91706,
-91720,
+91644,
+91658,
+91673,
+91688,
+91705,
+91705,
+91723,
91741,
-91762,
-91762,
-91769,
-91782,
-91787,
-91801,
-91808,
-91808,
-91815,
-91832,
+91759,
+91759,
+91759,
+91759,
+91771,
+91825,
+91825,
91842,
-91890,
-91926,
-91926,
-91933,
-91950,
-91964,
-91971,
-91979,
-91986,
-92008,
-92008,
-92008,
-92008,
-92008,
-92015,
-92021,
-92021,
-92028,
-92035,
-92066,
-92066,
-92076,
-92084,
+91860,
+91870,
+91870,
+91870,
+91888,
+91888,
+91914,
+91940,
+91955,
+91962,
+91962,
+91994,
+92009,
+92036,
+92036,
+92043,
+92054,
+92054,
+92086,
+92086,
+92086,
92095,
-92122,
-92122,
-92122,
-92145,
+92125,
+92125,
+92138,
+92138,
+92147,
92173,
-92188,
-92196,
-92196,
-92223,
-92223,
-92239,
-92267,
-92287,
-92287,
-92294,
-92309,
-92331,
-92331,
-92345,
-92351,
-92358,
-92366,
-92378,
-92378,
-92420,
-92460,
-92467,
-92507,
-92543,
-92543,
-92576,
-92583,
-92594,
-92601,
-92601,
-92635,
-92662,
-92722,
-92722,
-92759,
-92782,
-92793,
-92800,
-92816,
-92862,
-92869,
-92869,
-92875,
-92890,
-92911,
-92918,
-92944,
-92944,
-92951,
+92234,
+92249,
+92256,
+92277,
+92293,
+92322,
+92322,
+92322,
+92322,
+92322,
+92322,
+92328,
+92339,
+92348,
+92348,
+92348,
+92357,
+92400,
+92400,
+92400,
+92415,
+92425,
+92432,
+92432,
+92432,
+92432,
+92438,
+92462,
+92492,
+92499,
+92499,
+92499,
+92499,
+92520,
+92534,
+92560,
+92560,
+92587,
+92587,
+92596,
+92613,
+92642,
+92676,
+92699,
+92699,
+92699,
+92712,
+92712,
+92712,
+92732,
+92732,
+92754,
+92769,
+92795,
+92845,
+92857,
+92857,
+92879,
+92879,
+92879,
+92898,
+92931,
+92943,
+92952,
+92952,
+92952,
92961,
-92968,
-92998,
-93026,
-93045,
-93057,
-93071,
-93077,
-93097,
-93097,
-93097,
+92961,
+92969,
+92969,
+92969,
+92969,
+93001,
+93001,
+93001,
+93001,
+93017,
+93017,
+93033,
+93054,
+93054,
+93061,
+93061,
+93061,
+93070,
+93070,
+93070,
+93099,
+93099,
+93112,
93112,
-93122,
-93122,
-93143,
-93150,
-93177,
-93177,
-93190,
-93197,
-93197,
-93197,
-93235,
-93242,
+93121,
+93153,
+93153,
+93153,
+93187,
+93208,
+93214,
+93220,
+93231,
+93231,
+93231,
+93231,
+93231,
93256,
-93284,
-93303,
-93323,
-93341,
-93386,
-93392,
-93416,
-93451,
-93495,
-93518,
-93542,
-93559,
-93564,
+93256,
+93256,
+93262,
+93262,
+93270,
+93270,
+93270,
+93270,
+93270,
+93277,
+93326,
+93344,
+93362,
+93362,
+93362,
+93362,
+93376,
+93408,
+93408,
+93415,
+93415,
+93415,
+93427,
+93427,
+93427,
+93433,
+93445,
+93464,
+93503,
+93513,
+93525,
+93525,
+93547,
93564,
-93577,
-93577,
-93590,
-93604,
-93624,
-93624,
-93642,
-93656,
-93675,
-93700,
-93720,
-93727,
-93744,
-93757,
-93757,
-93764,
-93780,
-93841,
-93854,
-93882,
-93899,
-93914,
-93923,
-93923,
-93939,
-93946,
-93953,
-93963,
-93970,
-93984,
-94030,
-94050,
-94103,
-94128,
-94142,
-94142,
-94142,
-94154,
-94187,
-94187,
-94187,
-94198,
-94226,
-94233,
-94241,
-94269,
-94323,
-94345,
-94345,
-94345,
-94362,
-94362,
-94379,
-94394,
-94414,
-94414,
-94438,
-94446,
-94469,
-94476,
-94516,
-94516,
-94523,
-94551,
-94566,
-94573,
-94573,
-94595,
-94602,
-94641,
-94641,
-94641,
-94657,
-94693,
-94707,
-94724,
-94783,
-94790,
-94804,
-94804,
-94811,
-94829,
-94849,
-94849,
-94874,
-94874,
-94882,
-94889,
-94913,
-94913,
+93595,
+93595,
+93623,
+93653,
+93662,
+93662,
+93678,
+93678,
+93678,
+93742,
+93763,
+93770,
+93777,
+93790,
+93796,
+93814,
+93823,
+93830,
+93843,
+93856,
+93864,
+93908,
+93935,
+93935,
+93935,
+93944,
+93952,
+93952,
+93997,
+94035,
+94054,
+94054,
+94065,
+94065,
+94079,
+94125,
+94138,
+94155,
+94170,
+94182,
+94208,
+94243,
+94253,
+94271,
+94283,
+94295,
+94312,
+94326,
+94326,
+94364,
+94382,
+94382,
+94410,
+94432,
+94432,
+94453,
+94453,
+94479,
+94487,
+94514,
+94529,
+94529,
+94540,
+94540,
+94547,
+94601,
+94601,
+94631,
+94669,
+94669,
+94680,
+94680,
+94706,
+94742,
+94782,
+94782,
+94792,
+94802,
+94824,
+94824,
+94834,
+94834,
+94851,
+94871,
+94878,
+94878,
+94906,
+94906,
94913,
-94913,
-94940,
-94967,
-94974,
-94974,
-94974,
+94957,
+94980,
+94989,
94995,
-95038,
-95048,
-95048,
-95069,
-95085,
-95085,
-95092,
-95109,
-95116,
-95134,
-95141,
-95148,
-95172,
-95172,
-95236,
-95263,
-95263,
-95263,
-95275,
-95282,
-95282,
-95333,
-95340,
-95361,
-95361,
-95386,
+95008,
+95024,
+95068,
+95089,
+95089,
+95099,
+95099,
+95140,
+95146,
+95146,
+95146,
+95173,
+95185,
+95185,
+95185,
+95185,
+95185,
+95208,
+95208,
+95208,
+95208,
+95214,
+95214,
+95214,
+95248,
+95254,
+95261,
+95288,
+95288,
+95300,
+95326,
+95326,
+95344,
+95360,
+95360,
+95360,
+95360,
+95360,
+95360,
+95369,
+95369,
+95381,
95393,
-95400,
-95410,
-95417,
-95417,
-95417,
-95472,
-95499,
+95414,
+95414,
+95414,
+95414,
+95420,
+95427,
+95474,
+95474,
+95474,
95516,
95516,
-95523,
-95530,
-95545,
-95598,
-95643,
-95665,
-95677,
-95684,
-95732,
-95732,
-95752,
-95787,
-95833,
-95870,
-95921,
-95921,
-95921,
-95941,
-95941,
-95973,
-95989,
-96004,
-96029,
+95516,
+95562,
+95569,
+95611,
+95611,
+95611,
+95652,
+95664,
+95664,
+95671,
+95671,
+95716,
+95716,
+95741,
+95741,
+95741,
+95757,
+95781,
+95781,
+95781,
+95781,
+95792,
+95810,
+95836,
+95836,
+95836,
+95841,
+95860,
+95860,
+95871,
+95871,
+95871,
+95923,
+95923,
+95938,
+95956,
+95968,
+95990,
+96000,
+96007,
+96017,
+96017,
+96017,
96029,
-96052,
-96070,
-96083,
-96101,
-96115,
-96122,
-96122,
-96129,
-96129,
-96142,
-96148,
-96156,
-96156,
-96185,
-96235,
+96047,
+96064,
+96064,
+96078,
+96078,
+96078,
+96085,
+96085,
+96097,
+96097,
+96106,
+96106,
+96128,
+96152,
+96152,
+96152,
+96152,
+96201,
+96217,
+96237,
+96237,
+96237,
+96247,
96255,
-96302,
-96316,
-96329,
-96336,
-96367,
-96374,
-96387,
-96387,
-96387,
-96414,
-96424,
-96424,
-96448,
-96448,
-96472,
-96523,
-96552,
-96565,
-96572,
-96601,
-96601,
-96608,
-96614,
-96653,
-96671,
-96685,
-96709,
-96716,
-96716,
-96754,
-96754,
-96761,
-96768,
-96806,
-96806,
-96837,
+96287,
+96293,
+96301,
+96325,
+96331,
+96331,
+96349,
+96359,
+96375,
+96406,
+96406,
+96412,
+96440,
+96451,
+96451,
+96463,
+96463,
+96488,
+96507,
+96519,
+96519,
+96531,
+96537,
+96558,
+96570,
+96585,
+96604,
+96622,
+96638,
+96638,
+96638,
+96668,
+96668,
+96668,
+96668,
+96668,
+96702,
+96702,
+96725,
+96735,
+96735,
+96735,
+96747,
+96758,
+96777,
+96777,
+96777,
+96777,
+96795,
+96795,
+96804,
+96816,
96844,
96844,
-96867,
-96891,
-96891,
+96844,
+96892,
+96904,
+96916,
+96916,
+96935,
96935,
-96942,
-96949,
-96956,
-96971,
-96971,
-96985,
-96990,
-97006,
-97027,
-97027,
+96972,
+96972,
+96972,
+96972,
+96989,
+97005,
+97013,
+97013,
+97013,
+97013,
+97013,
97043,
-97098,
-97137,
-97176,
-97210,
-97256,
-97263,
-97282,
-97289,
-97289,
-97328,
-97336,
-97343,
-97379,
+97061,
+97061,
+97071,
+97108,
+97124,
+97124,
+97178,
+97178,
+97178,
+97178,
+97178,
+97183,
+97215,
+97235,
+97242,
+97242,
+97273,
+97273,
+97325,
+97325,
+97325,
+97325,
+97366,
+97366,
+97366,
+97377,
+97377,
+97383,
+97390,
97422,
-97429,
-97436,
-97453,
-97470,
-97477,
-97477,
-97488,
-97488,
-97488,
-97501,
-97511,
-97511,
-97521,
+97422,
+97434,
+97459,
+97490,
+97490,
+97530,
+97530,
+97530,
+97530,
97530,
-97554,
-97554,
-97565,
-97565,
-97565,
-97600,
-97613,
-97613,
-97623,
-97637,
-97641,
-97648,
-97656,
-97656,
-97656,
-97684,
-97691,
-97705,
-97705,
-97705,
-97719,
-97733,
-97759,
-97784,
-97794,
-97821,
-97828,
-97838,
-97838,
-97859,
+97541,
+97541,
+97541,
+97541,
+97541,
+97558,
+97571,
+97571,
+97597,
+97608,
+97622,
+97639,
+97639,
+97639,
+97646,
+97646,
+97646,
+97646,
+97668,
+97668,
+97685,
+97711,
+97744,
+97764,
+97764,
+97776,
+97788,
+97817,
+97817,
+97817,
+97817,
+97833,
+97846,
+97846,
97866,
-97885,
-97933,
-97966,
-97966,
-97976,
-97976,
-98007,
-98011,
-98061,
-98079,
-98079,
-98079,
-98093,
-98104,
-98104,
-98104,
-98128,
-98135,
-98142,
-98142,
-98188,
-98188,
-98188,
-98188,
-98213,
-98242,
-98242,
-98253,
-98253,
-98262,
-98289,
-98300,
-98307,
-98350,
-98350,
-98350,
-98376,
-98376,
-98405,
-98412,
-98425,
-98433,
-98460,
-98481,
-98503,
-98513,
-98518,
-98523,
-98523,
-98523,
-98538,
-98544,
-98563,
-98579,
-98594,
-98594,
-98619,
-98672,
-98690,
-98697,
-98697,
-98719,
-98745,
-98764,
-98771,
-98790,
-98790,
-98790,
-98797,
-98809,
-98816,
-98869,
-98901,
-98941,
-98941,
-98948,
-98969,
-98999,
-99006,
+97866,
+97866,
+97878,
+97878,
+97878,
+97901,
+97925,
+97931,
+97949,
+97949,
+97957,
+97965,
+97965,
+97965,
+97965,
+97965,
+97980,
+97991,
+98004,
+98023,
+98034,
+98034,
+98045,
+98045,
+98045,
+98056,
+98085,
+98085,
+98085,
+98106,
+98132,
+98141,
+98141,
+98166,
+98183,
+98183,
+98189,
+98189,
+98195,
+98252,
+98252,
+98252,
+98274,
+98278,
+98288,
+98288,
+98309,
+98330,
+98330,
+98336,
+98356,
+98356,
+98411,
+98427,
+98427,
+98448,
+98448,
+98448,
+98448,
+98464,
+98464,
+98495,
+98510,
+98510,
+98510,
+98510,
+98510,
+98510,
+98525,
+98553,
+98553,
+98580,
+98610,
+98610,
+98626,
+98626,
+98637,
+98637,
+98652,
+98662,
+98662,
+98662,
+98662,
+98662,
+98678,
+98691,
+98706,
+98716,
+98732,
+98732,
+98759,
+98774,
+98778,
+98792,
+98792,
+98801,
+98819,
+98819,
+98844,
+98866,
+98886,
+98886,
+98886,
+98886,
+98906,
+98915,
+98915,
+98915,
+98947,
+98947,
+98947,
+98947,
+98995,
+99001,
+99031,
+99031,
+99031,
+99035,
99035,
-99055,
-99077,
-99089,
-99096,
-99135,
-99152,
-99159,
-99195,
-99215,
-99238,
-99246,
-99271,
-99298,
-99308,
-99330,
-99341,
-99378,
-99391,
-99398,
-99431,
-99452,
-99481,
-99509,
-99516,
-99531,
-99543,
-99574,
-99595,
+99035,
+99053,
+99053,
+99059,
+99059,
+99059,
+99059,
+99081,
+99097,
+99109,
+99109,
+99116,
+99116,
+99134,
+99134,
+99144,
+99144,
+99187,
+99193,
+99193,
+99193,
+99193,
+99193,
+99234,
+99268,
+99296,
+99313,
+99322,
+99353,
+99353,
+99359,
+99359,
+99359,
+99368,
+99379,
+99379,
+99379,
+99385,
+99385,
+99400,
+99400,
+99404,
+99404,
+99404,
+99422,
+99422,
+99422,
+99447,
+99469,
+99469,
+99469,
+99497,
+99522,
+99544,
+99544,
+99544,
+99544,
+99562,
+99583,
+99603,
99603,
-99611,
-99611,
-99618,
-99628,
-99628,
-99637,
-99637,
-99656,
-99666,
-99706,
-99706,
-99756,
-99788,
-99824,
-99824,
-99864,
-99864,
-99877,
-99910,
-99910,
-99969,
-99992,
-100006,
-100006,
-100020,
-100020,
-100032,
-100049,
-100075,
-100106,
-100113,
-100113,
-100142,
+99609,
+99609,
+99609,
+99619,
+99654,
+99673,
+99673,
+99683,
+99683,
+99720,
+99731,
+99747,
+99754,
+99795,
+99805,
+99817,
+99817,
+99841,
+99854,
+99872,
+99885,
+99885,
+99907,
+99939,
+99944,
+99961,
+99988,
+100011,
+100011,
+100011,
+100011,
+100011,
+100011,
+100011,
+100011,
+100011,
+100087,
+100103,
+100103,
+100125,
100149,
-100176,
-100183,
-100190,
-100197,
-100197,
-100216,
-100216,
-100223,
-100240,
-100240,
-100273,
-100273,
-100273,
-100305,
-100322,
-100342,
-100369,
-100393,
-100410,
-100430,
-100467,
-100474,
-100474,
-100508,
+100157,
+100157,
+100169,
+100169,
+100169,
+100169,
+100184,
+100196,
+100196,
+100196,
+100196,
+100204,
+100204,
+100217,
+100246,
+100258,
+100284,
+100300,
+100315,
+100338,
+100355,
+100355,
+100361,
+100361,
+100361,
+100387,
+100387,
+100387,
+100387,
+100404,
+100422,
+100428,
+100428,
+100437,
+100443,
+100458,
+100491,
100529,
-100543,
-100543,
-100558,
-100558,
-100564,
-100570,
-100594,
-100601,
-100632,
-100646,
-100653,
-100711,
-100769,
-100781,
-100811,
-100811,
-100811,
-100818,
+100542,
+100555,
+100559,
+100559,
+100559,
+100575,
+100593,
+100593,
+100593,
+100593,
+100593,
+100615,
+100615,
+100623,
+100641,
+100647,
+100666,
+100690,
+100690,
+100708,
+100724,
+100737,
+100741,
+100770,
+100789,
+100810,
+100810,
+100810,
100827,
100827,
-100841,
-100841,
-100856,
-100861,
-100868,
-100894,
-100898,
-100906,
-100925,
-100999,
-101006,
-101013,
-101013,
-101020,
-101027,
-101054,
-101072,
-101072,
-101101,
-101108,
-101136,
-101164,
-101180,
-101180,
-101187,
-101187,
-101201,
-101217,
-101228,
-101259,
-101259,
-101287,
-101287,
-101331,
-101331,
-101331,
-101367,
-101367,
-101374,
-101374,
-101374,
-101397,
-101417,
-101434,
-101450,
-101450,
-101454,
-101477,
+100885,
+100885,
+100885,
+100885,
+100908,
+100918,
+100939,
+100939,
+100939,
+100953,
+100957,
+100987,
+101008,
+101008,
+101008,
+101008,
+101008,
+101008,
+101034,
+101050,
+101050,
+101070,
+101070,
+101079,
+101079,
+101087,
+101087,
+101087,
+101095,
+101116,
+101129,
+101148,
+101148,
+101148,
+101148,
+101148,
+101148,
+101162,
+101215,
+101215,
+101215,
+101215,
+101236,
+101241,
+101267,
+101267,
+101272,
+101272,
+101272,
+101281,
+101296,
+101296,
+101296,
+101296,
+101296,
+101296,
+101296,
+101325,
+101330,
+101330,
+101378,
+101378,
+101392,
+101399,
+101406,
+101419,
+101419,
+101469,
+101469,
+101469,
+101494,
+101511,
101528,
-101538,
-101538,
-101538,
-101538,
-101538,
-101566,
-101596,
-101596,
-101606,
-101606,
-101614,
-101623,
-101623,
-101623,
-101623,
-101637,
-101637,
-101637,
+101528,
+101535,
+101535,
+101539,
+101551,
+101551,
+101571,
+101571,
+101586,
+101608,
+101620,
+101630,
+101630,
+101630,
+101670,
101670,
-101690,
-101706,
-101732,
-101756,
-101770,
-101770,
+101679,
+101696,
+101728,
+101741,
+101747,
+101758,
101790,
-101809,
-101817,
-101830,
-101830,
-101844,
-101860,
-101888,
-101906,
-101922,
-101922,
-101942,
-101960,
-101960,
-101969,
-101983,
-101983,
-102003,
-102019,
-102019,
-102019,
-102019,
-102053,
-102059,
-102136,
-102143,
-102167,
-102174,
-102195,
-102229,
-102229,
+101790,
+101804,
+101804,
+101816,
+101816,
+101852,
+101862,
+101876,
+101876,
+101925,
+101939,
+101959,
+101978,
+101988,
+101988,
+101988,
+101988,
+102026,
+102054,
+102120,
+102155,
+102166,
+102184,
+102184,
+102198,
+102211,
+102221,
+102237,
102248,
-102261,
-102261,
-102286,
-102302,
-102317,
-102317,
-102328,
-102352,
-102352,
+102254,
+102254,
+102277,
+102277,
+102288,
+102297,
+102314,
+102324,
+102382,
102382,
-102405,
-102422,
-102422,
-102438,
-102445,
-102470,
-102470,
-102512,
-102512,
-102536,
-102536,
-102536,
-102555,
-102564,
-102583,
-102595,
-102595,
-102611,
-102611,
-102611,
-102611,
-102634,
-102651,
-102676,
-102689,
-102693,
-102693,
-102697,
-102704,
-102771,
-102781,
-102798,
-102824,
-102871,
-102871,
-102871,
+102397,
+102404,
+102418,
+102418,
+102431,
+102431,
+102447,
+102455,
+102455,
+102468,
+102468,
+102502,
+102523,
+102532,
+102542,
+102562,
+102598,
+102598,
+102617,
+102617,
+102658,
+102658,
+102675,
+102694,
+102711,
+102750,
+102750,
+102760,
+102760,
+102774,
+102786,
+102833,
+102844,
+102866,
102881,
-102888,
-102903,
-102914,
-102914,
-102968,
-103009,
-103019,
-103030,
+102913,
+102928,
+102952,
+102982,
+103002,
+103021,
+103048,
103064,
-103064,
-103077,
-103077,
-103077,
-103077,
-103092,
-103113,
-103168,
-103179,
-103216,
-103216,
-103216,
-103222,
-103234,
-103234,
-103234,
-103234,
-103245,
-103266,
-103266,
-103277,
-103277,
-103320,
-103320,
-103354,
-103380,
-103390,
-103410,
-103410,
-103441,
-103458,
-103465,
-103465,
-103474,
-103492,
-103507,
-103507,
-103521,
-103528,
-103534,
-103543,
-103554,
-103576,
-103588,
-103598,
-103605,
-103612,
-103645,
-103652,
-103666,
-103686,
+103083,
+103098,
+103098,
+103098,
+103132,
+103138,
+103152,
+103152,
+103152,
+103174,
+103185,
+103185,
+103197,
+103228,
+103228,
+103228,
+103262,
+103262,
+103296,
+103296,
+103296,
+103317,
+103330,
+103330,
+103343,
+103357,
+103357,
+103411,
+103418,
+103422,
+103436,
+103447,
+103478,
+103478,
+103513,
+103522,
+103557,
+103562,
+103594,
+103607,
+103635,
+103635,
+103635,
+103649,
+103658,
+103664,
+103678,
+103699,
+103699,
+103712,
103726,
-103737,
-103742,
-103742,
-103776,
-103791,
-103803,
-103803,
-103809,
-103825,
-103844,
-103868,
-103902,
-103902,
-103902,
-103902,
-103915,
-103936,
-103966,
-103966,
-103992,
-104033,
-104051,
-104058,
-104090,
-104120,
-104124,
-104124,
-104135,
-104163,
-104180,
-104190,
-104208,
-104223,
-104240,
-104257,
-104257,
-104257,
-104257,
-104282,
-104304,
-104304,
-104304,
-104310,
+103730,
+103730,
+103734,
+103756,
+103756,
+103763,
+103782,
+103786,
+103805,
+103818,
+103832,
+103836,
+103836,
+103848,
+103855,
+103855,
+103855,
+103878,
+103878,
+103878,
+103878,
+103903,
+103903,
+103918,
+103940,
+103945,
+103945,
+103962,
+103973,
+103973,
+103973,
+103987,
+104026,
+104026,
+104041,
+104075,
+104079,
+104089,
+104105,
+104109,
+104109,
+104109,
+104109,
+104127,
+104172,
+104188,
+104188,
+104203,
+104203,
+104225,
+104239,
+104254,
+104276,
+104301,
104338,
-104362,
-104374,
-104386,
-104386,
-104413,
-104413,
-104413,
-104448,
+104349,
+104371,
+104390,
+104390,
+104407,
+104421,
+104434,
+104441,
+104441,
+104441,
+104441,
+104441,
+104441,
+104441,
104448,
-104452,
-104484,
-104484,
-104502,
-104512,
-104533,
-104533,
-104576,
-104596,
-104616,
-104639,
-104639,
-104672,
-104672,
-104682,
-104682,
-104682,
-104703,
-104711,
-104715,
-104742,
-104758,
-104758,
-104758,
-104758,
-104768,
-104768,
-104785,
-104793,
-104797,
-104814,
-104814,
-104852,
-104889,
-104893,
-104897,
-104926,
-104949,
-104949,
-104955,
-104955,
-104955,
-104955,
-104973,
-104973,
-104973,
-104981,
-105007,
-105024,
-105044,
-105058,
-105073,
-105077,
-105101,
-105111,
-105111,
-105111,
-105163,
-105163,
-105163,
-105170,
+104461,
+104493,
+104511,
+104519,
+104519,
+104527,
+104552,
+104562,
+104581,
+104598,
+104598,
+104598,
+104598,
+104615,
+104648,
+104675,
+104691,
+104701,
+104737,
+104737,
+104737,
+104737,
+104737,
+104737,
+104737,
+104737,
+104754,
+104775,
+104779,
+104792,
+104796,
+104801,
+104801,
+104816,
+104829,
+104829,
+104845,
+104865,
+104869,
+104869,
+104887,
+104887,
+104887,
+104887,
+104902,
+104967,
+104977,
+104977,
+104984,
+104995,
+105048,
+105048,
+105055,
+105055,
+105055,
+105055,
+105063,
+105063,
+105063,
+105100,
+105130,
105178,
105178,
-105194,
-105201,
-105201,
-105201,
-105214,
-105214,
-105214,
-105226,
-105244,
-105269,
-105287,
-105309,
-105314,
-105334,
-105339,
-105339,
-105339,
-105346,
-105396,
-105408,
-105412,
-105412,
-105441,
-105472,
-105472,
-105497,
-105515,
-105515,
-105525,
+105206,
+105206,
+105228,
+105245,
+105245,
+105245,
+105245,
+105245,
+105245,
+105245,
+105245,
+105245,
+105245,
+105245,
+105257,
+105257,
+105257,
+105257,
+105306,
+105306,
+105328,
+105333,
+105333,
+105351,
+105370,
+105378,
+105378,
+105388,
+105410,
+105410,
+105415,
+105438,
+105438,
+105438,
+105438,
+105438,
+105446,
+105482,
+105486,
+105516,
+105516,
+105516,
+105526,
+105544,
105544,
-105549,
-105549,
-105549,
-105553,
-105553,
-105568,
-105602,
+105558,
+105558,
+105570,
+105603,
+105610,
+105610,
+105610,
105624,
-105644,
-105655,
-105655,
-105655,
-105672,
-105685,
-105685,
-105694,
-105707,
-105724,
-105733,
-105733,
-105739,
-105739,
-105759,
-105759,
-105766,
-105807,
-105807,
-105825,
-105825,
-105825,
-105825,
-105835,
-105835,
-105851,
-105861,
-105881,
-105911,
-105911,
-105911,
-105911,
-105911,
-105928,
-105946,
-105951,
-105977,
-105977,
-106027,
-106074,
-106092,
-106092,
-106102,
-106111,
-106122,
-106137,
-106137,
-106145,
-106155,
-106155,
-106155,
-106163,
-106169,
-106200,
-106200,
-106214,
-106224,
-106255,
-106271,
-106271,
-106271,
-106271,
-106277,
-106291,
-106291,
-106291,
-106291,
-106291,
-106295,
-106295,
-106295,
+105670,
+105670,
+105670,
+105680,
+105690,
+105698,
+105709,
+105709,
+105709,
+105729,
+105729,
+105737,
+105742,
+105764,
+105805,
+105836,
+105846,
+105846,
+105890,
+105890,
+105902,
+105920,
+105957,
+105968,
+105968,
+105968,
+105975,
+105975,
+105996,
+105996,
+105996,
+106001,
+106001,
+106019,
+106019,
+106043,
+106064,
+106107,
+106153,
+106190,
+106208,
+106208,
+106208,
+106220,
+106220,
+106220,
+106220,
+106220,
+106254,
+106254,
+106254,
+106264,
+106296,
106304,
-106332,
-106379,
-106379,
-106379,
-106379,
-106379,
-106379,
-106389,
-106441,
-106477,
-106477,
-106489,
-106489,
-106498,
-106512,
-106512,
-106512,
-106512,
-106532,
-106532,
-106543,
-106543,
-106564,
-106582,
-106595,
-106595,
-106618,
-106618,
-106649,
-106658,
-106677,
-106687,
-106726,
-106739,
-106739,
-106739,
-106757,
-106757,
-106775,
-106787,
-106805,
-106805,
-106817,
-106817,
-106839,
-106839,
-106839,
-106853,
-106875,
-106875,
-106884,
-106897,
-106897,
-106907,
-106991,
-106991,
-107022,
-107022,
-107036,
-107051,
-107051,
-107087,
-107098,
-107098,
-107106,
-107121,
-107129,
-107136,
-107162,
-107180,
-107186,
-107193,
-107215,
-107247,
-107247,
-107253,
-107253,
-107268,
+106309,
+106328,
+106333,
+106348,
+106366,
+106384,
+106384,
+106408,
+106408,
+106424,
+106424,
+106424,
+106443,
+106459,
+106474,
+106474,
+106499,
+106522,
+106545,
+106558,
+106625,
+106630,
+106642,
+106665,
+106684,
+106697,
+106703,
+106703,
+106737,
+106743,
+106743,
+106766,
+106782,
+106782,
+106782,
+106782,
+106788,
+106816,
+106816,
+106834,
+106857,
+106863,
+106889,
+106906,
+106925,
+106925,
+106935,
+106961,
+106971,
+106971,
+107004,
+107004,
+107023,
+107023,
+107023,
+107029,
+107035,
+107041,
+107096,
+107119,
+107123,
+107144,
+107144,
+107165,
+107185,
+107185,
+107234,
+107259,
107278,
-107298,
-107315,
+107294,
+107308,
+107319,
+107319,
107319,
107319,
-107334,
-107346,
-107382,
-107417,
-107417,
-107441
+107333,
+107372,
+107385,
+107385,
+107385,
+107385,
+107405,
+107405,
+107405,
+107405,
+107405,
+107421,
+107427,
+107432,
+107432,
+107432,
+107441,
+107446,
+107446,
+107466,
+107466,
+107466,
+107466,
+107518,
+107528,
+107528,
+107528,
+107544,
+107561,
+107567,
+107567,
+107572,
+107582,
+107594,
+107635,
+107675,
+107675,
+107675,
+107697,
+107703,
+107703,
+107741,
+107751,
+107751,
+107768,
+107773,
+107796,
+107796,
+107828,
+107828,
+107828,
+107828,
+107848,
+107863,
+107873,
+107880,
+107880,
+107886,
+107922,
+107958,
+107981,
+107981,
+107981
};
static const quint16 tldChunkCount = 2;
static const char * const tldData[tldChunkCount] = {
-"teo.br\0cs.it\0yakage.okayama.jp\0"
-"name.cy\0oiso.kanagawa.jp\0"
-"charter.aero\0arts.co\0sa-east-1.elasticbeanstalk.com\0"
-"parliament.cy\0"
-"tm.fr\0"
-"\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0realm.cz\0"
-"cool\0"
-"sukumo.kochi.jp\0"
-"shirataka.yamagata.jp\0dad\0sk.eu.org\0"
-"coop\0tos.it\0"
-"sannohe.aomori.jp\0"
-"name.eg\0"
-"rauma.no\0\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"barrell-of-knowledge.info\0"
-"komvux.se\0"
-"terni.it\0onga.fukuoka.jp\0\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0"
-"chiyoda.tokyo.jp\0svelvik.no\0"
-"tarui.gifu.jp\0utsira.no\0"
-"chino.nagano.jp\0clinique\0omniwe.site\0"
-"\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0"
-"sandefjord.no\0day\0"
-"sasayama.hyogo.jp\0"
-"name.az\0firm.ro\0"
-"nagai.yamagata.jp\0krodsherad.no\0"
-"childrensgarden.museum\0chiropractic.museum\0"
-"etnedal.no\0e4.cz\0"
-"tm.hu\0"
-"crs\0csc\0"
-"salvadordali.museum\0"
-"*.spectrum.myjino.ru\0"
-"\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0"
-"nyc.mn\0"
-"chiba.jp\0"
-"skodje.no\0"
-"kariya.aichi.jp\0"
-"\xe6\x94\xbf\xe5\x8a\xa1\0"
-"mayfirst.org\0"
-"nakamura.kochi.jp\0"
-"organic\0"
-"sling\0"
-"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0"
-"shiiba.miyazaki.jp\0"
-"elburg.museum\0"
-"nsw.edu.au\0dds\0"
-"services\0ru.eu.org\0se.eu.org\0"
-"pagexl.com\0"
-"sakado.saitama.jp\0romskog.no\0"
-"kouhoku.saga.jp\0"
-"itayanagi.aomori.jp\0mitsue.nara.jp\0tm.km\0\xd0\xb1\xd0\xb3\0"
-"urbinopesaro.it\0numata.gunma.jp\0"
-"p.bg\0mesaverde.museum\0cloudeity.net\0"
-"kumagaya.saitama.jp\0"
-"in.net\0"
-"firm.nf\0"
-"catholic.edu.au\0choshi.chiba.jp\0firm.ng\0"
-"ally\0shia\0"
-"author\0dev\0"
-"skjervoy.no\0"
-"rissa.no\0from-ca.com\0"
-"yamanobe.yamagata.jp\0skype\0for-better.biz\0"
-"tm.mc\0fidelity\0"
-"tm.mg\0"
-"fortal.br\0kitanakagusuku.okinawa.jp\0"
-"cc.al.us\0\xe5\xa4\xa7\xe6\x8b\xbf\0"
-"fukushima.jp\0"
-"kizu.kyoto.jp\0"
-"url.tw\0"
-"dattorelay.com\0"
-"copenhagen.museum\0"
-"yanagawa.fukuoka.jp\0"
-"toyotomi.hokkaido.jp\0"
-"alaska.museum\0geelvinck.museum\0"
-"salerno.it\0"
-"at.it\0hjartdal.no\0"
-"tm.no\0dhl\0"
-"kumamoto.kumamoto.jp\0lajolla.museum\0"
-"tomari.hokkaido.jp\0fujishiro.ibaraki.jp\0is-a-geek.com\0"
-"\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0"
-"chikuma.nagano.jp\0"
-"giske.no\0"
-"communication.museum\0"
-"namsskogan.no\0"
-"\xe7\xbd\x91\xe7\xbb\x9c\0"
-"ask\xc3\xb8y.no\0"
-"thingdustdata.com\0"
-"otoyo.kochi.jp\0brumunddal.no\0*.compute.amazonaws.com\0"
-"egersund.no\0"
-"kosuge.yamanashi.jp\0a.run.app\0"
-"jed.wafaicloud.com\0"
-"shopping\0"
-"piedmont.it\0"
-"tm.pl\0diy\0"
-"tachiarai.fukuoka.jp\0"
-"plumbing\0"
-"veneto.it\0"
-"arts.ve\0"
-"neustar\0"
-"\xd0\xb5\xd1\x8e\0"
-"atsuma.hokkaido.jp\0yasugi.shimane.jp\0flanders.museum\0"
-"maryland.museum\0capital\0*.lcl.dev\0"
-"sanofi\0"
-"town.museum\0"
-"at.md\0"
-"abogado\0"
-"hikimi.shimane.jp\0"
-"ibestad.no\0firewall-gateway.com\0"
-"gz.cn\0rn.it\0"
-"val-d-aosta.it\0gamagori.aichi.jp\0"
-"lib.ma.us\0"
-"dc.us\0"
-"oppegard.no\0\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"dr\xc3\xb8""bak.no\0from-ia.com\0blogspot.co.at\0"
-"tm.ro\0"
-"redstone\0b.ssl.fastly.net\0"
-"naie.hokkaido.jp\0"
-"wegrow.pl\0"
-"tm.se\0cherkassy.ua\0"
-"k12.mi.us\0hepforge.org\0"
-"mashiki.kumamoto.jp\0shop\0definima.io\0"
-"\xc3\xb8stre-toten.no\0"
-"asti.it\0"
-"32-b.it\0"
-"kisofukushima.nagano.jp\0show\0studio\0"
-"uhren.museum\0l\xc3\xb8ten.no\0"
-"uonuma.niigata.jp\0bellevue.museum\0"
-"stj\xc3\xb8rdal.no\0"
-"curitiba.br\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0"
-"cc.md.us\0"
-"obama.fukui.jp\0"
-"hagi.yamaguchi.jp\0"
-"eurovision\0"
-"fukui.jp\0nakaniikawa.toyama.jp\0\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0wnext.app\0"
-"neues.museum\0homesense\0"
-"cn.eu.org\0demo.datacenter.fi\0"
-"def.br\0"
-"imizu.toyama.jp\0"
-"name.vn\0dnp\0"
-"kahoku.ishikawa.jp\0builtwithdark.com\0"
-"yura.wakayama.jp\0"
-"amex\0"
-"steiermark.museum\0"
-"yokoze.saitama.jp\0"
-"dog\0loginline.dev\0"
-"yorii.saitama.jp\0setagaya.tokyo.jp\0luzern.museum\0"
-"matsushige.tokushima.jp\0"
-"her\xc3\xb8y.nordland.no\0arts.ro\0"
-"ic.gov.pl\0"
-"now-dns.top\0dsmynas.org\0"
-"dot\0"
-"valleeaoste.it\0"
-"name.tj\0""4u.com\0"
-"priv.hu\0"
-"jozi.biz\0"
-"ternopil.ua\0"
-"work\0"
-"va.it\0for-more.biz\0"
-"name.tr\0"
-"app.os.fedoraproject.org\0"
-"shintomi.miyazaki.jp\0name.tt\0"
-"mar.it\0akrehamn.no\0"
-"aparecida.br\0bananarepublic\0"
+"misasa.tottori.jp\0is-into-cartoons.com\0"
+"pistoia.it\0indian.museum\0"
+"traeumtgerade.de\0"
+"co.id\0"
+"arq.br\0co.hu\0salem.museum\0"
+"fukuchiyama.kyoto.jp\0"
+"laz.it\0ts.it\0\xd0\xb1\xd0\xb3\0"
+"tickets\0"
+"pn.it\0gorlice.pl\0"
+"co.il\0"
+"co.im\0communications.museum\0de.com\0"
+"magazine.aero\0co.in\0li.it\0"
+"aibetsu.hokkaido.jp\0"
+"lk3.ru\0"
+"co.ir\0uwu.ai\0"
+"trysil.no\0is-gone.com\0"
+"co.it\0notteroy.no\0lviv.ua\0dhl\0"
+"co.je\0endofinternet.net\0"
+"dupont\0kerryproperties\0"
+"unjarga.no\0"
+"asia\0"
+"co.jp\0vercel.dev\0"
+"fuel.aero\0ibara.okayama.jp\0"
+"ciencia.bo\0"
+"marche.it\0co.ke\0\xc3\xa5mot.no\0"
+"shimodate.ibaraki.jp\0"
+"jor.br\0"
+"celtic.museum\0contractors\0mycd.eu\0"
+"moscow\0"
+"tosa.kochi.jp\0"
+"aizumisato.fukushima.jp\0rocher\0"
+"diy\0"
+"takanezawa.tochigi.jp\0co.kr\0travel.tt\0"
+"co.lc\0"
+"gorizia.it\0"
+"shima.mie.jp\0"
+"village.museum\0"
+"ujitawara.kyoto.jp\0"
+"rj.gov.br\0"
+"*.moonscale.io\0"
+"reise\0"
+"yamakita.kanagawa.jp\0co.ma\0oster\xc3\xb8y.no\0\xe8\xb0\xb7\xe6\xad\x8c\0"
+"sampa.br\0"
+"co.ls\0"
+"express\0"
+"co.me\0"
+"mamurogawa.yamagata.jp\0"
+"co.mg\0"
+"engineer\0"
+"algard.no\0"
+"sasayama.hyogo.jp\0memset.net\0"
+"pi.leg.br\0"
+"meme\0"
+"co.na\0"
+"*.otap.co\0"
+"fjaler.no\0\xd9\x83\xd9\x88\xd9\x85\0"
+"co.mu\0"
+"kids.museum\0"
+"childrensgarden.museum\0co.mw\0"
+"okawa.fukuoka.jp\0mishima.shizuoka.jp\0historisch.museum\0"
+"df.gov.br\0co.ni\0"
+"co.mz\0locker\0"
+"co.nl\0"
+"akashi.hyogo.jp\0sorreisa.no\0"
+"kibichuo.okayama.jp\0co.no\0"
"lutsk.ua\0"
-"bd.se\0"
-"minamifurano.hokkaido.jp\0"
-"ralingen.no\0twmail.org\0scrysec.com\0"
-"kep.tr\0"
-"eat\0own.pm\0senseering.net\0"
-"devices.resinstaging.io\0"
-"shoo.okayama.jp\0"
-"andriabarlettatrani.it\0rodoy.no\0"
-"americanart.museum\0from-ga.com\0"
-"elastyco.com\0"
-"kanzaki.saga.jp\0"
-"in-brb.de\0"
-"vanylven.no\0ok.us\0"
-"missoula.museum\0arts.nf\0khplay.nl\0"
-"khakassia.su\0"
-"is-a-geek.org\0"
-"kokonoe.oita.jp\0"
-"kakinoki.shimane.jp\0stavern.no\0""611.to\0"
-"blogspot.co.id\0"
-"izu.shizuoka.jp\0kharkiv.ua\0tm.za\0"
-"eco\0"
-"misasa.tottori.jp\0"
-"sakaiminato.tottori.jp\0"
-"harima.hyogo.jp\0kraanghke.no\0blogspot.co.il\0"
-"po.it\0"
-"school.za\0"
-"ino.kochi.jp\0"
-"kirkenes.no\0cy.eu.org\0"
-"arao.kumamoto.jp\0"
-"at.vg\0"
-"pordenone.it\0cloudns.club\0"
-"stalbans.museum\0"
-"adult.ht\0name.qa\0"
-"name.pr\0"
-"edu\0ibigawa.gifu.jp\0sekikawa.niigata.jp\0"
-"tottori.tottori.jp\0dtv\0"
-"philadelphiaarea.museum\0loan\0"
-"database.museum\0lesja.no\0atl.jelastic.vps-host.net\0"
-"\xe5\x8f\xb0\xe7\x81\xa3\0"
-"\xd1\x80\xd1\x84\0fedorainfracloud.org\0"
-"ch.it\0is-a-knight.org\0priv.at\0"
-"kushimoto.wakayama.jp\0va.no\0"
-"kashima.ibaraki.jp\0hdfcbank\0"
-"name.na\0iveland.no\0"
-"2.bg\0"
-"noip.us\0"
-"co.place\0"
-"name.mv\0"
-"name.ng\0onion\0"
-"warabi.saitama.jp\0epson\0"
-"ebetsu.hokkaido.jp\0name.my\0cz.eu.org\0"
-"kitashiobara.fukushima.jp\0p.se\0"
-"konyvelo.hu\0toki.gifu.jp\0nakijin.okinawa.jp\0"
-"bas.it\0"
-"meguro.tokyo.jp\0dvr\0better-than.tv\0we.bs\0"
-"sauda.no\0"
-"gs.aa.no\0"
-"hiraya.nagano.jp\0shiki.saitama.jp\0"
-"partners\0"
-"tomioka.gunma.jp\0"
-"wroclaw.pl\0hgtv\0"
-"engine.aero\0toyone.aichi.jp\0"
-"yusui.kagoshima.jp\0humanities.museum\0"
-"vads\xc3\xb8.no\0"
-"trentinosued-tirol.it\0"
-"bearalvahki.no\0"
-"treviso.it\0minamiaiki.nagano.jp\0"
-"onthewifi.com\0"
-"vinnica.ua\0is-an-artist.com\0"
-"dk.eu.org\0"
-"aerodrome.aero\0tsuno.kochi.jp\0"
-"from-or.com\0"
-"\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0"
-"sr.it\0"
-"higashihiroshima.hiroshima.jp\0"
-"moscow\0hu.net\0"
-"hamar.no\0"
-"halden.no\0"
-"name.mk\0"
-"friulivenezia-giulia.it\0ham-radio-op.net\0"
-"akita.jp\0silk\0surgery\0"
-"student.aero\0"
-"yamashina.kyoto.jp\0williamhill\0"
-"is-a-musician.com\0"
-"k12.ne.us\0"
-"es.gov.br\0"
-"verbania.it\0"
-"loft\0homeunix.net\0"
-"suli.hu\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0"
-"name.jo\0noto.ishikawa.jp\0"
-"scrapper-site.net\0"
-"e.bg\0cc.nh.us\0"
-"hiphop\0"
-"sina\0"
-"stjohn.museum\0"
-"services.aero\0leirfjord.no\0"
-"sciencesnaturelles.museum\0"
-"midatlantic.museum\0courses\0"
-"himeji.hyogo.jp\0"
-"matta-varjjat.no\0"
-"land-4-sale.us\0"
-"vegarshei.no\0"
-"is-a-llama.com\0"
-"telebit.io\0"
-"police.uk\0"
-"de.eu.org\0"
-"black\0"
-"agric.za\0"
-"va.us\0"
-"oguchi.aichi.jp\0"
-"koga.ibaraki.jp\0"
-"winners\0"
-"inawashiro.fukushima.jp\0"
-"youth.museum\0"
-"akiruno.tokyo.jp\0sp.leg.br\0"
-"como.it\0hob\xc3\xb8l.no\0"
-"spdns.eu\0"
-"toyoura.hokkaido.jp\0tsuno.miyazaki.jp\0"
-"onrender.com\0"
-"tv.bb\0takatsuki.osaka.jp\0indian.museum\0"
-"achi.nagano.jp\0entomology.museum\0"
-"www.ro\0"
-"kumano.mie.jp\0"
-"tempioolbia.it\0"
-"enonic.io\0"
-"redirectme.net\0"
-"jambyl.su\0"
-"tv.bo\0nishiokoppe.hokkaido.jp\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0"
-"tv.br\0"
-"mil.ac\0"
-"mil.ae\0nakagawa.fukuoka.jp\0"
-"hicam.net\0"
-"barsyonline.co.uk\0"
-"etne.no\0"
-"ch.tc\0"
-"fredrikstad.no\0uy.com\0"
-"mil.al\0"
-"lib.ee\0"
-"castres.museum\0"
-"blogspot.co.uk\0"
-"mil.ba\0"
-"mil.ar\0"
-"origins\0"
-"mil.az\0homes\0"
-"kawatana.nagasaki.jp\0"
-"undersea.museum\0ostre-toten.no\0staples\0"
-"mil.bo\0go.ci\0prime\0"
-"andoy.no\0"
-"mil.br\0kerrylogistics\0"
-"etisalat\0"
-"rc.it\0"
-"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0"
-"noip.me\0"
-"cc.ct.us\0site\0"
-"go.cr\0"
-"mil.by\0honefoss.no\0"
-"mil.cl\0tabayama.yamanashi.jp\0fan\0"
-"mil.cn\0gda.pl\0"
-"mil.co\0"
-"haebaru.okinawa.jp\0km.ua\0"
-"in-vpn.net\0"
-"kanmaki.nara.jp\0"
-"mykolaiv.ua\0"
-"osaka\0"
-"gs.ol.no\0"
-"mil.do\0"
-"mil.ec\0cc.ky.us\0"
-"is-very-bad.org\0"
-"in.na\0"
-"serveftp.net\0"
-"mil.eg\0"
-"in.ni\0roan.no\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0spdns.de\0"
-"miyazu.kyoto.jp\0schwarz\0"
-"\xe1\x83\x92\xe1\x83\x94\0esq\0"
-"*.on-rio.io\0"
-"yoro.gifu.jp\0ipiranga\0neko.am\0"
-"sagamihara.kanagawa.jp\0"
-"sasaguri.fukuoka.jp\0"
-"*.azurecontainer.io\0"
-"ca.eu.org\0"
-"mil.fj\0dyndns-work.com\0"
-"tamaki.mie.jp\0"
-"travelers\0"
-"miyazaki.jp\0noda.chiba.jp\0"
-"kiyose.tokyo.jp\0style\0"
-"cc.tn.us\0"
-"assn.lk\0jaworzno.pl\0"
-"tagami.niigata.jp\0muos\xc3\xa1t.no\0"
-"namikata.ehime.jp\0data\0"
-"mil.ge\0comcast\0"
-"edu.ac\0konan.shiga.jp\0"
-"mil.gh\0date\0"
-"astronomy.museum\0"
-"edu.af\0aibetsu.hokkaido.jp\0blogspot.co.ke\0"
-"tv.im\0tarama.okinawa.jp\0is-slick.com\0"
-"kanazawa.ishikawa.jp\0hiratsuka.kanagawa.jp\0"
-"norfolk.museum\0"
-"meiwa.mie.jp\0"
-"edu.al\0"
-"eus\0"
-"tv.it\0"
-"mil.gt\0yoshino.nara.jp\0psp.gov.pl\0"
-"edu.ba\0"
-"edu.ar\0edu.bb\0"
-"edu.au\0"
-"go.id\0"
-"edu.bh\0gjerstad.no\0"
-"edu.bi\0"
-"edu.az\0mil.hn\0penza.su\0"
-"hongo.hiroshima.jp\0"
-"edu.bm\0"
-"edu.bn\0"
-"edu.bo\0"
-"mil.id\0ooguy.com\0"
-"pimienta.org\0"
-"edu.br\0tv.kg\0"
-"edu.bs\0radio.am\0"
-"edu.bt\0"
-"go.it\0"
-"barreau.bj\0tcp4.me\0"
-"edu.ci\0"
-"edu.bz\0mil.in\0komatsu.ishikawa.jp\0"
-"we.tc\0"
-"mil.iq\0"
-"y.bg\0edu.cn\0priv.pl\0mmafan.biz\0"
-"edu.co\0americana.museum\0soundcast.me\0"
-"co.technology\0"
-"bostik\0"
-"go.jp\0"
-"in.rs\0"
-"southwest.museum\0bingo\0copro.uk\0"
-"edu.cu\0vpnplus.to\0"
-"education.museum\0s3.dualstack.ap-southeast-1.amazonaws.com\0"
-"edu.cw\0owariasahi.aichi.jp\0go.ke\0"
-"radio.br\0engineering\0s3-external-1.amazonaws.com\0"
-"trentins\xc3\xbc""dtirol.it\0rokunohe.aomori.jp\0"
-"mil.jo\0"
-"spb.ru\0"
-"edu.dm\0botanical.museum\0krager\xc3\xb8.no\0"
-"hitachiomiya.ibaraki.jp\0"
-"edu.do\0\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0"
-"ot.it\0pd.it\0"
-"edu.ec\0mil.kg\0"
-"go.kr\0modalen.no\0"
-"edu.ee\0"
-"hotels\0futurehosting.at\0"
-"edu.eg\0"
-"in.th\0immobilien\0love\0"
-"shima.mie.jp\0mil.km\0"
-"edu.dz\0"
-"grosseto.it\0wzmiuw.gov.pl\0blogspot.co.nz\0"
-"tv.na\0orskog.no\0spb.su\0"
-"medicina.bo\0"
-"mil.kr\0pubol.museum\0fit\0"
-"minamimaki.nagano.jp\0"
-"salzburg.museum\0"
-"priv.no\0in.ua\0"
-"res.aero\0deporte.bo\0"
-"edu.es\0"
-"edu.et\0"
-"cd.eu.org\0"
-"mil.kz\0apple\0"
-"sld.do\0"
-"katsuura.chiba.jp\0"
-"miyoshi.tokushima.jp\0"
-"edu.fm\0akita.akita.jp\0"
-"insurance.aero\0lib.sd.us\0"
-"s3-eu-central-1.amazonaws.com\0"
-"mil.lv\0*.landing.myjino.ru\0"
-"higashi.fukushima.jp\0mil.mg\0in.us\0static-access.net\0"
-"edu.gd\0sakae.nagano.jp\0nirasaki.yamanashi.jp\0jcloud.ik-server.com\0"
-"edu.ge\0"
-"dell-ogliastra.it\0okinawa.okinawa.jp\0lomza.pl\0"
-"n\xc3\xa5\xc3\xa5mesjevuemie.no\0"
-"edu.gh\0szczytno.pl\0"
-"edu.gi\0kiso.nagano.jp\0maibara.shiga.jp\0"
-"svalbard.no\0"
-"e.se\0"
-"edu.gl\0"
-"edu.gn\0berlev\xc3\xa5g.no\0"
-"beeldengeluid.museum\0"
-"edu.gp\0coupons\0"
-"edu.gr\0burghof.museum\0mil.mv\0"
-"mil.ng\0radio.fm\0"
-"edu.gt\0"
-"edu.gu\0mil.my\0mil.ni\0"
-"fnd.br\0mil.mz\0grainger\0"
-"priv.me\0settlement.museum\0"
-"tamba.hyogo.jp\0"
-"edu.gy\0"
-"nagawa.nagano.jp\0"
-"edu.hk\0mil.no\0gratangen.no\0red.sv\0"
-"orkdal.no\0arvo.network\0"
-"us-west-1.elasticbeanstalk.com\0"
-"edu.hn\0"
-"gratis\0\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0"
-"vik.no\0sklep.pl\0"
-"fly\0"
-"edu.ht\0utah.museum\0yalta.ua\0"
-"mil.nz\0"
-"city.hu\0shikabe.hokkaido.jp\0myeffect.net\0"
-"\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0"
-"obihiro.hokkaido.jp\0hizen.saga.jp\0"
-"edu.in\0prudential\0"
-"trentinsued-tirol.it\0sorreisa.no\0fly.dev\0"
-"qld.au\0edu.iq\0ito.shizuoka.jp\0mil.pe\0moonscale.net\0"
-"aktyubinsk.su\0"
-"edu.is\0tochigi.tochigi.jp\0"
-"edu.it\0mil.ph\0boston\0honda\0"
-"livorno.it\0"
-"mil.pl\0barsy.club\0"
-"go.pw\0"
-"allstate\0"
-"mil.qa\0"
-"edu.jo\0tv.sd\0s3-website-us-east-1.amazonaws.com\0is-a-geek.net\0impertrixcdn.com\0"
-"izumi.kagoshima.jp\0"
-"\xe5\x85\xac\xe7\x9b\x8a\0"
-"tas.gov.au\0""1kapp.com\0"
-"\xe5\x85\xab\xe5\x8d\xa6\0"
-"mil.py\0"
-"dnshome.de\0"
-"edu.kg\0"
-"sakae.chiba.jp\0"
-"edu.ki\0foo\0"
-"stuff-4-sale.org\0"
-"kyonan.chiba.jp\0i234.me\0"
-"caseih\0mayfirst.info\0"
-"qh.cn\0\xe5\xb2\xa9\xe6\x89\x8b.jp\0edu.km\0"
-"ikeda.fukui.jp\0edu.kn\0"
-"misato.wakayama.jp\0edu.kp\0"
-"edu.la\0"
-"kiryu.gunma.jp\0edu.lb\0ma.us\0fox\0"
-"edu.lc\0"
-"edu.kw\0notodden.no\0endoftheinternet.org\0h\xc3\xa4kkinen.fi\0"
-"edu.ky\0download\0bashkiria.ru\0"
-"edu.kz\0badajoz.museum\0hisamitsu\0"
-"edu.lk\0"
-"kawagoe.mie.jp\0pittsburgh.museum\0"
-"tv.tr\0is-a-cpa.com\0"
-"eu-west-1.elasticbeanstalk.com\0duckdns.org\0"
-"inatsuki.fukuoka.jp\0mil.ru\0"
-"edu.lr\0"
-"edu.ls\0mil.rw\0"
-"cq.cn\0ozu.kumamoto.jp\0funahashi.toyama.jp\0mil.sh\0"
-"edu.me\0tv.tz\0"
-"honbetsu.hokkaido.jp\0edu.lv\0gal\0"
-"edu.mg\0"
-"barsycenter.com\0"
-"karasuyama.tochigi.jp\0toshima.tokyo.jp\0edu.ly\0nz.basketball\0bashkiria.su\0"
-"go.th\0gap\0"
-"edu.mk\0shell\0"
-"cesena-forl\xc3\xac.it\0edu.ml\0glass.museum\0gs.oslo.no\0go.tj\0"
-"us.org\0"
-"edu.mn\0"
-"edu.mo\0mein-iserv.de\0"
-"ne.jp\0rakkestad.no\0mil.st\0"
-"iwaizumi.iwate.jp\0eisenbahn.museum\0"
-"fuel.aero\0tsubame.niigata.jp\0edu.ms\0gay\0"
-"edu.mt\0capebreton.museum\0"
-"barletta-trani-andria.it\0ne.ke\0mil.sy\0"
-"edu.mv\0mil.tj\0frl\0"
-"field.museum\0edu.mw\0edu.ng\0"
-"chieti.it\0silk.museum\0edu.mx\0"
-"edu.my\0edu.ni\0mil.tm\0go.ug\0"
-"nishihara.kumamoto.jp\0edu.mz\0"
-"mil.to\0"
-"esp.br\0go.tz\0"
-"hadsel.no\0sauherad.no\0dev-myqnapcloud.com\0"
-"mil.tr\0"
-"assassination.museum\0"
-"ne.kr\0edu.nr\0"
-"mil.tw\0"
-"uscountryestate.museum\0mil.tz\0from-md.com\0"
-"dsmynas.net\0"
-"readmyblog.org\0"
-"edu.om\0"
-"mil.vc\0"
-"brussels.museum\0"
-"edu.pa\0mil.ve\0website.yandexcloud.net\0"
-"homedepot\0blogspot.co.za\0"
-"edu.pe\0mil.uy\0"
-"edu.pf\0"
-"\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0"
-"edu.ph\0gdn\0"
-"edu.pk\0gea\0target\0"
-"edu.pl\0ftr\0"
-"pharmacy.museum\0askoy.no\0walmart\0"
-"edu.pn\0"
-"cloud-fr1.unispace.io\0"
-"edu.qa\0"
-"edu.pr\0"
-"tsushima.aichi.jp\0edu.ps\0s3-website-ap-southeast-2.amazonaws.com\0"
-"aland.fi\0exeter.museum\0edu.pt\0"
-"santamaria.br\0szkola.pl\0"
-"botany.museum\0cuisinella\0fun\0"
-"edu.py\0"
-"sld.pa\0"
-"motorcycles\0"
-"miyagi.jp\0"
+"toyota.aichi.jp\0"
+"ulsan.kr\0uppo.gov.pl\0\xd0\xb5\xd1\x8e\0"
+"co.nz\0"
+"writesthisblog.com\0"
+"co.om\0fastvps.site\0co.place\0"
+"tr.eu.org\0"
+"jewish.museum\0menu\0"
+"music.museum\0freemyip.com\0"
+"handson.museum\0degree\0"
+"is-a-caterer.com\0"
+"steiermark.museum\0valle.no\0"
+"android\0"
+"toscana.it\0nara.nara.jp\0for-some.biz\0"
+"dnp\0"
+"building.museum\0"
+"paderborn.museum\0berg.no\0"
+"fuchu.toyama.jp\0"
+"co.pl\0"
+"co.pn\0hepforge.org\0"
+"dog\0"
+"skierva.no\0"
+"\xec\x82\xbc\xec\x84\xb1\0"
+"shinto.gunma.jp\0"
+"nakagawa.tokushima.jp\0co.pw\0"
+"blogdns.com\0"
+"dot\0"
+"so.it\0cleaning\0"
+"himi.toyama.jp\0gs.fm.no\0"
+"monzaebrianza.it\0hobby-site.com\0"
+"co.business\0"
+"mydatto.net\0"
+"platter-app.dev\0"
+"lib.as.us\0earth\0"
+"\xe6\x8b\x9b\xe8\x81\x98\0futurehosting.at\0"
+"como.it\0walmart\0"
+"nishio.aichi.jp\0"
"ueno.gunma.jp\0"
-"us-gov-west-1.elasticbeanstalk.com\0"
-"yamato.kumamoto.jp\0"
-"gd.cn\0swatch\0"
-"hs.kr\0jewish.museum\0"
-"nishiizu.shizuoka.jp\0dyn-ip24.de\0"
-"minobu.yamanashi.jp\0"
-"ikeda.hokkaido.jp\0omaezaki.shizuoka.jp\0sveio.no\0"
-"mj\xc3\xb8ndalen.no\0nedre-eiker.no\0homeunix.org\0ddnsfree.com\0"
-"skin\0"
-"wy.us\0chirurgiens-dentistes-en-france.fr\0"
-"*.ex.ortsinfo.at\0"
-"ohira.tochigi.jp\0"
-"lukow.pl\0edu.sa\0"
-"tainai.niigata.jp\0edu.sb\0chtr.k12.ma.us\0gripe\0"
-"edu.rs\0edu.sc\0"
-"edu.sd\0"
-"edu.ru\0karaganda.su\0"
-"edu.sg\0"
-"commbank\0"
-"jele.io\0"
-"flog.br\0taishi.osaka.jp\0"
-"anthro.museum\0edu.sl\0"
-"mil.za\0"
-"torino.it\0stange.no\0edu.sn\0"
-"edu.so\0"
-"kouyama.kagoshima.jp\0"
-"sellsyourhome.org\0"
-"kasuya.fukuoka.jp\0yatsushiro.kumamoto.jp\0edu.ss\0"
-"edu.st\0"
-"tako.chiba.jp\0"
-"higashiizu.shizuoka.jp\0edu.sv\0"
-"ne.pw\0"
-"edu.sy\0mil.zm\0"
-"edu.tj\0sandvikcoromant\0"
-"ono.hyogo.jp\0"
-"y.se\0"
-"campidanomedio.it\0edu.tm\0"
-"edu.to\0"
-"edu.ua\0"
-"edu.tr\0"
-"mil.zw\0fyi\0"
-"kin.okinawa.jp\0edu.tt\0"
-"usarts.museum\0\xe5\x85\xac\xe5\x8f\xb8\0"
-"e164.arpa\0edu.tw\0"
-"zero\0"
-"vlog.br\0shintoku.hokkaido.jp\0loginline.app\0"
-"miyazaki.miyazaki.jp\0cloudns.info\0"
-"asahi.chiba.jp\0"
-"shikama.miyagi.jp\0"
-"bjugn.no\0"
-"campobasso.it\0edu.vc\0"
-"shibetsu.hokkaido.jp\0"
-"!city.sendai.jp\0edu.ve\0dyn.ddnss.de\0"
-"ybo.trade\0"
-"horokanai.hokkaido.jp\0edu.uy\0"
-"misato.akita.jp\0niimi.okayama.jp\0"
-"\xe6\x95\x99\xe8\x82\xb2.hk\0!city.kobe.jp\0"
-"edu.vn\0"
-"matsue.shimane.jp\0lease\0est-a-la-masion.com\0"
-"to.leg.br\0"
-"rentals\0"
-"cc.fl.us\0edu.vu\0syno-ds.de\0"
-"bib.br\0nakagusuku.okinawa.jp\0simple-url.com\0"
-"fukaya.saitama.jp\0convent.museum\0\xe6\x96\xb0\xe9\x97\xbb\0"
-"s3.ap-south-1.amazonaws.com\0"
-"gle\0"
-"vald-aosta.it\0"
-"stalowa-wola.pl\0"
-"k12.oh.us\0\xe7\xbd\x91\xe5\xba\x97\0is-a-personaltrainer.com\0"
-"edu.ws\0"
-"tamamura.gunma.jp\0lancaster\0"
-"onomichi.hiroshima.jp\0"
-"ne.ug\0gb.com\0"
-"nabari.mie.jp\0evje-og-hornnes.no\0maif\0"
-"ne.tz\0"
-"xnbay.com\0"
-"misato.shimane.jp\0zakopane.pl\0"
-"place\0"
-"n.bg\0search\0"
-"\xe4\xba\x9a\xe9\xa9\xac\xe9\x80\x8a\0"
-"muosat.no\0ne.us\0softbank\0"
-"koori.fukushima.jp\0"
-"hayakawa.yamanashi.jp\0gmo\0damnserver.com\0"
-"dclk\0"
-"guam.gu\0shimofusa.chiba.jp\0tsukumi.oita.jp\0"
-"uz.ua\0"
-"itano.tokushima.jp\0"
-"edu.za\0"
-"gmx\0"
-"latino\0"
-"ma.gov.br\0xbox\0barsy.menu\0"
-"raholt.no\0"
-"tottori.jp\0"
-"trentinoa-adige.it\0edu.zm\0"
-"urbino-pesaro.it\0"
-"is-a-landscaper.com\0"
-"webcam\0"
-"systems\0"
-"chigasaki.kanagawa.jp\0rana.no\0"
-"goo\0"
-"kanagawa.jp\0gop\0tires\0"
-"kamagaya.chiba.jp\0"
-"ar.it\0"
-"got\0"
-"gov\0eniwa.hokkaido.jp\0baths.museum\0"
-"okoppe.hokkaido.jp\0game-host.org\0"
-"voting\0"
-"barueri.br\0"
-"higashimatsuyama.saitama.jp\0izunokuni.shizuoka.jp\0hachioji.tokyo.jp\0mywire.org\0"
-"s3-website.ca-central-1.amazonaws.com\0"
-"beppu.oita.jp\0selfip.info\0"
-"recipes\0"
-"nantan.kyoto.jp\0civilisation.museum\0"
-"hanno.saitama.jp\0"
-"hatogaya.saitama.jp\0juniper\0"
-"saiki.oita.jp\0"
-"cloudns.pro\0"
-"gran.no\0"
-"gallery.museum\0"
-"tecnologia.bo\0servehalflife.com\0"
-"gru.br\0"
-"volvo\0mein-vigor.de\0"
-"osakasayama.osaka.jp\0touch.museum\0"
-"sec.ps\0"
-"is-found.org\0"
-"miami\0ch.eu.org\0"
-"hachirogata.akita.jp\0"
-"hbo\0"
-"beta.bounty-full.com\0"
-"heritage.museum\0schulserver.de\0"
-"s3.eu-west-3.amazonaws.com\0"
-"delmenhorst.museum\0certmgr.org\0"
-"author.aero\0gx.cn\0"
-"uzs.gov.pl\0"
-"ishikawa.okinawa.jp\0kunitachi.tokyo.jp\0center\0"
-"minato.osaka.jp\0scotland.museum\0"
-"riodejaneiro.museum\0"
-"settsu.osaka.jp\0"
-"sciencehistory.museum\0hangout\0"
-"\xe5\x8d\x83\xe8\x91\x89.jp\0yokkaichi.mie.jp\0"
-"soni.nara.jp\0kv.ua\0"
-"secure\0"
-"inc.hk\0"
-"skierv\xc3\xa1.no\0"
-"aizumi.tokushima.jp\0"
-"sosa.chiba.jp\0"
-"progressive\0"
-"hopto.org\0"
-"eastus2.azurestaticapps.net\0"
-"abbvie\0"
-"jewelry.museum\0"
-"lyngdal.no\0"
-"komaki.aichi.jp\0k12.tn.us\0"
-"yoshida.saitama.jp\0"
-"izumizaki.fukushima.jp\0in-dsl.org\0"
-"gallup\0"
-"lib.gu.us\0"
-"bungotakada.oita.jp\0"
-"familyds.net\0"
-"from-mi.com\0"
-"trentin-s\xc3\xbc""dtirol.it\0"
-"dnsupdate.info\0"
-"manno.kagawa.jp\0"
-"neat-url.com\0"
-"serveftp.org\0"
-"cesenaforli.it\0"
-"recreation.aero\0"
-"kumatori.osaka.jp\0"
-"samsclub\0"
-"rl.no\0"
-"otake.hiroshima.jp\0"
-"project.museum\0"
-"\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0security\0"
-"hasuda.saitama.jp\0shinjo.yamagata.jp\0"
-"noshiro.akita.jp\0yakumo.shimane.jp\0br.com\0"
-"protection\0"
-"vao.it\0for-our.info\0"
-"hobol.no\0"
-"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0"
-"tirol\0cloud.goog\0"
-"mypsx.net\0"
-"kiyokawa.kanagawa.jp\0"
-"childrens.museum\0volkswagen\0"
-"ski.no\0property\0"
-"nishihara.okinawa.jp\0"
-"hiv\0"
-"bolt.hu\0gen.in\0"
-"uwu.ai\0"
-"voyage\0"
-"ny.us\0ap-northeast-1.elasticbeanstalk.com\0"
-"at.eu.org\0"
-"oe.yamagata.jp\0"
-"kitakata.fukushima.jp\0koshimizu.hokkaido.jp\0cyon.link\0"
-"jelastic.saveincloud.net\0"
-"poltava.ua\0"
-"vall\xc3\xa9""eaoste.it\0"
-"salon\0"
-"gamo.shiga.jp\0"
-"balsan-sudtirol.it\0christmas\0"
-"jc.neen.it\0"
-"holdings\0"
-"kawajima.saitama.jp\0brunel.museum\0"
-"fi.cr\0"
-"ar.us\0"
-"forsale\0"
-"hkt\0"
-"shimonita.gunma.jp\0baby\0"
-"kibichuo.okayama.jp\0"
-"x.mythic-beasts.com\0"
-"stavanger.no\0"
-"murmansk.su\0"
-"venezia.it\0samegawa.fukushima.jp\0"
-"mombetsu.hokkaido.jp\0"
-"of.fashion\0"
-"casadelamoneda.museum\0"
-"granvin.no\0is-a-caterer.com\0"
-"0.bg\0"
-"handson.museum\0"
-"cambridge.museum\0alstahaug.no\0"
-"shinshiro.aichi.jp\0ae.org\0"
-"kosai.shizuoka.jp\0"
-"guernsey.museum\0"
-"jobs\0"
-"n.se\0"
-"cleverapps.io\0"
-"minamiboso.chiba.jp\0imakane.hokkaido.jp\0portland.museum\0"
-"from-mn.com\0"
-"spreadbetting\0"
-"livinghistory.museum\0bajddar.no\0"
-"iijima.nagano.jp\0\xe5\x95\x86\xe5\xba\x97\0dattolocal.net\0"
-"nuoro.it\0"
-"honjyo.akita.jp\0gen.ng\0"
-"wakkanai.hokkaido.jp\0"
-"moriyama.shiga.jp\0valer.ostfold.no\0camdvr.org\0"
-"kisarazu.chiba.jp\0"
-"filatelia.museum\0\xc3\xb8ksnes.no\0vacations\0"
-"appspot.com\0"
-"sande.vestfold.no\0"
-"gen.nz\0"
-"kitagata.gifu.jp\0hot\0"
-"how\0"
-"trust.museum\0"
-"oji.nara.jp\0farm.museum\0"
-"sp.it\0"
-"lib.mo.us\0"
-"\xe5\xb2\x90\xe9\x98\x9c.jp\0jelastic.team\0"
-"localzone.xyz\0"
-"fukushima.fukushima.jp\0"
-"cloudns.org\0"
-"rockart.museum\0tychy.pl\0"
-"money.museum\0k12.ms.us\0k12.nc.us\0"
-"carbonia-iglesias.it\0"
-"yamato.kanagawa.jp\0glade\0sg-1.paas.massivegrid.net\0"
-"eco.br\0trentino-sued-tirol.it\0"
-"pramerica\0from-sd.com\0"
-"the.br\0fi.it\0"
-"otoineppu.hokkaido.jp\0"
-"laz.it\0"
-"c.bg\0vestre-toten.no\0"
-"lucerne.museum\0"
-"ibm\0"
-"kurotaki.nara.jp\0"
-"settlers.museum\0deal\0"
-"yuzawa.niigata.jp\0"
-"aeroport.fr\0"
-"fed.us\0physio\0"
-"fosnes.no\0ice\0"
-"dellogliastra.it\0jelastic.tsukaeru.net\0"
-"\xc3\xb8yer.no\0"
-"caxias.br\0"
-"dentist\0amsw.nl\0"
-"in-the-band.net\0"
-"is-a-bruinsfan.org\0"
-"\xed\x95\x9c\xea\xb5\xad\0"
-"lib.ia.us\0"
-"attorney\0"
-"hidaka.hokkaido.jp\0icu\0ikano\0"
-"misato.saitama.jp\0prochowice.pl\0"
-"massa-carrara.it\0shirakawa.fukushima.jp\0"
-"kamoenai.hokkaido.jp\0"
-"kviteseid.no\0"
-"iiyama.nagano.jp\0"
-"azerbaijan.su\0"
-"dnsiskinky.com\0"
-"ag.it\0"
-"eti.br\0inabe.mie.jp\0\xd9\x82\xd8\xb7\xd8\xb1\0"
-"incheon.kr\0"
-"jelastic.regruhosting.ru\0"
-"moareke.no\0"
-"vs.it\0"
-"ritto.shiga.jp\0artcenter.museum\0gen.tr\0"
-"valle-d-aosta.it\0"
-"cc.id.us\0"
-"graphox.us\0"
-"valle.no\0"
-"smola.no\0"
-"yazu.tottori.jp\0"
-"\xc3\xa5snes.no\0baseball\0"
-"hamatonbetsu.hokkaido.jp\0oslo.no\0dating\0"
-"takahata.yamagata.jp\0"
-"qcx.io\0"
-"kamo.niigata.jp\0"
-"aizuwakamatsu.fukushima.jp\0kusatsu.gunma.jp\0"
-"ifm\0de.trendhosting.cloud\0"
-"band\0"
-"sicily.it\0verdal.no\0"
-"harvestcelebration.museum\0"
-"lib.dc.us\0lotte\0"
-"trentinoaltoadige.it\0okutama.tokyo.jp\0"
-"yorkshire.museum\0"
-"sdn.gov.pl\0bank\0"
-"video\0"
-"monticello.museum\0"
-"lotto\0"
-"folkebibl.no\0"
-"shiga.jp\0"
-"couchpotatofries.org\0"
-"eastafrica.museum\0"
+"no.com\0co.ro\0"
+"kawara.fukuoka.jp\0arao.kumamoto.jp\0"
+"nf.ca\0"
+"co.rs\0"
+"aya.miyazaki.jp\0"
+"co.rw\0"
+"vic.gov.au\0spot\0"
+"eat\0"
+"anjo.aichi.jp\0mo-i-rana.no\0"
+"katsuyama.fukui.jp\0akabira.hokkaido.jp\0"
+"homebuilt.aero\0kinghost.net\0"
+"stor-elvdal.no\0"
+"horten.no\0"
+"diamonds\0is-an-engineer.com\0"
+"co.st\0loginline.io\0"
+"griw.gov.pl\0"
+"fukudomi.saga.jp\0mashiko.tochigi.jp\0nowaruda.pl\0"
+"ozu.kumamoto.jp\0"
+"encyclopedic.museum\0co.th\0"
+"co.sz\0co.tj\0"
+"reggiocalabria.it\0est-le-patron.com\0"
+"aizuwakamatsu.fukushima.jp\0"
+"friulive-giulia.it\0yamagata.ibaraki.jp\0co.tm\0"
+"environmentalconservation.museum\0"
+"dunlop\0"
+"yamanashi.yamanashi.jp\0burghof.museum\0co.ua\0"
+"muroran.hokkaido.jp\0blogspot.com.cy\0"
+"co.tt\0"
+"kadena.okinawa.jp\0barrel-of-knowledge.info\0"
+"softbank\0"
+"rodoy.no\0co.ug\0eco\0"
+"takasu.hokkaido.jp\0"
+"\xc3\xb8yer.no\0loginto.me\0"
+"co.tz\0"
+"yashio.saitama.jp\0kautokeino.no\0co.uk\0realtor\0"
+"ohira.tochigi.jp\0ky.us\0"
+"aktyubinsk.su\0blogspot.com.ee\0"
+"pe.leg.br\0"
+"b\xc3\xb8mlo.no\0blogspot.com.eg\0"
+"freemasonry.museum\0"
+"co.us\0s3-website.ca-central-1.amazonaws.com\0"
+"siracusa.it\0"
+"co.ve\0ftpaccess.cc\0"
+"kunneppu.hokkaido.jp\0sumida.tokyo.jp\0"
+"hachijo.tokyo.jp\0"
+"takahama.aichi.jp\0co.vi\0"
+"kochi.kochi.jp\0co.uz\0edgeapp.net\0"
+"budejju.no\0blogspot.com.ar\0"
+"toyoake.aichi.jp\0silk.museum\0"
+"edu\0yabu.hyogo.jp\0kashihara.nara.jp\0wloclawek.pl\0square7.de\0"
+"dtv\0misconfused.org\0blogspot.com.au\0"
+"ichikawa.chiba.jp\0setouchi.okayama.jp\0\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0photography\0"
+"pesaro-urbino.it\0cartoonart.museum\0missoula.museum\0cloudaccess.host\0"
+"fin.ci\0"
+"k12.sc.us\0"
+"basel.museum\0"
+"servehttp.com\0"
+"k12.oh.us\0"
+"l.se\0"
+"garden.museum\0dynathome.net\0blogspot.com.br\0"
+"maniwa.okayama.jp\0"
+"trentinosued-tirol.it\0"
"uwu.nu\0"
-"safety\0"
-"plc.ly\0"
+"imperia.it\0milano.it\0onojo.fukuoka.jp\0"
+"muko.kyoto.jp\0tr\xc3\xa6na.no\0"
+"mimata.miyazaki.jp\0exposed\0blogspot.com.by\0"
+"belluno.it\0"
+"sicily.it\0"
+"amazon\0"
+"hs.zone\0"
+"blogspot.com.co\0"
+"bomlo.no\0dvr\0"
+"casino.hu\0nishinoshima.shimane.jp\0omaha.museum\0in-dsl.org\0"
+"fin.ec\0is-a-hard-worker.com\0"
+"ap-southeast-1.elasticbeanstalk.com\0dscloud.me\0"
+"country\0eu.com\0"
+"luxe\0ddnss.org\0"
+"corvette.museum\0"
"miyake.nara.jp\0"
-"museet.museum\0"
-"pb.ao\0"
-"ra.it\0gunma.jp\0kadena.okinawa.jp\0nordkapp.no\0"
-"or.at\0"
-"kariwa.niigata.jp\0"
-"or.bi\0"
-"bushey.museum\0"
-"hidaka.wakayama.jp\0saintlouis.museum\0s3-eu-west-2.amazonaws.com\0"
-"academy.museum\0"
+"dontexist.org\0"
+"kahoku.ishikawa.jp\0linkyard-cloud.ch\0"
+"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0*.sendai.jp\0agakhan\0dyndns-wiki.com\0"
+"microsoft\0"
+"\xd1\x80\xd1\x84\0"
+"filegear-gb.me\0"
+"\xe1\x83\x92\xe1\x83\x94\0is-a-conservative.com\0"
+"shakotan.hokkaido.jp\0loginline.services\0"
+"trani-andria-barletta.it\0\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0"
+"sa.gov.au\0"
+"oslo.no\0\xd9\x85\xd8\xb5\xd8\xb1\0plumbing\0square7.ch\0virtualserver.io\0"
+"co.za\0"
+"taishin.fukushima.jp\0"
+"castle.museum\0"
+"azure-mobile.net\0"
+"clothing\0"
+"yoshida.saitama.jp\0"
+"delivery\0"
+"blogspot.com.es\0"
+"co.zm\0"
+"ag.it\0myiphost.com\0"
+"vestnes.no\0"
+"\xc3\xa5seral.no\0xs4all.space\0"
+"hamburg\0"
+"mb.ca\0co.zw\0za.bz\0"
+"fujisawa.iwate.jp\0is-a-designer.com\0"
+"biei.hokkaido.jp\0"
+"shitara.aichi.jp\0"
+"anan.tokushima.jp\0"
+"trentinoaltoadige.it\0"
+"booking\0"
+"bjark\xc3\xb8y.no\0tools\0"
+"odda.no\0"
+"rr.gov.br\0publ.pt\0"
+"kitahata.saga.jp\0heroy.nordland.no\0"
+"automotive.museum\0"
+"fastlylb.net\0"
+"udi.br\0fujioka.gunma.jp\0rag-cloud.hosteur.com\0"
+"hiji.oita.jp\0jolster.no\0"
+"takamori.kumamoto.jp\0"
+"gs.svalbard.no\0"
+"kijo.miyazaki.jp\0"
+"from-sd.com\0"
+"venice.it\0kamikoani.akita.jp\0b\xc3\xb8.telemark.no\0associates\0"
+"kunimi.fukushima.jp\0santabarbara.museum\0barefoot\0"
+"university\0"
+"bolzano-altoadige.it\0nago.okinawa.jp\0sciencehistory.museum\0"
+"dnsiskinky.com\0"
+"ginowan.okinawa.jp\0in-vpn.org\0onthewifi.com\0"
+"living.museum\0madrid\0"
+"ariake.saga.jp\0narvik.no\0nieruchomosci.pl\0"
+"rs.gov.br\0sc.gov.br\0usercontent.jp\0"
+"niki.hokkaido.jp\0"
+"vaapste.no\0"
+"cc.ms.us\0cc.nc.us\0"
+"social\0mein-iserv.de\0bar1.net\0"
+"brindisi.it\0sosnowiec.pl\0cc.in.us\0"
+"jeonbuk.kr\0"
+"figueres.museum\0"
+"u.bg\0"
+"bern.museum\0"
+"0.bg\0"
+"misato.akita.jp\0dyndns.info\0"
+"talk\0pr.leg.br\0"
+"cam.it\0k12.ak.us\0"
+"tamamura.gunma.jp\0"
+"kyotanabe.kyoto.jp\0opoczno.pl\0"
+"nakatombetsu.hokkaido.jp\0"
+"malatvuopmi.no\0zarow.pl\0"
+"kvitsoy.no\0enscaled.sg\0"
+"aprendemas.cl\0"
+"r\xc3\xb8""d\xc3\xb8y.no\0"
+"farmers\0"
+"abira.hokkaido.jp\0alvdal.no\0"
+"massacarrara.it\0"
+"design.aero\0"
+"uk.eu.org\0"
+"ingatlan.hu\0"
+"pharmacy.museum\0"
+"is-a-therapist.com\0"
+"yokote.akita.jp\0from-ms.com\0from-nc.com\0"
+"mb.it\0"
+"abruzzo.it\0lib.ct.us\0norton\0blogspot.com.mt\0"
+"togitsu.nagasaki.jp\0zachpomor.pl\0"
+"okinoshima.shimane.jp\0"
+"blogspot.com.ng\0ddns.net\0"
+"vaga.no\0\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"vip.jelastic.cloud\0"
+"fan\0"
+"brother\0etisalat\0"
+"a.ssl.fastly.net\0"
+"ayase.kanagawa.jp\0in.london\0"
+"nsn.us\0comcast\0"
+"press.aero\0s\xc3\xb8r-aurdal.no\0"
+"mypsx.net\0"
+"afjord.no\0"
+"sx.cn\0trentino-sudtirol.it\0"
+"home-webserver.de\0"
+"kalisz.pl\0"
+"kitamoto.saitama.jp\0"
+"rn.gov.br\0saigawa.fukuoka.jp\0orsta.no\0"
+"agents.aero\0"
+"takayama.gunma.jp\0"
+"vestre-slidre.no\0"
+"khmelnitskiy.ua\0cloud.fedoraproject.org\0"
+"inatsuki.fukuoka.jp\0"
+"doshi.yamanashi.jp\0"
+"mizunami.gifu.jp\0esq\0"
+"tsurugashima.saitama.jp\0"
+"noto.ishikawa.jp\0s3.dualstack.ap-southeast-2.amazonaws.com\0blogspot.com.tr\0"
+"dnsdojo.com\0webspace.rocks\0"
+"certification.aero\0"
+"seki.gifu.jp\0richardli\0"
+"audi\0"
+"url.tw\0"
+"realestate.pl\0"
+"\xe4\xba\xac\xe9\x83\xbd.jp\0estate\0"
+"tr\xc3\xb8gstad.no\0"
+"ro.gov.br\0aquarelle\0"
+"ikeda.osaka.jp\0sandvik\0"
+"neustar\0"
+"radio\0"
+"est-mon-blogueur.com\0"
+"kommunalforbund.se\0"
+"abashiri.hokkaido.jp\0kitagawa.miyazaki.jp\0hm.no\0\xc3\xa1lt\xc3\xa1.no\0pub.sa\0"
+"fujimi.nagano.jp\0"
+"ichinoseki.iwate.jp\0"
+"eus\0"
+"ap-northeast-3.elasticbeanstalk.com\0"
+"a.bg\0kofu.yamanashi.jp\0cc.de.us\0in-dsl.de\0"
+"kazo.saitama.jp\0beer\0"
+"notodden.no\0szczytno.pl\0flir\0in.net\0"
+"radom.pl\0blackbaudcdn.net\0"
+"matsumoto.kagoshima.jp\0fauske.no\0fin.tn\0serveblog.net\0"
+"host\0"
+"krasnodar.su\0"
+"nsw.au\0monza-brianza.it\0"
+"devices.resinstaging.io\0"
+"dyndns-pics.com\0"
+"i234.me\0"
+"services.aero\0"
+"maritime.museum\0"
+"koeln\0"
+"perspecta.cloud\0"
+"fredrikstad.no\0s3-ap-southeast-2.amazonaws.com\0"
+"\xe6\x89\x8b\xe6\x9c\xba\0freeddns.us\0"
+"agrar.hu\0"
+"volyn.ua\0"
+"leirfjord.no\0"
+"pc.it\0ravenna.it\0js.org\0"
+"bjerkreim.no\0"
+"panama.museum\0"
+"\xe7\xbd\x91\xe7\xbb\x9c.cn\0"
+"piemonte.it\0barsy.net\0"
+"sanda.hyogo.jp\0stuttgart.museum\0vang.no\0blogspot.com.uy\0"
+"s3-website-sa-east-1.amazonaws.com\0"
+"bt.it\0\xe9\xa3\x9f\xe5\x93\x81\0s3-us-west-1.amazonaws.com\0"
+"\xe7\xb5\x84\xe7\xb9\x94.tw\0"
+"lecce.it\0"
+"eu.ax\0"
+"fit\0health-carereform.com\0"
+"taxi\0winners\0is-a-personaltrainer.com\0"
+"dyndns-remote.com\0"
+"kitagata.saga.jp\0"
+"sanjo.niigata.jp\0"
+"boldlygoingnowhere.org\0"
+"sd.cn\0"
+"dyndns-free.com\0"
+"knx-server.net\0"
+"kraanghke.no\0cloudfunctions.net\0"
+"rebun.hokkaido.jp\0"
+"obuse.nagano.jp\0wpenginepowered.com\0"
+"shw.io\0"
+"nakatsugawa.gifu.jp\0mutual\0"
+"freeboxos.fr\0"
+"dh.bytemark.co.uk\0"
+"esashi.hokkaido.jp\0cx.ua\0"
+"posts-and-telecommunications.museum\0rakkestad.no\0"
+"diet\0"
+"us-4.evennode.com\0"
+"auspost\0"
+"barsy.menu\0"
+"endofinternet.org\0"
+"*.bzz.dapps.earth\0"
+"kimitsu.chiba.jp\0pittsburgh.museum\0"
+"bedzin.pl\0eu-west-1.elasticbeanstalk.com\0"
+"ggf.br\0systems\0"
+"fly\0kddi\0"
"stat.no\0"
-"nobeoka.miyazaki.jp\0"
-"belluno.it\0arab\0"
-"pri.ee\0monza-e-della-brianza.it\0shikatsu.aichi.jp\0"
-"or.ci\0cz.it\0sanda.hyogo.jp\0"
-"aso.kumamoto.jp\0"
-"nextdirect\0"
-"or.cr\0"
-"mg.gov.br\0"
-"fukudomi.saga.jp\0"
-"hanyu.saitama.jp\0"
-"ikeda.gifu.jp\0"
-"ando.nara.jp\0"
-"from-ar.com\0"
-"trentino-a-adige.it\0"
-"lo.it\0kyowa.akita.jp\0"
-"fiat\0"
-"cloudcontrolled.com\0"
-"meeres.museum\0c.la\0"
-"instantcloud.cn\0"
-"iwafune.tochigi.jp\0"
-"savannahga.museum\0*.owo.codes\0"
-"higashimurayama.tokyo.jp\0"
-"*.kunden.ortsinfo.at\0"
-"spy.museum\0au.eu.org\0be.eu.org\0fedorapeople.org\0"
-"prof.pr\0"
-"magazine.aero\0"
-"council.aero\0odesa.ua\0"
-"tt.im\0skedsmo.no\0"
-"music.museum\0"
-"ichikai.tochigi.jp\0"
-"freebox-os.fr\0"
-"edunet.tn\0"
-"ud.it\0"
-"warmia.pl\0"
-"*.dev.adobeaemcloud.com\0"
-"pacific.museum\0"
-"dell\0rogers\0"
-"noticias.bo\0ams.cloudswitches.com\0"
-"inc\0from-vt.com\0"
-"bodo.no\0kiev.ua\0"
-"la-spezia.it\0ing\0"
-"ink\0"
-"fido\0knx-server.net\0"
-"makinohara.shizuoka.jp\0bo.telemark.no\0"
-"kristiansund.no\0training\0azimuth.network\0"
-"ibaraki.jp\0*.ocp.customer-oci.com\0"
-"int\0samukawa.kanagawa.jp\0"
-"bizen.okayama.jp\0"
-"email\0"
-"conf.au\0"
-"tokyo.jp\0coloradoplateau.museum\0"
-"w.bg\0ikaruga.nara.jp\0"
-"cloudfunctions.net\0"
-"or.id\0"
-"leasing.aero\0kawanabe.kagoshima.jp\0"
+"*.spectrum.myjino.ru\0"
+"selfip.net\0"
+"chesapeakebay.museum\0dinosaur.museum\0"
+"avocat.pro\0\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0hu.com\0"
+"aircraft.aero\0\xe7\xbd\x91\xe7\xbb\x9c.hk\0"
+"friuli-v-giulia.it\0k12.wy.us\0tec.mi.us\0"
+"koshu.yamanashi.jp\0"
+"ullensaker.no\0cc.ca.us\0"
+"kokubunji.tokyo.jp\0olkusz.pl\0nz.basketball\0"
+"u.se\0"
+"net.ac\0veneto.it\0hostyhosting.io\0"
+"net.ae\0"
+"net.af\0"
+"gliding.aero\0net.ag\0"
+"net.ai\0"
+"paris\0"
+"net.al\0ako.hyogo.jp\0oarai.ibaraki.jp\0"
+"net.am\0cesena-forl\xc3\xac.it\0"
+"aisho.shiga.jp\0"
+"control.aero\0pc.pl\0"
+"net.ba\0otsuchi.iwate.jp\0kawai.nara.jp\0"
+"net.ar\0net.bb\0"
+"amsterdam\0foo\0"
+"customer.enonic.io\0"
+"net.au\0kyuragi.saga.jp\0"
+"net.bh\0stufftoread.com\0"
+"net.az\0"
+"\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0"
+"fox\0"
+"net.bm\0satsumasendai.kagoshima.jp\0yamato.kanagawa.jp\0"
+"net.bn\0iz.hr\0"
+"net.bo\0g\xc3\xa1ls\xc3\xa1.no\0"
+"us-3.evennode.com\0"
+"net.br\0dynalias.net\0"
+"net.bs\0"
+"net.bt\0"
+"gs.nl.no\0fl\xc3\xa5.no\0"
+"hiratsuka.kanagawa.jp\0"
+"se.gov.br\0hikari.yamaguchi.jp\0"
+"net.ci\0inc.hk\0"
+"championship.aero\0net.bz\0koori.fukushima.jp\0touch.museum\0lib.mo.us\0"
+"net.cm\0no.it\0"
+"net.cn\0ddns.me\0"
+"net.co\0canada.museum\0lincoln\0"
+"gal\0"
+"kikonai.hokkaido.jp\0"
+"fe.it\0gives\0"
+"boston.museum\0gap\0"
+"net.cu\0"
+"ap.it\0"
+"net.cw\0"
+"net.cy\0"
+"otoineppu.hokkaido.jp\0kasuga.hyogo.jp\0"
+"chikuhoku.nagano.jp\0fantasyleague.cc\0dyn-vpn.de\0"
+"net.dm\0gay\0"
+"net.do\0"
+"frl\0"
+"kyotango.kyoto.jp\0miasta.pl\0"
+"kitahiroshima.hokkaido.jp\0"
+"zj.cn\0net.ec\0"
+"in-dsl.net\0"
+"ba.gov.br\0"
+"kosaka.akita.jp\0"
+"net.eg\0"
+"habmer.no\0"
+"net.dz\0morotsuka.miyazaki.jp\0"
+"gaular.no\0villas\0"
+"mobara.chiba.jp\0fuoisku.no\0"
+"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0"
+"uni5.net\0meteorapp.com\0"
+"yandexcloud.net\0"
+"net.et\0"
+"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0"
+"vardo.no\0lixil\0"
+"net.fj\0hamaroy.no\0"
+"\xe7\xbb\x84\xe7\xbb\x87.hk\0nature.museum\0"
+"ponpes.id\0sayama.osaka.jp\0best\0"
+"net.fm\0"
+"toyoura.hokkaido.jp\0barsycenter.com\0"
+"dynu.net\0"
+"usa.museum\0us-2.evennode.com\0"
+"gdn\0"
+"cityeats\0"
+"net.ge\0tra.kp\0gea\0"
+"s\xc3\xa1lat.no\0ftr\0at-band-camp.net\0"
+"net.gg\0architecture.museum\0auto\0"
+"diadem.cloud\0"
+"isa-geek.org\0"
+"tsuchiura.ibaraki.jp\0"
+"net.gl\0toda.saitama.jp\0"
+"net.gn\0hongo.hiroshima.jp\0ooguy.com\0"
+"navigation.aero\0"
+"net.gp\0"
+"higashinaruse.akita.jp\0kurate.fukuoka.jp\0"
+"net.gr\0fun\0thingdustdata.com\0"
+"net.gt\0"
+"net.gu\0kozow.com\0"
+"outsystemscloud.com\0"
+"asahi.yamagata.jp\0oksnes.no\0barsy.pro\0"
+"net.gy\0zao.miyagi.jp\0"
+"sukagawa.fukushima.jp\0"
+"net.hk\0kasama.ibaraki.jp\0"
+"virtual-user.de\0woltlab-demo.com\0"
+"net.hn\0otake.hiroshima.jp\0anthro.museum\0"
+"cyou\0"
+"sa.gov.pl\0"
+"9.bg\0"
+"net.ht\0net.id\0k12.ms.us\0k12.nc.us\0"
+"grosseto.it\0"
+"nedre-eiker.no\0"
+"a.se\0"
+"balsan-suedtirol.it\0bielawa.pl\0"
+"net.il\0"
+"net.im\0holt\xc3\xa5len.no\0"
+"net.in\0"
+"net.iq\0clan.rip\0"
+"net.ir\0"
+"net.is\0"
+"odessa.ua\0"
+"net.je\0"
+"buyshouses.net\0"
+"odesa.ua\0"
+"modern.museum\0transport.museum\0barsy.pub\0"
+"viajes\0"
+"net.jo\0"
+"sardegna.it\0otoyo.kochi.jp\0us-1.evennode.com\0"
+"iitate.fukushima.jp\0"
+"net.kg\0"
+"mie.jp\0net.ki\0lib.vi.us\0"
+"calabria.it\0"
+"ve.it\0"
+"fyi\0lolipop.io\0"
+"net.kn\0s3-website-us-west-2.amazonaws.com\0"
+"minamiise.mie.jp\0ocelot.mythic-beasts.com\0"
+"shirahama.wakayama.jp\0"
+"net.la\0"
+"net.lb\0foundation\0"
+"net.lc\0dish\0nfshost.com\0"
+"trainer.aero\0"
+"sorocaba.br\0morimachi.shizuoka.jp\0spdns.org\0"
+"log.br\0"
+"net.kw\0"
+"sg-1.paas.massivegrid.net\0"
+"net.ky\0"
+"minokamo.gifu.jp\0net.kz\0parts\0"
+"tomisato.chiba.jp\0net.lk\0"
+"adachi.tokyo.jp\0"
+"gop.pk\0gentapps.com\0"
+"horology.museum\0salzburg.museum\0"
+"yaita.tochigi.jp\0party\0"
+"net.ma\0"
+"net.lr\0"
+"net.ls\0"
+"dscloud.mobi\0"
+"am.gov.br\0net.me\0"
+"erotica.hu\0net.lv\0"
+"travel\0"
+"net.ly\0"
+"gotpantheon.com\0"
+"net.mk\0select\0"
+"net.ml\0"
+"net.mo\0"
+"joinville.br\0"
+"net.ms\0fam.pk\0"
+"hb.cn\0gosen.niigata.jp\0net.mt\0builtwithdark.com\0"
+"mutsuzawa.chiba.jp\0net.mu\0"
+"net.mv\0net.nf\0"
+"net.mw\0net.ng\0"
+"net.mx\0"
+"net.my\0net.ni\0gle\0"
+"net.mz\0"
+"yamashina.kyoto.jp\0roan.no\0"
+"bandai.fukushima.jp\0"
+"kawanishi.nara.jp\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0"
+"kirovograd.ua\0"
+"*.elb.amazonaws.com.cn\0"
+"caltanissetta.it\0"
+"wiw.gov.pl\0"
+"net.nr\0"
+"hirado.nagasaki.jp\0wi.us\0"
+"\xe7\xb5\x84\xe7\xb9\x94.hk\0"
+"assassination.museum\0sd.us\0"
+"bamble.no\0net.nz\0"
+"doesntexist.org\0"
+"nogata.fukuoka.jp\0net.om\0"
+"culturalcenter.museum\0"
+"ryukyu\0"
+"mantova.it\0maryland.museum\0net.pa\0"
+"epilepsy.museum\0"
+"kashima.saga.jp\0interactive.museum\0gmo\0"
+"net.pe\0lancia\0"
+"isumi.chiba.jp\0bato.tochigi.jp\0"
+"net.ph\0"
+"jewelry\0"
+"us-west-1.elasticbeanstalk.com\0"
+"ranzan.saitama.jp\0net.pk\0coffee\0"
+"tajiri.osaka.jp\0net.pl\0gmx\0"
+"shinshinotsu.hokkaido.jp\0"
+"net.pn\0donetsk.ua\0"
+"ilawa.pl\0"
+"hirakata.osaka.jp\0net.qa\0"
+"entertainment.aero\0net.pr\0"
+"net.ps\0"
+"s\xc3\xb8gne.no\0net.pt\0guide\0"
+"j.bg\0nishiaizu.fukushima.jp\0toyooka.hyogo.jp\0"
+"higashihiroshima.hiroshima.jp\0oshu.iwate.jp\0"
+"yamanashi.jp\0hokksund.no\0svelvik.no\0"
+"net.py\0"
+"servequake.com\0"
+"psc.br\0okayama.jp\0vodka\0j.scaleforce.com.cy\0"
+"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0utah.museum\0k12.il.us\0"
+"date.hokkaido.jp\0folkebibl.no\0"
+"daegu.kr\0"
+"mikawa.yamagata.jp\0k12.de.us\0"
+"jele.site\0"
+"vega.no\0goo\0"
+"vegarshei.no\0gop\0"
+"monzaedellabrianza.it\0futuremailing.at\0"
+"\xe5\x95\x86\xe6\xa5\xad.tw\0"
+"journalism.museum\0got\0solutions\0"
+"wales.museum\0toray\0"
+"gov\0"
+"global.ssl.fastly.net\0ms.leg.br\0"
+"br\xc3\xb8nn\xc3\xb8ysund.no\0"
+"tank.museum\0"
+"onyourside\0"
+"terni.it\0nakagawa.fukuoka.jp\0co.krd\0"
+"lillehammer.no\0"
+"net.sa\0in-vpn.net\0"
+"net.sb\0\xe9\xa6\x99\xe6\xb8\xaf\0kosher\0ch.trendhosting.cloud\0"
+"net.sc\0"
+"net.sd\0nikon\0"
+"ap.gov.br\0net.ru\0"
+"store\0"
+"tsumagoi.gunma.jp\0airguard.museum\0net.rw\0net.sg\0"
+"net.sh\0"
+"sn\xc3\xa5""ase.no\0"
+"website\0"
+"zoological.museum\0net.sl\0"
+"net.so\0"
+"karikatur.museum\0international\0"
+"enebakk.no\0net.ss\0"
+"ass.km\0net.st\0"
+"fukuchi.fukuoka.jp\0sherbrooke.museum\0"
+"fhs.no\0"
+"from-mt.com\0from-nd.com\0"
+"net.th\0pcloud.host\0"
+"net.sy\0ollo\0productions\0"
+"belem.br\0gr.it\0jeju.kr\0konin.pl\0net.tj\0lib.ca.us\0"
+"mt.leg.br\0"
+"bodo.no\0net.tm\0lon-1.paas.massivegrid.net\0"
+"net.tn\0"
+"f\xc3\xb8rde.no\0ap.gov.pl\0olawa.pl\0net.to\0"
+"isa-geek.com\0"
+"net.ua\0"
+"net.tr\0"
+"lg.jp\0hbo\0"
+"net.tt\0"
+"limanowa.pl\0"
+"bologna.it\0gr.jp\0wake.okayama.jp\0"
+"tranoy.no\0net.tw\0"
+"web.bo\0hosting\0""4lima.de\0"
+"apps.lair.io\0"
+"aetna\0"
+"hirono.fukushima.jp\0net.uk\0\xd2\x9b\xd0\xb0\xd0\xb7\0abbott\0"
+"hobol.no\0fashion\0"
+"try-snowplow.com\0"
+"star\0"
+"nx.cn\0olbiatempio.it\0net.vc\0"
+"net.ve\0"
+"js.cn\0estate.museum\0malbork.pl\0target\0"
+"feira.br\0lanxess\0"
+"web.co\0"
+"net.uy\0net.vi\0\xe6\x85\x88\xe5\x96\x84\0"
+"net.uz\0"
+"gitapp.si\0now-dns.net\0"
+"net.vn\0is-lost.org\0appchizi.com\0"
+"seaport.museum\0mk.ua\0"
+"hiranai.aomori.jp\0"
+"trieste.it\0usui.fukuoka.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0"
+"if.ua\0"
+"net.vu\0"
+"likes-pie.com\0""4lima.at\0"
+"web.do\0uk.reclaim.cloud\0"
+"yatsushiro.kumamoto.jp\0forde.no\0"
+"yotsukaido.chiba.jp\0"
+"mansions.museum\0"
+"prato.it\0urausu.hokkaido.jp\0force.museum\0"
+"mielec.pl\0"
+"aoste.it\0ofunato.iwate.jp\0barsy.org\0"
+"ome.tokyo.jp\0"
+"ono.hyogo.jp\0hoyanger.no\0molde.no\0net.ws\0"
+"cancerresearch\0"
+"uk.primetel.cloud\0"
+"4lima.ch\0"
+"cloud66.ws\0"
+"matsumoto.nagano.jp\0ishikawa.okinawa.jp\0clinic\0"
+"cc.tn.us\0"
+"flor\xc3\xb8.no\0nes.buskerud.no\0"
+"siellak.no\0uzhgorod.ua\0"
+"lodingen.no\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0"
+"abo.pa\0"
+"net.ye\0rugby\0\xe9\xa4\x90\xe5\x8e\x85\0"
+"muenster.museum\0aukra.no\0no-ip.ca\0"
+"macys\0selfip.info\0"
+"godo.gifu.jp\0romsa.no\0"
+"k12.or.us\0"
+"kimino.wakayama.jp\0"
+"\xe6\xa0\x83\xe6\x9c\xa8.jp\0"
+"portlligat.museum\0"
+"net.za\0"
+"tsukui.kanagawa.jp\0termez.su\0"
+"extraspace\0"
+"wios.gov.pl\0"
+"g\xc3\xa1ivuotna.no\0net.zm\0"
+"web.gu\0"
"kaisei.kanagawa.jp\0"
-"ishikawa.jp\0tienda\0iki.fi\0"
-"k12.ar.us\0"
-"sakai.osaka.jp\0"
-"*.compute.amazonaws.com.cn\0fh-muenster.io\0"
-"plc.uk\0"
-"sncf\0"
-"bihoro.hokkaido.jp\0bg.eu.org\0"
-"club.aero\0"
-"or.it\0"
-"turin.it\0kawazu.shizuoka.jp\0df.leg.br\0"
-"kodaira.tokyo.jp\0"
-"cc.as.us\0"
-"matsuyama.ehime.jp\0"
-"plc.co.im\0"
-"saroma.hokkaido.jp\0rj.leg.br\0"
-"okuma.fukushima.jp\0osen.no\0"
-"or.jp\0air.museum\0glass\0"
-"matsubushi.saitama.jp\0"
-"space-to-rent.com\0"
-"or.ke\0"
-"mlbfan.org\0"
-"uslivinghistory.museum\0"
-"anani.br\0tenri.nara.jp\0beiarn.no\0"
-"fi.cloudplatform.fi\0""16-b.it\0"
-"sel.no\0in-dsl.net\0"
-"consultant.aero\0"
-"or.kr\0"
-"il.us\0"
+"tas.edu.au\0kasuga.fukuoka.jp\0aure.no\0boehringer\0"
+"lans.museum\0"
+"sakae.nagano.jp\0"
+"delaware.museum\0"
+"!city.kitakyushu.jp\0okegawa.saitama.jp\0synology.me\0"
+"ybo.faith\0"
+"recht.pro\0"
+"web.id\0d\xc3\xb8nna.no\0rzgw.gov.pl\0"
+"tosashimizu.kochi.jp\0from-hi.com\0"
+"tsurugi.ishikawa.jp\0cloud-de.unispace.io\0"
+"bifuka.hokkaido.jp\0"
+"shell.museum\0flowers\0"
+"web.in\0"
+"klabu.no\0"
+"hiv\0"
+"trentino-s\xc3\xbc""d-tirol.it\0gamagori.aichi.jp\0"
+"*.banzai.cloud\0"
+"movimiento.bo\0"
+"hornindal.no\0"
+"ua.rs\0"
+"cechire.com\0co.financial\0"
+"bi.it\0brussel.museum\0history.museum\0"
+"trustee.museum\0"
+"qpon\0"
+"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0"
+"showa.yamanashi.jp\0"
+"conf.au\0"
+"eiheiji.fukui.jp\0"
+"bihoro.hokkaido.jp\0hara.nagano.jp\0field.museum\0"
+"donna.no\0"
+"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0hkt\0"
+"is-an-accountant.com\0kurgan.su\0"
+"oita.jp\0drayddns.com\0"
+"isen.kagoshima.jp\0bydgoszcz.pl\0"
+"honbetsu.hokkaido.jp\0oregon.museum\0square.museum\0"
+"inagawa.hyogo.jp\0"
+"pl.ua\0"
+"tsuruga.fukui.jp\0"
+"web.lk\0lg.ua\0"
+"ardal.no\0"
+"dontexist.com\0"
+"dr\xc3\xb8""bak.no\0"
+"tone.ibaraki.jp\0is-a-techie.com\0"
+"kiyokawa.kanagawa.jp\0"
+"webhosting.be\0"
+"hs.run\0"
+"\xe7\xa7\xbb\xe5\x8a\xa8\0"
+"takikawa.hokkaido.jp\0"
+"mini\0"
+"bill.museum\0"
+"from-ks.com\0"
+"mint\0gsj.bz\0"
+"ichikawa.hyogo.jp\0axis.museum\0web.nf\0"
+"s3.eu-west-3.amazonaws.com\0is-a-musician.com\0"
+"web.ni\0"
+"historisches.museum\0"
+"laspezia.it\0"
+"pescara.it\0"
+"market\0"
+"reisen\0"
+"for.men\0"
+"charter.aero\0"
+"elasticbeanstalk.com\0dyndns.dappnode.io\0"
+"k12.nv.us\0"
+"vgs.no\0"
+"*.owo.codes\0"
+"groks-the.info\0"
+"oxford.museum\0"
+"from.hr\0gyeongnam.kr\0umig.gov.pl\0hot\0syno-ds.de\0"
+"fuchu.hiroshima.jp\0"
+"kurobe.toyama.jp\0how\0"
+"versicherung\0"
+"alipay\0"
+"web.pk\0"
+"tcp4.me\0"
+"fuchu.tokyo.jp\0"
+"coal.museum\0"
+"myfast.host\0"
+"mircloud.us\0"
+"tarnobrzeg.pl\0"
+"iide.yamagata.jp\0"
+"farm.museum\0"
+"chino.nagano.jp\0"
+"selfip.org\0"
+"oumu.hokkaido.jp\0"
+"shiroishi.miyagi.jp\0"
+"ri.it\0lib.nh.us\0"
+"under.one\0"
+"mt.it\0kanegasaki.iwate.jp\0zone\0"
+"sanuki.kagawa.jp\0"
+"gs.jan-mayen.no\0\xc3\xb8ystre-slidre.no\0ibm\0"
+"owani.aomori.jp\0oppeg\xc3\xa5rd.no\0"
+"dyn-o-saur.com\0ntdll.top\0"
+"andasuolo.no\0dyndns.biz\0forte.id\0"
+"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0ice\0"
+"team\0"
+"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0"
+"police.uk\0"
+"riik.ee\0"
+"io.kg\0"
+"coupon\0icu\0"
+"deals\0s3-eu-central-1.amazonaws.com\0"
+"hk.cn\0koryo.nara.jp\0"
+"matera.it\0raid\0"
+"shari.hokkaido.jp\0"
+"web.tj\0sm.ua\0"
+"hsbc\0icbc\0"
+"dynalias.org\0"
+"swiftcover\0"
+"tech\0"
+"online.th\0"
+"web.tr\0toyota\0"
+"baghdad.museum\0"
+"miyoshi.hiroshima.jp\0"
+"loans\0phone\0"
+"\xd0\xb1\xd0\xb5\xd0\xbb\0"
+"semboku.akita.jp\0gotemba.shizuoka.jp\0sebastopol.ua\0oh.us\0"
+"nogi.tochigi.jp\0oygarden.no\0"
+"fly.dev\0"
+"web.ve\0"
+"oyer.no\0"
+"other.nf\0nissedal.no\0"
+"lazio.it\0kunitomi.miyazaki.jp\0ifm\0mo-siemens.io\0"
+"\xe5\x80\x8b\xe4\xba\xba.hk\0mesaverde.museum\0hammerfest.no\0mircloud.ru\0"
+"poivron.org\0edgestack.me\0"
+"gildesk\xc3\xa5l.no\0"
+"kami.kochi.jp\0"
+"genkai.saga.jp\0from-wv.com\0"
+"isa.us\0"
+"okaya.nagano.jp\0"
+"etc.br\0"
+"cc.il.us\0"
+"k12.ut.us\0"
+"s.bg\0"
+"emilia-romagna.it\0"
+"flynnhosting.net\0"
+"k12.nj.us\0\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0"
+"veterinaire.km\0"
+"vercelli.it\0"
+"kamigori.hyogo.jp\0"
+"ro.eu.org\0"
+"minamidaito.okinawa.jp\0"
+"loseyourip.com\0"
+"kumamoto.jp\0"
+"shiojiri.nagano.jp\0"
+"2000.hu\0"
+"nowtv\0"
+"lodi.it\0tobe.ehime.jp\0"
+"\xe6\x94\xbf\xe5\xba\x9c\0isa-geek.net\0"
+"stange.no\0"
+"pisa.it\0"
+"kamitonda.wakayama.jp\0bajddar.no\0"
+"schools.nsw.edu.au\0bieszczady.pl\0"
+"vefsn.no\0"
+"is-a-libertarian.com\0"
+"filegear-de.me\0"
+"showa.fukushima.jp\0"
+"lucania.it\0minamiyamashiro.kyoto.jp\0platter-app.com\0"
+"alesund.no\0ac.leg.br\0"
+"\xc3\xa5l.no\0web.za\0"
+"yasu.shiga.jp\0"
+"pu.it\0wnext.app\0"
+"ide.kyoto.jp\0jelastic.regruhosting.ru\0"
+"pagespeedmobilizer.com\0"
+"kamifurano.hokkaido.jp\0hidaka.kochi.jp\0photography.museum\0"
+"ichinomiya.chiba.jp\0"
+"soka.saitama.jp\0"
+"onomichi.hiroshima.jp\0leangaviika.no\0"
+"veterinaire.fr\0meeres.museum\0"
+"larsson.museum\0nordkapp.no\0us-gov-west-1.elasticbeanstalk.com\0internet-dns.de\0"
+"kawanabe.kagoshima.jp\0gg.ax\0"
+"friuli-vgiulia.it\0"
+"mining.museum\0food\0"
+"is-very-bad.org\0"
+"abkhazia.su\0"
+"kamikawa.saitama.jp\0"
+"yuasa.wakayama.jp\0si.eu.org\0"
+"aviation.museum\0"
+"photo\0conf.se\0"
+"jerusalem.museum\0"
+"sakuho.nagano.jp\0"
+"skole.museum\0"
+"can.museum\0dealer\0"
+"ohtawara.tochigi.jp\0"
+"!www.ck\0vn.ua\0"
+"osakikamijima.hiroshima.jp\0"
+"aogashima.tokyo.jp\0"
+"g\xc3\xa1\xc5\x8bgaviika.no\0"
+"lahppi.no\0"
+"orangecloud.tn\0"
+"sydney.museum\0"
+"inc\0spb.ru\0"
+"oiso.kanagawa.jp\0ee.eu.org\0"
+"presse.km\0ri.us\0"
+"missile.museum\0ing\0"
+"mt.us\0nd.us\0paris.eu.org\0"
+"slz.br\0shibata.niigata.jp\0irish\0"
+"ink\0"
+"ford\0"
+"sells-for-less.com\0"
+"spb.su\0"
+"int\0"
+"suita.osaka.jp\0"
+"etnedal.no\0"
+"carbonia-iglesias.it\0total\0"
+"ina.nagano.jp\0cadaques.museum\0cc.pr.us\0hasura-app.io\0"
+"notaires.km\0"
+"qsl.br\0chiryu.aichi.jp\0"
+"kopervik.no\0"
+"porsgrunn.no\0k12.tx.us\0"
+"trentinosud-tirol.it\0giske.no\0"
+"cc.dc.us\0"
+"mashiki.kumamoto.jp\0k12.pa.us\0design\0"
+"presse.ml\0narviika.no\0s\xc3\xb8rum.no\0"
+"poker\0sk.eu.org\0"
+"mytis.ru\0"
+"selbu.no\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0"
+"sciencesnaturelles.museum\0datsun\0"
+"hasura.app\0"
+"newholland\0yolasite.com\0"
+"nombre.bo\0strand.no\0"
+"for.mom\0"
+"kanra.gunma.jp\0"
+"yamaguchi.jp\0"
+"tsuno.miyazaki.jp\0"
+"shintomi.miyazaki.jp\0"
+"sakahogi.gifu.jp\0"
+"kaho.fukuoka.jp\0haebaru.okinawa.jp\0"
+"somna.no\0"
+"kuokgroup\0"
+"kitakata.miyazaki.jp\0"
+"sv.it\0sandnes.no\0"
+"pa.it\0"
"jcb\0"
-"paragliding.aero\0"
-"tranibarlettaandria.it\0"
-"c.se\0"
-"iwamizawa.hokkaido.jp\0"
-"muroran.hokkaido.jp\0vana\0"
-"keisen.fukuoka.jp\0jcp\0reliance\0"
-"uvic.museum\0ist\0shouji\0"
-"ballooning.aero\0"
-"notteroy.no\0ap-southeast-2.elasticbeanstalk.com\0"
-"or.na\0"
-"wajiki.tokushima.jp\0"
-"desi\0hospital\0"
-"est-a-la-maison.com\0"
-"or.mu\0"
-"kitami.hokkaido.jp\0forumz.info\0"
-"kosher\0jp.kg\0"
-"itv\0money\0"
-"klabu.no\0bitbridge.net\0"
-"*.elb.amazonaws.com\0"
-"dyndns.ddnss.de\0"
-"med.pro\0"
-"lib.nh.us\0"
-"wassamu.hokkaido.jp\0mimata.miyazaki.jp\0kunstunddesign.museum\0"
-"is-a-nascarfan.com\0"
-"engerdal.no\0"
-"bunkyo.tokyo.jp\0"
-"mitaka.tokyo.jp\0holiday\0"
-"co.ae\0"
-"benevento.it\0"
-"co.ag\0gets-it.net\0"
-"film\0hr.eu.org\0"
-"k12.nj.us\0"
-"co.am\0virtual.museum\0"
-"ecologia.bo\0"
-"co.ao\0naka.hiroshima.jp\0institute\0jp.md\0"
-"baidar.no\0iobb.net\0"
-"co.bb\0en.it\0army\0"
-"hannan.osaka.jp\0"
-"co.at\0"
-"ac\0aomori.aomori.jp\0misato.miyagi.jp\0"
-"ad\0"
-"ae\0hasami.nagasaki.jp\0ltda\0"
-"af\0"
-"ag\0co.bi\0omachi.saga.jp\0"
-"*.transurl.be\0"
-"ai\0"
-"realtor\0"
-"al\0co.bn\0"
-"am\0calabria.it\0or.pw\0"
-"sakai.fukui.jp\0"
-"ao\0co.ca\0"
-"unusualperson.com\0"
+"lancashire.museum\0jambyl.su\0"
+"a\xc3\xa9roport.ci\0ama.shimane.jp\0eurovision\0from-nm.com\0game-host.org\0"
+"trentino-stirol.it\0exeter.museum\0"
+"br.it\0cb.it\0"
+"sauherad.no\0"
+"alto-adige.it\0misato.saitama.jp\0vision\0"
+"osasco.br\0"
+"usantiques.museum\0"
+"es.ax\0"
+"higashikagawa.kagawa.jp\0surf\0"
+"skedsmo.no\0"
+"tananger.no\0evenes.no\0ist\0is-a-financialadvisor.com\0"
+"ru.eu.org\0se.eu.org\0"
+"dep.no\0"
+"skydiving.aero\0"
+"nm.cn\0"
+"council.aero\0"
+"os.hordaland.no\0"
+"credit\0cya.gg\0"
+"itv\0"
+"omigawa.chiba.jp\0"
+"rsc.cdn77.org\0pantheonsite.io\0"
+"suli.hu\0gifu.jp\0"
+"tahara.aichi.jp\0"
+"nhlfan.net\0"
+"*.alces.network\0"
+"philadelphiaarea.museum\0cv.ua\0sells-for-u.com\0"
+"higashisumiyoshi.osaka.jp\0"
+"nagawa.nagano.jp\0"
+"barsy.mobi\0"
+"conf.lv\0"
+"kiyose.tokyo.jp\0"
+"press.museum\0"
+"hiroshima.jp\0"
+"kumiyama.kyoto.jp\0psse.gov.pl\0"
+"bialystok.pl\0teva\0"
+"lamer\0"
+"tagami.niigata.jp\0"
+"from-md.com\0"
+"kikuchi.kumamoto.jp\0educational.museum\0"
+"pulawy.pl\0build\0"
+"ent.platform.sh\0"
+"s.se\0"
+"eniwa.hokkaido.jp\0now-dns.org\0"
+"ternopil.ua\0passagens\0"
+"\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0"
+"north-kazakhstan.su\0"
+"hurum.no\0"
+"*.oci.customer-oci.com\0"
+"natal.br\0"
+"poltava.ua\0"
+"komae.tokyo.jp\0"
+"yukuhashi.fukuoka.jp\0"
+"dynamic-dns.info\0"
+"baidu\0northwesternmutual\0"
+"cat.ax\0"
+"mochizuki.nagano.jp\0"
+"repbody.aero\0jio\0"
+"\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0nordeste-idc.saveincloud.net\0"
+"timekeeping.museum\0verran.no\0iopsys.se\0"
+"trentino-a-adige.it\0shimonoseki.yamaguchi.jp\0"
+"bhz.br\0doctor\0"
+"api.stdlib.com\0"
+"archaeological.museum\0"
+"higashiomi.shiga.jp\0"
+"app.br\0skj\xc3\xa5k.no\0visa\0pubtls.org\0"
+"ce.gov.br\0!city.kawasaki.jp\0"
+"nanao.ishikawa.jp\0ninja\0"
+"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0"
+"zakopane.pl\0"
+"bike\0us.ax\0"
+"children.museum\0"
+"fc.it\0l\xc3\xa6rdal.no\0"
+"id.au\0an.it\0otari.nagano.jp\0"
+"piedmont.it\0"
+"flesberg.no\0tashkent.su\0al.leg.br\0"
+"dentist\0"
+"group.aero\0"
+"\xe9\x9b\x86\xe5\x9b\xa2\0ilovecollege.info\0"
+"jll\0"
+"sa.edu.au\0"
+"marugame.kagawa.jp\0v\xc3\xa5gan.no\0"
+"horonobe.hokkaido.jp\0"
+"yonaguni.okinawa.jp\0"
+"incheon.kr\0rost.no\0"
+"\xe5\xa5\x88\xe8\x89\xaf.jp\0"
+"katano.osaka.jp\0"
+"vet.br\0"
+"dali.museum\0"
+"trentinsudtirol.it\0"
+"school.museum\0"
+"es.kr\0game.tw\0"
+"jab.br\0skodje.no\0"
+"siena.it\0fentiger.mythic-beasts.com\0"
+"jmp\0viva\0"
+"a.prod.fastly.net\0"
+"santacruz.museum\0"
+"university.museum\0"
+"hakone.kanagawa.jp\0"
+"ac\0kharkov.ua\0jnj\0homeoffice.gov.uk\0"
+"ad\0bing\0"
+"ae\0jevnaker.no\0"
+"accident-investigation.aero\0af\0saitama.saitama.jp\0"
+"ag\0vivo\0"
+"togane.chiba.jp\0"
+"ai\0pa.us\0"
+"alp1.ae.flow.ch\0"
+"westeurope.azurestaticapps.net\0"
+"al\0"
+"am\0obanazawa.yamagata.jp\0report\0forgot.her.name\0"
+"ao\0kurotaki.nara.jp\0"
"aq\0ba\0"
"ar\0bb\0"
-"as\0lewismiller.museum\0"
-"at\0yk.ca\0takayama.gifu.jp\0taiki.mie.jp\0"
-"au\0be\0co.bw\0mydobiss.com\0"
-"bf\0"
-"aw\0bg\0sjc.br\0co.ci\0"
-"arpa\0ax\0bh\0"
-"bi\0"
-"az\0bj\0co.cl\0wildlife.museum\0*.advisor.ws\0gehirn.ne.jp\0"
-"co.cm\0"
-"ms.it\0"
-"bm\0"
-"bn\0d\xc3\xb8nna.no\0"
-"bo\0"
-"research.aero\0co.cr\0"
+"as\0amot.no\0"
+"at\0yaese.okinawa.jp\0"
+"au\0be\0"
+"bf\0miners.museum\0cc.vt.us\0"
+"aw\0bg\0app.gp\0"
+"ax\0bh\0"
+"bi\0sejny.pl\0"
+"az\0bj\0*.landing.myjino.ru\0"
+"cc.nj.us\0mydissent.net\0"
+"bm\0jot\0cn.eu.org\0"
+"bn\0walbrzych.pl\0"
+"bo\0botanicalgarden.museum\0"
+"daplie.me\0"
"ca\0"
-"br\0"
-"bs\0cc\0"
-"bt\0cd\0exchange\0"
+"br\0joy\0"
+"bs\0cc\0hk.com\0"
+"bt\0cd\0"
+"7.bg\0shirako.chiba.jp\0biratori.hokkaido.jp\0tabayama.yamanashi.jp\0nittedal.no\0cc.ak.us\0"
"bv\0cf\0"
-"bw\0cg\0"
-"ch\0co.cz\0"
-"by\0ci\0s3-sa-east-1.amazonaws.com\0co.dk\0"
-"bz\0ashikaga.tochigi.jp\0jio\0"
-"motobu.okinawa.jp\0"
-"cl\0"
-"cm\0"
+"bw\0cg\0b\xc3\xa1hcavuotna.no\0l\xc3\xb8""dingen.no\0"
+"ch\0yamamoto.miyagi.jp\0"
+"by\0ci\0"
+"bz\0"
+"cl\0friuli-ve-giulia.it\0"
+"cm\0blogsyte.com\0"
"cn\0"
"co\0"
+"pictet\0"
"cr\0"
-"trentinoaadige.it\0itami.hyogo.jp\0"
-"cu\0de\0apps.fbsbx.com\0"
+"s\xc3\xa1l\xc3\xa1t.no\0"
+"cu\0de\0sakegawa.yamagata.jp\0science-fiction.museum\0sirdal.no\0"
"cv\0"
-"cw\0"
-"cx\0"
+"cw\0kitaaiki.nagano.jp\0"
+"cx\0kakamigahara.gifu.jp\0"
"cy\0"
-"cz\0dj\0pistoia.it\0kitaaiki.nagano.jp\0ms.kr\0"
-"dk\0cc.hi.us\0"
-"iwanuma.miyagi.jp\0"
+"cz\0dj\0kwp.gov.pl\0trafficplex.cloud\0"
+"dk\0fukushima.jp\0"
"dm\0"
-"or.th\0"
-"do\0vibo-valentia.it\0*.ocs.customer-oci.com\0familyds.org\0"
-"ec\0"
-"ee\0aca.pro\0"
+"oketo.hokkaido.jp\0solund.no\0"
+"show.aero\0do\0meiwa.mie.jp\0"
+"kumano.hiroshima.jp\0"
+"ec\0crd.co\0"
+"teshikaga.hokkaido.jp\0"
+"ee\0"
+"liguria.it\0"
"eg\0"
-"chambagri.fr\0mex.com\0*.transurl.eu\0"
-"clubmed\0"
-"dz\0maserati\0"
-"okuizumo.shimane.jp\0"
-"or.ug\0"
-"santafe.museum\0fire\0"
-"mircloud.us\0"
-"or.tz\0"
-"es\0"
-"et\0fortmissoula.museum\0"
-"eu\0co.gg\0"
-"\xe5\xbe\xb3\xe5\xb3\xb6.jp\0vestv\xc3\xa5g\xc3\xb8y.no\0"
-"jll\0"
-"asda\0"
-"fi\0cyber.museum\0or.us\0"
-"fj\0co.gl\0"
-"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0"
-"fvg.it\0arte\0"
+"is-saved.org\0"
+"dz\0"
+"hemne.no\0"
+"tempio-olbia.it\0"
+"vc.it\0sabae.fukui.jp\0"
+"vall\xc3\xa9""eaoste.it\0iserv.dev\0"
+"livorno.it\0lib.me.us\0statebank\0"
+"stcgroup\0"
+"es\0krellian.net\0"
+"et\0mi.it\0tsubata.ishikawa.jp\0"
+"eu\0id.ir\0bergbau.museum\0"
+"oz.au\0lib.co.us\0"
+"watches\0"
+"fi\0fireweb.app\0"
+"fj\0"
"fm\0"
-"!city.nagoya.jp\0"
-"fo\0"
-"drud.io\0"
-"ga\0abashiri.hokkaido.jp\0public.museum\0fish\0indowapblog.com\0"
+"gran.no\0"
+"fo\0palermo.it\0marker.no\0"
+"gon.pk\0"
+"ga\0us.kg\0"
"fr\0gb\0"
-"gd\0verona.it\0"
-"ge\0"
-"gf\0umi.fukuoka.jp\0tomi.nagano.jp\0beauxarts.museum\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0"
-"gg\0co.gy\0ogose.saitama.jp\0"
-"og.ao\0gh\0"
-"gi\0hachijo.tokyo.jp\0"
-"endofinternet.net\0"
-"pv.it\0jmp\0"
+"gd\0vao.it\0vxl.sh\0"
+"ge\0online.museum\0"
+"gf\0myravendb.com\0"
+"gg\0"
+"gh\0"
+"gi\0"
+"yurihonjo.akita.jp\0"
"gl\0"
-"gm\0lib.ky.us\0"
-"gn\0\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0jprs\0"
+"gm\0"
+"gn\0ono.fukui.jp\0"
"gp\0"
-"gq\0aquila.it\0mishima.shizuoka.jp\0"
-"gr\0co.id\0"
-"gs\0co.hu\0zarow.pl\0"
-"gt\0bar1.net\0"
-"gu\0jnj\0"
-"2000.hu\0nexus\0"
-"gw\0chosei.chiba.jp\0"
-"tank.museum\0bbva\0dagestan.ru\0opencraft.hosting\0"
-"gy\0teshikaga.hokkaido.jp\0"
-"co.il\0austin.museum\0"
-"hk\0co.im\0ddnsgeek.com\0"
-"co.in\0fastblog.net\0"
-"hm\0"
+"gq\0onfabrica.com\0"
+"gr\0"
+"gs\0museumcenter.museum\0"
+"gt\0"
+"gu\0jamison.museum\0"
+"gw\0"
+"balsan-s\xc3\xbc""dtirol.it\0"
+"gy\0sb.ua\0"
+"midatlantic.museum\0portal.museum\0"
+"presse.ci\0hk\0ogimi.okinawa.jp\0"
+"ibaraki.osaka.jp\0reviews\0"
+"hm\0anamizu.ishikawa.jp\0cy.eu.org\0"
"hn\0"
-"co.ir\0massacarrara.it\0"
-"higashiyamato.tokyo.jp\0"
-"hr\0co.it\0"
-"co.je\0"
-"ht\0id\0automotive.museum\0"
-"hu\0ie\0"
-"filegear-sg.me\0"
-"dagestan.su\0servegame.com\0"
-"ogawa.ibaraki.jp\0"
-"9.bg\0"
-"asso.eu.org\0"
-"il\0"
-"im\0tsuwano.shimane.jp\0"
-"in\0co.jp\0saito.miyazaki.jp\0"
-"io\0jot\0co.krd\0"
-"goto.nagasaki.jp\0psse.gov.pl\0fastvps.host\0"
-"iq\0nagaokakyo.kyoto.jp\0"
-"ir\0gotsu.shimane.jp\0conf.se\0"
-"is\0co.ke\0"
-"it\0w.se\0joy\0"
+"settlement.museum\0"
+"kfh\0"
+"hr\0"
+"airport.aero\0"
+"ht\0id\0"
+"crew.aero\0hu\0ie\0freetls.fastly.net\0"
+"eu.int\0"
+"id.lv\0"
+"plo.ps\0"
+"us.na\0storage\0"
+"il\0id.ly\0"
+"im\0shinyoshitomi.fukuoka.jp\0asahi.nagano.jp\0paris.museum\0"
+"in\0nm.us\0"
+"io\0iwakura.aichi.jp\0"
+"iq\0bashkiria.ru\0"
+"ir\0"
+"is\0"
+"it\0"
"je\0"
-"amazon\0"
-"oga.akita.jp\0gs.ah.no\0"
-"yashio.saitama.jp\0"
-"tmp.br\0kyotanabe.kyoto.jp\0bale.museum\0"
-"jo\0"
-"jp\0co.kr\0"
-"co.lc\0naklo.pl\0mircloud.ru\0"
-"warszawa.pl\0"
-"numazu.shizuoka.jp\0nishikata.tochigi.jp\0xerox\0"
-"nishio.aichi.jp\0rr.leg.br\0"
-"ke\0from-wi.com\0"
-"aaa.pro\0hermes\0"
-"kg\0palace.museum\0"
-"asia\0"
-"monza-brianza.it\0ki\0"
-"kautokeino.no\0s3.dualstack.ap-northeast-2.amazonaws.com\0"
+"os\xc3\xb8yro.no\0"
+"chikujo.fukuoka.jp\0mugi.tokushima.jp\0newyork.museum\0"
+"democrat\0fbxos.fr\0"
+"etne.no\0ieee\0"
+"cz.eu.org\0"
+"jo\0historicalsociety.museum\0bar.pro\0"
+"jp\0"
+"bashkiria.su\0"
+"kaneyama.yamagata.jp\0"
+"naturalhistorymuseum.museum\0"
+"cc.ia.us\0fairwinds\0"
+"ke\0"
+"h.bg\0beppu.oita.jp\0kg\0is-into-games.com\0"
+"crown\0"
+"ki\0"
+"kia\0"
+"tsuruta.aomori.jp\0bradesco\0"
"km\0"
-"kn\0"
-"co.ma\0volyn.ua\0"
-"kp\0"
-"la\0co.ls\0"
-"kr\0lb\0"
-"karuizawa.nagano.jp\0lc\0co.me\0"
-"matera.it\0co.mg\0seven\0"
-"kw\0"
-"yao.osaka.jp\0ky\0li\0"
+"kn\0jls-sto3.elastx.net\0"
+"abeno.osaka.jp\0"
+"kp\0blackfriday\0"
+"miyakonojo.miyazaki.jp\0la\0k12.dc.us\0"
+"nic.in\0kr\0lb\0stryn.no\0gliwice.pl\0"
+"lc\0iki.fi\0to.gt\0"
+"phoenix.museum\0"
+"museum\0ru.com\0"
+"newhampshire.museum\0kim\0"
+"ogawara.miyagi.jp\0kw\0lucerne.museum\0"
+"game\0"
+"ky\0li\0alwaysdata.net\0"
"kz\0"
-"lk\0"
-"shinanomachi.nagano.jp\0minamidaito.okinawa.jp\0lavangen.no\0tj\xc3\xb8me.no\0"
-"tosu.saga.jp\0co.na\0bestbuy\0"
-"in.london\0"
-"ma\0"
-"nyuzen.toyama.jp\0lr\0"
-"nagasaki.nagasaki.jp\0ls\0mc\0co.mu\0is-a-linux-user.org\0"
-"lt\0md\0vinnytsia.ua\0rs.leg.br\0sc.leg.br\0"
-"lu\0me\0co.mw\0outsystemscloud.com\0"
-"anan.tokushima.jp\0lv\0"
-"mg\0co.ni\0"
-"mh\0co.mz\0"
-"ly\0frana.no\0"
-"nc.tr\0k12.nv.us\0co.nl\0"
-"mk\0manx.museum\0"
-"ml\0"
-"iveco\0co.no\0dscloud.me\0"
-"mn\0porsgrunn.no\0"
-"mo\0*.transurl.nl\0"
-"mp\0"
-"fr.it\0mq\0na\0"
+"lk\0nord-aurdal.no\0"
+"badajoz.museum\0gloppen.no\0dk.eu.org\0"
+"alsace\0selfip.biz\0\xd0\xba\xd0\xbe\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
+"ma\0center\0"
+"lr\0heimatunduhren.museum\0"
+"ls\0mc\0"
+"lt\0md\0"
+"lu\0me\0"
+"lv\0"
+"mg\0uw.gov.pl\0smushcdn.com\0"
+"notaires.fr\0shikatsu.aichi.jp\0mh\0"
+"ly\0sucks\0"
+"mk\0"
+"ml\0tree.museum\0"
+"open\0"
+"mn\0santafe.museum\0filegear-ie.me\0"
+"iwaizumi.iwate.jp\0mo\0sm\xc3\xb8la.no\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0"
+"fukuoka.jp\0kamiichi.toyama.jp\0mp\0"
+"mq\0na\0"
"mr\0"
-"ms\0nc\0"
-"mt\0"
-"mu\0ne\0"
-"mv\0nf\0"
-"toyama.jp\0mw\0ng\0s3-website-us-west-2.amazonaws.com\0"
-"mx\0co.nz\0lib.wa.us\0"
-"l.bg\0catania.it\0my\0ni\0*.cns.joyent.com\0"
-"culturalcenter.museum\0mz\0rennesoy.no\0"
-"co.om\0ms.us\0nc.us\0"
-"isshiki.aichi.jp\0horology.museum\0nl\0"
-"capetown\0"
+"to.it\0ms\0bilbao.museum\0nc\0lib.or.us\0"
+"kanazawa.ishikawa.jp\0mt\0instantcloud.cn\0"
+"minoh.osaka.jp\0kitayama.wakayama.jp\0mu\0ne\0"
+"mv\0nf\0vossevangen.no\0lib.ky.us\0"
+"mw\0ng\0"
+"mx\0"
+"le.it\0my\0ni\0"
+"mz\0"
+"v\xc3\xa5ler.hedmark.no\0"
+"nl\0x.mythic-beasts.com\0"
+"azumino.nagano.jp\0savannahga.museum\0"
"no\0"
-"nissedal.no\0"
-"solund.no\0"
-"nr\0starostwo.gov.pl\0"
-"casino\0"
-"nu\0geek.nz\0"
-"k12.wi.us\0"
-"ono.fukui.jp\0"
-"kasaoka.okayama.jp\0"
-"asn.au\0"
-"tobe.ehime.jp\0nz\0co.pl\0"
-"co.pn\0"
-"og.it\0gyeonggi.kr\0om\0cloudns.eu\0"
-"railroad.museum\0pa\0"
-"kashiwara.osaka.jp\0"
-"kfh\0"
-"sohu\0my-vigor.de\0"
-"pe\0co.pw\0cc.vt.us\0dyndns-ip.com\0"
+"s3-eu-west-2.amazonaws.com\0us.org\0"
+"trading.aero\0"
+"nr\0"
+"leg.br\0servebeer.com\0"
+"sk.ca\0nu\0gdansk.pl\0"
+"communication.museum\0"
+"in-vpn.de\0"
+"app.os.fedoraproject.org\0"
+"nz\0mincom.tn\0locus\0"
+"from-nv.com\0"
+"snillfjord.no\0"
+"om\0"
+"of.by\0"
+"voagat.no\0pa\0"
+"krager\xc3\xb8.no\0"
+"dental\0"
+"pe\0"
"pf\0"
-"chintai\0lilly\0"
-"ph\0"
-"hof.no\0pk\0co.education\0"
-"kagami.kochi.jp\0pl\0"
-"asahikawa.hokkaido.jp\0pm\0"
-"tonosho.kagawa.jp\0pn\0"
-"ogori.fukuoka.jp\0and.mom\0"
-"works.aero\0"
-"florence.it\0hamatama.saga.jp\0qa\0"
-"pr\0watch\0"
-"ps\0rovno.ua\0"
-"ap.it\0tajiri.osaka.jp\0pt\0berlin\0"
-"floripa.br\0\xd9\x83\xd9\x88\xd9\x85\0"
+"murmansk.su\0"
+"ph\0mi.th\0"
+"kasai.hyogo.jp\0"
+"ishikawa.fukushima.jp\0pk\0"
+"niihama.ehime.jp\0pl\0"
+"pm\0de.eu.org\0"
+"pn\0"
+"qa\0"
+"pr\0"
+"ps\0to.md\0"
+"pt\0"
+"aeroport.fr\0bungoono.oita.jp\0fishing\0istmein.de\0"
+"sakai.ibaraki.jp\0ine.kyoto.jp\0"
"pw\0"
-"a\xc3\xa9roport.ci\0"
-"py\0jobs.tt\0wroc.pl\0"
-"akune.kagoshima.jp\0"
-"firenze.it\0"
-"s3.us-east-2.amazonaws.com\0co.ro\0"
-"ia.us\0"
-"rivne.ua\0"
-"grimstad.no\0co.rs\0\xe7\x82\xb9\xe7\x9c\x8b\0"
-"fukuyama.hiroshima.jp\0"
-"is.gov.pl\0"
-"satsumasendai.kagoshima.jp\0re\0co.rw\0"
-"ciencia.bo\0"
-"sabae.fukui.jp\0"
-"kia\0"
-"gv.ao\0"
-"construction\0"
-"ro\0"
-"sa\0"
-"gv.at\0matsubara.osaka.jp\0juif.museum\0sb\0co.st\0"
-"rs\0sc\0"
-"media.aero\0sd\0drud.us\0rn.leg.br\0"
-"ru\0se\0"
-"co.th\0cloudns.in\0"
-"rw\0sg\0"
-"lunner.no\0sh\0co.sz\0co.tj\0kim\0meet\0"
-"si\0broadway\0"
-"sumida.tokyo.jp\0agdenes.no\0sj\0"
-"family.museum\0sk\0co.tm\0"
-"sl\0"
-"tanohata.iwate.jp\0sm\0"
-"nagatoro.saitama.jp\0sn\0"
-"so\0co.ua\0"
-"hemsedal.no\0sr\0co.tt\0"
-"conf.lv\0ss\0tc\0dyn.cosidns.de\0"
-"togo.aichi.jp\0komae.tokyo.jp\0kunstsammlung.museum\0st\0td\0"
-"jerusalem.museum\0su\0co.ug\0"
-"tsukui.kanagawa.jp\0johana.toyama.jp\0sv\0tf\0il.eu.org\0barsy.mobi\0diskstation.me\0"
-"tg\0pgafan.net\0"
-"sx\0th\0co.tz\0"
-"tananger.no\0sy\0co.uk\0"
-"minakami.gunma.jp\0eidsberg.no\0sz\0tj\0"
-"tk\0cloudns.cc\0ashgabad.su\0"
-"tl\0"
-"tm\0"
-"tn\0lib.me.us\0accesscam.org\0"
-"to\0faith\0dyn53.io\0"
-"stord.no\0"
-"ua\0co.us\0"
-"tr\0jetzt\0"
-"co.ve\0"
-"tt\0ro.leg.br\0"
-"ullensvang.no\0tv\0song\0diskstation.eu\0"
-"tw\0ug\0co.vi\0sg.cloudswitches.com\0"
-"co.uz\0\xe6\x8b\x9b\xe8\x81\x98\0"
-"fukui.fukui.jp\0"
-"stargard.pl\0tz\0bplaced.com\0lebtimnetz.de\0"
-"habmer.no\0uk\0"
-"bauhaus\0"
-"gitapp.si\0"
-"tokuyama.yamaguchi.jp\0cloudfront.net\0"
-"va\0myfast.space\0g.vbrplsbx.io\0"
-"fuchu.tokyo.jp\0"
-"us\0vc\0"
-"ve\0"
-"hu.eu.org\0ie.eu.org\0"
+"py\0"
+"go.gov.br\0security\0"
+"bahn.museum\0"
+"actor\0"
+"teramo.it\0ishikawa.jp\0"
+"osakasayama.osaka.jp\0"
+"valledaosta.it\0"
+"edu.ac\0"
+"mi.us\0"
+"edu.af\0re\0"
+"molise.it\0id.us\0for.one\0"
+"allstate\0yokohama\0"
+"gallo\0"
+"natural.bo\0football\0"
+"edu.al\0*.on-rancher.cloud\0"
+"yonabaru.okinawa.jp\0"
+"ro\0remotewd.com\0"
+"edu.ba\0"
+"edu.ar\0edu.bb\0sa\0karacol.su\0"
+"sb\0"
+"rs\0sc\0copro.uk\0"
+"edu.au\0sd\0\xd7\xa7\xd7\x95\xd7\x9d\0"
+"ru\0se\0wales\0nh-serv.co.uk\0"
+"edu.bh\0rw\0sg\0kpn\0zsew.ru\0"
+"edu.bi\0sh\0tours\0"
+"edu.az\0turystyka.pl\0si\0"
+"loyalist.museum\0sj\0"
+"sk\0"
+"edu.bm\0sl\0"
+"edu.bn\0campidano-medio.it\0sm\0"
+"edu.bo\0abiko.chiba.jp\0sn\0"
+"so\0"
+"edu.br\0"
+"edu.bs\0sr\0from-ar.com\0"
+"edu.bt\0ss\0tc\0"
+"ulvik.no\0st\0td\0"
+"su\0"
+"narita.chiba.jp\0lubin.pl\0sv\0tf\0\xeb\x8b\xb7\xec\xbb\xb4\0"
+"tg\0"
+"edu.ci\0lakas.hu\0hamatonbetsu.hokkaido.jp\0judaica.museum\0sx\0th\0free\0"
+"edu.bz\0sy\0"
+"mil.ac\0sz\0tj\0"
+"tk\0"
+"mil.ae\0tl\0"
+"edu.cn\0tozsde.hu\0tm\0krd\0lat\0"
+"edu.co\0tn\0"
+"oizumi.gunma.jp\0to\0"
+"law\0"
+"ua\0"
+"tomika.gifu.jp\0tr\0"
+"mil.al\0"
+"edu.cu\0tt\0drive\0"
+"per.la\0"
+"edu.cw\0tv\0"
+"tw\0ug\0"
+"mil.ba\0"
+"mil.ar\0"
+"tz\0vuelos\0"
+"uk\0"
+"exchange.aero\0edu.dm\0shizukuishi.iwate.jp\0\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0s3.dualstack.us-east-1.amazonaws.com\0"
+"mashike.hokkaido.jp\0is-a-cubicle-slave.com\0githubusercontent.com\0"
+"edu.do\0nishi.fukuoka.jp\0"
+"mil.az\0va\0"
+"edu.ec\0user.aseinet.ne.jp\0"
+"kira.aichi.jp\0detroit.museum\0us\0vc\0"
+"edu.ee\0dedyn.io\0"
+"lib.sc.us\0ve\0"
+"mil.bo\0edu.eg\0tarui.gifu.jp\0"
"vg\0"
-"sony\0dvrdns.org\0"
-"halloffame.museum\0uy\0vi\0basicserver.io\0"
-"lib.tn.us\0uz\0"
-"saitama.jp\0"
-"vega.no\0serveftp.com\0"
-"vn\0"
-"coal.museum\0costume.museum\0"
-"ehime.jp\0"
-"qsl.br\0topology.museum\0vu\0"
-"daigo.ibaraki.jp\0wf\0"
-"pyatigorsk.ru\0"
-"horse\0"
-"glogow.pl\0"
-"graz.museum\0"
-"foz.br\0ny-1.paas.massivegrid.net\0"
-"shiso.hyogo.jp\0opensocial.site\0"
-"edeka\0"
-"l\xc3\xb8renskog.no\0ws\0"
-"yamanakako.yamanashi.jp\0"
-"!city.kitakyushu.jp\0"
-"kira.aichi.jp\0"
-"lancia\0"
-"yuasa.wakayama.jp\0"
-"co.za\0"
-"hapmir.no\0"
-"tohnosho.chiba.jp\0"
-"blackfriday\0is-an-accountant.com\0"
-"\xe5\xa5\x88\xe8\x89\xaf.jp\0"
-"owani.aomori.jp\0co.zm\0"
-"gotpantheon.com\0"
-"asahi.nagano.jp\0"
-"kagawa.jp\0agriculture.museum\0"
-"shiriuchi.hokkaido.jp\0"
-"ama.aichi.jp\0"
+"lib.nv.us\0school\0"
+"mil.br\0edu.dz\0uy\0vi\0"
+"ac.ae\0uz\0tiffany\0service.gov.uk\0"
+"of.je\0"
+"valer.ostfold.no\0"
+"karasuyama.tochigi.jp\0nic.tj\0vn\0"
+"uvic.museum\0"
+"mil.by\0osteroy.no\0rybnik.pl\0"
+"edu.es\0"
+"mil.cl\0edu.et\0"
+"bg.it\0ngo.lk\0"
+"mil.cn\0vu\0"
+"mil.co\0wf\0"
+"globo\0"
+"ac.at\0"
+"ac.be\0per.nf\0*.on-k3s.io\0"
+"nyc.mn\0"
+"edu.fm\0lds\0"
+"nb.ca\0"
+"naturalhistory.museum\0"
+"nhs.uk\0"
+"agematsu.nagano.jp\0kazimierz-dolny.pl\0"
+"edu.gd\0ws\0servepics.com\0"
+"edu.ge\0"
+"mil.do\0"
+"edu.gh\0"
+"edu.gi\0"
+"tysfjord.no\0"
+"mil.ec\0kawaminami.miyazaki.jp\0"
+"edu.gl\0"
+"edu.gn\0ca.eu.org\0"
+"ac.ci\0mil.eg\0"
+"edu.gp\0"
+"ngo.ng\0"
+"edu.gr\0"
+"trust.museum\0"
+"ac.cn\0edu.gt\0"
+"edu.gu\0"
+"ye\0virtueeldomein.nl\0"
+"ac.cr\0essex.museum\0bykle.no\0"
+"edu.gy\0lifestyle\0"
+"edu.hk\0"
+"gunma.jp\0"
+"nakadomari.aomori.jp\0sagae.yamagata.jp\0ck.ua\0"
+"edu.hn\0monza-e-della-brianza.it\0gbiz\0"
+"ac.cy\0mel\xc3\xb8y.no\0porsanger.no\0from-az.net\0"
+"mil.fj\0selfip.com\0"
+"edu.ht\0"
"yt\0"
-"co.zw\0"
-"*.nodebalancer.linode.com\0"
-"lancashire.museum\0kpn\0meme\0"
-"asn.lv\0"
-"agrigento.it\0k12.or.us\0hostyhosting.io\0"
-"bialystok.pl\0zm\0"
-"mulhouse.museum\0"
-"stateofdelaware.museum\0watchandclock.museum\0"
-"skaun.no\0"
-"alesund.no\0"
-"figueres.museum\0gs.sf.no\0bridgestone\0"
-"aetna\0promo\0"
-"sn.cn\0zw\0"
-"hinode.tokyo.jp\0clinic\0"
-"komatsushima.tokushima.jp\0"
-"audnedaln.no\0"
-"casino.hu\0nes.akershus.no\0krd\0lat\0"
-"gop.pk\0"
-"law\0"
-"utazas.hu\0"
-"hachinohe.aomori.jp\0namdalseid.no\0"
-"menu\0"
-"global.ssl.fastly.net\0"
-"kaneyama.yamagata.jp\0"
-"miasa.nagano.jp\0"
-"ookuwa.nagano.jp\0"
-"\xd9\x85\xd8\xb5\xd8\xb1\0"
-"ichikawa.chiba.jp\0"
-"nl.ca\0"
-"homeunix.com\0"
-"anan.nagano.jp\0"
-"bt.it\0wuoz.gov.pl\0ismaili\0nl.ci\0"
-"ravenna.it\0"
-"plesk.page\0"
-"satx.museum\0gub.uy\0"
-"wa.au\0"
-"nasushiobara.tochigi.jp\0vadso.no\0lds\0"
-"zapto.xyz\0"
-"semboku.akita.jp\0tsuruga.fukui.jp\0loab\xc3\xa1t.no\0"
-"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0uto.kumamoto.jp\0"
-"withgoogle.com\0"
-"l.se\0"
-"cust.dev.thingdust.io\0"
-"sayama.saitama.jp\0"
-"sunagawa.hokkaido.jp\0k12.sc.us\0\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0"
-"osteroy.no\0cloudns.us\0"
-"bato.tochigi.jp\0"
-"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0from-sc.com\0"
-"northwesternmutual\0"
-"walter\0"
-"nogi.tochigi.jp\0american.museum\0"
-"gr.eu.org\0"
-"gosen.niigata.jp\0"
-"minami.kyoto.jp\0krakow.pl\0"
-"ba.leg.br\0"
-"shimabara.nagasaki.jp\0"
-"aarborte.no\0walbrzych.pl\0"
-"shiroi.chiba.jp\0kawakita.ishikawa.jp\0hitra.no\0"
-"ichikawamisato.yamanashi.jp\0customer.mythic-beasts.com\0rhcloud.com\0"
-"obama.nagasaki.jp\0"
-"se.leg.br\0"
-"homeip.net\0"
-"surnadal.no\0trana.no\0"
-"otaki.nagano.jp\0iserv.dev\0"
-"dyndns.info\0"
-"government.aero\0"
-"parachuting.aero\0"
-"shingo.aomori.jp\0abiko.chiba.jp\0karumai.iwate.jp\0futuremailing.at\0"
-"virtualuser.de\0"
-"mer\xc3\xa5ker.no\0"
-"nikaho.akita.jp\0"
-"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0from-id.com\0"
-"genova.it\0stj\xc3\xb8rdalshalsen.no\0"
-"aircraft.aero\0arendal.no\0*.cryptonomic.net\0"
-"ichinohe.iwate.jp\0"
-"ribeirao.br\0tenkawa.nara.jp\0"
-"yamada.toyama.jp\0hellas.museum\0"
-"vaga.no\0"
-"lugansk.ua\0"
-"fg.it\0"
-"bindal.no\0"
-"smart\0termez.su\0"
-"skanland.no\0"
-"legal\0siteleaf.net\0"
-"isehara.kanagawa.jp\0is-saved.org\0"
-"cloud-de.unispace.io\0"
-"a.bg\0cc.mt.us\0cc.nd.us\0"
-"kumamoto.jp\0"
-"yahiko.niigata.jp\0"
-"kita.osaka.jp\0"
-"bokn.no\0"
-"countryestate.museum\0"
-"k12.al.us\0"
-"padova.it\0kiwi.nz\0"
-"dev.br\0chikuhoku.nagano.jp\0waw.pl\0"
-"friuli-veneziagiulia.it\0notaires.km\0"
-"a.prod.fastly.net\0"
-"viajes\0"
-"nature.museum\0"
-"\xc3\xa5l.no\0barclaycard\0"
-"*.linodeobjects.com\0"
-"americanantiques.museum\0"
-"lahppi.no\0"
-"vet.br\0careers\0"
-"cc.vi.us\0"
-"luxe\0serveblog.net\0"
-"seika.kyoto.jp\0"
-"tsunan.niigata.jp\0tran\xc3\xb8y.no\0"
-"numata.hokkaido.jp\0"
-"llc\0"
-"is-leet.com\0"
-"bjark\xc3\xb8y.no\0dd-dns.de\0"
-"nanae.hokkaido.jp\0academy\0"
-"motorcycle.museum\0algard.no\0"
-"tydal.no\0"
-"itabashi.tokyo.jp\0llp\0"
-"control.aero\0oshima.tokyo.jp\0"
-"barcelona.museum\0przeworsk.pl\0"
-"pippu.hokkaido.jp\0"
-"audi\0"
-"ostroda.pl\0gv.vc\0"
-"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0m\xc3\xa1latvuopmi.no\0goip.de\0"
-"nakanojo.gunma.jp\0mihara.kochi.jp\0linde\0spot\0"
-"otsuchi.iwate.jp\0"
-"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0"
-"abkhazia.su\0"
-"hzc.io\0"
-"trading.aero\0"
-"!city.yokohama.jp\0"
-"andria-barletta-trani.it\0"
-"latina.it\0"
-"ainan.ehime.jp\0\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0"
-"saijo.ehime.jp\0"
-"pesaro-urbino.it\0roros.no\0"
-"hinohara.tokyo.jp\0wlocl.pl\0lib.de.us\0"
-"beer\0"
-"mortgage\0"
-"bergamo.it\0am.leg.br\0"
-"bergbau.museum\0lardal.no\0"
-"koga.fukuoka.jp\0"
-"vgs.no\0nittedal.no\0earth\0"
-"bozen-s\xc3\xbc""dtirol.it\0"
-"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0\xd2\x9b\xd0\xb0\xd0\xb7\0"
-"building.museum\0"
+"lab.ms\0us.platform.sh\0"
+"yamada.iwate.jp\0"
+"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0"
+"obihiro.hokkaido.jp\0"
+"mil.ge\0"
+"edu.in\0zm\0"
+"texas.museum\0"
+"mil.gh\0bushey.museum\0app.render.com\0"
+"edu.iq\0kusatsu.gunma.jp\0"
+"ngo.ph\0adobeaemcloud.net\0"
+"edu.is\0singles\0"
+"edu.it\0"
+"supply\0"
+"rennesoy.no\0"
+"of.no\0"
+"zw\0"
+"hachirogata.akita.jp\0nakamichi.yamanashi.jp\0"
+"mibu.tochigi.jp\0bar2.net\0"
+"furano.hokkaido.jp\0"
+"mil.gt\0"
+"games\0"
+"edu.jo\0"
+"ac.fj\0"
+"ichinomiya.aichi.jp\0rahkkeravju.no\0health\0"
+"yugawa.fukushima.jp\0tokushima.tokushima.jp\0"
+"mil.hn\0h.se\0nic.za\0"
+"edu.kg\0jefferson.museum\0"
+"name.hr\0edu.ki\0"
+"cesena-forli.it\0ferrari\0"
+"mil.id\0ooshika.nagano.jp\0per.sg\0nflfan.org\0"
+"edu.km\0paroch.k12.ma.us\0bnpparibas\0"
+"\xe5\xa4\xa7\xe9\x98\xaa.jp\0edu.kn\0"
+"podhale.pl\0finance\0marine.ru\0"
+"shingu.wakayama.jp\0edu.kp\0"
+"edu.la\0winb.gov.pl\0sp.leg.br\0"
+"edu.lb\0eu-4.evennode.com\0"
+"edu.lc\0ens.tn\0"
+"ac.gn\0\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0docs\0"
+"mil.in\0servegame.com\0"
+"edu.kw\0"
+"taiki.hokkaido.jp\0"
+"mil.iq\0edu.ky\0"
+"tomakomai.hokkaido.jp\0edu.kz\0gleeze.com\0"
+"name.et\0edu.lk\0"
+"sodegaura.chiba.jp\0"
+"name.fj\0karumai.iwate.jp\0"
+"bmd.br\0edu.lr\0dst.mi.us\0isteingeek.de\0"
+"edu.ls\0\xe5\x95\x86\xe6\xa0\x87\0"
+"edu.me\0"
+"\xe5\xb1\xb1\xe5\xbd\xa2.jp\0inami.wakayama.jp\0edu.lv\0"
+"mil.jo\0edu.mg\0lima-city.rocks\0"
+"munakata.fukuoka.jp\0\xd1\x81\xd0\xbe\xd1\x87\xd0\xb8.\xd1\x80\xd1\x83\xd1\x81\0"
+"edu.ly\0kvinesdal.no\0"
+"ac.id\0"
+"edu.mk\0"
+"edu.ml\0"
+"taketa.oita.jp\0nikko.tochigi.jp\0llc\0"
+"rg.it\0edu.mn\0lib.nj.us\0cisco\0cd.eu.org\0"
+"ibaraki.ibaraki.jp\0mil.kg\0edu.mo\0"
+"lib.ia.us\0google\0"
+"ac.il\0markets\0"
+"ac.im\0ukiha.fukuoka.jp\0gamo.shiga.jp\0edu.ms\0"
+"ac.in\0bulsan-s\xc3\xbc""dtirol.it\0im.it\0edu.mt\0"
+"mil.km\0page\0"
+"edu.mv\0"
+"edu.mw\0edu.ng\0lib.ak.us\0read\0dattolocal.net\0"
+"ac.ir\0edu.mx\0chernihiv.ua\0ddnsking.com\0"
+"edu.my\0edu.ni\0"
+"mil.kr\0edu.mz\0llp\0"
"arboretum.museum\0"
-"user.srcf.net\0"
-"kikonai.hokkaido.jp\0"
-"lol\0"
-"hikawa.shimane.jp\0"
-"user.party.eus\0"
-"nl.no\0"
-"kitagawa.kochi.jp\0go.dyndns.org\0"
-"homelink.one\0"
-"creditunion\0"
-"s3-us-east-2.amazonaws.com\0"
-"blogsyte.com\0"
-"soundandvision.museum\0"
-"lpl\0"
-"reisen\0"
-"shichikashuku.miyagi.jp\0chungbuk.kr\0"
-"\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0"
-"tondabayashi.osaka.jp\0"
-"cloudns.pw\0us.eu.org\0"
-"bjarkoy.no\0\xe6\x89\x8b\xe6\x9c\xba\0*.gateway.dev\0"
-"it1-eur.jenv-arubabiz.cloud\0"
-"judygarland.museum\0larvik.no\0"
-"sunndal.no\0"
-"forsand.no\0man\0villas\0"
-"unnan.shimane.jp\0map\0"
-"hyatt\0mba\0"
-"heroy.nordland.no\0endofinternet.org\0"
-"yamazoe.nara.jp\0"
-"knightpoint.systems\0"
-"synology-ds.de\0"
-"bplaced.net\0"
-"satosho.okayama.jp\0"
-"kujukuri.chiba.jp\0"
-"oketo.hokkaido.jp\0"
-"j\xc3\xb8rpeland.no\0"
-"biev\xc3\xa1t.no\0"
-"gokase.miyazaki.jp\0chicago.museum\0doomdns.org\0"
-"herokussl.com\0"
-"pharmaciens.km\0"
-"gucci\0"
-"kakegawa.shizuoka.jp\0bmoattachments.org\0"
-"avianca\0"
-"aizubange.fukushima.jp\0*.moonscale.io\0"
-"profesional.bo\0flir\0"
-"obninsk.su\0"
-"tamayu.shimane.jp\0"
-"karpacz.pl\0ltd\0"
-"realestate\0tashkent.su\0"
-"vapor.cloud\0"
-"bomlo.no\0"
-"microlight.aero\0"
-"\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0ap.leg.br\0"
-"haram.no\0"
-"tr.it\0"
-"narashino.chiba.jp\0med\0"
-"bykle.no\0"
-"ostrowiec.pl\0"
-"kasumigaura.ibaraki.jp\0furniture.museum\0"
-"yamatotakada.nara.jp\0"
-"dyndns-at-home.com\0"
-"science.museum\0"
-"men\0"
-"epilepsy.museum\0"
-"trentinsuedtirol.it\0"
-"forl\xc3\xac-cesena.it\0"
-"tono.iwate.jp\0"
-"g\xc3\xa1\xc5\x8bgaviika.no\0sogne.no\0s3-ap-northeast-1.amazonaws.com\0"
-"game.tw\0is-a-designer.com\0"
-"kamioka.akita.jp\0mcdir.ru\0"
-"tamatsukuri.ibaraki.jp\0host\0"
-"lib.ar.us\0"
-"sejny.pl\0"
-"sc.cn\0kurgan.su\0"
-"lerdal.no\0"
-"u.bg\0cc.oh.us\0"
-"\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"nsupdate.info\0"
-"synology-diskstation.de\0"
-"diet\0us-east-2.elasticbeanstalk.com\0"
-"oxford.museum\0"
-"eu.com\0"
-"chikuzen.fukuoka.jp\0tromsa.no\0"
-"eidfjord.no\0"
-"\xe5\xae\xae\xe5\xb4\x8e.jp\0ent.platform.sh\0"
-"tysfjord.no\0ricoh\0"
-"wa.us\0"
-"phoenix.museum\0"
-"tome.miyagi.jp\0"
-"kushiro.hokkaido.jp\0"
-"paas.hosted-by-previder.com\0"
-"mil\0"
-"bi.it\0troms\xc3\xb8.no\0"
-"tr.no\0"
-"talk\0unicom\0"
-"*.webhare.dev\0"
+"kin.okinawa.jp\0"
+"app.os.stg.fedoraproject.org\0"
+"qc.ca\0name.cy\0"
+"atsuma.hokkaido.jp\0"
+"mil.kz\0historical.museum\0edu.nr\0"
+"hinohara.tokyo.jp\0"
+"ac.jp\0col.ng\0"
+"kunst.museum\0dnshome.de\0"
+"campinas.br\0uruma.okinawa.jp\0"
+"ac.ke\0"
+"h\xc3\xb8yanger.no\0"
+"trentinoa-adige.it\0edu.om\0"
+"name.eg\0kasaoka.okayama.jp\0mil.lv\0"
+"mil.mg\0"
+"ln.cn\0tochigi.jp\0"
+"contemporary.museum\0edu.pa\0"
+"nagiso.nagano.jp\0sortland.no\0eu-3.evennode.com\0"
+"hi.cn\0kutchan.hokkaido.jp\0"
+"theworkpc.com\0"
+"edu.pe\0weatherchannel\0"
+"berlevag.no\0edu.pf\0"
+"rollag.no\0banamex\0"
+"tenei.fukushima.jp\0ac.kr\0edu.ph\0um.gov.pl\0cloudcontrolapp.com\0"
+"cnpy.gdn\0"
+"kure.hiroshima.jp\0edu.pk\0"
+"edu.pl\0"
+"broker.aero\0"
+"yokawa.hyogo.jp\0mil.mv\0edu.pn\0c66.me\0"
+"mil.ng\0"
+"name.az\0ac.lk\0mil.my\0mil.ni\0edu.qa\0"
+"mil.mz\0edu.pr\0anquan\0republican\0"
+"edu.ps\0"
+"edu.pt\0"
+"ama.aichi.jp\0lol\0"
+"ac.ma\0mil.no\0"
+"rovigo.it\0ac.ls\0edu.py\0"
+"ac.me\0jfk.museum\0scotland.museum\0\xc3\xb8rskog.no\0nv.us\0"
+"itami.hyogo.jp\0"
+"fl.us\0"
+"mil.nz\0"
+"kiwi\0"
+"custom.metacentrum.cz\0"
+"lpl\0dnsalias.com\0github.io\0fi.cloudplatform.fi\0"
+"qld.au\0"
+"bahcavuotna.no\0cc.vi.us\0"
+"tas.gov.au\0karelia.su\0"
+"ac.mu\0"
+"mr.no\0"
+"ac.mw\0mil.pe\0"
+"cc.mo.us\0"
+"ac.ni\0"
+"hidaka.saitama.jp\0ac.mz\0mil.ph\0"
+"edu.sa\0"
+"edu.sb\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0"
+"edu.rs\0edu.sc\0"
+"q.bg\0mil.pl\0edu.sd\0"
+"edu.ru\0"
+"draydns.de\0"
+"edu.sg\0"
+"padova.it\0man\0geekgalaxy.com\0"
+"imakane.hokkaido.jp\0mil.qa\0feedback\0"
+"map\0"
+"miyota.nagano.jp\0ngo.za\0mba\0"
+"edu.sl\0"
+"edu.sn\0"
+"edu.so\0"
+"ac.nz\0"
+"kanzaki.saga.jp\0mil.py\0"
+"eu-2.evennode.com\0"
+"edu.ss\0"
+"rad\xc3\xb8y.no\0edu.st\0"
+"tokigawa.saitama.jp\0"
+"edu.sv\0"
+"ac.pa\0events\0tiaa\0"
+"us.gov.pl\0"
+"edu.sy\0"
+"edu.tj\0telebit.app\0"
+"edu.tm\0"
+"arvo.network\0"
+"edu.to\0"
+"edu.ua\0"
+"edu.tr\0jele.io\0"
+"hikawa.shimane.jp\0edu.tt\0"
+"edu.tw\0"
+"ac.pr\0cooking\0firebaseapp.com\0"
+"minnesota.museum\0paleo.museum\0"
+"lundbeck\0"
+"quicksytes.com\0"
+"mil.ru\0"
+"morena.br\0towada.aomori.jp\0l\xc3\xb8renskog.no\0ltd\0"
+"mil.rw\0"
+"mil.sh\0study\0"
+"nowruz\0"
+"computer\0"
+"edu.vc\0"
+"\xe4\xbd\x9b\xe5\xb1\xb1\0s3-website-ap-southeast-1.amazonaws.com\0"
+"edu.ve\0"
+"pordenone.it\0lib.gu.us\0"
+"kristiansund.no\0folionetwork.site\0"
+"edu.uy\0"
+"sand\xc3\xb8y.no\0airbus\0"
+"ct.it\0mil.st\0"
+"service.one\0"
+"edu.vn\0med\0"
+"dattorelay.com\0"
+"mil.sy\0"
+"mil.tj\0"
+"nakama.fukuoka.jp\0"
+"mil.tm\0edu.vu\0b.ssl.fastly.net\0"
+"oto.fukuoka.jp\0"
+"bonn.museum\0mil.to\0reit\0"
+"coastaldefence.museum\0men\0"
+"ac.rs\0"
+"oamishirasato.chiba.jp\0kvam.no\0mil.tr\0"
+"ac.se\0ac.ru\0"
+"shirakawa.fukushima.jp\0"
+"kawai.iwate.jp\0ac.rw\0"
+"mil.tw\0"
+"mil.tz\0eu-1.evennode.com\0"
+"edu.ws\0"
+"sado.niigata.jp\0"
+"\xe3\x82\xb3\xe3\x83\xa0\0"
+"nakamura.kochi.jp\0montreal.museum\0"
+"engineering\0"
+"s\xc3\xb8r-odal.no\0brussels\0"
+"elk.pl\0mil.vc\0"
+"iki.nagasaki.jp\0"
+"mil.ve\0"
+"ac.th\0"
+"ac.sz\0ac.tj\0"
+"mil.uy\0"
+"jls-sto1.elastx.net\0"
+"loabat.no\0edu.ye\0"
+"sakyo.kyoto.jp\0toyonaka.osaka.jp\0"
+"fukumitsu.toyama.jp\0hembygdsforbund.museum\0"
+"muncie.museum\0"
+"ac.ug\0"
+"mill.museum\0"
+"hayashima.okayama.jp\0"
+"ac.tz\0"
+"wa.gov.au\0ac.uk\0edu.za\0"
+"pars\0eu-west-3.elasticbeanstalk.com\0"
+"t3l3p0rt.net\0"
+"it1.eur.aruba.jenv-aruba.cloud\0"
+"joyo.kyoto.jp\0"
+"matsushima.miyagi.jp\0kainan.wakayama.jp\0"
+"praxi\0"
+"edu.zm\0xnbay.com\0"
+"lombardia.it\0konan.aichi.jp\0"
+"johana.toyama.jp\0kerrylogistics\0"
+"scientist.aero\0broadway\0dyndns-mail.com\0"
+"ac.vn\0"
+"shibuya.tokyo.jp\0mil\0"
+"fastblog.net\0"
+"cyon.link\0"
+"asmatart.museum\0"
+"fukaya.saitama.jp\0mil.ye\0"
"mit\0"
-"qc.com\0"
-"shiraoka.saitama.jp\0hobby-site.com\0"
-"other.nf\0serveexchange.com\0"
-"atlanta.museum\0"
-"a.se\0"
-"\xd0\xb1\xd0\xb5\xd0\xbb\0from-ne.com\0"
-"bozen-suedtirol.it\0asaminami.hiroshima.jp\0"
-"memorial.museum\0"
-"skydiving.aero\0alessandria.it\0sund.no\0"
-"olbiatempio.it\0birdart.museum\0"
-"morioka.iwate.jp\0"
-"ishinomaki.miyagi.jp\0"
-"hosting-cluster.nl\0"
-"lubin.pl\0"
-"americanexpress\0mlb\0"
-"press.aero\0"
-"civilization.museum\0"
-"sugito.saitama.jp\0cahcesuolo.no\0cx.ua\0"
-"lpusercontent.com\0"
-"shimada.shizuoka.jp\0"
-"bern.museum\0"
-"best\0"
+"kanie.aichi.jp\0"
+"toki.gifu.jp\0"
+"rent\0"
+"alt.za\0"
+"\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0mil.za\0"
+"ddnss.de\0"
+"nakanojo.gunma.jp\0"
+"accenture\0"
+"n\xc3\xa5\xc3\xa5mesjevuemie.no\0"
+"theater\0readmyblog.org\0"
+"*.uberspace.de\0"
+"etajima.hiroshima.jp\0kamaishi.iwate.jp\0familyds.com\0"
+"name.vn\0mil.zm\0paas.datacenter.fi\0"
+"workinggroup.aero\0s\xc3\xb8ndre-land.no\0"
+"tottori.jp\0svizzera.museum\0"
+"digital\0"
+"miyako.iwate.jp\0"
+"nakijin.okinawa.jp\0"
+"mlb\0"
+"space.museum\0"
+"maibara.shiga.jp\0"
+"mil.zw\0"
+"gs.ol.no\0"
+"artcenter.museum\0shiksha\0"
+"campania.it\0"
+"vindafjord.no\0ac.za\0"
+"12hp.de\0"
+"hasuda.saitama.jp\0osen.no\0"
"mma\0"
-"group\0mls\0"
-"trentinsudtirol.it\0"
-"langevag.no\0philips\0"
-"ujitawara.kyoto.jp\0washingtondc.museum\0"
-"s\xc3\xb8r-fron.no\0lib.nj.us\0nh-serv.co.uk\0"
-"campinagrande.br\0gulen.no\0"
-"auto\0"
-"urausu.hokkaido.jp\0loabat.no\0"
-"bbs.tr\0"
-"de.com\0"
-"elblag.pl\0amsterdam\0ocelot.mythic-beasts.com\0"
-"sc.ke\0"
-"kaminokawa.tochigi.jp\0"
-"asaka.saitama.jp\0krasnodar.su\0"
-"shimogo.fukushima.jp\0"
-"writesthisblog.com\0"
-"farmstead.museum\0"
-"pa.gov.br\0oseto.nagasaki.jp\0"
-"dev.vu\0"
-"polkowice.pl\0"
-"plaza.museum\0"
-"sc.kr\0"
-"yaita.tochigi.jp\0cc.mi.us\0"
-"seto.aichi.jp\0moe\0"
-"xy.ax\0"
-"soc.dz\0oguni.yamagata.jp\0"
-"b\xc3\xa6rum.no\0kddi\0moi\0loginline.site\0"
-"joyo.kyoto.jp\0"
-"steam.museum\0app.render.com\0"
-"katsuyama.fukui.jp\0mom\0"
-"sue.fukuoka.jp\0british.museum\0"
-"embroidery.museum\0creditcard\0"
-"taira.toyama.jp\0sc.ls\0"
-"trust\0"
-"gs.bu.no\0mov\0"
-"na.it\0"
-"lib.il.us\0"
-"myforum.community\0"
-"pomorze.pl\0"
-"pb.gov.br\0"
-"pgfog.com\0"
-"kvits\xc3\xb8y.no\0"
-"jelenia-gora.pl\0tourism.tn\0nab\0"
-"\xe8\xb0\xb7\xe6\xad\x8c\0"
-"*.nagoya.jp\0fujisawa.kanagawa.jp\0fukuchiyama.kyoto.jp\0sorfold.no\0alipay\0"
-"cistron.nl\0"
-"cyou\0"
-"acct.pro\0freetls.fastly.net\0"
-"net.ac\0trogstad.no\0"
-"net.ae\0nba\0"
-"net.af\0giving\0taipei\0"
-"net.ag\0"
-"tsk.tr\0*.platformsh.site\0"
-"net.ai\0channel\0""2ix.at\0"
-"net.al\0"
-"net.am\0lier.no\0varggat.no\0firewall-gateway.net\0"
-"shiroishi.saga.jp\0alwaysdata.net\0"
-"net.ba\0"
-"net.ar\0net.bb\0"
-"za.com\0webhosting.be\0"
-"net.au\0naturbruksgymn.se\0"
-"is-gone.com\0"
-"berlin.museum\0jewelry\0"
-"net.bh\0k12.pa.us\0msd\0"
-"net.az\0from-in.com\0"
-"net.bm\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0""2ix.ch\0"
-"net.bn\0mutual\0"
-"net.bo\0"
-"tara.saga.jp\0"
-"net.br\0pantheonsite.io\0"
-"net.bs\0farmequipment.museum\0"
-"net.bt\0enna.it\0kaita.hiroshima.jp\0"
-"toyohashi.aichi.jp\0"
-"net.ci\0grozny.su\0"
-"net.bz\0""2ix.de\0"
-"indianmarket.museum\0kuokgroup\0"
-"bsb.br\0net.cm\0"
-"net.cn\0"
-"net.co\0solutions\0*.otap.co\0dynalias.com\0"
-"dish\0"
-"mtn\0"
-"kitakami.iwate.jp\0enterprisecloud.nu\0"
-"riobranco.br\0net.cu\0"
-"mtr\0"
-"net.cw\0nec\0"
-"net.cy\0"
-"troandin.no\0uk.net\0"
-"pt.it\0hostedpi.com\0"
-"net.dm\0rackmaze.com\0"
-"net.do\0njs.jelastic.vps-host.net\0"
-"kushima.miyazaki.jp\0ntdll.top\0"
-"taxi\0"
-"net.ec\0"
-"idf.il\0hurum.no\0"
-"net.eg\0"
-"notaires.fr\0net\0"
-"emergency.aero\0nu.ca\0net.dz\0iglesias-carbonia.it\0kurume.fukuoka.jp\0"
-"podhale.pl\0new\0"
-"trentin-sudtirol.it\0n\xc3\xa6r\xc3\xb8y.no\0"
-"omachi.nagano.jp\0soc.lk\0"
-"valle-daosta.it\0"
-"fr.eu.org\0"
+"git-repos.de\0"
+"mls\0"
+"ge.it\0uchinomi.kagawa.jp\0"
+"kani.gifu.jp\0"
+"nagato.yamaguchi.jp\0name.tj\0"
+"koto.shiga.jp\0marburg.museum\0\xc3\xb8stre-toten.no\0golffan.us\0"
+"kawaue.gifu.jp\0kamisu.ibaraki.jp\0ac.zm\0"
+"ringsaker.no\0"
+"we.bs\0"
+"dyndns.tv\0"
+"shinkamigoto.nagasaki.jp\0name.tr\0"
+"name.tt\0"
+"ac.zw\0"
+"\xc4\x8d\xc3\xa1hcesuolo.no\0boats\0"
+"tur.ar\0mizusawa.iwate.jp\0"
+"manchester.museum\0dyndns-at-work.com\0"
+"12hp.at\0"
+"kitanakagusuku.okinawa.jp\0"
+"cust.retrosnub.co.uk\0"
+"ogaki.gifu.jp\0"
+"tennis\0here-for-more.info\0"
+"mer\xc3\xa5ker.no\0moe\0"
+"act.edu.au\0\xe9\x9d\x99\xe5\xb2\xa1.jp\0fuso.aichi.jp\0"
+"psp.gov.pl\0"
+"moi\0"
+"tur.br\0"
+"lucca.it\0blog\0"
+"sic.it\0"
+"kr\xc3\xa5""anghke.no\0kep.tr\0mom\0rest\0"
+"shichikashuku.miyagi.jp\0"
+"gotdns.com\0"
+"vads\xc3\xb8.no\0""12hp.ch\0"
+"asti.it\0"
+"feste-ip.net\0"
+"tx.us\0"
+"mov\0"
+"muni.il\0ohda.shimane.jp\0mazowsze.pl\0"
+"toho.fukuoka.jp\0dyndns.ws\0"
+"shimada.shizuoka.jp\0funahashi.toyama.jp\0"
+"society.museum\0hi.us\0"
+"rifu.miyagi.jp\0"
+"ct.us\0"
+"nab\0"
+"takamori.nagano.jp\0"
+"cc.wv.us\0"
+"st.no\0"
+"shimane.jp\0citic\0"
+"sakurai.nara.jp\0"
+"reklam.hu\0\xe6\x84\x9b\xe7\x9f\xa5.jp\0aurland.no\0"
+"trentino.it\0mobi\0"
+"iijima.nagano.jp\0direct.quickconnect.to\0"
+"name.qa\0"
+"name.pr\0"
+"flora.no\0"
+"nba\0s3-website.ap-northeast-2.amazonaws.com\0"
+"fortworth.museum\0\xe6\xb8\xb8\xe6\x88\x8f\0"
+"matsubushi.saitama.jp\0"
+"sld.do\0"
+"insure\0s3-ap-southeast-1.amazonaws.com\0"
+"name.na\0"
+"yachiyo.ibaraki.jp\0tips\0my-vigor.de\0"
+"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"moareke.no\0bloger.id\0"
+"office-on-the.net\0demo.jelastic.com\0"
+"name.mv\0"
+"name.ng\0moda\0msd\0"
+"name.my\0"
+"hirosaki.aomori.jp\0fr\xc3\xb8ya.no\0"
+"cranbrook.museum\0"
+"gyokuto.kumamoto.jp\0"
+"eun.eg\0"
+"ch.eu.org\0"
+"barletta-trani-andria.it\0"
+"jogasz.hu\0tamatsukuri.ibaraki.jp\0ny-2.paas.massivegrid.net\0"
+"lib.wi.us\0"
+"s3.dualstack.ap-northeast-2.amazonaws.com\0"
+"mattel\0mtn\0"
+"lib.ms.us\0lib.nc.us\0"
+"mtr\0*.svc.firenet.ch\0"
+"nec\0"
+"r\xc3\xb8mskog.no\0"
+"bearalvahki.no\0"
+"ogata.akita.jp\0"
+"blue\0"
+"al.it\0marshalls\0"
+"tsukiyono.gunma.jp\0from-fl.com\0"
+"furubira.hokkaido.jp\0"
+"synology-ds.de\0"
+"nagasaki.jp\0"
+"net\0"
+"humanities.museum\0"
+"sakawa.kochi.jp\0new\0"
+"name.mk\0"
+"americana.museum\0gda.pl\0"
"nfl\0"
-"honai.ehime.jp\0vf.no\0"
-"net.et\0"
-"otsuki.kochi.jp\0"
-"grozny.ru\0"
-"7.bg\0net.fj\0"
-"computer.museum\0codespot.com\0"
-"iglesiascarbonia.it\0"
-"net.fm\0saga.saga.jp\0"
-"wpdevcloud.com\0"
+"stavanger.no\0caseih\0"
+"koriyama.fukushima.jp\0"
+"cymru\0"
+"tomioka.gunma.jp\0sykkylven.no\0"
+"snaase.no\0"
+"uki.kumamoto.jp\0storfjord.no\0"
+"redumbrella\0tempurl.host\0"
+"\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0mycloud.by\0"
+"abbvie\0"
+"e164.arpa\0"
+"name.jo\0miyako.fukuoka.jp\0miyazaki.miyazaki.jp\0taira.toyama.jp\0ventures\0*.cns.joyent.com\0"
+"iiyama.nagano.jp\0"
+"fukui.jp\0"
"ngo\0"
-"u.se\0"
-"net.ge\0gobo.wakayama.jp\0karacol.su\0"
-"higashimatsushima.miyagi.jp\0"
-"net.gg\0"
-"carraramassa.it\0space.museum\0"
-"production.aero\0veterinaire.km\0"
-"net.gl\0sc.ug\0"
-"net.gn\0kr.it\0"
-"sc.tz\0nhk\0"
-"net.gp\0"
-"net.gr\0shirako.chiba.jp\0"
-"net.gt\0"
-"net.gu\0"
-"podzone.net\0"
-"\xe6\x96\xb0\xe6\xbd\x9f.jp\0"
-"sc.us\0"
-"net.gy\0"
-"coffee\0"
-"net.hk\0guovdageaidnu.no\0"
-"servequake.com\0"
-"net.hn\0kawaminami.miyazaki.jp\0"
-"luxembourg.museum\0madrid.museum\0"
-"california.museum\0k\xc3\xa5""fjord.no\0"
-"jcloud.kz\0"
-"net.ht\0net.id\0"
-"musica.ar\0"
-"nonoichi.ishikawa.jp\0"
-"restaurant\0"
-"kamikawa.hokkaido.jp\0\xe6\x85\x88\xe5\x96\x84\0"
-"net.il\0lib.nv.us\0"
-"net.im\0"
-"net.in\0"
-"calvinklein\0s3-fips-us-gov-west-1.amazonaws.com\0"
-"net.iq\0"
-"net.ir\0yamagata.ibaraki.jp\0hammarfeasta.no\0"
-"musica.bo\0net.is\0akabira.hokkaido.jp\0gloppen.no\0"
-"in-berlin.de\0"
-"net.je\0estate.museum\0"
-"kurogi.fukuoka.jp\0bievat.no\0"
-"synology.me\0"
-"odawara.kanagawa.jp\0"
-"dnsalias.net\0"
-"kikugawa.shizuoka.jp\0gausdal.no\0"
-"ako.hyogo.jp\0hyuga.miyazaki.jp\0"
-"mine.nu\0"
-"veterinaire.fr\0net.jo\0futtsu.chiba.jp\0"
-"manchester.museum\0amli.no\0"
-"masoy.no\0dynvpn.de\0"
-"yonezawa.yamagata.jp\0"
-"hiroshima.jp\0net.kg\0"
-"j.bg\0sanjo.niigata.jp\0net.ki\0cc.nm.us\0for.men\0"
-"ukiha.fukuoka.jp\0"
-"oto.fukuoka.jp\0"
-"net.kn\0"
-"laspezia.it\0"
-"net.la\0leadpages.co\0toolforge.org\0"
-"net.lb\0"
-"net.lc\0"
-"tourism.pl\0utwente.io\0"
-"net.kw\0eu-west-3.elasticbeanstalk.com\0"
-"yamaguchi.jp\0net.ky\0"
-"net.kz\0"
-"net.lk\0malatvuopmi.no\0"
-"nu.it\0aoki.nagano.jp\0"
-"florida.museum\0"
-"ilovecollege.info\0"
-"net.ma\0"
-"net.lr\0house\0*.bzz.dapps.earth\0"
-"awaji.hyogo.jp\0net.ls\0"
-"budejju.no\0"
-"net.me\0"
-"net.lv\0kyoto\0"
-"myfritz.net\0"
-"net.ly\0"
-"goodyear\0"
-"net.mk\0from-nj.com\0"
-"net.ml\0gov.scot\0"
-"net.mo\0"
-"azurestaticapps.net\0"
-"munakata.fukuoka.jp\0"
-"pi.gov.br\0americanfamily\0s3.ca-central-1.amazonaws.com\0"
-"net.ms\0"
-"an.it\0iwakuni.yamaguchi.jp\0net.mt\0"
-"oita.oita.jp\0net.mu\0"
-"net.mv\0net.nf\0"
-"net.mw\0net.ng\0map.fastlylb.net\0"
-"friulive-giulia.it\0net.mx\0"
-"net.my\0net.ni\0szczecin.pl\0turen.tn\0domains\0"
-"net.mz\0"
-"realestate.pl\0"
-"odo.br\0"
-"fla.no\0"
-"veg\xc3\xa5rshei.no\0management\0"
-"porsangu.no\0politie\0"
-"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0"
-"newjersey.museum\0net.nr\0"
-"higashiyodogawa.osaka.jp\0""4lima.de\0"
-"country\0"
-"blogspot.com\0"
-"net.nz\0"
+"public.museum\0"
+"union.aero\0denmark.museum\0"
+"telekommunikation.museum\0"
+"wy.us\0to.leg.br\0"
+"circus.museum\0"
+"nhk\0"
+"barsy.co.uk\0"
+"salud.bo\0"
+"noticias.bo\0shingu.fukuoka.jp\0\xe6\x9c\xba\xe6\x9e\x84\0"
+"miyoshi.aichi.jp\0"
+"travelers\0"
+"amsw.nl\0"
+"ishinomaki.miyagi.jp\0"
+"swiss\0"
+"huissier-justice.fr\0"
+"kushima.miyazaki.jp\0"
+"pug.it\0"
+"amfam\0"
+"pccw\0"
+"tagajo.miyagi.jp\0"
+"onagawa.miyagi.jp\0"
+"cc.nh.us\0"
+"localhistory.museum\0"
+"mosvik.no\0yali.mythic-beasts.com\0"
+"joso.ibaraki.jp\0"
+"sanok.pl\0k12.va.us\0"
+"inazawa.aichi.jp\0circle\0"
+"z.bg\0"
+"al.no\0"
+"cloudjiffy.net\0"
+"5.bg\0forli-cesena.it\0"
+"on-web.fr\0"
+"shimizu.hokkaido.jp\0shonai.yamagata.jp\0myqnapcloud.com\0"
+"basilicata.it\0ozora.hokkaido.jp\0tokamachi.niigata.jp\0"
+"gen.mi.us\0adygeya.su\0basicserver.io\0"
+"volda.no\0reg.dk\0"
+"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0bplaced.de\0"
+"nichinan.miyazaki.jp\0gmail\0"
+"fujiyoshida.yamanashi.jp\0"
+"utwente.io\0"
+"from-wi.com\0"
+"m\xc3\xa5s\xc3\xb8y.no\0at.eu.org\0"
+"dyndns.ddnss.de\0"
+"is-an-actor.com\0\xd0\xbc\xd1\x81\xd0\xba.\xd1\x80\xd1\x83\xd1\x81\0"
+"rochester.museum\0gol.no\0lier.no\0"
+"izumi.kagoshima.jp\0nord-odal.no\0"
+"mitake.gifu.jp\0"
+"toyako.hokkaido.jp\0skedsmokorset.no\0ic.gov.pl\0"
+"small-web.org\0"
+"arendal.no\0"
+"sakado.saitama.jp\0\xc3\xa5s.no\0"
+"topology.museum\0"
+"va.it\0"
+"rishirifuji.hokkaido.jp\0"
+"s3.dualstack.ca-central-1.amazonaws.com\0"
+"aju.br\0warabi.saitama.jp\0olecko.pl\0hangout\0"
+"from-il.com\0"
+"*.nom.br\0"
+"sld.pa\0graphics\0"
+"shiiba.miyazaki.jp\0nagai.yamagata.jp\0yandex\0"
+"shimotsuma.ibaraki.jp\0"
+"samsclub\0"
+"takatsuki.shiga.jp\0"
+"adygeya.ru\0"
+"vic.au\0"
+"uzs.gov.pl\0"
+"modalen.no\0lynx.mythic-beasts.com\0"
+"calvinklein\0we.tc\0community-pro.net\0"
+"lowicz.pl\0"
+"eu.meteorapp.com\0"
+"platterp.us\0"
+"scholarships\0pimienta.org\0"
+"safety.aero\0"
+"theatre\0"
+"tm.cy\0viterbo.it\0"
+"akaiwa.okayama.jp\0travelersinsurance\0"
+"lebork.pl\0"
+"gen.in\0"
+"andria-barletta-trani.it\0run.app\0"
"now\0"
-"onyourside\0"
-"net.om\0"
-"is.it\0dnsdojo.com\0"
-"nom.ad\0friulivegiulia.it\0net.pa\0"
-"dali.museum\0nom.ae\0"
-"trentinos-tirol.it\0adygeya.su\0nom.af\0"
-"nom.ag\0shinagawa.tokyo.jp\0"
-"net.pe\0"
-"nom.ai\0"
-"higashikagawa.kagawa.jp\0"
-"net.ph\0mc.eu.org\0"
-"nom.al\0"
-"net.pk\0"
-"net.pl\0"
-"net.pn\0jele.host\0"
-"abr.it\0"
-"net.qa\0"
-"iraq.museum\0net.pr\0servegame.org\0"
-"net.ps\0bayern\0"
-"net.pt\0""4lima.at\0"
+"*.stolos.io\0"
+"mad.museum\0cloud66.zone\0"
+"fidelity\0"
+"tm.dz\0autos\0wbq.me\0"
+"ibigawa.gifu.jp\0"
+"cleverapps.io\0"
+"ena.gifu.jp\0turek.pl\0"
+"marketing\0"
+"sennan.osaka.jp\0pruszkow.pl\0edu.krd\0"
+"seg.br\0"
+"al.us\0"
+"is-very-nice.org\0dynvpn.de\0"
+"va.no\0"
+"asaminami.hiroshima.jp\0"
+"miho.ibaraki.jp\0bellevue.museum\0"
"nra\0"
-"s3.dualstack.ca-central-1.amazonaws.com\0"
-"sayo.hyogo.jp\0"
-"tsuga.tochigi.jp\0net.py\0"
-"shimodate.ibaraki.jp\0otari.nagano.jp\0"
-"futbol\0obi\0"
-"olayangroup\0"
-"tingvoll.no\0from-me.org\0"
-"kimobetsu.hokkaido.jp\0"
-"asmatart.museum\0"
-"bifuka.hokkaido.jp\0"
-"jab.br\0nom.bz\0"
-"lt.eu.org\0""4lima.ch\0"
-"nom.cl\0"
-"wazuka.kyoto.jp\0"
-"kr.ua\0nrw\0"
-"nom.co\0kanan.osaka.jp\0"
-"valleedaoste.it\0\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0"
-"baidu\0"
-"\xe4\xb8\xaa\xe4\xba\xba.hk\0net.sa\0nokia\0"
-"agro.bo\0net.sb\0"
-"net.sc\0adygeya.ru\0mangyshlak.su\0"
-"net.sd\0"
-"net.ru\0"
-"koshigaya.saitama.jp\0"
-"net.rw\0net.sg\0*.dapps.earth\0"
-"net.sh\0"
-"snoasa.no\0"
-"net.sl\0"
-"nanbu.tottori.jp\0"
-"omitama.ibaraki.jp\0"
-"net.so\0"
-"net.ss\0"
-"net.st\0hitachi\0"
-"mycd.eu\0"
-"historisches.museum\0gjovik.no\0ketrzyn.pl\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0"
-"net.th\0ntt\0"
-"net.sy\0"
-"boavista.br\0net.tj\0"
-"dazaifu.fukuoka.jp\0"
-"gorge.museum\0fhapp.xyz\0"
-"val-daosta.it\0net.tm\0"
-"net.tn\0"
-"net.to\0"
-"nom.es\0"
-"net.ua\0lib.hi.us\0"
-"net.tr\0"
-"lig.it\0net.tt\0"
-"net.tw\0"
-"lincoln\0"
-"off\0"
-"net.uk\0"
-"dyndns-home.com\0"
-"hokuryu.hokkaido.jp\0london\0"
-"nom.fr\0k12.ga.us\0draydns.de\0"
-"nom.gd\0"
-"pe.gov.br\0otsuki.yamanashi.jp\0nom.ge\0"
-"net.vc\0"
-"net.ve\0"
-"au.cloudswitches.com\0"
-"hanamaki.iwate.jp\0"
-"net.uy\0net.vi\0nom.gl\0"
-"net.uz\0"
-"kumakogen.ehime.jp\0lib.or.us\0"
-"trainer.aero\0net.vn\0"
-"tranoy.no\0fam.pk\0"
-"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0"
-"nom.gt\0"
-"report\0"
-"kusu.oita.jp\0"
-"imabari.ehime.jp\0sannan.hyogo.jp\0net.vu\0"
-"minamiise.mie.jp\0"
-"gliding.aero\0lab.ms\0"
-"u.channelsdvr.net\0"
-"nom.hn\0"
-"uk.kg\0"
-"cdn77-ssl.net\0"
-"technology.museum\0net.ws\0\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0"
-"minamiizu.shizuoka.jp\0"
-"hiranai.aomori.jp\0ollo\0"
-"nyc\0"
-"hirogawa.wakayama.jp\0eu.ax\0"
-"cc.pa.us\0nom.im\0"
-"kyotango.kyoto.jp\0"
-"gon.pk\0"
-"merckmsd\0is-a-student.com\0"
-"suldal.no\0"
-"scholarships\0s3-website-eu-west-1.amazonaws.com\0"
-"karm\xc3\xb8y.no\0"
-"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0"
-"ohda.shimane.jp\0"
-"gotdns.org\0"
-"choyo.kumamoto.jp\0"
-"pi.it\0"
-"itakura.gunma.jp\0"
-"usuki.oita.jp\0cc.az.us\0net.za\0"
-"nom.ke\0"
-"elk.pl\0airbus\0"
-"circle\0"
-"cc.wv.us\0"
-"takasago.hyogo.jp\0actor\0"
-"ac.ae\0aioi.hyogo.jp\0"
-"oarai.ibaraki.jp\0nom.km\0"
-"staging.onred.one\0"
-"net.zm\0"
-"doshi.yamanashi.jp\0"
-"ascoli-piceno.it\0yahoo\0co.events\0"
-"pmn.it\0toei.aichi.jp\0minnesota.museum\0ryd.wafaicloud.com\0"
+"saltdal.no\0click\0"
+"tm.fr\0cc.md.us\0"
+"\xd0\xbc\xd0\xb8\xd1\x80.\xd1\x80\xd1\x83\xd1\x81\0"
+"guovdageaidnu.no\0"
+"pro.az\0obi\0"
+"f.bg\0"
+"art.museum\0k12.pr.us\0from-me.org\0"
+"myddns.rocks\0"
+"pro.br\0rnu.tn\0"
"trentino-aadige.it\0"
-"br.it\0cb.it\0"
-"torino.museum\0supply\0s3.amazonaws.com\0nom.li\0"
-"ac.at\0trentinoalto-adige.it\0jele.club\0"
-"ac.be\0gs.mr.no\0"
-"mydatto.com\0"
-"\xc3\xa5lesund.no\0pa.gov.pl\0"
-"oy.lc\0"
-"berlevag.no\0"
-"bilbao.museum\0"
-"tele.amune.org\0"
-"nom.lv\0"
-"nom.mg\0"
-"dyndns-server.com\0"
-"ogata.akita.jp\0"
-"nom.mk\0"
-"ufcfan.org\0"
-"imageandsound.museum\0mansions.museum\0"
-"ac.ci\0"
-"kunohe.iwate.jp\0"
-"nom.nc\0lipsy\0"
-"ac.cn\0"
-"trentino-altoadige.it\0kitakata.miyazaki.jp\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0"
-"ac.cr\0agency\0"
-"nom.ni\0isa.us\0"
-"nara.jp\0for.mom\0"
-"cc.sd.us\0one\0"
-"tomiya.miyagi.jp\0ong\0"
-"ac.cy\0"
-"vagan.no\0"
-"onl\0yolasite.com\0"
-"izumi.osaka.jp\0k12.fl.us\0eating-organic.net\0"
-"handa.aichi.jp\0nom.nu\0"
-"ce.leg.br\0"
-"taito.tokyo.jp\0"
-"diadem.cloud\0"
-"union.aero\0"
-"star\0"
-"nishi.osaka.jp\0koge.tottori.jp\0"
-"friuli-v-giulia.it\0nom.pa\0"
-"kg.kr\0lib.ms.us\0lib.nc.us\0"
-"lom.it\0nom.pe\0"
-"ooo\0"
-"fortworth.museum\0"
-"pisa.it\0frontdoor\0"
-"tamakawa.fukushima.jp\0snaase.no\0nom.pl\0"
-"iron.museum\0"
-"shinonsen.hyogo.jp\0lv.ua\0"
-"ac.fj\0tsurugashima.saitama.jp\0"
-"stor-elvdal.no\0nom.qa\0"
-"group.aero\0"
-"koeln.museum\0"
-"v-info.info\0"
-"pr.gov.br\0"
-"gentapps.com\0"
-"journal.aero\0fe.it\0gifu.gifu.jp\0nom.pw\0"
-"rindal.no\0"
-"sells-for-less.com\0"
-"tanagura.fukushima.jp\0mk.eu.org\0"
-"nichinan.tottori.jp\0"
-"yoshioka.gunma.jp\0groks-the.info\0cust.prod.thingdust.io\0"
-"rovigo.it\0hoteles\0"
-"nyan.to\0"
-"tokashiki.okinawa.jp\0"
-"chikujo.fukuoka.jp\0cooking\0"
-"ac.gn\0"
-"botanicalgarden.museum\0nom.re\0"
-"nrw.museum\0"
-"brindisi.it\0mini\0"
-"det.br\0"
-"ogi.saga.jp\0bjerkreim.no\0"
-"org\0showtime\0"
-"nom.ro\0"
-"pay\0"
-"nom.rs\0"
-"imperia.it\0mint\0"
-"applinzi.com\0"
-"himi.toyama.jp\0corporation.museum\0nom.si\0"
-"ac.id\0"
-"columbus.museum\0"
-"arq.br\0\xe9\xab\x98\xe7\x9f\xa5.jp\0"
-"fussa.tokyo.jp\0"
-"pilots.museum\0"
-"localhistory.museum\0nord-odal.no\0"
-"ac.il\0"
-"ac.im\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0"
-"ac.in\0nom.st\0"
-"cipriani\0"
-"ac.ir\0\xe6\x94\xbf\xe5\xba\x9c\0"
-"isla.pr\0"
-"pharmacy\0nom.tj\0gdynia.pl\0"
-"inami.wakayama.jp\0"
-"iruma.saitama.jp\0ohtawara.tochigi.jp\0nom.tm\0"
-"canada.museum\0"
-"lom.no\0qpon\0"
-"deals\0hsbc\0icbc\0"
-"ac.jp\0dsmynas.com\0"
-"nom.ug\0"
-"himeshima.oita.jp\0fnwk.site\0"
-"ac.ke\0ott\0lu.eu.org\0me.eu.org\0"
-"podzone.org\0"
-"shimosuwa.nagano.jp\0"
-"uenohara.yamanashi.jp\0dyr\xc3\xb8y.no\0"
-"svn-repos.de\0"
-"nom.vc\0"
-"shishikui.tokushima.jp\0"
-"katsuragi.nara.jp\0*.hosting.myjino.ru\0"
-"celtic.museum\0nom.vg\0"
-"ac.kr\0"
-"nom.uy\0"
-"pet\0\xe3\x82\xb3\xe3\x83\xa0\0"
-"mediocampidano.it\0"
-"asahi.mie.jp\0"
-"tas.edu.au\0saogonca.br\0office\0"
-"ovh\0*.sensiosite.cloud\0"
-"sakuragawa.ibaraki.jp\0ap-northeast-3.elasticbeanstalk.com\0"
-"ac.lk\0cloud66.ws\0"
-"lombardia.it\0"
-"bielawa.pl\0"
-"ac.ma\0fr\xc3\xa6na.no\0"
-"takata.fukuoka.jp\0ac.ls\0"
-"ac.me\0lv.eu.org\0"
-"eastcoast.museum\0"
-"showa.gunma.jp\0"
-"fantasyleague.cc\0"
-"sayama.osaka.jp\0"
-"fauske.no\0"
-"build\0"
-"yamanashi.jp\0"
-"piacenza.it\0"
-"show.aero\0fet.no\0"
-"myds.me\0"
-"bir.ru\0"
-"ac.mu\0phd\0"
-"ac.mw\0"
-"ac.ni\0"
-"ac.mz\0"
-"on.ca\0"
-"jus.br\0bruxelles.museum\0es.eu.org\0"
-"guardian\0"
-"is-very-nice.org\0"
-"clothing\0"
-"food\0"
-"londrina.br\0"
-"pid\0vision\0"
-"gs.of.no\0"
-"operaunite.com\0"
-"hadano.kanagawa.jp\0akagi.shimane.jp\0"
-"ac.nz\0"
-"cc.ks.us\0nom.za\0"
-"kuji.iwate.jp\0agro.pl\0"
-"\xe9\x95\xb7\xe5\xb4\x8e.jp\0slask.pl\0"
-"pin\0"
-"cbg.ru\0"
-"vallee-d-aoste.it\0kainan.tokushima.jp\0sibenik.museum\0ac.pa\0"
-"inder\xc3\xb8y.no\0swiftcover\0"
-"chernovtsy.ua\0"
-"altoadige.it\0r\xc3\xa5""de.no\0"
-"\xc3\xa5rdal.no\0"
-"intelligence.museum\0"
-"tree.museum\0b\xc3\xa1jddar.no\0"
-"ac.pr\0"
-"\xc3\xa5lg\xc3\xa5rd.no\0"
-"\xe9\xa3\x9f\xe5\x93\x81\0"
-"shoes\0"
-"higashisumiyoshi.osaka.jp\0insure\0"
+"matsuzaki.shizuoka.jp\0elvendrell.museum\0ostre-toten.no\0"
+"nrw\0"
+"fuossko.no\0"
+"weather\0"
+"hol.no\0"
+"moto\0"
+"32-b.it\0"
+"muosat.no\0ae.org\0""2038.io\0"
+"lexus\0"
+"pro.cy\0tm.hu\0trapani.it\0blogspot.com\0"
+"hirata.fukushima.jp\0"
+"center.museum\0lur\xc3\xb8y.no\0gen.ng\0"
+"christiansburg.museum\0"
+"minamiawaji.hyogo.jp\0"
+"pro.ec\0kihoku.ehime.jp\0"
+"ntt\0"
+"kitagata.gifu.jp\0"
+"chase\0"
+"vibo-valentia.it\0"
+"milan.it\0fujieda.shizuoka.jp\0sport\0"
+"equipment\0"
+"lc.it\0"
+"mat.br\0gen.nz\0kaufen\0"
+"nt.au\0neyagawa.osaka.jp\0"
+"ci.it\0kaizuka.osaka.jp\0"
+"off\0mangyshlak.su\0"
+"expert\0"
+"tokai.aichi.jp\0"
+"deporte.bo\0pro.fj\0"
+"nt.ca\0*.advisor.ws\0be.ax\0"
+"tm.km\0"
+"es.gov.br\0pvt.ge\0giving\0"
+"heguri.nara.jp\0"
+"cloudycluster.net\0"
+"berlev\xc3\xa5g.no\0"
+"sande.more-og-romsdal.no\0"
+"bc.platform.sh\0"
+"fj.cn\0county.museum\0"
+"oseto.nagasaki.jp\0preservation.museum\0"
+"skaun.no\0"
+"gonohe.aomori.jp\0nakatane.kagoshima.jp\0"
+"hatoyama.saitama.jp\0tm.mc\0ownprovider.com\0"
+"tm.mg\0"
+"kharkiv.ua\0zhytomyr.ua\0"
+"ip6.arpa\0"
+"\xe5\x8d\x83\xe8\x91\x89.jp\0"
+"vald-aosta.it\0national.museum\0barum.no\0"
+"va.us\0"
+"pro.ht\0nyc\0"
+"nissan\0"
+"nishihara.okinawa.jp\0"
+"aosta.it\0grandrapids.museum\0"
+"karasjok.no\0"
+"sener\0"
+"oji.nara.jp\0"
+"matsuno.ehime.jp\0l\xc3\xb8ten.no\0"
+"nissay\0"
+"mihara.kochi.jp\0tm.no\0"
+"ismaili\0"
+"frogn.no\0fnwk.site\0dyn.ddnss.de\0"
+"virginia.museum\0taipei\0"
+"far.br\0"
+"fund\0"
+"okinawa.okinawa.jp\0skjak.no\0"
+"rome.it\0"
+"sdn.gov.pl\0"
+"z.se\0"
+"notogawa.shiga.jp\0gen.tr\0"
+"joetsu.niigata.jp\0"
+"stj\xc3\xb8rdalshalsen.no\0\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0"
+"tcm.museum\0"
+"seihi.nagasaki.jp\0gent\0"
+"tm.pl\0"
+"trentinosuedtirol.it\0tobetsu.hokkaido.jp\0"
+"*.awdev.ca\0"
+"capetown\0"
+"atlanta.museum\0mmafan.biz\0"
+"s3-fips-us-gov-west-1.amazonaws.com\0balashov.su\0"
+"restaurant\0"
+"zagan.pl\0"
+"kamagaya.chiba.jp\0sharp\0"
+"be.gy\0"
+"definima.net\0"
+"mjondalen.no\0"
+"rocks\0"
+"reliance\0"
+"gs.sf.no\0"
+"bygland.no\0"
+"nagaoka.niigata.jp\0"
+"myforum.community\0"
+"si.it\0lib.oh.us\0"
+"pro.na\0"
+"tm.ro\0naturbruksgymn.se\0oncilla.mythic-beasts.com\0*.sys.qcx.io\0"
+"au.eu.org\0be.eu.org\0"
+"aostavalley.it\0linz.museum\0pro.mv\0one\0"
+"usa.oita.jp\0levanger.no\0"
+"ikeda.hokkaido.jp\0ong\0"
+"tm.se\0"
+"ox.rs\0"
+"przeworsk.pl\0"
+"chitose.hokkaido.jp\0onl\0"
+"tomobe.ibaraki.jp\0usuki.oita.jp\0analytics\0"
+"matsue.shimane.jp\0"
+"mp.br\0tokuyama.yamaguchi.jp\0hzc.io\0"
+"*.compute.amazonaws.com.cn\0damnserver.com\0"
+"kids.us\0"
+"maintenance.aero\0"
+"creditcard\0"
+"barsy.me\0"
"fedje.no\0"
-"dinosaur.museum\0"
-"vladimir.su\0"
-"rackmaze.net\0"
-"yamagata.jp\0ford\0"
-"ltd.cy\0venice.it\0"
-"aero.tt\0"
-"arita.saga.jp\0"
-"jl.cn\0tp.it\0"
-"drangedal.no\0"
-"sa.au\0cc.ga.us\0"
-"shizuoka.jp\0"
-"jeonbuk.kr\0"
-"biei.hokkaido.jp\0ac.rs\0myshopblocks.com\0"
-"ac.se\0ac.ru\0"
-"reggiocalabria.it\0"
-"aero.mv\0ac.rw\0"
-"kitayama.wakayama.jp\0"
-"selje.no\0"
-"ureshino.mie.jp\0dnsupdater.de\0"
-"mukawa.hokkaido.jp\0"
-"\xe7\xa7\xbb\xe5\x8a\xa8\0"
-"frankfurt.museum\0tjeldsund.no\0raid\0"
-"estate\0"
-"toyotsu.fukuoka.jp\0"
-"nanyo.yamagata.jp\0"
-"\xc3\xb8rskog.no\0pnc\0"
-"melhus.no\0lima-city.de\0"
-"mutsu.aomori.jp\0"
-"haugesund.no\0ac.th\0"
-"perspecta.cloud\0"
-"s.bg\0ac.sz\0ac.tj\0cc.nv.us\0"
-"sa.cr\0educational.museum\0"
-"nj.us\0"
-"suita.osaka.jp\0co.financial\0"
-"chikusei.ibaraki.jp\0s3-us-west-2.amazonaws.com\0vladimir.ru\0"
-"bentley\0gentlentapis.com\0"
-"team\0"
-"fujitsu\0"
-"ltd.gi\0"
-"friuli-vgiulia.it\0kr.eu.org\0"
-"ac.ug\0"
-"cloud.jelastic.open.tim.it\0"
-"ac.tz\0"
-"ac.uk\0dnsalias.org\0"
-"richardli\0"
-"ibaraki.ibaraki.jp\0iwate.iwate.jp\0flesberg.no\0"
-"sandvik\0"
-"coupon\0"
-"kotoura.tottori.jp\0"
-"sci.eg\0*.banzai.cloud\0jele.cloud\0"
-"tennis\0lima-city.at\0"
-"ltd.hk\0"
-"is-a-soxfan.org\0"
-"po.gov.pl\0"
-"1337.pictures\0"
-"tech\0"
-"ac.vn\0ocs.opusinteractive.io\0"
-"ddns.net\0cloudycluster.net\0"
-"theater\0"
-"rag-cloud.hosteur.com\0"
-"bg.it\0"
-"losangeles.museum\0"
-"dolls.museum\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0lima-city.ch\0"
-"thruhere.net\0"
-"mo.cn\0from-de.com\0"
-"shinjo.nara.jp\0askim.no\0"
-"vicenza.it\0"
-"nohost.me\0"
-"yodobashi\0"
-"trentins\xc3\xbc""d-tirol.it\0"
-"cymru.museum\0"
-"marshalls\0"
-"pony.club\0"
-"s3.dualstack.sa-east-1.amazonaws.com\0"
-"kota.aichi.jp\0"
-"pro\0"
-"zp.gov.pl\0go.leg.br\0"
-"pru\0"
-"servep2p.com\0"
-"cc.ri.us\0"
-"fuoisku.no\0"
-"psi.br\0"
-"gsj.bz\0"
-"cv.ua\0yamaxun\0noho.st\0"
-"ac.za\0"
-"bike\0*.svc.firenet.ch\0"
-"cog.mi.us\0"
-"plantation.museum\0whaling.museum\0stada\0"
-"alto-adige.it\0ltd.lk\0"
-"hirono.fukushima.jp\0\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0"
-"alsace\0"
-"axis.museum\0marker.no\0"
-"fi.eu.org\0"
-"sa.it\0ac.zm\0"
-"\xe5\x80\x8b\xe4\xba\xba.hk\0"
-"shisui.chiba.jp\0pub\0"
-"conference.aero\0"
-"steinkjer.no\0zone\0"
-"ws.na\0ac.zw\0"
-"usr.cloud.muni.cz\0"
-"tochigi.jp\0"
-"taiji.wakayama.jp\0lorenskog.no\0"
-"tajimi.gifu.jp\0s3.dualstack.us-east-2.amazonaws.com\0"
-"cal.it\0ltd.ng\0"
-"s3-ap-northeast-2.amazonaws.com\0doesntexist.com\0"
-"\xe7\x86\x8a\xe6\x9c\xac.jp\0hamaroy.no\0raisa.no\0"
+"pro.om\0"
+"nishiawakura.okayama.jp\0ooo\0"
+"ibaraki.jp\0akkeshi.hokkaido.jp\0"
+"maison\0"
+"\xe7\xa7\x8b\xe7\x94\xb0.jp\0obama.nagasaki.jp\0hagi.yamaguchi.jp\0troitsk.su\0wien.funkfeuer.at\0"
+"stargard.pl\0"
+"bostik\0"
+"g.vbrplsbx.io\0"
+"us-east-2.elasticbeanstalk.com\0"
+"gifu.gifu.jp\0ks.ua\0"
+"azerbaijan.su\0"
+"westus2.azurestaticapps.net\0"
+"hjartdal.no\0"
+"pro.pr\0"
+"\xe5\xbe\xae\xe5\x8d\x9a\0"
+"enna.it\0goodyear\0"
+"association.aero\0consulting.aero\0ks.us\0"
+"jewelry.museum\0bridgestone\0"
+"wakasa.fukui.jp\0"
+"maceio.br\0ryd.wafaicloud.com\0"
+"tado.mie.jp\0"
+"\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0motorcycles\0okinawa\0\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0"
+"bg.eu.org\0"
+"au.cloudswitches.com\0"
+"goshiki.hyogo.jp\0org\0"
+"pay\0"
+"nt.no\0from-wy.com\0"
+"rep.br\0"
+"itoman.okinawa.jp\0theater.museum\0"
+"flt.cloud.muni.cz\0"
+"seiyo.ehime.jp\0vanylven.no\0k12.vt.us\0"
+"apartments\0"
+"halloffame.museum\0is-a-linux-user.org\0"
+"okuizumo.shimane.jp\0"
+"cc.ar.us\0"
+"maizuru.kyoto.jp\0"
+"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0"
+"f.se\0"
+"eco.br\0assn.lk\0"
+"ppg.br\0izu.shizuoka.jp\0"
+"valer.hedmark.no\0"
+"with.marketing\0"
+"dubai\0"
"mito.ibaraki.jp\0"
-"google\0iamallama.com\0"
-"lib.vi.us\0direct.quickconnect.to\0"
-"dni.us\0"
-"mysecuritycamera.net\0"
-"bing\0pwc\0"
-"midori.chiba.jp\0edu.eu.org\0"
-"tattoo\0"
-"froland.no\0is-a-libertarian.com\0"
-"barsy.co.uk\0"
-"9guacu.br\0otama.fukushima.jp\0komatsu\0"
-"os.hedmark.no\0"
-"12hp.de\0"
-"balsfjord.no\0"
-"mo.it\0"
-"my-firewall.org\0"
-"loppa.no\0awsmppl.com\0"
-"clan.rip\0"
-"anthropology.museum\0"
-"memset.net\0"
-"oizumi.gunma.jp\0"
-"obuse.nagano.jp\0"
-"mol.it\0suwa.nagano.jp\0"
+"akita.jp\0"
+"tanabe.wakayama.jp\0sling\0"
+"hanggliding.aero\0nakai.kanagawa.jp\0graz.museum\0"
+"in-brb.de\0"
+"bryansk.su\0"
+"kviteseid.no\0"
+"b\xc3\xa1jddar.no\0"
+"glass.museum\0pasadena.museum\0"
+"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0jls-sto2.elastx.net\0now.sh\0"
+"shimonita.gunma.jp\0gjerstad.no\0"
+"meraker.no\0\xd1\x81\xd0\xb0\xd0\xbc\xd0\xb0\xd1\x80\xd0\xb0.\xd1\x80\xd1\x83\xd1\x81\0"
+"frosta.no\0pro.tt\0"
+"trentinos\xc3\xbc""d-tirol.it\0vestvagoy.no\0tm.za\0ott\0"
+"temp-dns.com\0"
+"\xe7\xa6\x8f\xe4\xba\x95.jp\0mysecuritycamera.net\0"
+"avocat.fr\0swidnica.pl\0"
+"ogawa.nagano.jp\0"
+"trentin-sud-tirol.it\0lib.ri.us\0is-leet.com\0from.marketing\0"
+"osaka.jp\0kilatiron.com\0"
+"tv.bb\0re.it\0realm.cz\0*.transurl.be\0"
+"soeda.fukuoka.jp\0"
+"matsudo.chiba.jp\0"
+"pet\0"
+"bofa\0"
+"skype\0"
+"ovh\0"
+"boston\0wpmudev.host\0"
+"nt.ro\0collegefan.org\0"
+"aso.kumamoto.jp\0blockbuster\0"
+"inami.toyama.jp\0"
+"yk.ca\0pro.vn\0"
+"tv.bo\0rodeo\0"
+"tv.br\0\xe9\xab\x98\xe7\x9f\xa5.jp\0ath.cx\0"
+"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0tokoname.aichi.jp\0"
+"myshopblocks.com\0"
+"nishikatsura.yamanashi.jp\0\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"is-a-player.com\0"
+"anan.nagano.jp\0"
+"agency\0"
+"odawara.kanagawa.jp\0"
+"numata.gunma.jp\0chtr.k12.ma.us\0"
+"kawakami.nagano.jp\0re.kr\0"
+"barsy.uk\0"
+"tsuru.yamanashi.jp\0dielddanuorri.no\0"
+"kujukuri.chiba.jp\0york.museum\0"
+"phd\0hr.eu.org\0"
+"hamura.tokyo.jp\0"
+"geometre-expert.fr\0from-ak.com\0"
+"friuli-venezia-giulia.it\0od.ua\0natura\0"
+"shiki.saitama.jp\0"
+"fvg.it\0pid\0"
+"s3-ap-south-1.amazonaws.com\0"
+"arteducation.museum\0foodnetwork\0"
+"sologne.museum\0sund.no\0"
+"mifune.kumamoto.jp\0sano.tochigi.jp\0"
+"kalmykia.su\0*.firenet.ch\0"
+"takahama.fukui.jp\0direct\0is-an-artist.com\0"
+"shimokitayama.nara.jp\0pin\0"
+"*.transurl.eu\0"
+"wiih.gov.pl\0"
+"american.museum\0"
+"co.technology\0"
+"toyota.yamaguchi.jp\0ferrero\0"
+"higashiizu.shizuoka.jp\0ivano-frankivsk.ua\0mypets.ws\0"
+"inashiki.ibaraki.jp\0balsfjord.no\0khakassia.su\0"
+"nagoya\0"
+"karlsoy.no\0"
"textile.museum\0"
-"seiyo.ehime.jp\0kumejima.okinawa.jp\0"
-"freemasonry.museum\0"
-"padua.it\0is-not-certified.com\0"
-"valle-aosta.it\0"
-"ens.tn\0"
-"myftp.org\0"
-"hita.oita.jp\0"
-"12hp.at\0"
-"cc.gu.us\0online.th\0"
-"labour.museum\0"
-"int.eu.org\0"
-"kasserver.com\0no-ip.info\0"
-"bharti\0"
-"suzaka.nagano.jp\0"
-"dlugoleka.pl\0lviv.ua\0"
-"s\xc3\xb8rum.no\0"
-"*.kawasaki.jp\0"
-"nichinan.miyazaki.jp\0"
-"12hp.ch\0half.host\0"
-"static.observableusercontent.com\0"
-"goiania.br\0media.hu\0gives\0"
-"tula.su\0"
-"miki.hyogo.jp\0"
-"iwade.wakayama.jp\0"
-"takamatsu.kagawa.jp\0stadt.museum\0"
-"eiheiji.fukui.jp\0"
-"yaotsu.gifu.jp\0"
-"logoip.com\0"
-"servepics.com\0"
-"industria.bo\0nes.buskerud.no\0myfirewall.org\0"
-"tromso.no\0"
-"from-pa.com\0"
-"ltd.ua\0"
-"anjo.aichi.jp\0for.one\0"
-"pr.it\0"
-"fst.br\0"
-"uruma.okinawa.jp\0lur\xc3\xb8y.no\0apartments\0"
-"noheji.aomori.jp\0discover\0media\0"
-"takatsuki.shiga.jp\0"
-"miners.museum\0kazimierz-dolny.pl\0"
-"essex.museum\0"
-"ltd.uk\0"
-"cn-north-1.eb.amazonaws.com.cn\0"
-"miyawaka.fukuoka.jp\0"
-"umb.it\0taiki.hokkaido.jp\0"
-"*.nom.br\0"
-"ns.ca\0katashina.gunma.jp\0"
-"balsan-s\xc3\xbc""dtirol.it\0per.la\0sweden.museum\0"
-"games.hu\0yashiro.hyogo.jp\0\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0"
-"inuyama.aichi.jp\0shirosato.ibaraki.jp\0"
-"fjell.no\0"
-"5.bg\0kamifurano.hokkaido.jp\0susaki.kochi.jp\0uda.nara.jp\0ch.trendhosting.cloud\0"
-"agr.br\0"
-"camera\0"
-"laakesvuemie.no\0"
-"s.se\0"
-"shimamoto.osaka.jp\0is-a-bulls-fan.com\0"
-"surf\0customer.enonic.io\0"
-"nishiaizu.fukushima.jp\0kawakami.nara.jp\0stockholm.museum\0"
-"hm.no\0"
-"marche.it\0seoul.kr\0"
-"cooperativa.bo\0hichiso.gifu.jp\0kanonji.kagawa.jp\0virginia.museum\0"
-"plants.museum\0"
-"murayama.yamagata.jp\0"
-"jpmorgan\0"
-"railway.museum\0per.nf\0mw.gov.pl\0"
-"singles\0"
+"pors\xc3\xa1\xc5\x8bgu.no\0"
+"volvo\0"
+"*.bd\0o.bg\0"
+"aa.no\0"
+"rep.kp\0"
+"matsuda.kanagawa.jp\0shiroishi.saga.jp\0"
+"sklep.pl\0"
+"bungotakada.oita.jp\0"
+"gateway.museum\0"
+"cust.testing.thingdust.io\0"
+"vote\0"
+"minakami.gunma.jp\0"
+"kitaakita.akita.jp\0name\0webhop.info\0"
+"asahi.toyama.jp\0"
+"kalmykia.ru\0"
+"omachi.saga.jp\0"
+"*.ck\0voto\0"
+"hobby-site.org\0"
+"consulting\0"
+"dnipropetrovsk.ua\0"
+"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0"
+"oya.to\0"
+"ski.no\0"
+"tv.im\0"
"alibaba\0"
-"brasil.museum\0"
-"niki.hokkaido.jp\0r.cdn77.net\0for-the.biz\0"
-"shimamaki.hokkaido.jp\0"
-"national.museum\0is-a-democrat.com\0"
-"urawa.saitama.jp\0"
-"nord-fron.no\0"
-"helsinki.museum\0"
-"te.it\0hasura-app.io\0"
-"seki.gifu.jp\0diskstation.org\0"
-"b\xc3\xb8.telemark.no\0lib.oh.us\0"
-"degree\0"
-"catanzaro.it\0durban\0"
-"kuju.oita.jp\0"
-"toba.mie.jp\0"
-"r\xc3\xa5holt.no\0media.pl\0"
-"culture.museum\0"
-"marylhurst.museum\0saltdal.no\0"
-"ms.gov.br\0"
-"nakama.fukuoka.jp\0"
-"austevoll.no\0"
-"abira.hokkaido.jp\0hayashima.okayama.jp\0filegear-au.me\0"
-"\xec\x82\xbc\xec\x84\xb1\0"
-"palermo.it\0\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0"
-"gb.net\0"
-"teva\0"
-"mining.museum\0"
-"ina.nagano.jp\0"
-"h.bg\0"
-"aju.br\0"
-"mo.us\0"
-"musashino.tokyo.jp\0"
-"kamakura.kanagawa.jp\0"
-"aizumisato.fukushima.jp\0latrobe\0"
-"v\xc3\xa5gan.no\0"
-"recife.br\0"
-"joburg\0\xd7\xa7\xd7\x95\xd7\x9d\0"
-"urn.arpa\0"
-"debian.net\0"
-"\xe9\xa6\x99\xe6\xb8\xaf\0"
-"mt.gov.br\0\xc3\xa5s.no\0"
-"nov.ru\0"
-"red\0freeddns.us\0"
-"theatre\0"
-"kamitonda.wakayama.jp\0"
-"here-for-more.info\0"
-"kawara.fukuoka.jp\0per.sg\0fastvps.site\0"
-"kawasaki.miyagi.jp\0ut.us\0"
-"lecce.it\0"
-"kamikitayama.nara.jp\0\xe5\x95\x86\xe6\xa0\x87\0"
-"onjuku.chiba.jp\0ren\0"
-"karmoy.no\0reg.dk\0"
-"tsukiyono.gunma.jp\0nov.su\0"
-"qvc\0scapp.io\0"
-"mobi.gp\0"
-"pup.gov.pl\0"
-"md.ci\0al.it\0"
-"mino.gifu.jp\0"
-"mail.pl\0crown\0"
-"holmestrand.no\0"
-"onagawa.miyagi.jp\0virtuel.museum\0"
-"bill.museum\0"
-"tosa.kochi.jp\0game\0"
-"jessheim.no\0iopsys.se\0"
-"racing\0"
-"blockbuster\0"
-"chiyoda.gunma.jp\0flickr\0"
-"tolga.no\0"
-"bus.museum\0"
-"fuso.aichi.jp\0rzgw.gov.pl\0jur.pro\0ieee\0\xe4\xbd\x9b\xe5\xb1\xb1\0"
-"setouchi.okayama.jp\0statefarm\0"
-"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0shikokuchuo.ehime.jp\0"
-"shibecha.hokkaido.jp\0"
-"kawai.nara.jp\0"
-"movie\0"
-"no.com\0"
-"nagi.okayama.jp\0curv.dev\0"
-"cloudns.asia\0"
-"hirosaki.aomori.jp\0"
-"ca-central-1.elasticbeanstalk.com\0"
-"\xe9\xa4\x90\xe5\x8e\x85\0"
-"giehtavuoatna.no\0"
-"pr.us\0"
-"leikanger.no\0visa\0"
-"ck.ua\0"
-"higashiosaka.osaka.jp\0fribourg.museum\0"
-"forgot.his.name\0"
-"sk\xc3\xa1nit.no\0"
-"s3-ap-south-1.amazonaws.com\0"
-"swidnik.pl\0"
-"ril\0"
-"trentinosud-tirol.it\0"
-"hb.cn\0rio\0"
-"tsu.mie.jp\0rip\0mytuleap.com\0*.r.appspot.com\0voorloper.cloud\0"
-"ohi.fukui.jp\0lib.mi.us\0"
-"foundation.museum\0"
-"jorpeland.no\0"
-"bar2.net\0"
-"kamitsue.oita.jp\0"
-"miyoshi.aichi.jp\0"
-"dnsup.net\0"
-"valleaosta.it\0tunes\0"
-"inashiki.ibaraki.jp\0k12.la.us\0"
-"tr\xc3\xa6na.no\0zaporizhzhe.ua\0"
-"nakagawa.nagano.jp\0al.no\0"
-"nysa.pl\0"
-"oksnes.no\0"
+"art.br\0"
+"resistance.museum\0is-a-lawyer.com\0"
+"tv.it\0pnc\0"
+"rj.leg.br\0"
+"bond\0"
+"orkdal.no\0overhalla.no\0stord.no\0"
+"tomigusuku.okinawa.jp\0"
+"hamamatsu.shizuoka.jp\0"
+"nishiwaki.hyogo.jp\0watch-and-clock.museum\0"
+"cr.it\0shinshiro.aichi.jp\0"
+"rich\0"
+"nat.tn\0servegame.org\0"
+"omiya.saitama.jp\0"
+"*.er\0"
+"bel.tr\0tv.kg\0"
"durham.museum\0"
-"jelastic.dogado.eu\0"
-"kamijima.ehime.jp\0"
-"viva\0"
-"kamisato.saitama.jp\0"
-"shitara.aichi.jp\0oishida.yamagata.jp\0"
-"joinville.br\0"
-"mel.cloudlets.com.au\0"
-"ide.kyoto.jp\0te.ua\0"
-"k12.tx.us\0"
-"vivo\0"
-"v\xc3\xa5g\xc3\xa5.no\0"
-"ebina.kanagawa.jp\0pokrovsk.su\0"
-"lt.it\0"
-"embaixada.st\0"
-"today\0"
-"caa.li\0"
-"is-a-chef.org\0"
-"nt.edu.au\0cyon.site\0spdns.org\0"
-"act.au\0shopware.store\0"
-"saku.nagano.jp\0"
-"kihoku.ehime.jp\0"
-"higashitsuno.kochi.jp\0playstation-cloud.com\0"
-"nikko.tochigi.jp\0"
-"tsurugi.ishikawa.jp\0"
-"museum\0amfam\0loginline.services\0"
-"mel\xc3\xb8y.no\0free\0"
-"bargains\0nagoya\0"
-"tokushima.tokushima.jp\0"
-"gol.no\0"
-"channelsdvr.net\0"
-"rocher\0"
-"brasilia.me\0"
-"heroy.more-og-romsdal.no\0rawa-maz.pl\0"
-"amber.museum\0"
-"gr.it\0skole.museum\0"
-"chofu.tokyo.jp\0"
-"media.museum\0"
-"cisco\0"
-"es.ax\0"
-"mypi.co\0"
-"grue.no\0"
-"evenassi.no\0"
-"gr.jp\0"
-"solar\0"
-"miharu.fukushima.jp\0dyroy.no\0"
-"tarnobrzeg.pl\0"
-"kutchan.hokkaido.jp\0elverum.no\0collegefan.org\0"
-"daito.osaka.jp\0k12.wy.us\0"
-"caserta.it\0kotohira.kagawa.jp\0university\0"
-"slg.br\0mizuho.tokyo.jp\0"
-"australia.museum\0on-the-web.tv\0"
-"orx.biz\0"
-"sarufutsu.hokkaido.jp\0open\0sap\0"
-"pg.it\0"
-"bahn.museum\0"
-"sas\0"
-"booking\0"
-"yonago.tottori.jp\0"
-"karatsu.saga.jp\0al.us\0"
-"hino.tokyo.jp\0sbi\0"
-"alt.za\0"
-"amakusa.kumamoto.jp\0"
-"vegas\0cloudaccess.net\0"
-"somna.no\0"
-"sca\0"
-"scb\0"
-"sbs\0is-a-chef.com\0"
-"zoology.museum\0mysecuritycamera.org\0"
-"trentinos\xc3\xbc""d-tirol.it\0"
-"yugawara.kanagawa.jp\0"
-"dontexist.net\0"
-"*.bd\0makurazaki.kagoshima.jp\0communications.museum\0"
-"webredirect.org\0vpndns.net\0"
-"lib.sc.us\0mymailer.com.tw\0"
-"shop.ht\0kami.miyagi.jp\0guide\0"
-"shop.hu\0krasnik.pl\0"
-"zappos\0"
-"dnipropetrovsk.ua\0"
+"collection.museum\0"
+"\xe5\xb2\x90\xe9\x98\x9c.jp\0iwate.iwate.jp\0"
+"art.do\0nationalfirearms.museum\0"
+"empresa.bo\0saobernardo.br\0gc.ca\0*.fk\0hemnes.no\0"
+"riobranco.br\0hanawa.fukushima.jp\0hurdal.no\0book\0"
+"sagamihara.kanagawa.jp\0"
+"idnblogger.com\0"
+"df.leg.br\0"
+"chikugo.fukuoka.jp\0impertrix.com\0"
+"forl\xc3\xac""cesena.it\0"
+"jx.cn\0art.dz\0"
+"uz.ua\0"
+"chikuma.nagano.jp\0"
+"aurskog-h\xc3\xb8land.no\0"
+"melhus.no\0"
+"qld.edu.au\0bronnoy.no\0"
+"williamsburg.museum\0"
+"hyundai\0"
+"from-ri.com\0"
+"boleslawiec.pl\0"
+"ggee\0"
+"tv.na\0"
+"izena.okinawa.jp\0"
+"flog.br\0okuma.fukushima.jp\0asahi.mie.jp\0primetel.cloud\0"
+"florence.it\0chiyoda.gunma.jp\0"
+"*.transurl.nl\0"
+"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0"
+"kayabe.hokkaido.jp\0memorial\0ham-radio-op.net\0customer.speedpartner.de\0diskstation.org\0"
+"duckdns.org\0"
+"pro\0s3.dualstack.ap-south-1.amazonaws.com\0uk.com\0mine.nu\0"
+"shimogo.fukushima.jp\0yasugi.shimane.jp\0"
+"uto.kumamoto.jp\0"
+"sandnessjoen.no\0"
+"pru\0"
+"herad.no\0cc.ky.us\0vapor.cloud\0"
+"kr\xc3\xb8""dsherad.no\0"
+"jpmorgan\0"
+"enf.br\0"
+"cc.co.us\0"
+"*.jm\0"
+"art.ht\0"
+"loab\xc3\xa1t.no\0"
+"shiroi.chiba.jp\0"
+"vlog.br\0americanart.museum\0"
+"yamatotakada.nara.jp\0\xc3\xb8rland.no\0"
+"hu.net\0"
+"ashiya.hyogo.jp\0*.kh\0press\0"
+"kawahara.tottori.jp\0d.gv.vc\0barsy.bg\0"
+"csx.cc\0"
+"biz.bb\0"
+"biz.at\0"
+"pub\0"
+"mol.it\0"
+"westfalen.museum\0"
+"takahagi.ibaraki.jp\0barsy.ca\0"
+"biz.az\0kashima.ibaraki.jp\0godaddy\0"
+"schokoladen.museum\0"
+"ogano.saitama.jp\0"
+"otaki.nagano.jp\0sakura\0"
+"realty\0"
+"nationwide\0"
+"sr.it\0properties\0"
+"tamaki.mie.jp\0"
+"barsy.de\0"
+"urbinopesaro.it\0navy\0certmgr.org\0"
+"it.ao\0"
+"*.mm\0"
+"hakui.ishikawa.jp\0"
+"tv.sd\0pwc\0software\0"
+"bn.it\0"
+"biz.cy\0trentin-sudtirol.it\0taito.tokyo.jp\0"
+"\xe4\xb8\xad\xe4\xbf\xa1\0"
+"biz.dk\0"
+"brasil.museum\0"
+"asnes.no\0scrapping.cc\0"
+"jcloud-ver-jpc.ik-server.com\0"
+"nyan.to\0"
+"pisz.pl\0"
+"prd.fr\0"
+"*.np\0"
+"karaganda.su\0"
+"co.events\0"
+"gemological.museum\0intelligence.museum\0"
+"hapmir.no\0"
+"barsy.eu\0"
"pleskns.com\0"
-"taishin.fukushima.jp\0gbiz\0"
-"vefsn.no\0"
-"h.se\0"
-"l\xc3\xb8""dingen.no\0"
-"run.app\0"
-"observer\0fastly-terrarium.com\0"
-"casacam.net\0"
-"bnr.la\0"
-"*.ck\0"
-"docs\0"
-"u2-local.xnbay.com\0"
-"run\0"
-"stackhero-network.com\0"
-"press.cy\0uchihara.ibaraki.jp\0baghdad.museum\0"
-"omura.nagasaki.jp\0ses\0"
-"higashishirakawa.gifu.jp\0cologne\0"
-"sew\0"
-"sex\0"
-"leg.br\0"
-"tjome.no\0git-pages.rit.edu\0"
-"edgestack.me\0"
-"woodside\0"
-"kanegasaki.iwate.jp\0boats\0"
-"lib.ne.us\0sfr\0"
-"jevnaker.no\0blog.gt\0"
-"rwe\0"
-"eu.int\0"
-"gangaviika.no\0law.pro\0"
-"*.er\0"
-"toyosato.shiga.jp\0"
-"lt.ua\0"
-"k12.nm.us\0"
-"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0"
-"knowsitall.info\0"
-"*.fk\0avocat.fr\0servebeer.com\0"
-"\xe9\xb3\xa5\xe5\x8f\x96.jp\0s3-website.eu-west-3.amazonaws.com\0yombo.me\0"
-"fc.it\0asahi.yamagata.jp\0"
-"towada.aomori.jp\0"
-"tgory.pl\0workers.dev\0"
-"kawanishi.hyogo.jp\0"
-"sardegna.it\0"
-"hatoyama.saitama.jp\0"
-"md.us\0"
-"hamada.shimane.jp\0"
-"us-east-1.elasticbeanstalk.com\0"
-"kawakami.nagano.jp\0surrey.museum\0"
-"kanra.gunma.jp\0skanit.no\0"
-"b\xc3\xa1hccavuotna.no\0"
-"novara.it\0yanaizu.fukushima.jp\0k12.ut.us\0"
-"blog.bo\0"
-"blog.br\0"
-"marnardal.no\0"
-"ac.gov.br\0es.kr\0"
-"gitlab.io\0"
-"fie.ee\0"
-"kumiyama.kyoto.jp\0higashine.yamagata.jp\0"
-"imb.br\0"
-"vantaa.museum\0club.tw\0from-va.com\0"
-"sardinia.it\0"
-"col.ng\0"
-"jp.eu.org\0"
-"fermo.it\0bugatti\0"
-"\xc3\xa5""fjord.no\0"
-"vibovalentia.it\0sanfrancisco.museum\0station.museum\0vlaanderen\0is-a-republican.com\0"
-"york.museum\0"
-"mobi.tt\0ski\0"
-"natura\0"
-"etc.br\0ibaraki.osaka.jp\0"
-"mobi.tz\0"
-"sakata.yamagata.jp\0makeup\0"
-"osasco.br\0"
-"*.jm\0rifu.miyagi.jp\0utsunomiya.tochigi.jp\0"
-"sky\0"
-"hekinan.aichi.jp\0"
-"ownip.net\0"
-"takagi.nagano.jp\0"
-"balat.no\0k12.pr.us\0"
-"kolobrzeg.pl\0fitness\0"
-"*.kh\0"
-"tanabe.wakayama.jp\0powiat.pl\0"
-"medio-campidano.it\0"
-"nat.tn\0"
-"gonohe.aomori.jp\0"
-"semine.miyagi.jp\0"
-"takaharu.miyazaki.jp\0agakhan\0"
-"datsun\0gg.ax\0"
-"kawanishi.yamagata.jp\0"
-"mx.na\0sko.gov.pl\0"
-"radom.pl\0"
-"k12.ca.us\0myravendb.com\0"
-"vic.au\0usgarden.museum\0"
-"financial\0"
-"no-ip.ca\0"
-"design.museum\0"
+"nanbu.yamanashi.jp\0"
+"undersea.museum\0"
+"kita.kyoto.jp\0progressive\0"
+"1337.pictures\0"
+"biz.et\0tsuga.tochigi.jp\0tv.tr\0dynns.com\0"
+"sch.ae\0"
+"higashiyodogawa.osaka.jp\0gratangen.no\0"
+"ma.gov.br\0"
+"yabuki.fukushima.jp\0"
+"biz.fj\0"
+"nerdpol.ovh\0"
+"tv.tz\0"
+"anani.br\0*.pg\0"
+"decorativearts.museum\0gallery.museum\0tokke.no\0cr.ua\0"
+"yamagata.yamagata.jp\0"
+"tenri.nara.jp\0homeip.net\0"
+"mymediapc.net\0"
+"tochigi.tochigi.jp\0eu.org\0"
+"ostroda.pl\0"
+"cherkasy.ua\0s3.ca-central-1.amazonaws.com\0"
+"googlecode.com\0co.education\0"
+"shiranuka.hokkaido.jp\0"
+"yokosuka.kanagawa.jp\0hokuto.yamanashi.jp\0"
+"biz.gl\0"
+"kyoto.jp\0curv.dev\0"
+"amica\0"
+"sk\xc3\xa1nit.no\0style\0"
+"corsica\0"
+"amusement.aero\0"
+"ogose.saitama.jp\0science\0"
+"toyotsu.fukuoka.jp\0ostrowwlkp.pl\0suwalki.pl\0"
+"art.pl\0"
+"mymailer.com.tw\0"
+"aizumi.tokushima.jp\0sunndal.no\0"
+"unazuki.toyama.jp\0cloudcontrolled.com\0"
+"biz.id\0"
+"k12.ny.us\0"
+"clic2000.net\0barsy.in\0"
+"togura.nagano.jp\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0il.eu.org\0barsy.io\0"
+"miyoshi.saitama.jp\0o.se\0"
+"*.sapporo.jp\0"
+"yamatokoriyama.nara.jp\0"
+"graphox.us\0"
+"kagamiishi.fukushima.jp\0hizen.saga.jp\0"
+"shopping\0"
+"prd.km\0"
+"living\0"
+"kuji.iwate.jp\0"
+"matsuura.nagasaki.jp\0england.museum\0"
+"cloudaccess.net\0"
+"newport.museum\0clubmed\0\xe4\xb8\x96\xe7\x95\x8c\0"
+"komono.mie.jp\0is-not-certified.com\0"
+"pharmaciens.km\0*.futurecms.at\0"
+"\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0njs.jelastic.vps-host.net\0"
+"konan.shiga.jp\0"
+"vestre-toten.no\0us-east-1.amazonaws.com\0"
+"my.id\0paas.leviracloud.eu\0"
+"lpages.co\0"
+"klodzko.pl\0hu.eu.org\0ie.eu.org\0"
+"hatogaya.saitama.jp\0biz.ki\0"
+"prd.mg\0rr.leg.br\0"
+"vs.it\0"
+"4u.com\0"
+"art.sn\0"
+"rn.it\0lib.ne.us\0"
+"nose.osaka.jp\0roma.museum\0"
+"agr.br\0"
+"wmcloud.org\0"
+"tokorozawa.saitama.jp\0"
+"latina.it\0tranibarlettaandria.it\0\xc3\xa1laheadju.no\0mortgage\0"
+"iwamizawa.hokkaido.jp\0"
+"komoro.nagano.jp\0\xeb\x8b\xb7\xeb\x84\xb7\0"
+"fujixerox\0"
+"biz.ls\0s\xc3\xb8mna.no\0go.dyndns.org\0"
+"trento.it\0sukumo.kochi.jp\0"
+"tachiarai.fukuoka.jp\0"
+"makurazaki.kagoshima.jp\0rs.leg.br\0sc.leg.br\0spdns.eu\0"
+"schule\0barsy.online\0"
+"\xe6\xbe\xb3\xe9\x96\x80\0"
+"santamaria.br\0"
+"isehara.kanagawa.jp\0"
+"motosu.gifu.jp\0delmenhorst.museum\0"
+"dabur\0"
+"sch.id\0kadogawa.miyazaki.jp\0myfirewall.org\0"
+"ayagawa.kagawa.jp\0"
+"biz.mv\0"
+"biz.mw\0cloudns.club\0"
+"taxi.br\0"
+"suedtirol.it\0biz.ni\0"
+"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x80\xd1\x83\xd1\x81\0"
+"kusu.oita.jp\0dray-dns.de\0"
+"mysecuritycamera.org\0"
+"alaheadju.no\0"
+"kh.ua\0"
+"chikuho.fukuoka.jp\0"
+"filatelia.museum\0museum.tt\0"
+"suzu.ishikawa.jp\0askim.no\0"
+"sch.ir\0biz.nr\0"
+"\xe6\xb2\x96\xe7\xb8\x84.jp\0"
+"gyeonggi.kr\0"
+"!city.sapporo.jp\0skoczow.pl\0"
+"wpdevcloud.com\0"
+"koge.tottori.jp\0"
+"val-d-aosta.it\0sch.jo\0pilots.museum\0xerox\0"
+"claims\0app.lmpm.com\0"
+"smola.no\0"
+"homeftp.org\0"
+"kasumigaura.ibaraki.jp\0"
+"school.na\0"
+"langev\xc3\xa5g.no\0"
+"pharmacy\0"
+"biz.pk\0"
+"tatsuno.hyogo.jp\0biz.pl\0homedepot\0ca-central-1.elasticbeanstalk.com\0"
+"agro.bo\0"
+"biz.pr\0freedesktop.org\0"
+"mulhouse.museum\0tattoo\0"
+"cheap\0"
+"x.bg\0gotdns.ch\0*.telebit.xyz\0"
+"jl.serv.net.mx\0"
+"3.bg\0media.hu\0"
+"consulado.st\0k12.nm.us\0"
+"sch.lk\0storj.farm\0"
+"nagano.jp\0nakano.tokyo.jp\0"
+"vaksdal.no\0"
+"akagi.shimane.jp\0berkeley.museum\0"
+"school.nz\0"
+"shinjo.yamagata.jp\0franziskaner.museum\0"
+"gushikami.okinawa.jp\0mango\0"
+"soc.dz\0apigee.io\0"
+"red\0"
+"fujinomiya.shizuoka.jp\0emb.kw\0"
+"sch.ly\0"
+"skiptvet.no\0barrell-of-knowledge.info\0"
+"yamagata.nagano.jp\0"
+"shinichi.hiroshima.jp\0"
+"ren\0"
+"mordovia.su\0"
+"zentsuji.kagawa.jp\0"
+"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0"
+"qvc\0"
+"sch.ng\0"
+"wang\0*.ex.futurecms.at\0"
+"bauhaus\0rn.leg.br\0spdns.de\0"
+"is-a-soxfan.org\0"
+"cafe\0"
+"bozen-suedtirol.it\0"
+"hole.no\0"
+"point2this.com\0"
+"farsund.no\0"
+"lib.pr.us\0"
+"biz.ss\0aero.tt\0"
+"shimamoto.osaka.jp\0gs.hm.no\0\xe6\xbe\xb3\xe9\x97\xa8\0"
+"pz.it\0lib.mi.us\0"
+"research.aero\0pol.dz\0grane.no\0"
+"lu.it\0me.it\0lib.il.us\0voorloper.cloud\0"
+"izumisano.osaka.jp\0biz.tj\0"
+"trentins\xc3\xbc""dtirol.it\0lib.dc.us\0"
+"karuizawa.nagano.jp\0"
+"leczna.pl\0"
+"samukawa.kanagawa.jp\0video\0home.dyndns.org\0"
+"hamada.shimane.jp\0biz.ua\0"
+"biz.tr\0"
+"biz.tt\0\xe6\x97\xb6\xe5\xb0\x9a\0"
+"aero.mv\0"
+"ambulance.aero\0"
+"fuettertdasnetz.de\0gr.eu.org\0"
+"lyngen.no\0"
+"me.ke\0"
+"szczecin.pl\0ro.leg.br\0"
+"yakumo.shimane.jp\0"
+"dnsdojo.org\0ddnslive.com\0"
+"lunner.no\0sch.qa\0"
+"shibata.miyagi.jp\0takahata.yamagata.jp\0hareid.no\0mordovia.ru\0"
+"kartuzy.pl\0"
+"lapy.pl\0"
+"sandvikcoromant\0vs.mythic-beasts.com\0"
+"biz.vn\0"
+"akune.kagoshima.jp\0ril\0"
+"oe.yamagata.jp\0wolterskluwer\0"
+"sassari.it\0from-al.com\0"
+"stjordal.no\0rio\0"
+"rip\0from-mo.com\0"
+"nishikata.tochigi.jp\0duck\0"
+"s\xc3\xb8r-fron.no\0"
+"vevelstad.no\0"
+"us.reclaim.cloud\0"
+"avianca\0edu.eu.org\0"
+"uri.arpa\0"
+"pol.ht\0sch.sa\0"
+"museum.mv\0sigdal.no\0"
+"museum.mw\0"
+"matsusaka.mie.jp\0orkanger.no\0skanit.no\0"
+"its.me\0"
+"kumenan.okayama.jp\0museum.no\0insurance\0oldnavy\0backplaneapp.io\0"
+"sch.so\0"
+"drammen.no\0media.pl\0"
+"observer\0vladikavkaz.ru\0"
+"ascoli-piceno.it\0"
+"equipment.aero\0"
+"yahaba.iwate.jp\0"
+"koeln.museum\0"
+"ninohe.iwate.jp\0soc.lk\0casino\0xfinity\0"
+"arakawa.saitama.jp\0museum.om\0"
+"assisi.museum\0bo.telemark.no\0"
+"d.bg\0"
+"takayama.gifu.jp\0k12.la.us\0"
+"wa.edu.au\0rns.tn\0vladikavkaz.su\0"
+"geology.museum\0call\0"
+"palace.museum\0skien.no\0industries\0"
+"beauty\0"
+"alfaromeo\0nv.elastyco.com\0"
+"meldal.no\0"
+"biz.zm\0frontdoor\0"
+"tatebayashi.gunma.jp\0"
+"bindal.no\0"
+"camp\0"
+"australia.museum\0lezajsk.pl\0"
+"salangen.no\0"
+"kiryu.gunma.jp\0netlify.app\0"
+"kakogawa.hyogo.jp\0"
+"puglia.it\0nisshin.aichi.jp\0"
+"esan.hokkaido.jp\0"
+"izumi.osaka.jp\0gallup\0photos\0"
+"leikanger.no\0meland.no\0demon.nl\0"
+"wanouchi.gifu.jp\0"
+"\xd0\xba\xd0\xbe\xd0\xbc\0"
+"airforce\0"
+"nakayama.yamagata.jp\0"
+"himeshima.oita.jp\0"
+"alabama.museum\0"
+"nannestad.no\0"
+"urakawa.hokkaido.jp\0yoita.niigata.jp\0homelinux.com\0"
"cpa.pro\0"
-"yoichi.hokkaido.jp\0"
-"tmall\0"
-"is-a-therapist.com\0"
-"*.mm\0"
-"wskr.gov.pl\0"
-"takinoue.hokkaido.jp\0"
-"takasaki.gunma.jp\0autos\0from-al.com\0"
-"bip.sh\0"
-"war.museum\0"
-"riik.ee\0"
-"kawanishi.nara.jp\0chrome\0spa\0"
-"rikuzentakata.iwate.jp\0mifune.kumamoto.jp\0from-co.net\0"
-"neyagawa.osaka.jp\0aa.no\0pcloud.host\0"
-"kasai.hyogo.jp\0mobi.na\0"
-"dray-dns.de\0"
-"ct.it\0kamisunagawa.hokkaido.jp\0yamanouchi.nagano.jp\0*.np\0soy\0"
-"mobi.ng\0gs.nt.no\0"
-"divtasvuodna.no\0be.ax\0"
-"cc.la.us\0"
-"drive\0tab\0"
-"cupcake.is\0"
-"webspace.rocks\0"
-"aoste.it\0"
-"idrett.no\0"
-"unicloud.pl\0"
-"mycloud.by\0"
-"maceio.br\0krokstadelva.no\0"
-"hakusan.ishikawa.jp\0*.pg\0"
-"credit\0"
-"university.museum\0"
-"cci.fr\0siellak.no\0lcube-server.de\0"
-"li.it\0"
-"odate.akita.jp\0cookingchannel\0"
-"photography.museum\0s\xc3\xb8rreisa.no\0flights\0tax\0"
-"kiwi\0"
-"smile\0srl\0"
-"app.br\0"
-"*.sendai.jp\0"
-"\xe9\x9d\x99\xe5\xb2\xa1.jp\0nyaa.am\0"
-"s3.eu-west-2.amazonaws.com\0"
-"weatherchannel\0"
-"shingu.wakayama.jp\0"
-"page\0repl.co\0"
-"tci\0"
-"for-some.biz\0"
-"\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0"
-"tn.it\0"
-"stc\0s3.cn-north-1.amazonaws.com.cn\0"
-"ichinoseki.iwate.jp\0imari.saga.jp\0"
-"*.compute.estate\0"
-"kamo.kyoto.jp\0insurance\0"
-"tdk\0"
-"t\xc3\xb8nsberg.no\0"
-"hb.cldmail.ru\0"
-"politica.bo\0"
-"caa.aero\0k12.ny.us\0"
-"tabuse.yamaguchi.jp\0"
-"omega\0"
-"cdn-edges.net\0dnsking.ch\0"
-"2038.io\0"
-"yamatsuri.fukushima.jp\0cloud.unispace.io\0"
-"mobi.ke\0"
-"dyn-vpn.de\0"
-"tel\0"
-"basel.museum\0citic\0"
-"mitane.akita.jp\0pictet\0"
-"read\0"
-"q.bg\0"
-"nh.us\0"
-"marugame.kagawa.jp\0bloxcms.com\0"
-"yawatahama.ehime.jp\0blog.vu\0"
-"oystre-slidre.no\0boldlygoingnowhere.org\0"
-"rep.br\0kalisz.pl\0"
-"okinoshima.shimane.jp\0"
-"be.gy\0"
-"higashiizumo.shimane.jp\0shop.th\0"
-"milano.it\0"
-"asso.fr\0"
-"mytis.ru\0servehumour.com\0"
-"cc.wi.us\0app.gp\0"
-"sphinx.mythic-beasts.com\0"
-"inf.br\0"
-"mochizuki.nagano.jp\0"
-"kawamata.fukushima.jp\0izumisano.osaka.jp\0git-repos.de\0"
-"kasuga.hyogo.jp\0frogn.no\0"
-"if.ua\0blog\0"
-"thd\0"
-"markets\0from-wv.com\0"
-"ochi.kochi.jp\0ontario.museum\0"
-"yukuhashi.fukuoka.jp\0"
-"asso.gp\0"
-"komoro.nagano.jp\0scienceandhistory.museum\0eu.meteorapp.com\0"
-"luroy.no\0"
-"miyoshi.saitama.jp\0"
-"kainan.wakayama.jp\0press.se\0"
-"sukagawa.fukushima.jp\0dyndns1.de\0"
-"newspaper.museum\0"
-"overhalla.no\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0"
-"inf.cu\0"
-"logistics.aero\0"
-"iz.hr\0"
-"michigan.museum\0"
-"quebec.museum\0"
-"shizukuishi.iwate.jp\0"
-"kijo.miyazaki.jp\0from-ok.com\0"
-"daisen.akita.jp\0zachpomor.pl\0lasalle\0is-a-chef.net\0"
-"asso.ht\0vda.it\0gwangju.kr\0shop.ro\0"
-"crotone.it\0monzabrianza.it\0web.app\0"
-"malselv.no\0"
-"sevastopol.ua\0"
-"ddr.museum\0"
-"sakegawa.yamagata.jp\0hemnes.no\0k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0bnpparibas\0ventures\0"
-"arakawa.saitama.jp\0"
-"marketing\0"
-"crd.co\0"
-"trentino-s\xc3\xbc""d-tirol.it\0schlesisches.museum\0r\xc3\xa1hkker\xc3\xa1vju.no\0*.ye\0anquan\0"
-"balsan.it\0county.museum\0us-west-2.elasticbeanstalk.com\0"
-"kure.hiroshima.jp\0kadoma.osaka.jp\0webhop.biz\0es.leg.br\0"
-"asso.bj\0"
-"utashinai.hokkaido.jp\0"
-"tjx\0"
-"shop.pl\0"
-"ro.im\0"
-"\xe9\x9b\x86\xe5\x9b\xa2\0"
-"ol.no\0"
-"asso.ci\0"
-"hk.cn\0ro.it\0"
-"al.gov.br\0cruises\0"
-"not.br\0flatanger.no\0"
-"ogasawara.tokyo.jp\0ct.us\0"
-"meiwa.gunma.jp\0museumcenter.museum\0"
-"moriya.ibaraki.jp\0"
-"pp.az\0"
-"barclays\0"
-"navuotna.no\0"
-"\xe5\x95\x86\xe6\xa5\xad.tw\0"
-"news.hu\0k12.md.us\0"
-"children.museum\0"
-"folldal.no\0"
-"biratori.hokkaido.jp\0kimino.wakayama.jp\0"
-"s3-website-sa-east-1.amazonaws.com\0"
-"is-lost.org\0"
-"blue\0"
-"asso.dz\0m\xc3\xa5lselv.no\0cc.me.us\0"
-"mansion.museum\0"
-"ky.us\0realty\0"
-"tiaa\0"
-"kasuga.fukuoka.jp\0"
-"press.ma\0"
-"murata.miyagi.jp\0"
-"accident-prevention.aero\0\xe7\xa6\x8f\xe5\xb3\xb6.jp\0"
-"reit\0"
-"oyodo.nara.jp\0vang.no\0eu-west-2.elasticbeanstalk.com\0"
-"co.network\0"
-"pars\0"
-"erimo.hokkaido.jp\0"
-"kiyosu.aichi.jp\0rep.kp\0"
-"kamikoani.akita.jp\0"
-"hidora.com\0"
-"kitchen\0"
-"erotica.hu\0tn.us\0top\0"
-"askvoll.no\0"
-"arakawa.tokyo.jp\0hofu.yamaguchi.jp\0"
-"emb.kw\0"
-"ass.km\0saskatchewan.museum\0"
-"ipifony.net\0"
-"paderborn.museum\0"
-"eidsvoll.no\0"
-"cloudns.biz\0"
-"vb.it\0"
-"drobak.no\0"
-"matsuura.nagasaki.jp\0mjondalen.no\0is.eu.org\0"
-"adm.br\0"
-"iwaki.fukushima.jp\0"
-"cesena-forli.it\0"
-"tuscany.it\0"
-"dyndns-free.com\0"
-"sth.ac.at\0"
-"tc.br\0notogawa.shiga.jp\0"
-"sula.no\0kilatiron.com\0"
-"blog.kg\0"
-"grajewo.pl\0"
-"inf.mk\0"
+"kaneyama.fukushima.jp\0"
+"birthplace.museum\0"
+"turin.it\0"
+"asaka.saitama.jp\0"
+"us.eu.org\0"
+"tynset.no\0"
+"is-a-hunter.com\0"
+"ivanovo.su\0"
+"inuyama.aichi.jp\0tsuno.kochi.jp\0muos\xc3\xa1t.no\0"
+"augustow.pl\0serveirc.com\0"
"vall\xc3\xa9""edaoste.it\0"
-"omotego.fukushima.jp\0dynns.com\0"
-"kitaakita.akita.jp\0"
-"emiliaromagna.it\0tranby.no\0"
-"furukawa.miyagi.jp\0"
-"ubs\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0"
-"!city.sapporo.jp\0time.no\0it.eu.org\0"
-"\xe6\xa0\x83\xe6\x9c\xa8.jp\0"
-"trv\0"
-"works\0"
-"world\0"
-"namerikawa.toyama.jp\0"
-"guitars\0"
-"koshu.yamanashi.jp\0rent\0"
-"enf.br\0"
-"ngo.lk\0"
-"namegata.ibaraki.jp\0oregon.museum\0"
-"kudoyama.wakayama.jp\0"
-"bibai.hokkaido.jp\0"
-"cloudera.site\0"
-"cc.ca.us\0"
-"is-into-anime.com\0"
-"matsudo.chiba.jp\0suzuka.mie.jp\0taki.mie.jp\0"
-"b\xc3\xa1l\xc3\xa1t.no\0cnpy.gdn\0"
-"shinyoshitomi.fukuoka.jp\0steigen.no\0claims\0"
-"adobeaemcloud.net\0"
-"aisho.shiga.jp\0kristiansand.no\0"
-"shinichi.hiroshima.jp\0kurobe.toyama.jp\0wolterskluwer\0"
-"aseral.no\0"
+"me.so\0"
+"gjesdal.no\0ar.com\0"
+"bc.ca\0baltimore.museum\0"
+"ullensvang.no\0"
+"me.tc\0"
+"\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0"
+"tires\0africa.com\0"
+"juif.museum\0"
+"s3-website.eu-west-3.amazonaws.com\0*.azurecontainer.io\0"
+"tendo.yamagata.jp\0parti.se\0onred.one\0"
+"prochowice.pl\0racing\0"
+"inf.br\0kota.aichi.jp\0ikeda.nagano.jp\0\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0"
+"sap\0"
+"cesenaforl\xc3\xac.it\0"
+"sas\0"
+"nesoddtangen.no\0afamilycompany\0dev.static.land\0"
+"kongsvinger.no\0"
+"trd.br\0yono.saitama.jp\0"
+"\xe9\x95\xb7\xe9\x87\x8e.jp\0fujikawa.shizuoka.jp\0"
+"care\0sbi\0"
+"sch.zm\0"
+"\xe7\xbb\x84\xe7\xb9\x94.hk\0agano.niigata.jp\0newmexico.museum\0me.tz\0"
+"me.uk\0"
+"convent.museum\0"
+"ecologia.bo\0gose.nara.jp\0yosemite.museum\0czest.pl\0neko.am\0"
+"stockholm.museum\0sca\0"
+"inf.cu\0scb\0"
+"sbs\0"
+"me.us\0"
+"ogasawara.tokyo.jp\0\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0casa\0"
+"kagoshima.kagoshima.jp\0cars\0politie\0servemp3.com\0"
+"nes.akershus.no\0"
+"trentinsuedtirol.it\0keisen.fukuoka.jp\0case\0"
+"cash\0"
+"s3-us-east-2.amazonaws.com\0"
+"honjo.saitama.jp\0gift\0"
+"bauern.museum\0"
+"kizu.kyoto.jp\0loginline.dev\0mein-vigor.de\0"
+"vps.mcdir.ru\0"
+"me.vu\0"
+"se.leg.br\0"
+"saga.jp\0castres.museum\0beta.bounty-full.com\0"
+"firewall-gateway.com\0"
+"moskenes.no\0"
+"arte.bo\0arts.museum\0"
+"suwa.nagano.jp\0x.se\0nis.za\0"
+"my-gateway.de\0"
+"mg.gov.br\0"
+"hamatama.saga.jp\0"
+"kamiizumi.saitama.jp\0jaguar\0"
+"nikaho.akita.jp\0"
+"applinzi.com\0"
+"oyabe.toyama.jp\0s\xc3\xb8rfold.no\0"
+"sakaiminato.tottori.jp\0"
+"passenger-association.aero\0run\0"
+"air-surveillance.aero\0"
+"ritto.shiga.jp\0j\xc3\xb8rpeland.no\0mj\xc3\xb8ndalen.no\0"
+"mlbfan.org\0community-pro.de\0"
+"nextdirect\0ses\0"
+"ba.leg.br\0"
+"dynserv.org\0"
+"kpmg\0sew\0shell\0"
+"sex\0"
+"shinjo.nara.jp\0monmouth.museum\0"
+"pol.tr\0bugatti\0"
+"mar.it\0"
+"otofuke.hokkaido.jp\0"
+"imdb\0"
+"bio.br\0tjmaxx\0"
+"sfr\0"
+"naoshima.kagawa.jp\0"
+"nantan.kyoto.jp\0rwe\0"
+"shirataka.yamagata.jp\0"
+"is-a-candidate.org\0"
+"mitsubishi\0"
+"dvag\0"
+"cologne\0"
+"ed.ao\0"
+"kanonji.kagawa.jp\0coach\0education\0"
+"association.museum\0"
+"kunigami.okinawa.jp\0haibara.shizuoka.jp\0"
+"meloy.no\0br.com\0cdn77-ssl.net\0"
+"nakagyo.kyoto.jp\0kahoku.yamagata.jp\0"
+"grocery\0"
+"bozen.it\0"
+"tgory.pl\0"
+"h\xc3\xa1""bmer.no\0"
+"kiwi.nz\0agro.pl\0"
+"ed.ci\0geek.nz\0"
+"eating-organic.net\0"
+"evenassi.no\0"
+"kitakata.fukushima.jp\0"
+"nara.jp\0"
+"imb.br\0"
+"ed.cr\0"
+"kazuno.akita.jp\0"
+"shimizu.shizuoka.jp\0"
+"izumiotsu.osaka.jp\0cymru.museum\0pgfog.com\0"
+"tirol\0"
+"honjyo.akita.jp\0"
+"\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0fujitsu\0"
+"kembuchi.hokkaido.jp\0la.us\0ski\0"
+"rade.no\0"
+"brunel.museum\0"
+"memorial.museum\0unicom\0"
+"mediocampidano.it\0from-de.com\0"
+"dvrcam.info\0"
+"kawaba.gunma.jp\0cc.wi.us\0"
+"yaizu.shizuoka.jp\0cc.sd.us\0"
+"inf.mk\0loten.no\0"
+"kitagawa.kochi.jp\0sky\0"
+"judygarland.museum\0ulm.museum\0"
+"norddal.no\0"
+"cloud.jelastic.open.tim.it\0"
+"krasnik.pl\0"
+"iglesiascarbonia.it\0"
+"d.se\0"
+"jinsekikogen.hiroshima.jp\0"
+"adult.ht\0"
+"\xd0\xba\xd1\x80\xd1\x8b\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
+"tozawa.yamagata.jp\0"
+"brandywinevalley.museum\0kherson.ua\0"
"baseball.museum\0"
-"farsund.no\0sanok.pl\0"
-"nagareyama.chiba.jp\0kounosu.saitama.jp\0"
-"mitsuke.niigata.jp\0tui\0"
-"blogdns.org\0"
-"ci.it\0"
-"fukushima.hokkaido.jp\0watches\0ngo.ng\0"
-"state.museum\0"
-"mobi\0\xe6\x9c\xba\xe6\x9e\x84\0s3-website.ap-northeast-2.amazonaws.com\0"
-"comunica\xc3\xa7\xc3\xb5""es.museum\0forde.no\0"
-"3.bg\0shimoichi.nara.jp\0russia.museum\0software\0"
-"niigata.niigata.jp\0"
-"us-4.evennode.com\0"
-"\xe6\xb8\xb8\xe6\x88\x8f\0altervista.org\0"
-"consulting.aero\0"
-"miyashiro.saitama.jp\0"
-"mima.tokushima.jp\0"
-"niyodogawa.kochi.jp\0jls-sto2.elastx.net\0"
-"tvs\0storage.yandexcloud.net\0"
-"sande.m\xc3\xb8re-og-romsdal.no\0in.eu.org\0"
-"chase\0"
-"barsy.online\0"
-"orsta.no\0"
-"flakstad.no\0moda\0"
-"oki.fukuoka.jp\0"
-"leitungsen.de\0"
-"kaneyama.fukushima.jp\0ishikari.hokkaido.jp\0"
-"myoko.niigata.jp\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0dontexist.org\0"
-"takanezawa.tochigi.jp\0ngo.ph\0from-il.com\0"
-"clicketcloud.com\0"
-"network\0"
-"finance\0panasonic\0"
-"abudhabi\0"
-"is-an-actress.com\0for.sale\0"
-"ichikawa.hyogo.jp\0zt.ua\0"
-"click\0"
-"rest\0"
-"george\0"
-"minano.saitama.jp\0"
-"\xc3\xa5seral.no\0"
-"ss.it\0"
-"wedding\0"
-"hitachiota.ibaraki.jp\0"
+"edunet.tn\0"
+"watch\0"
+"babia-gora.pl\0"
+"cri.br\0is-a-teacher.com\0"
+"am.leg.br\0"
+"television.museum\0"
+"nishinoomote.kagoshima.jp\0omi.nagano.jp\0"
+"servesarcasm.com\0"
+"homeftp.net\0"
+"otsuki.kochi.jp\0"
+"shiwa.iwate.jp\0"
+"tondabayashi.osaka.jp\0"
+"better-than.tv\0impertrixcdn.com\0"
+"lib.ut.us\0"
+"mitsuke.niigata.jp\0\xe4\xba\x9a\xe9\xa9\xac\xe9\x80\x8a\0"
+"rc.it\0"
+"aurskog-holand.no\0stokke.no\0"
+"chrome\0ravendb.community\0"
+"mn.it\0spa\0xy.ax\0"
+"chippubetsu.hokkaido.jp\0lavangen.no\0"
+"taifun-dns.de\0"
+"witd.gov.pl\0"
+"mitane.akita.jp\0chijiwa.nagasaki.jp\0wlocl.pl\0"
+"barueri.br\0soy\0"
+"*.dweb.link\0"
+"immo\0"
+"omachi.nagano.jp\0n\xc3\xa1vuotna.no\0gos.pk\0"
+"jan-mayen.no\0"
+"tab\0"
+"ed.jp\0fh.se\0"
+"hotels\0"
+"pippu.hokkaido.jp\0"
+"\xe6\xbb\x8b\xe8\xb3\x80.jp\0"
+"openair.museum\0"
+"is-into-cars.com\0"
+"higashikagura.hokkaido.jp\0"
+"soja.okayama.jp\0"
+"he.cn\0"
+"shiftedit.io\0"
+"herokuapp.com\0"
+"midtre-gauldal.no\0directory\0"
+"tax\0"
+"friulivenezia-giulia.it\0\xe7\xbe\xa4\xe9\xa6\xac.jp\0cbre\0"
+"pymnt.uk\0"
+"srl\0"
+"nyny.museum\0"
+"s3.amazonaws.com\0"
+"minami-alps.yamanashi.jp\0enonic.io\0"
+"nishitosa.kochi.jp\0naustdal.no\0paas.massivegrid.com\0"
+"publishproxy.com\0"
+"halden.no\0"
+"narusawa.yamanashi.jp\0astronomy.museum\0"
+"tci\0\xe5\xae\xb6\xe9\x9b\xbb\0armenia.su\0"
+"yasuda.kochi.jp\0"
"inf.ua\0"
-"r\xc3\xb8""d\xc3\xb8y.no\0dreamhosters.com\0"
-"greta.fr\0"
-"tempio-olbia.it\0"
-"verisign\0mydatto.net\0"
-"meraker.no\0"
-"us-3.evennode.com\0"
-"*.yokohama.jp\0"
-"moriyoshi.akita.jp\0asso.re\0"
-"meloy.no\0betainabox.com\0"
-"alvdal.no\0"
-"science\0"
-"f.bg\0fin.ci\0virtualserver.io\0"
-"koeln\0"
-"sakai.ibaraki.jp\0denmark.museum\0"
-"api.stdlib.com\0"
-"finland.museum\0kinder\0whoswho\0gwiddle.co.uk\0"
-"trani-barletta-andria.it\0pizza\0"
-"nym.by\0"
-"nym.bz\0"
-"os\xc3\xb8yro.no\0xfinity\0dscloud.mobi\0"
-"cymru\0"
-"stjordal.no\0"
-"matsuda.kanagawa.jp\0loyalist.museum\0"
-"is-into-cartoons.com\0"
-"sor-odal.no\0"
-"yomitan.okinawa.jp\0"
-"masaki.ehime.jp\0hakui.ishikawa.jp\0"
-"alpha-myqnapcloud.com\0"
-"ski.museum\0platterp.us\0"
-"fin.ec\0"
-"unzen.nagasaki.jp\0browsersafetymark.io\0"
-"gyokuto.kumamoto.jp\0from-oh.com\0"
-"nym.ec\0"
-"gjemnes.no\0"
-"mb.ca\0windmill.museum\0pp.se\0pp.ru\0"
-"hisayama.fukuoka.jp\0"
-"matsuno.ehime.jp\0"
-"srv.br\0"
-"budapest\0"
-"hopto.me\0"
-"vv.it\0gitpage.si\0"
-"giessen.museum\0"
-"lib.ri.us\0"
-"nic.in\0tips\0us-2.evennode.com\0"
-"trieste.it\0kashiba.nara.jp\0"
-"asso.nc\0"
-"saga.jp\0"
-"dovre.no\0czest.pl\0"
-"salat.no\0uno\0geekgalaxy.com\0"
-"fujixerox\0pp.ua\0"
-"gen.mi.us\0"
-"sakawa.kochi.jp\0takazaki.miyazaki.jp\0"
-"ise.mie.jp\0gallo\0"
-"oharu.aichi.jp\0uol\0"
-"tw.cn\0urayasu.chiba.jp\0"
-"\xe6\x84\x9b\xe7\x9f\xa5.jp\0seaport.museum\0"
-"kwpsp.gov.pl\0cloud66.zone\0"
-"nym.gr\0"
-"isesaki.gunma.jp\0"
-"amica\0"
-"pccw\0shiftedit.io\0"
-"s\xc3\xb8r-aurdal.no\0k12.ct.us\0nym.gy\0"
-"nym.hk\0gdansk.pl\0"
-"chijiwa.nagasaki.jp\0io.kg\0"
-"idv.hk\0"
-"ikata.ehime.jp\0\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0"
-"game-server.cc\0"
-"ups\0"
-"nym.ie\0"
-"kobayashi.miyazaki.jp\0pvt.k12.ma.us\0bryansk.su\0"
-"cc.de.us\0ngo.za\0"
-"salangen.no\0kindle\0"
-"khmelnytskyi.ua\0"
-"ishikawa.fukushima.jp\0"
-"pescara.it\0dyn.home-webserver.de\0"
-"bradesco\0"
-"video.hu\0\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0"
-"pe.ca\0ujiie.tochigi.jp\0internet-dns.de\0"
-"association.aero\0ringebu.no\0us-1.evennode.com\0"
-"weber\0"
-"s\xc3\xb8r-varanger.no\0"
-"machida.tokyo.jp\0okinawa\0"
-"suifu.ibaraki.jp\0"
-"in-vpn.de\0"
-"eid.no\0stranda.no\0from-tx.com\0"
-"milan.it\0"
-"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0force.museum\0"
-"shibata.miyagi.jp\0"
-"chonan.chiba.jp\0vanguard\0"
-"workisboring.com\0"
-"zaporizhzhia.ua\0"
-"oum.gov.pl\0"
-"liguria.it\0"
-"nogata.fukuoka.jp\0"
-"s3-us-gov-west-1.amazonaws.com\0nym.la\0"
-"nym.lc\0"
-"asso.km\0"
-"publ.pt\0"
-"exchange.aero\0sola.no\0"
-"mb.it\0"
-"fot.br\0scienceandindustry.museum\0nym.li\0"
-"\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0nym.kz\0"
-"flora.no\0monster\0is-a-green.com\0"
-"valled-aosta.it\0"
-"xj.cn\0"
-"jinsekikogen.hiroshima.jp\0yuki.ibaraki.jp\0"
+"sjc.br\0yoshimi.saitama.jp\0radoy.no\0"
+"meiwa.gunma.jp\0"
+"toyotomi.hokkaido.jp\0utashinai.hokkaido.jp\0"
+"hokuto.hokkaido.jp\0stc\0"
+"film.hu\0as.us\0ap.leg.br\0"
+"bo.nordland.no\0elastyco.com\0"
+"suisse.museum\0"
+"dnsdojo.net\0"
+"tdk\0"
+"servehumour.com\0"
+"\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0"
+"chizu.tottori.jp\0"
+"tanabe.kyoto.jp\0jp.net\0azurestaticapps.net\0"
+"hjelmeland.no\0investments\0"
+"m.bg\0"
+"k12.md.us\0"
+"citadel\0and.mom\0"
+"tamakawa.fukushima.jp\0oppdal.no\0tel\0"
+"poa.br\0"
+"air-traffic-control.aero\0genova.it\0"
+"haboro.hokkaido.jp\0muika.niigata.jp\0"
+"yamanobe.yamagata.jp\0divttasvuotna.no\0"
+"sa.com\0homelinux.net\0isa-hockeynut.com\0"
+"sandoy.no\0"
+"\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0boomla.net\0"
+"lomza.pl\0"
+"chofu.tokyo.jp\0"
+"map.fastly.net\0"
+"omuta.fukuoka.jp\0"
+"seika.kyoto.jp\0"
+"land\0"
+"higashimatsushima.miyagi.jp\0playstation\0togliatti.su\0"
+"abr.it\0plaza.museum\0"
+"oshima.yamaguchi.jp\0ebiz.tw\0"
+"tt.im\0"
+"ota.gunma.jp\0ed.pw\0"
+"mail.pl\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0"
+"lib.tx.us\0"
+"caserta.it\0aarborte.no\0"
+"ud.it\0"
+"yashiro.hyogo.jp\0"
+"ogawa.ibaraki.jp\0embroidery.museum\0"
+"po.it\0bremanger.no\0"
+"thd\0fr.eu.org\0"
+"botanicgarden.museum\0"
+"navuotna.no\0lib.hi.us\0"
+"tsu.mie.jp\0"
+"matsukawa.nagano.jp\0"
+"wakasa.tottori.jp\0"
+"cloudns.info\0"
+"kristiansand.no\0"
+"lel.br\0uhren.museum\0midsund.no\0hotel.tz\0"
+"yoshinogari.saga.jp\0"
+"*.kawasaki.jp\0"
+"catering.aero\0assabu.hokkaido.jp\0"
+"monticello.museum\0pics\0"
+"town\0"
+"media.aero\0minowa.nagano.jp\0"
+"info\0"
+"friuli-veneziagiulia.it\0kamikawa.hokkaido.jp\0torino.museum\0"
+"yokkaichi.mie.jp\0"
+"imizu.toyama.jp\0"
+"soma.fukushima.jp\0sells-it.net\0"
+"andriabarlettatrani.it\0"
+"contemporaryart.museum\0"
+"cri.nz\0\xd0\xbc\xd0\xba\xd0\xb4\0"
+"cloud.unispace.io\0"
+"news.hu\0"
+"yamada.toyama.jp\0vestby.no\0"
"yatsuka.shimane.jp\0"
-"avellino.it\0\xe5\xbe\xae\xe5\x8d\x9a\0"
-"shinto.gunma.jp\0nym.lt\0omg.lol\0"
-"nym.lu\0nym.me\0"
-"olbia-tempio.it\0is-into-games.com\0"
-"cust.testing.thingdust.io\0"
-"asso.mc\0"
-"homelinux.com\0"
-"nym.mn\0"
-"detroit.museum\0"
-"chikugo.fukuoka.jp\0"
-"vet\0"
-"js.cn\0drayddns.com\0"
-"secaas.hk\0"
-"sos.pl\0sumy.ua\0nym.mx\0"
-"fl.us\0"
-"okinawa.jp\0"
-"kakuda.miyagi.jp\0"
-"varese.it\0shingu.hyogo.jp\0"
-"bardu.no\0accenture\0"
-"freedesktop.org\0"
-"jele.site\0"
-"malbork.pl\0net-freaks.com\0"
-"atsugi.kanagawa.jp\0"
-"ostrowwlkp.pl\0"
-"nym.nz\0"
-"sh.cn\0"
-"gj\xc3\xb8vik.no\0fund\0"
-"\xe4\xb8\xad\xe4\xbf\xa1\0"
-"z.bg\0"
-"yoshikawa.saitama.jp\0dattolocal.com\0nym.pe\0"
-"getmyip.com\0"
-"moto\0"
-"shirahama.wakayama.jp\0"
-"uryu.hokkaido.jp\0v\xc3\xa5gs\xc3\xb8y.no\0k12.as.us\0"
-"nagara.chiba.jp\0games\0myftp.biz\0"
-"tksat.bo\0"
-"ichinomiya.aichi.jp\0chuo.yamanashi.jp\0gent\0"
-"nic.tj\0jls-sto1.elastx.net\0"
-"dealer\0"
-"nym.pt\0"
-"vig\0"
-"pe.it\0"
-"georgia.su\0"
-"takikawa.hokkaido.jp\0omiya.saitama.jp\0"
-"kagoshima.kagoshima.jp\0vin\0"
-"bonn.museum\0vip\0"
-"gojome.akita.jp\0"
-"chita.aichi.jp\0kamikawa.hyogo.jp\0"
-"swidnica.pl\0nhs.uk\0"
-"karlsoy.no\0phx.enscaled.us\0"
-"ikoma.nara.jp\0from-nm.com\0"
-"nf.ca\0"
-"misawa.aomori.jp\0"
-"hino.tottori.jp\0"
-"bn.it\0tokorozawa.saitama.jp\0"
-"yasuda.kochi.jp\0nym.ro\0"
-"echizen.fukui.jp\0carrier.museum\0"
-"bolivia.bo\0"
-"toscana.it\0pe.kr\0trading\0"
-"hikone.shiga.jp\0health\0"
-"forlicesena.it\0"
-"trentinosuedtirol.it\0"
-"center.museum\0unj\xc3\xa1rga.no\0"
-"kaluga.su\0nym.sk\0"
-"homegoods\0"
-"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0f.se\0"
-"sor-varanger.no\0"
-"nym.su\0"
-"fin.tn\0quest\0"
-"nym.sx\0"
-"id.au\0"
-"bolzano-altoadige.it\0"
-"kiyama.saga.jp\0"
-"bristol.museum\0"
-"hitachi.ibaraki.jp\0romsa.no\0"
-"fuefuki.yamanashi.jp\0"
-"ebiz.tw\0nym.tw\0"
-"moscow.museum\0"
-"fujiidera.osaka.jp\0idv.tw\0"
-"traniandriabarletta.it\0pymnt.uk\0"
-"froya.no\0"
-"\xe5\xa4\xa7\xe5\x88\x86.jp\0"
-"h\xc3\xa5.no\0"
-"gs.hl.no\0"
-"hatsukaichi.hiroshima.jp\0"
-"komono.mie.jp\0"
-"nic.za\0"
-"abc.br\0googlecode.com\0"
-"bofa\0"
-"forl\xc3\xac""cesena.it\0"
-"airport.aero\0asahi.ibaraki.jp\0nordre-land.no\0"
-"rieti.it\0nakatombetsu.hokkaido.jp\0"
-"global.prod.fastly.net\0"
-"lib.al.us\0sandcats.io\0"
-"rollag.no\0"
-"akaiwa.okayama.jp\0"
-"apigee.io\0"
-"cc.mn.us\0"
-"globo\0\xe4\xb8\x96\xe7\x95\x8c\0"
-"diamonds\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0"
-"nagasu.kumamoto.jp\0"
-"taku.saga.jp\0"
-"mobile\0"
-"asago.hyogo.jp\0zamami.okinawa.jp\0aid.pl\0"
-"sor-aurdal.no\0"
-"*.awdev.ca\0alpha.bounty-full.com\0"
-"goldpoint\0"
-"kudamatsu.yamaguchi.jp\0"
-"small-web.org\0"
-"horten.no\0daplie.me\0"
-"dyndns-office.com\0"
-"yn.cn\0"
-"worse-than.tv\0"
-"locker\0syncloud.it\0"
-"hashimoto.wakayama.jp\0"
-"tra.kp\0"
-"friuli-venezia-giulia.it\0frogans\0"
-"ichiba.tokushima.jp\0irish\0lublin.pl\0"
-"hanggliding.aero\0"
-"toyako.hokkaido.jp\0community.museum\0"
-"yasuoka.nagano.jp\0lanxess\0"
-"bulsan.it\0lixil\0"
-"dyndns.tv\0"
-"pt.eu.org\0"
-"\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0"
-"caltanissetta.it\0"
-"tokushima.jp\0etajima.hiroshima.jp\0lib.pr.us\0"
-"shell.museum\0"
-"adv.br\0"
-"embetsu.hokkaido.jp\0"
-"is-very-sweet.org\0"
-"natori.miyagi.jp\0"
-"from-ak.com\0"
-"geometre-expert.fr\0\xd0\xba\xd0\xbe\xd0\xbc\0s3.dualstack.ap-south-1.amazonaws.com\0"
-"davvesiida.no\0"
-"id.ir\0"
-"mihama.fukui.jp\0"
-"pdns.page\0"
-"gs.st.no\0"
-"aprendemas.cl\0osaka.jp\0githubusercontent.com\0"
+"delta\0"
+"tjx\0"
+"s\xc3\xbc""dtirol.it\0"
+"nome.pt\0toys\0"
+"toyohashi.aichi.jp\0mn.us\0"
+"b\xc3\xa6rum.no\0"
+"readthedocs.io\0"
+"chattanooga.museum\0"
+"urayasu.chiba.jp\0hirono.iwate.jp\0"
+"*.vps.myjino.ru\0"
+"bruxelles.museum\0fhv.se\0"
+"archi\0"
+"narashino.chiba.jp\0broke-it.net\0"
+"okawa.kochi.jp\0"
+"test.tj\0"
+"hiraya.nagano.jp\0"
+"nyc.museum\0ap-northeast-2.elasticbeanstalk.com\0"
+"shimoji.okinawa.jp\0"
+"musica.ar\0miyama.mie.jp\0"
+"kushimoto.wakayama.jp\0"
+"prime\0"
+"ybo.review\0"
+"fujisawa.kanagawa.jp\0"
+"k12.ga.us\0"
+"deno-staging.dev\0"
+"from-in.com\0"
+"chieti.it\0kred\0"
+"krakow.pl\0"
+"s3-website-ap-southeast-2.amazonaws.com\0"
+"musica.bo\0florida.museum\0"
+"house.museum\0"
+"yoichi.hokkaido.jp\0"
+"futbol\0s3.eu-west-2.amazonaws.com\0"
+"misugi.mie.jp\0london.museum\0"
+"\xe9\x95\xb7\xe5\xb4\x8e.jp\0"
+"isla.pr\0school.za\0"
+"\xd0\xbc\xd0\xbe\xd0\xbd\0"
+"journal.aero\0bsb.br\0kawajima.saitama.jp\0"
+"webredirect.org\0"
+"homesecuritypc.com\0"
+"time.museum\0fylkesbibl.no\0"
+"lib.wy.us\0test.ru\0"
+"wakayama.wakayama.jp\0top\0"
+"hotel.lk\0shouji\0on-aptible.com\0"
+"mizumaki.fukuoka.jp\0"
+"sp.it\0"
+"urn.arpa\0mc.eu.org\0"
+"wa.au\0"
+"builders\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0"
+"versailles.museum\0"
+"naie.hokkaido.jp\0"
+"eastcoast.museum\0"
+"\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0"
+"bl.it\0"
+"611.to\0"
+"woodside\0"
+"vda.it\0"
+"hb.cldmail.ru\0"
"mallorca.museum\0"
-"mosvik.no\0"
-"xs4all.space\0"
-"jls-sto3.elastx.net\0"
-"niepce.museum\0"
-"scjohnson\0"
-"kyuragi.saga.jp\0dyndns-mail.com\0"
-"dyndns.ws\0"
-"tunk.org\0"
+"aerobatic.aero\0"
+"moriyama.shiga.jp\0sande.m\xc3\xb8re-og-romsdal.no\0"
+"dgca.aero\0rikuzentakata.iwate.jp\0tsunan.niigata.jp\0"
+"lt.eu.org\0"
+"is-a-bookkeeper.com\0"
+"cesenaforli.it\0kamioka.akita.jp\0and.museum\0"
+"otsuka\0"
+"is.gov.pl\0"
+"iveland.no\0"
+"ah.cn\0"
+"hatsukaichi.hiroshima.jp\0"
+"obu.aichi.jp\0"
+"ubs\0"
+"forex\0"
+"gouv.fr\0kvinnherad.no\0siljan.no\0trv\0"
+"lamborghini\0pgafan.net\0"
+"elverum.no\0hitachi\0"
+"halsa.no\0ping\0"
+"nordreisa.no\0"
+"pink\0"
+"rzeszow.pl\0"
+"gu.us\0eu-west-2.elasticbeanstalk.com\0ravendb.me\0"
+"hotel.hu\0filegear.me\0"
+"campobasso.it\0"
+"ouchi.saga.jp\0"
+"ravendb.run\0"
+"fnd.br\0"
+"soni.nara.jp\0qbuser.com\0"
+"\xc3\xb8rsta.no\0cloudns.pro\0"
+"cc.oh.us\0"
+"susaki.kochi.jp\0technology\0"
+"pagefrontapp.com\0"
+"gouv.ht\0homeunix.net\0"
+"k12.wa.us\0tui\0is-a-landscaper.com\0"
+"monza.it\0inagi.tokyo.jp\0"
+"indigena.bo\0mitou.yamaguchi.jp\0"
+"rmit\0from-mi.com\0"
+"kyowa.akita.jp\0setagaya.tokyo.jp\0"
+"m.se\0"
+"toyono.osaka.jp\0selje.no\0"
+"platform0.app\0"
+"stockholm\0"
+"k12.ar.us\0"
+"caravan\0"
+"tonsberg.no\0"
+"\xe7\xae\x87\xe4\xba\xba.hk\0iwi.nz\0\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0"
+"gouv.bj\0gb.com\0"
+"omotego.fukushima.jp\0taketomi.okinawa.jp\0"
+"tama.tokyo.jp\0salon\0"
+"isesaki.gunma.jp\0"
+"tvs\0"
+"cuiaba.br\0"
+"watari.miyagi.jp\0grong.no\0dyndns-ip.com\0"
+"news\0"
+"livinghistory.museum\0"
+"okutama.tokyo.jp\0kustanai.ru\0"
+"gouv.ci\0"
+"kawachinagano.osaka.jp\0fribourg.museum\0"
+"higashikawa.hokkaido.jp\0steigen.no\0"
+"toyokawa.aichi.jp\0ishigaki.okinawa.jp\0"
+"firenze.it\0"
+"ato.br\0tonaki.okinawa.jp\0"
+"vinnytsia.ua\0"
+"recife.br\0next\0"
+"steam.museum\0"
+"\xe4\xbd\x90\xe8\xb3\x80.jp\0onion\0"
+"north.museum\0kustanai.su\0"
+"trentinsued-tirol.it\0"
+"hinode.tokyo.jp\0"
+"raisa.no\0"
+"miura.kanagawa.jp\0"
+"showtime\0mc.ax\0"
+"eastasia.azurestaticapps.net\0"
+"*.compute.estate\0"
+"galsa.no\0"
+"moma.museum\0"
"tsugaru.aomori.jp\0"
-"kitadaito.okinawa.jp\0"
-"mydissent.net\0"
-"gs.fm.no\0is-very-good.org\0"
-"rishirifuji.hokkaido.jp\0nishiawakura.okayama.jp\0en-root.fr\0"
-"andriatranibarletta.it\0"
-"bond\0"
-"karikatur.museum\0fyresdal.no\0norddal.no\0"
-"takayama.nagano.jp\0"
-"nakayama.yamagata.jp\0"
-"tickets\0"
-"trentino-suedtirol.it\0"
-"saarland\0"
-"avocat.pro\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0"
-"airguard.museum\0"
-"torahime.shiga.jp\0from-pr.com\0"
-"ddnss.org\0"
-"id.lv\0"
-"cr.it\0potenza.it\0"
-"planetarium.museum\0"
-"saka.hiroshima.jp\0id.ly\0"
-"nagano.jp\0kakogawa.hyogo.jp\0"
-"muko.kyoto.jp\0"
-"platter-app.dev\0"
-"kuzumaki.iwate.jp\0s3-website.eu-west-2.amazonaws.com\0vps.mcdir.ru\0"
-"obu.aichi.jp\0\xc3\xa5mot.no\0book\0"
-"brand.se\0"
-"bc.ca\0jefferson.museum\0"
+"dyndns-office.com\0"
+"sn\xc3\xa5sa.no\0is-a-anarchist.com\0"
+"dyn53.io\0"
+"freiburg.museum\0"
+"kamisunagawa.hokkaido.jp\0"
+"qh.cn\0"
+"sera.hiroshima.jp\0malvik.no\0"
+"hn.cn\0"
+"obira.hokkaido.jp\0dyndns.org\0miniserver.com\0"
+"sor-fron.no\0"
+"ballangen.no\0"
+"sor-odal.no\0"
+"minato.tokyo.jp\0pfizer\0"
+"caa.aero\0"
+"adobeaemcloud.com\0"
+"\xe5\xb2\xa9\xe6\x89\x8b.jp\0legnica.pl\0"
+"southcarolina.museum\0juniper\0"
+"frei.no\0"
+"srv.br\0"
+"nishikawa.yamagata.jp\0"
+"fundacio.museum\0ok.us\0"
+"uchinada.ishikawa.jp\0botanical.museum\0"
+"nishiarita.saga.jp\0int.eu.org\0"
+"ga.us\0"
+"ogi.saga.jp\0"
+"konyvelo.hu\0"
+"mansion.museum\0rl.no\0"
+"bestbuy\0from-ky.com\0"
+"soo.kagoshima.jp\0kppsp.gov.pl\0cc.ri.us\0"
+"saiki.oita.jp\0"
+"yachts\0"
+"rec.br\0cc.mt.us\0cc.nd.us\0\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"protonet.io\0"
+"kitami.hokkaido.jp\0"
+"centralus.azurestaticapps.net\0"
+"ra-ru.ru\0"
+"v.bg\0s3.dualstack.ap-southeast-1.amazonaws.com\0"
+"ah.no\0"
+"britishcolumbia.museum\0aid.pl\0"
+"1.bg\0"
+"ybo.science\0"
+"poniatowa.pl\0"
+"rec.co\0gr.com\0"
+"k\xc3\xa5""fjord.no\0"
+"washingtondc.museum\0"
+"kamimine.saga.jp\0"
+"ichiba.tokushima.jp\0luzern.museum\0loginline.app\0"
+"tosu.saga.jp\0uno\0"
+"des.br\0myoko.niigata.jp\0"
+"otaki.chiba.jp\0"
+"is-very-good.org\0"
+"kicks-ass.net\0"
+"otsuki.yamanashi.jp\0uol\0"
+"frontier\0"
+"handa.aichi.jp\0sweetpepper.org\0wellbeingzone.co.uk\0"
+"g\xc3\xbcnstigliefern.de\0"
+"gildeskal.no\0se.net\0ru.net\0"
+"ikeda.fukui.jp\0community.museum\0osaka\0serveftp.net\0"
+"culture.museum\0fineart.museum\0"
+"from-pr.com\0"
+"mk.eu.org\0"
+"for-the.biz\0"
+"aki.kochi.jp\0"
+"yamato.fukushima.jp\0"
+"fuefuki.yamanashi.jp\0*.in.futurecms.at\0fra1-de.cloudjiffy.net\0"
+"sanfrancisco.museum\0"
+"mc.it\0kyonan.chiba.jp\0yahoo\0"
+"otsu.shiga.jp\0hoylandet.no\0konsulat.gov.pl\0ups\0"
+"nanporo.hokkaido.jp\0honefoss.no\0lib.de.us\0"
+"ericsson\0"
+"beiarn.no\0"
+"fujikawa.yamanashi.jp\0"
+"gsm.pl\0"
+"trentin-suedtirol.it\0"
+"mel.cloudlets.com.au\0"
"ven.it\0"
-"z.se\0"
-"matsushima.miyagi.jp\0"
-"virtueeldomein.nl\0"
-"shimokawa.hokkaido.jp\0sandnessjoen.no\0"
-"blogdns.net\0"
-"allfinanz\0"
-"is-an-engineer.com\0"
-"tatar\0"
-"midsund.no\0"
-"ikusaka.nagano.jp\0win\0"
-"tozawa.yamagata.jp\0"
-"sigdal.no\0grondar.za\0"
-"ddns.me\0"
-"lg.jp\0"
-"meteorapp.com\0"
-"paas.datacenter.fi\0"
-"spacekit.io\0"
-"myphotos.cc\0"
-"far.br\0katori.chiba.jp\0"
-"bpl.biz\0"
-"amagasaki.hyogo.jp\0schweiz.museum\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0"
-"unjarga.no\0"
-"fhs.no\0"
-"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0merseine.nu\0"
-"ayagawa.kagawa.jp\0"
-"onred.one\0"
-"homelinux.net\0"
-"townnews-staging.com\0"
-"kawagoe.saitama.jp\0vlaanderen.museum\0"
-"sera.hiroshima.jp\0"
-"olkusz.pl\0"
-"dep.no\0"
-"ge.it\0cn-northwest-1.eb.amazonaws.com.cn\0"
-"travel\0"
-"wme\0"
-"zao.miyagi.jp\0toyota\0filegear.me\0"
-"o.bg\0belau.pw\0"
-"pilot.aero\0netlify.app\0"
-"fukusaki.hyogo.jp\0"
-"honjo.saitama.jp\0"
-"parma.it\0k12.az.us\0tushu\0"
-"ekloges.cy\0"
-"kui.hiroshima.jp\0"
-"oshu.iwate.jp\0"
-"abruzzo.it\0xenapponazure.com\0"
-"fujikawa.shizuoka.jp\0"
-"wiki.bo\0"
-"static.land\0"
-"wiki.br\0hockey\0"
+"cieszyn.pl\0weir\0"
+"messina.it\0"
+"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0"
+"static.observableusercontent.com\0"
+"mosj\xc3\xb8""en.no\0"
+"homelinux.org\0"
+"forum\0"
+"\xc3\xa5mli.no\0"
+"takasago.hyogo.jp\0eigersund.no\0"
+"trader.aero\0nakagawa.hokkaido.jp\0"
+"onjuku.chiba.jp\0americanfamily\0"
+"komatsushima.tokushima.jp\0"
+"lima-city.de\0"
+"heritage.museum\0"
+"kuju.oita.jp\0kv\xc3\xa6nangen.no\0"
+"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0columbia.museum\0"
+"cloud\0"
+"\xe5\xba\x83\xe5\xb3\xb6.jp\0hayakawa.yamanashi.jp\0scienceandhistory.museum\0"
+"couchpotatofries.org\0"
+"takamatsu.kagawa.jp\0oshima.tokyo.jp\0"
+"sar.it\0"
+"aus.basketball\0"
+"wa.us\0"
+"lu.eu.org\0me.eu.org\0"
+"nanae.hokkaido.jp\0"
+"rokunohe.aomori.jp\0naval.museum\0"
+"fyresdal.no\0"
+"asahi.chiba.jp\0murakami.niigata.jp\0"
+"cloudns.org\0"
+"christmas\0"
+"kumano.mie.jp\0"
+"savona.it\0"
+"naples.it\0chigasaki.kanagawa.jp\0blog.gt\0"
+"airline.aero\0paas.hosted-by-previder.com\0lima-city.at\0"
+"us-west-2.elasticbeanstalk.com\0"
"oracle\0"
-"chuo.tokyo.jp\0cc.ak.us\0"
-"adv.mz\0"
-"tonami.toyama.jp\0ggee\0"
-"\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0"
-"ind.br\0jogasz.hu\0"
-"artanddesign.museum\0society.museum\0"
-"design\0"
-"cim.br\0global\0"
-"likes-pie.com\0"
-"augustow.pl\0dyndns-pics.com\0"
-"cable-modem.org\0"
-"seirou.niigata.jp\0svizzera.museum\0doesntexist.org\0"
-"wow\0"
-"kitagata.saga.jp\0hidaka.saitama.jp\0engineer\0"
-"minamiyamashiro.kyoto.jp\0"
-"asuke.aichi.jp\0ibara.okayama.jp\0fujinomiya.shizuoka.jp\0"
-"ashiya.hyogo.jp\0torsken.no\0id.us\0"
-"name\0"
-"vipsinaapp.com\0"
-"equipment.aero\0matsuzaki.shizuoka.jp\0"
-"matsumoto.nagano.jp\0""0e.vc\0"
-"kunst.museum\0"
-"norton\0"
-"cinema.museum\0lea\xc5\x8bgaviika.no\0"
-"miyama.mie.jp\0"
-"yokohama\0"
+"katagami.akita.jp\0oyodo.nara.jp\0"
+"ugim.gov.pl\0operaunite.com\0"
+"luroy.no\0yombo.me\0"
+"kuki.saitama.jp\0"
+"vet\0"
+"b.bg\0"
+"ise.mie.jp\0"
+"lv.eu.org\0"
+"lima-city.ch\0"
+"kawaguchi.saitama.jp\0"
+"b.br\0miharu.fukushima.jp\0"
+"koshimizu.hokkaido.jp\0minato.osaka.jp\0flatanger.no\0"
+"wassamu.hokkaido.jp\0"
+"gotsu.shimane.jp\0"
+"tohnosho.chiba.jp\0"
+"bytom.pl\0"
+"tokyo.jp\0"
+"coz.br\0rindal.no\0"
+"macapa.br\0kitakami.iwate.jp\0london.cloudapps.digital\0nyaa.am\0"
+"n\xc3\xa6r\xc3\xb8y.no\0"
+"saarland\0"
+"blog.bo\0kotoura.tottori.jp\0from-or.com\0"
+"yakage.okayama.jp\0"
+"blog.br\0gouv.sn\0"
+"upaas.kazteleport.kz\0alpha.bounty-full.com\0"
+"ukco.me\0"
+"game-server.cc\0"
+"hakata.fukuoka.jp\0yanagawa.fukuoka.jp\0"
+"mihama.wakayama.jp\0lukow.pl\0"
+"rec.nf\0"
+"ot.it\0pd.it\0saka.hiroshima.jp\0"
+"vig\0"
+"kamitsue.oita.jp\0krodsherad.no\0dnsup.net\0"
+"grimstad.no\0"
+"shintoku.hokkaido.jp\0"
+"cruise\0"
+"verdal.no\0global\0panasonic\0"
+"ce.it\0illustration.museum\0rauma.no\0lon-2.paas.massivegrid.net\0"
+"vin\0"
+"vip\0"
+"yachiyo.chiba.jp\0es.eu.org\0"
+"now-dns.top\0"
+"settlers.museum\0cn-north-1.eb.amazonaws.com.cn\0"
+"parma.it\0kameyama.mie.jp\0"
+"awaji.hyogo.jp\0"
+"from-la.net\0"
+"tsuruoka.yamagata.jp\0"
+"codes\0"
+"trentin-s\xc3\xbc""d-tirol.it\0yuzawa.niigata.jp\0nord-fron.no\0scrysec.com\0"
+"mino.gifu.jp\0"
+"roros.no\0js.wpenginepowered.com\0"
+"\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"kawatana.nagasaki.jp\0aquarium.museum\0"
+"durban\0"
+"info.gu\0"
+"lenug.su\0"
+"ind.br\0farmequipment.museum\0search\0"
+"whaling.museum\0"
+"mydobiss.com\0"
+"info.ht\0\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0"
+"info.hu\0"
+"origins\0"
+"tec.br\0\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0"
+"rana.no\0sochi.su\0"
+"holmestrand.no\0"
+"\xc3\xb8vre-eiker.no\0"
+"sakai.osaka.jp\0aarp\0dyndns-work.com\0"
+"schaeffler\0"
+"shibecha.hokkaido.jp\0niyodogawa.kochi.jp\0rec.ro\0"
+"hattfjelldal.no\0\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0"
+"info.et\0"
+"info.fj\0"
+"cc.pa.us\0"
"navoi.su\0"
-"lakas.hu\0furano.hokkaido.jp\0hjelmeland.no\0hk.com\0"
-"ap-southeast-1.elasticbeanstalk.com\0"
-"iheya.okinawa.jp\0"
-"kashiwazaki.niigata.jp\0"
-"gouv.fr\0space\0*.alces.network\0"
-"taishi.hyogo.jp\0koza.wakayama.jp\0"
-"yachimata.chiba.jp\0"
-"ine.kyoto.jp\0dyndns-blog.com\0groks-this.info\0"
-"maritimo.museum\0edu.krd\0"
-"oshino.yamanashi.jp\0"
-"cr.ua\0"
-"isahaya.nagasaki.jp\0"
-"chuo.osaka.jp\0"
-"online.museum\0"
-"namie.fukushima.jp\0"
-"selfip.net\0"
-"udi.br\0hi.cn\0rm.it\0"
-"geo.br\0tuva.su\0"
-"sokndal.no\0barsy.net\0remotewd.com\0"
-"ssl.origin.cdn77-secure.org\0"
-"rotorcraft.aero\0"
-"otaki.saitama.jp\0"
-"wtc\0"
-"kani.gifu.jp\0"
-"hanamigawa.chiba.jp\0yokaichiba.chiba.jp\0"
-"ena.gifu.jp\0wtf\0"
-"gouv.ht\0corsica\0jaguar\0"
-"ind.gt\0vm.bytemark.co.uk\0misconfused.org\0"
-"h\xc3\xa1""bmer.no\0lg.ua\0"
-"tsuiki.fukuoka.jp\0"
+"ce.leg.br\0"
+"takehara.hiroshima.jp\0"
+"futsu.nagasaki.jp\0"
+"kr.eu.org\0"
+"bu.no\0"
+"yamanakako.yamanashi.jp\0"
+"roma.it\0bounty-full.com\0"
+"guardian\0"
+"stpetersburg.museum\0enterprises\0"
+"gmbh\0"
+"canon\0square7.net\0prvcy.page\0"
+"hachioji.tokyo.jp\0"
+"iwanuma.miyagi.jp\0kawasaki.miyagi.jp\0"
+"info.cx\0seidat.net\0"
+"potager.org\0"
+"business\0sydney\0s3-us-west-2.amazonaws.com\0"
+"shikabe.hokkaido.jp\0gouv.km\0"
+"furudono.fukushima.jp\0"
+"s3.us-east-2.amazonaws.com\0"
+"wellbeingzone.eu\0"
+"info.ec\0ina.saitama.jp\0sanofi\0"
+"moseushi.hokkaido.jp\0"
+"\xd0\xbe\xd1\x80\xd0\xb3\0v.ua\0"
+"civilization.museum\0filegear-au.me\0"
+"secure\0"
+"hellas.museum\0rec.ve\0"
+"ind.gt\0masfjorden.no\0"
+"act.au\0"
+"massa-carrara.it\0"
+"ashibetsu.hokkaido.jp\0"
+"place\0resindevice.io\0"
+"servebbs.net\0"
+"half.host\0"
+"info.bb\0"
+"s3-website.eu-west-2.amazonaws.com\0"
+"tsubame.niigata.jp\0info.at\0"
+"info.au\0"
+"haga.tochigi.jp\0homeunix.org\0"
+"naklo.pl\0"
+"port.fr\0izunokuni.shizuoka.jp\0goip.de\0"
+"info.az\0"
+"noboribetsu.hokkaido.jp\0gouv.ml\0sondre-land.no\0"
+"yoshida.shizuoka.jp\0"
+"aq.it\0ba.it\0"
+"shonai.fukuoka.jp\0gulen.no\0"
+"info.bo\0"
+"saito.miyazaki.jp\0mykolaiv.ua\0"
+"kaminokawa.tochigi.jp\0arna.no\0schulserver.de\0"
+"ind.in\0ogawa.saitama.jp\0from-ok.com\0"
+"harvestcelebration.museum\0fjell.no\0"
+"cern\0"
+"info.co\0sec.ps\0on-the-web.tv\0hk.org\0"
+"chernovtsy.ua\0"
+"kochi.jp\0health.museum\0"
+"gojome.akita.jp\0"
+"cincinnati.museum\0"
+"midori.chiba.jp\0kouyama.kagoshima.jp\0"
+"vanguard\0gitlab.io\0"
+"blog.vu\0"
+"oceanographique.museum\0"
+"yorii.saitama.jp\0"
+"mobile\0is-an-anarchist.com\0"
+"\xe5\x9f\xbc\xe7\x8e\x89.jp\0ind.kw\0"
+"sekigahara.gifu.jp\0"
+"coldwar.museum\0"
+"express.aero\0"
+"namikata.ehime.jp\0"
+"edogawa.tokyo.jp\0"
+"manx.museum\0"
+"saogonca.br\0"
+"tksat.bo\0batsfjord.no\0karpacz.pl\0bananarepublic\0"
+"nishinomiya.hyogo.jp\0"
+"fi.eu.org\0"
+"cc.nm.us\0able\0"
+"sphinx.mythic-beasts.com\0"
+"\xc3\xa5krehamn.no\0"
+"gwangju.kr\0finn\xc3\xb8y.no\0"
+"obama.fukui.jp\0tsukuba.ibaraki.jp\0"
+"k12.mn.us\0"
+"kunstunddesign.museum\0landes.museum\0b.se\0"
+"amber.museum\0annefrank.museum\0\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0"
+"tsushima.aichi.jp\0k12.fl.us\0"
"kusatsu.shiga.jp\0"
-"tozsde.hu\0*.on-rancher.cloud\0"
-"crimea.ua\0dubai\0"
-"izena.okinawa.jp\0"
-"test.tj\0"
-"ferrara.it\0"
-"shimane.jp\0"
-"turystyka.pl\0"
-"gouv.bj\0soma.fukushima.jp\0yoshida.shizuoka.jp\0"
-"tenei.fukushima.jp\0"
-"cheap\0"
-"ind.in\0"
-"intl.tn\0"
-"championship.aero\0ginowan.okinawa.jp\0"
-"properties\0"
-"kitahata.saga.jp\0redumbrella\0"
-"med.br\0"
-"gouv.ci\0"
-"plo.ps\0"
-"crew.aero\0kppsp.gov.pl\0\xeb\x8b\xb7\xec\xbb\xb4\0"
-"tomigusuku.okinawa.jp\0"
-"izumiotsu.osaka.jp\0"
-"twmail.cc\0"
-"cc.tx.us\0ann-arbor.mi.us\0"
-"b\xc3\xb8mlo.no\0"
-"trento.it\0ulvik.no\0"
-"trentin-sued-tirol.it\0"
-"pvh.br\0vestby.no\0"
-"sex.hu\0wsa.gov.pl\0"
-"garden\0"
-"h\xc3\xa1pmir.no\0test.ru\0"
-"community-pro.de\0"
-"minoh.osaka.jp\0edgeapp.net\0vercel.app\0"
-"upow.gov.pl\0"
-"rich\0"
-"sanuki.kagawa.jp\0"
-"jeonnam.kr\0"
-"tadaoka.osaka.jp\0abarth\0"
-"ind.kw\0"
-"med.ec\0"
-"hiraizumi.iwate.jp\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0"
-"med.ee\0microsoft\0"
-"kunimi.fukushima.jp\0nore-og-uvdal.no\0"
-"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0feedback\0"
-"noda.iwate.jp\0"
-"yame.fukuoka.jp\0press.museum\0qa2.com\0"
-"wakasa.tottori.jp\0rehab\0kr.com\0"
-"za.net\0"
-"pagespeedmobilizer.com\0"
-"hioki.kagoshima.jp\0"
-"genkai.saga.jp\0"
-"xin\0"
-"gmina.pl\0"
-"andebu.no\0"
-"vote\0"
-"travelersinsurance\0"
-"campania.it\0"
-"\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0"
-"koto.tokyo.jp\0voto\0"
-"gos.pk\0"
-"amami.kagoshima.jp\0navy\0"
-"ftpaccess.cc\0"
-"cloudcontrolapp.com\0"
-"is-a-financialadvisor.com\0"
-"gjerdrum.no\0"
-"fj.cn\0pn.it\0tuxfamily.org\0"
-"aeroclub.aero\0louvre.museum\0"
-"monza.it\0"
-"osaki.miyagi.jp\0"
-"as.us\0"
-"safety.aero\0"
-"dabur\0"
-"west1-us.cloudjiffy.net\0"
-"med.ht\0"
-"iizuka.fukuoka.jp\0"
-"macys\0"
-"tec.br\0obanazawa.yamagata.jp\0"
-"sor-fron.no\0"
-"yamato.fukushima.jp\0kannami.shizuoka.jp\0dontexist.com\0"
-"archaeology.museum\0hembygdsforbund.museum\0"
-"n4t.co\0"
-"bukhara.su\0"
-"1.bg\0"
-"healthcare\0temp-dns.com\0"
-"seljord.no\0"
-"wada.nagano.jp\0mazury.pl\0"
-"genoa.it\0"
-"airtraffic.aero\0kashiwa.chiba.jp\0is-a-patsfan.org\0"
-"nanporo.hokkaido.jp\0*.futurecms.at\0"
-"o.se\0"
-"kids.us\0"
-"joboji.iwate.jp\0"
-"ushiku.ibaraki.jp\0"
-"schokokeks.net\0"
-"lon-1.paas.massivegrid.net\0"
-"time.museum\0"
-"kanoya.kagoshima.jp\0"
-"ah.cn\0ashiya.fukuoka.jp\0"
-"urakawa.hokkaido.jp\0"
-"cafe\0"
-"sex.pl\0"
-"kamimine.saga.jp\0"
-"\xd0\xbc\xd0\xba\xd0\xb4\0hughes\0"
-"taobao\0"
-"happou.akita.jp\0tokke.no\0"
-"jor.br\0"
-"nationwide\0"
-"fukuchi.fukuoka.jp\0shobara.hiroshima.jp\0"
-"shichinohe.aomori.jp\0"
-"otobe.hokkaido.jp\0ishigaki.okinawa.jp\0"
+"microlight.aero\0trentinos-tirol.it\0"
+"skierv\xc3\xa1.no\0skanland.no\0play\0"
+"g12.br\0"
+"cim.br\0"
+"is-a-geek.com\0"
+"s\xc3\xb8r-varanger.no\0"
+"kamishihoro.hokkaido.jp\0"
+"sola.no\0"
+"pa.gov.br\0telebit.io\0"
+"seven\0"
+"luster.no\0"
+"okayama.okayama.jp\0organic\0"
+"ra.it\0polkowice.pl\0"
+"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0win\0"
+"akishima.tokyo.jp\0"
+"eid.no\0"
+"balestrand.no\0"
+"caracal.mythic-beasts.com\0"
+"\xe5\x85\xac\xe5\x8f\xb8.cn\0"
+"nasu.tochigi.jp\0"
+"idf.il\0miasa.nagano.jp\0"
+"cagliari.it\0"
+"pb.gov.br\0rentals\0za.com\0"
+"room\0"
+"dyndns-at-home.com\0"
+"floripa.br\0orx.biz\0"
+"balsan-sudtirol.it\0"
+"\xe5\x85\xac\xe5\x8f\xb8.hk\0"
+"urbino-pesaro.it\0"
+"oguchi.aichi.jp\0kirkenes.no\0"
+"mombetsu.hokkaido.jp\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0buzz\0kicks-ass.org\0"
+"jdf.br\0gs.cn\0"
+"h\xc3\xb8nefoss.no\0"
+"is-a-knight.org\0"
+"rawa-maz.pl\0e12.ve\0"
+"us-east-1.elasticbeanstalk.com\0"
+"rel.ht\0"
+"kragero.no\0"
+"kr.com\0"
+"pueblo.bo\0santoandre.br\0"
+"wme\0"
+"ind.tn\0"
+"iwakuni.yamaguchi.jp\0info.ve\0"
+"router.management\0"
+"doomdns.org\0qcx.io\0"
+"daito.osaka.jp\0"
+"dr.na\0"
+"vf.no\0info.vn\0pokrovsk.su\0"
+"foz.br\0"
+"bible.museum\0"
+"wielun.pl\0cc.mi.us\0"
+"nobeoka.miyazaki.jp\0"
+"cc.id.us\0"
"nakano.nagano.jp\0"
-"davvenj\xc3\xa1rga.no\0barsy.pro\0"
-"cloudapps.digital\0fr-1.paas.massivegrid.net\0"
-"haboro.hokkaido.jp\0"
-"ta.it\0"
-"anamizu.ishikawa.jp\0"
-"stjordalshalsen.no\0"
-"lillehammer.no\0"
-"qld.edu.au\0consulting\0"
-"med.ly\0ind.tn\0"
-"\xc3\xa1k\xc5\x8boluokta.no\0"
-"computerhistory.museum\0"
-"b\xc3\xa5tsfjord.no\0mk.ua\0"
-"soo.kagoshima.jp\0narvik.no\0k12.mn.us\0"
-"kyoto.jp\0"
-"onna.okinawa.jp\0"
-"koto.shiga.jp\0"
-"j.scaleforce.net\0"
-"ina.ibaraki.jp\0lib.wi.us\0teaches-yoga.com\0"
-"d.bg\0"
-"barsy.pub\0loginto.me\0"
-"showa.yamanashi.jp\0\xe6\x97\xb6\xe5\xb0\x9a\0"
-"sakura.chiba.jp\0"
-"bari.it\0fastvps-server.com\0"
-"rec.br\0"
-"med.om\0barsy.me\0"
-"aomori.jp\0sakyo.kyoto.jp\0k12.va.us\0"
-"hamura.tokyo.jp\0"
-"med.pa\0"
-"nisshin.aichi.jp\0net.eu.org\0"
-"batsfjord.no\0"
-"decorativearts.museum\0farmers\0"
-"no.it\0ptplus.fit\0"
-"london.museum\0"
-"rec.co\0r\xc3\xb8yrvik.no\0"
-"\xd0\xbc\xd0\xbe\xd0\xbd\0"
-"eng.pro\0"
-"med.pl\0"
-"h\xc3\xb8yanger.no\0"
-"hobby-site.org\0pointto.us\0"
-"yosemite.museum\0consulado.st\0"
-"kumenan.okayama.jp\0upaas.kazteleport.kz\0"
-"shunan.yamaguchi.jp\0k12.id.us\0"
-"brescia.it\0"
-"minamioguni.kumamoto.jp\0duck\0"
-"s\xc3\xbc""dtirol.it\0"
-"call\0gr.com\0"
-"vt.it\0wellbeingzone.eu\0"
-"\xe9\x9d\x92\xe6\xa3\xae.jp\0newhampshire.museum\0"
-"futaba.fukushima.jp\0"
-"firestone\0t3l3p0rt.net\0"
-"act.edu.au\0hi.us\0"
-"fuji.shizuoka.jp\0hokuto.yamanashi.jp\0discount\0"
-"molde.no\0"
-"misaki.okayama.jp\0v\xc3\xa6r\xc3\xb8y.no\0servemp3.com\0"
-"arna.no\0"
-"lucca.it\0med.sa\0"
-"camp\0"
-"med.sd\0"
-"archi\0feste-ip.net\0"
-"im.it\0tagawa.fukuoka.jp\0gouv.sn\0"
-"gs.tm.no\0vagsoy.no\0gmail\0"
-"kuroishi.aomori.jp\0takaoka.toyama.jp\0"
-"lug.org.uk\0"
-"moroyama.saitama.jp\0"
-"opoczno.pl\0"
-"emilia-romagna.it\0bulsan-sudtirol.it\0"
-"dental\0"
-"nanbu.yamanashi.jp\0"
-"piw.gov.pl\0mckinsey\0"
-"homelinux.org\0"
-"histoire.museum\0"
-"\xe7\xbb\x84\xe7\xbb\x87.hk\0gaivuotna.no\0playstation\0"
-"mihara.hiroshima.jp\0"
-"flynnhosting.net\0"
-"pisz.pl\0"
-"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0"
-"cc.dc.us\0"
-"hyllestad.no\0\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0"
-"nemuro.hokkaido.jp\0*.triton.zone\0"
-"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0"
-"usa.museum\0"
-"uk0.bigv.io\0"
-"xxx\0loans\0"
-"\xe6\xbe\xb3\xe9\x96\x80\0"
-"shizuoka.shizuoka.jp\0furniture\0"
-"molise.it\0"
-"umbria.it\0"
-"ah.no\0naamesjevuemie.no\0"
-"civilwar.museum\0temasek\0pixolino.com\0"
-"sodegaura.chiba.jp\0"
-"eu.org\0"
-"fineart.museum\0\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0xyz\0"
-"kv\xc3\xa6""fjord.no\0"
-"oya.to\0"
-"care\0kinghost.net\0"
-"b\xc3\xa1hcavuotna.no\0"
-"ome.tokyo.jp\0kobierzyce.pl\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0"
-"port.fr\0taifun-dns.de\0"
-"nakatane.kagoshima.jp\0lenvik.no\0"
-"barsy.uk\0"
-"sumoto.hyogo.jp\0hirado.nagasaki.jp\0casa\0mozilla-iot.org\0"
-"verran.no\0cars\0"
-"accident-investigation.aero\0case\0ny-2.paas.massivegrid.net\0"
-"storj.farm\0"
-"vallee-aoste.it\0hida.gifu.jp\0cash\0"
-"j.layershift.co.uk\0"
-"tsuruta.aomori.jp\0"
-"of.work\0"
-"suzu.ishikawa.jp\0"
-"verm\xc3\xb6gensberatung\0*.s5y.io\0"
-"barlettatraniandria.it\0"
-"shonai.yamagata.jp\0lamer\0"
-"001www.com\0"
-"vall\xc3\xa9""e-d-aoste.it\0"
-"forli-cesena.it\0fuossko.no\0"
-"mo\xc3\xa5reke.no\0"
-"members.linode.com\0"
-"posts-and-telecommunications.museum\0protonet.io\0"
-"roma.museum\0"
-"kunitomi.miyazaki.jp\0museumvereniging.museum\0"
-"nango.fukushima.jp\0"
-"contemporaryart.museum\0"
-"rec.nf\0hattfjelldal.no\0"
-"from-mt.com\0from-nd.com\0"
-"is-a-techie.com\0"
-"commune.am\0"
-"siena.it\0gouv.km\0"
-"log.br\0"
-"dyndns.biz\0daemon.panel.gg\0"
-"kirovograd.ua\0events\0"
-"!city.kawasaki.jp\0"
-"bamble.no\0"
-"web.bo\0"
-"x.bg\0cc.ok.us\0"
-"from-ky.com\0"
-"kaho.fukuoka.jp\0sennan.osaka.jp\0"
-"larsson.museum\0barsy.org\0"
-"\xe6\xbe\xb3\xe9\x97\xa8\0"
-"computer\0"
-"you\0"
-"cosenza.it\0tec.ve\0"
-"qld.gov.au\0muenchen.museum\0"
-"davvenjarga.no\0"
-"dattoweb.com\0"
-"engineer.aero\0web.co\0"
-"repbody.aero\0"
-"*.kitakyushu.jp\0"
-"pc.it\0gouv.ml\0nikon\0"
-"fujikawaguchiko.yamanashi.jp\0boston.museum\0international\0"
-"gift\0"
-"stordal.no\0coach\0"
-"aya.miyazaki.jp\0"
-"vt.us\0eastasia.azurestaticapps.net\0"
-"web.do\0"
-"higashinaruse.akita.jp\0"
-"now-dns.net\0"
-"barum.no\0kerryproperties\0"
-"oregontrail.museum\0"
-"tatsuno.hyogo.jp\0"
-"bl.it\0otsuka\0"
-"odessa.ua\0"
-"rsc.cdn77.org\0"
-"\xe4\xba\xac\xe9\x83\xbd.jp\0bronnoy.no\0"
-"mizumaki.fukuoka.jp\0dvag\0"
-"*.sapporo.jp\0griw.gov.pl\0discourse.group\0"
-"chattanooga.museum\0"
-"rec.ro\0"
-"freiburg.museum\0"
-"higashi.okinawa.jp\0"
-"pl.eu.org\0"
-"matsumae.hokkaido.jp\0"
-"d.se\0"
+"miyama.fukuoka.jp\0*.cryptonomic.net\0"
+"k.bg\0"
+"\xe5\xa4\xa7\xe5\x88\x86.jp\0"
"bozen-sudtirol.it\0"
-"muncie.museum\0"
-"trentino-sudtirol.it\0"
-"inami.toyama.jp\0"
-"gamvik.no\0career\0"
-"lib.fl.us\0wang\0"
-"sp.gov.br\0corvette.museum\0gs.va.no\0"
-"rennes\xc3\xb8y.no\0"
-"\xe5\x85\xb5\xe5\xba\xab.jp\0"
-"fujioka.gunma.jp\0c66.me\0"
-"eun.eg\0"
-"nordreisa.no\0"
-"web.gu\0"
-"tobishima.aichi.jp\0"
-"stage.nodeart.io\0"
-"takasu.hokkaido.jp\0luxury\0pagefrontapp.com\0"
-"rome.it\0uwajima.ehime.jp\0"
-"academia.bo\0minamiminowa.nagano.jp\0"
-"madrid\0za.org\0"
-"tynset.no\0"
-"yun\0"
-"web.id\0"
-"kawanehon.shizuoka.jp\0katsuragi.wakayama.jp\0",
-
-"leksvik.no\0football\0"
-"bologna.it\0"
-"uk.reclaim.cloud\0"
-"iizuna.nagano.jp\0farmers.museum\0"
-"rec.ve\0"
-"presidio.museum\0"
-"imdb\0web.in\0hs.zone\0"
-"user.aseinet.ne.jp\0resindevice.io\0"
-"netbank\0"
-"k12.ma.us\0servecounterstrike.com\0servehttp.com\0"
-"nanao.ishikawa.jp\0"
-"kuromatsunai.hokkaido.jp\0ma.leg.br\0"
-"sicilia.it\0yawata.kyoto.jp\0landes.museum\0"
-"ringerike.no\0"
-"\xe5\xae\xb6\xe9\x9b\xbb\0"
-"pc.pl\0"
-"historisch.museum\0"
-"ar.com\0"
-"selfip.org\0"
-"*.sys.qcx.io\0"
-"so.gov.pl\0"
-"shibata.niigata.jp\0sarpsborg.no\0is-uberleet.com\0"
-"sa.edu.au\0"
-"app.os.stg.fedoraproject.org\0"
-"kpmg\0"
-"barsy.bg\0*.dweb.link\0"
-"s3.dualstack.ap-southeast-2.amazonaws.com\0"
-"kita.kyoto.jp\0"
+"hirogawa.wakayama.jp\0bargains\0"
+"nuoro.it\0minami.fukuoka.jp\0"
+"achi.nagano.jp\0egersund.no\0"
+"suzaka.nagano.jp\0tec.ve\0omg.lol\0"
+"health.nz\0"
+"higashiyamato.tokyo.jp\0"
+"kuriyama.hokkaido.jp\0dynamisches-dns.de\0"
+"info.tn\0skygearapp.com\0"
+"info.tr\0wow\0blog.kg\0"
+"info.tt\0"
+"ivgu.no\0cbg.ru\0jelastic.team\0"
+"gokase.miyazaki.jp\0"
+"u.channelsdvr.net\0"
+"parachuting.aero\0sanagochi.tokushima.jp\0info.tz\0lego\0"
+"madrid.museum\0network\0"
+"r\xc3\xb8yrvik.no\0\xe8\x87\xba\xe7\x81\xa3\0"
+"shizuoka.shizuoka.jp\0abudhabi\0"
+"and\xc3\xb8y.no\0"
+"ueda.nagano.jp\0"
+"ishikari.hokkaido.jp\0"
+"tr.it\0lib.pa.us\0"
+"*.ocs.customer-oci.com\0"
+"haram.no\0"
+"fastly-terrarium.com\0familyds.net\0"
+"info.ro\0go.leg.br\0"
+"ohkura.yamagata.jp\0"
+"contagem.br\0"
+"\xe4\xb8\xaa\xe4\xba\xba.hk\0cn.it\0info.sd\0"
+"lecco.it\0"
+"s3-website-eu-west-1.amazonaws.com\0eastus2.azurestaticapps.net\0"
+"nico\0"
+"hamburg.museum\0"
+"is-a-geek.org\0"
+"nagaokakyo.kyoto.jp\0"
+"abu.yamaguchi.jp\0kudamatsu.yamaguchi.jp\0git-pages.rit.edu\0"
+"sn.cn\0omihachiman.shiga.jp\0"
+"tomiya.miyagi.jp\0"
+"morioka.iwate.jp\0tj\xc3\xb8me.no\0"
+"info.pk\0rel.pl\0"
+"tokushima.jp\0info.pl\0"
+"wtc\0"
+"wtf\0cloudfront.net\0ghost.io\0appengine.flow.ch\0"
+"mihara.hiroshima.jp\0info.pr\0serveftp.org\0"
+"bj.cn\0med.pro\0"
+"firmdale\0"
+"sowa.ibaraki.jp\0"
+"konskowola.pl\0"
+"dr.tr\0"
+"zappos\0"
+"googleapis.com\0"
+"trentins\xc3\xbc""d-tirol.it\0info.na\0"
+"botany.museum\0""001www.com\0"
+"yanaizu.fukushima.jp\0info.mv\0info.nf\0landrover\0"
+"fermo.it\0"
+"info.ni\0myvnc.com\0"
+"aremark.no\0xihuan\0"
+"tatsuno.nagano.jp\0info.nr\0"
+"tr.no\0"
+"rennebu.no\0"
+"beeldengeluid.museum\0"
+"cyon.site\0"
+"klepp.no\0r\xc3\xb8st.no\0is-very-sweet.org\0"
+"randaberg.no\0west1-us.cloudjiffy.net\0"
+"iwafune.tochigi.jp\0"
+"floro.no\0"
+"health.vn\0"
+"myphotos.cc\0"
+"info.la\0"
+"ustka.pl\0"
+"embetsu.hokkaido.jp\0\xc3\xa5""fjord.no\0"
+"avellino.it\0"
+"\xc3\xa1k\xc5\x8boluokta.no\0"
+"trentin-sued-tirol.it\0"
+"nesna.no\0trust\0"
+"secaas.hk\0"
+"cahcesuolo.no\0"
+"info.ls\0"
+"java\0"
+"exhibition.museum\0"
+"orland.no\0vm.bytemark.co.uk\0"
+"\xe4\xb8\xad\xe5\x9b\xbd\0"
+"pi.gov.br\0yokoze.saitama.jp\0"
+"author\0smart\0"
+"works.aero\0"
+"viking\0"
+"sel.no\0komvux.se\0"
+"asahikawa.hokkaido.jp\0"
+"gs.of.no\0xin\0net-freaks.com\0"
+"karatsu.saga.jp\0"
+"georgia.su\0"
+"\xe4\xb8\xad\xe5\x9c\x8b\0"
+"adm.br\0nordre-land.no\0nike\0"
+"info.ke\0"
+"lib.ar.us\0"
+"info.ki\0frankfurt.museum\0healthcare\0"
+"tateyama.toyama.jp\0"
+"ribeirao.br\0"
+"fusa.no\0zaporizhzhe.ua\0"
+"adac\0"
+"komatsu.ishikawa.jp\0"
+"plus\0"
+"riopreto.br\0from-co.net\0"
+"withyoutube.com\0"
+"kiyosato.hokkaido.jp\0numata.hokkaido.jp\0"
+"higashiyoshino.nara.jp\0"
+"otama.fukushima.jp\0cdn-edges.net\0"
+"s3-website.eu-central-1.amazonaws.com\0"
+"barcelona\0"
+"hita.oita.jp\0"
+"nonoichi.ishikawa.jp\0jelastic.dogado.eu\0"
+"itoigawa.niigata.jp\0cn.ua\0is-a-socialist.com\0"
+"ryuoh.shiga.jp\0"
+"ws.na\0"
+"accountant\0"
+"firm.ht\0"
+"emr.it\0"
+"buzen.fukuoka.jp\0"
+"knightpoint.systems\0"
+"iwatsuki.saitama.jp\0leirvik.no\0vennesla.no\0"
+"yamato.kumamoto.jp\0"
+"firm.in\0"
+"campinagrande.br\0yuu.yamaguchi.jp\0"
+"crotone.it\0"
+"onga.fukuoka.jp\0"
+"alta.no\0cc.nv.us\0"
+"yazu.tottori.jp\0"
+"azure\0"
+"cc.fl.us\0"
+"cricket\0"
+"cn.vu\0"
+"chungnam.kr\0royrvik.no\0"
+"k.se\0"
+"sumy.ua\0"
+"tateshina.nagano.jp\0"
+"youtube\0jele.cloud\0"
+"tsukigata.hokkaido.jp\0"
+"shiso.hyogo.jp\0"
+"vicenza.it\0"
+"andriatranibarletta.it\0campidanomedio.it\0"
+"firm.co\0"
+"baidar.no\0"
+"kinokawa.wakayama.jp\0"
+"lplfinancial\0"
+"shinanomachi.nagano.jp\0voss.no\0is-certified.com\0enterprisecloud.nu\0"
+"pe.gov.br\0"
+"browsersafetymark.io\0"
+"shisui.chiba.jp\0kasserver.com\0firm.dk\0"
+"qa2.com\0"
+"bib.br\0safe\0"
+"eidskog.no\0"
+"test-iserv.de\0"
+"takatsuki.osaka.jp\0gs.mr.no\0"
+"iraq.museum\0"
+"chat\0s3-sa-east-1.amazonaws.com\0"
+"hida.gifu.jp\0"
+"ehime.jp\0"
+"misato.shimane.jp\0"
+"v\xc3\xa5gs\xc3\xb8y.no\0"
+"isernia.it\0seto.aichi.jp\0"
+"valleeaoste.it\0"
+"bible\0"
+"clinton.museum\0"
+"rishiri.hokkaido.jp\0"
+"sakaki.nagano.jp\0"
+"ne.jp\0troms\xc3\xb8.no\0"
+"emergency.aero\0"
+"nayoro.hokkaido.jp\0aramco\0"
+"from-ga.com\0"
+"ne.ke\0is-an-actress.com\0"
+"gamvik.no\0"
+"rovno.ua\0bloomberg\0"
+"jus.br\0tsuiki.fukuoka.jp\0youth.museum\0raholt.no\0"
+"tube\0"
+"fedex\0"
+"ne.kr\0\xd1\x80\xd1\x83\xd1\x81\0"
+"niiza.saitama.jp\0is-a-green.com\0"
+"hl.cn\0"
+"exchange\0hopto.me\0"
+"is-a-patsfan.org\0"
+"nagatoro.saitama.jp\0"
"nagano.nagano.jp\0"
-"mt.it\0"
-"indigena.bo\0barsy.ca\0"
-"cloudaccess.host\0"
-"web.lk\0no-ip.org\0"
-"suisse.museum\0paris\0"
-"s3.dualstack.ap-northeast-1.amazonaws.com\0"
-"cc.va.us\0"
-"fishing\0"
-"can.museum\0"
-"yamatokoriyama.nara.jp\0nago.okinawa.jp\0"
-"zip\0"
-"wblog.id\0"
-"voagat.no\0barsy.de\0"
-"takarazuka.hyogo.jp\0"
-"nanjo.okinawa.jp\0to.work\0"
-"ragusa.it\0sf.no\0barsyonline.com\0"
-"defense.tn\0"
-"vi.it\0"
-"flor\xc3\xb8.no\0"
-"tomisato.chiba.jp\0miyama.fukuoka.jp\0web.nf\0cbre\0"
-"air-surveillance.aero\0oirm.gov.pl\0"
-"web.ni\0"
-"suginami.tokyo.jp\0nesset.no\0"
-"sondre-land.no\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0d.gv.vc\0"
-"reise\0"
-"ushuaia.museum\0meinforum.net\0"
-"monzaedellabrianza.it\0"
-"glug.org.uk\0"
-"barsy.eu\0"
-"tj.cn\0kaga.ishikawa.jp\0"
-"north-kazakhstan.su\0"
-"j.scaleforce.com.cy\0"
-"\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0"
-"gc.ca\0tochio.niigata.jp\0"
-"williamsburg.museum\0likescandy.com\0"
-"oita.jp\0wake.okayama.jp\0web.pk\0vercel.dev\0"
-"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0q-a.eu.org\0"
-"cust.disrec.thingdust.io\0"
-"tatsuno.nagano.jp\0"
-"hirata.fukushima.jp\0yamagata.nagano.jp\0"
-"tsubata.ishikawa.jp\0"
-"yono.saitama.jp\0"
-"jgora.pl\0catering\0seidat.net\0"
-"maritime.museum\0"
-"nishinoshima.shimane.jp\0"
-"hotmail\0"
-"dynamic-dns.info\0"
-"onojo.fukuoka.jp\0nozawaonsen.nagano.jp\0"
-"js.org\0"
-"niikappu.hokkaido.jp\0"
-"hashima.gifu.jp\0"
-"nx.cn\0sondrio.it\0"
-"barsy.in\0"
-"barsy.io\0"
-"inzai.chiba.jp\0telekommunikation.museum\0bss.design\0"
-"royken.no\0"
-"aosta.it\0is-a-blogger.com\0"
-"wios.gov.pl\0immo\0"
-"x.se\0"
-"yamagata.gifu.jp\0"
-"rv.ua\0"
-"military.museum\0"
-"\xe5\x9f\xbc\xe7\x8e\x89.jp\0"
-"mandal.no\0"
-"mamurogawa.yamagata.jp\0"
-"le.it\0"
-"web.tj\0"
-"pictures\0"
-"nahari.kochi.jp\0"
-"hanawa.fukushima.jp\0cya.gg\0"
-"web.tr\0myqnapcloud.com\0"
-"sr.gov.pl\0"
-"oceanographique.museum\0"
-"homebuilt.aero\0"
-"sells-for-u.com\0"
-"cuiaba.br\0"
-"shiranuka.hokkaido.jp\0nomi.ishikawa.jp\0"
-"morimachi.shizuoka.jp\0"
-"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0"
-"dnsdojo.org\0stufftoread.com\0"
-"okawa.kochi.jp\0"
-"sorocaba.br\0web.ve\0"
-"yawara.ibaraki.jp\0*.on-k3s.io\0"
-"ericsson\0"
-"mobara.chiba.jp\0"
-"nissan\0"
-"\xe7\xbe\xa4\xe9\xa6\xac.jp\0g\xc3\xa1ls\xc3\xa1.no\0"
-"hasama.oita.jp\0"
-"komagane.nagano.jp\0"
-"ed.ao\0andasuolo.no\0nissay\0"
-"modena.it\0"
-"parts\0"
-"lib.az.us\0"
-"naturalhistory.museum\0"
-"party\0"
-"m.bg\0timekeeping.museum\0fr\xc3\xb8ya.no\0tokyo\0dyndns-at-work.com\0"
-"onza.mythic-beasts.com\0"
-"mt.us\0nd.us\0"
-"tendo.yamagata.jp\0\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0"
-"rag-cloud-ch.hosteur.com\0"
-"app.lmpm.com\0"
-"trentino-sud-tirol.it\0\xd0\xbe\xd1\x80\xd0\xb3\0"
+"nakagawa.nagano.jp\0"
+"helsinki.museum\0"
+"servebbs.org\0"
+"serveminecraft.net\0"
+"engine.aero\0yuza.yamagata.jp\0"
+"grajewo.pl\0"
+"ny.us\0"
+"seiro.niigata.jp\0"
+"oirm.gov.pl\0"
+"\xe6\x9d\xb1\xe4\xba\xac.jp\0"
+"seirou.niigata.jp\0az.us\0"
+"pa.gov.pl\0"
+"lajolla.museum\0"
+"shizuoka.jp\0"
+"toride.ibaraki.jp\0"
+"tel.tr\0"
+"vpnplus.to\0"
+"t.bg\0"
+"sale\0"
+"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0"
+"k12.ma.us\0domains\0"
+"ondigitalocean.app\0"
+"minamifurano.hokkaido.jp\0cust.prod.thingdust.io\0"
+"friuliveneziagiulia.it\0"
+"webcam\0est-a-la-masion.com\0"
+"k12.ec\0kagamino.okayama.jp\0"
+"cal.it\0k12.al.us\0"
+"higashichichibu.saitama.jp\0"
+"gold\0jpn.com\0"
+"aosta-valley.it\0sandcats.io\0"
+"golf\0"
+"okoppe.hokkaido.jp\0dyndns-web.com\0"
+"hanno.saitama.jp\0"
+"uonuma.niigata.jp\0gov.scot\0"
+"xxx\0"
+"dnepropetrovsk.ua\0pages.wiardweb.com\0"
+"ne.pw\0"
+"medecin.km\0nalchik.ru\0"
+"tajimi.gifu.jp\0ipifony.net\0"
+"saga.saga.jp\0"
+"komagane.nagano.jp\0moscow.museum\0"
+"info.zm\0"
+"hitachi.ibaraki.jp\0zp.gov.pl\0"
+"jp.eu.org\0"
+"\xe4\xbf\xa1\xe6\x81\xaf\0"
+"sumoto.kumamoto.jp\0"
+"xyz\0"
+"shiogama.miyagi.jp\0tvedestrand.no\0"
+"pb.ao\0pv.it\0"
+"kosei.shiga.jp\0"
+"nalchik.su\0"
+"genoa.it\0hoteles\0"
+"or.at\0vall\xc3\xa9""e-d-aoste.it\0misawa.aomori.jp\0osoyro.no\0"
+"catania.it\0torino.it\0b\xc3\xa1id\xc3\xa1r.no\0"
+"pr.gov.br\0"
+"firm.ve\0"
+"or.bi\0"
+"\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
+"abogado\0*.elb.amazonaws.com\0"
+"nishimera.miyazaki.jp\0"
+"sos.pl\0"
+"uk.kg\0"
+"sth.ac.at\0odate.akita.jp\0"
+"iglesias-carbonia.it\0"
+"stuff-4-sale.org\0"
+"barsy.support\0"
+"goog\0"
+"umb.it\0"
+"lgbt\0"
+"or.ci\0jdevcloud.com\0"
+"tos.it\0toya.hokkaido.jp\0toyama.toyama.jp\0"
+"camera\0"
+"zt.ua\0"
+"or.cr\0"
+"sue.fukuoka.jp\0"
+"k12.il\0"
+"x443.pw\0"
+"*.stg.dev\0"
+"airtraffic.aero\0l\xc3\xa1hppi.no\0"
+"ashoro.hokkaido.jp\0farmers.museum\0hiphop\0"
+"ami.ibaraki.jp\0"
+"ne.ug\0wien\0"
+"kaminoyama.yamagata.jp\0"
+"ne.tz\0"
+"copenhagen.museum\0"
+"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0ann-arbor.mi.us\0"
+"omaezaki.shizuoka.jp\0sarl\0"
+"iron.museum\0"
+"ne.us\0"
+"grainger\0"
+"watchandclock.museum\0"
+"fst.br\0ris\xc3\xb8r.no\0"
+"koebenhavn.museum\0bounceme.net\0"
+"is-a-geek.net\0"
+"freeboxos.com\0"
+"sko.gov.pl\0cc.tx.us\0"
+"pup.gov.pl\0accesscam.org\0"
+"iwama.ibaraki.jp\0"
+"agriculture.museum\0atm.pl\0"
"no-ip.co.uk\0"
-"its.me\0k12.vt.us\0"
-"ed.ci\0koriyama.fukushima.jp\0"
-"palmas.br\0tokamachi.niigata.jp\0"
-"beardu.no\0\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0"
-"s3-ap-southeast-2.amazonaws.com\0"
-"ed.cr\0"
-"is-a-bookkeeper.com\0"
-"vi.us\0web.za\0"
-"kuchinotsu.nagasaki.jp\0malopolska.pl\0"
-"from-ut.com\0"
-"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0"
-"toon.ehime.jp\0bearalv\xc3\xa1hki.no\0"
-"ozora.hokkaido.jp\0"
-"airforce\0"
-"s3-ca-central-1.amazonaws.com\0"
-"kasahara.gifu.jp\0boehringer\0"
-"aq.it\0ba.it\0broker\0"
-"dst.mi.us\0"
-"ug.gov.pl\0"
+"hl.no\0"
+"hadano.kanagawa.jp\0"
+"firm.ro\0cc.hi.us\0"
+"cc.ct.us\0*.ocp.customer-oci.com\0"
+"bando.ibaraki.jp\0"
+"shirosato.ibaraki.jp\0you\0"
+"townnews-staging.com\0"
+"tono.iwate.jp\0hakuba.nagano.jp\0foundation.museum\0"
+"\xd1\x81\xd1\x80\xd0\xb1\0"
+"alaska.museum\0"
+"himeji.hyogo.jp\0"
+"frana.no\0comsec\0"
+"kosuge.yamanashi.jp\0"
+"hosting-cluster.nl\0"
+"natuurwetenschappen.museum\0"
+"iruma.saitama.jp\0"
+"harima.hyogo.jp\0ams1.jls.docktera.net\0"
+"archaeology.museum\0"
+"bulsan-sudtirol.it\0"
+"hof.no\0"
+"stream\0users.scale.virtualcloud.com.br\0"
+"kita.osaka.jp\0lardal.no\0cloud-fr1.unispace.io\0"
+"kitaura.miyazaki.jp\0ryokami.saitama.jp\0histoire.museum\0save\0"
+"agrigento.it\0katsuura.chiba.jp\0minami.kyoto.jp\0kv\xc3\xa6""fjord.no\0loppa.no\0"
+"or.id\0"
+"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0cc.hn\0"
+"tkmaxx\0"
+"gs.st.no\0",
+
+"pri.ee\0"
+"from-ia.com\0webthings.io\0"
+"kumatori.osaka.jp\0fetsund.no\0"
+"otobe.hokkaido.jp\0"
+"or.it\0ninomiya.kanagawa.jp\0comunica\xc3\xa7\xc3\xb5""es.museum\0j.layershift.co.uk\0"
+"balat.no\0"
+"adv.br\0aknoluokta.no\0"
+"friulivgiulia.it\0"
+"erotika.hu\0firm.nf\0"
+"taobao\0firm.ng\0"
+"torahime.shiga.jp\0wiki\0"
+"bs.it\0sites.static.land\0"
+"spy.museum\0"
+"or.jp\0"
+"mckinsey\0"
+"aichi.jp\0geelvinck.museum\0"
+"goldpoint\0definima.io\0"
+"slupsk.pl\0beep.pl\0pointto.us\0"
+"or.ke\0"
+"gs.oslo.no\0kinder\0"
+"saxo\0"
+"\xe7\xb6\xb2\xe8\xb7\xaf.tw\0"
+"sumita.iwate.jp\0"
+"cards\0"
+"sc.cn\0"
+"or.kr\0ocs.opusinteractive.io\0"
+"itau\0"
+"kai.yamanashi.jp\0"
+"diskstation.me\0"
+"est.pr\0"
+"trentin-s\xc3\xbc""dtirol.it\0shijonawate.osaka.jp\0"
+"yun\0"
+"cci.fr\0"
+"numazu.shizuoka.jp\0u2-local.xnbay.com\0"
+"chirurgiens-dentistes-en-france.fr\0familyds.org\0"
+"wine\0"
+"dattolocal.com\0diskstation.eu\0"
+"yusui.kagoshima.jp\0sula.no\0"
+"is-a-nurse.com\0"
+"production.aero\0shibetsu.hokkaido.jp\0"
+"or.na\0ma.us\0"
+"slg.br\0"
+"or.mu\0"
+"masaki.ehime.jp\0"
+"isshiki.aichi.jp\0cc.na\0"
+"kmpsp.gov.pl\0cc.wy.us\0clicketcloud.com\0"
+"maebashi.gunma.jp\0"
+"ngrok.io\0"
+"samsung\0"
+"k12.tr\0"
+"happou.akita.jp\0"
+"t.se\0"
+"mysecuritycamera.com\0"
"filegear-jp.me\0"
-"ntr.br\0cc.in.us\0"
-"takaishi.osaka.jp\0uppo.gov.pl\0mysecuritycamera.com\0*.uberspace.de\0"
-"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0"
-"viking.museum\0"
-"film.hu\0abu.yamaguchi.jp\0stokke.no\0"
-"univ.sn\0"
-"kunigami.okinawa.jp\0"
-"shinjuku.tokyo.jp\0yamanashi.yamanashi.jp\0"
-"sano.tochigi.jp\0"
-"valledaosta.it\0oster\xc3\xb8y.no\0is-a-photographer.com\0"
-"land\0no.eu.org\0"
-"myjino.ru\0repl.run\0"
-"info\0"
-"pavia.it\0tsukuba.ibaraki.jp\0"
-"\xc3\xa1lt\xc3\xa1.no\0"
-"research.museum\0home.dyndns.org\0"
-"isumi.chiba.jp\0directory\0"
-"\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0"
-"avoues.fr\0"
-"psc.br\0"
-"paris.museum\0foodnetwork\0"
-"boxfuse.io\0webhop.org\0"
-"revista.bo\0"
-"basilicata.it\0prvcy.page\0"
-"karelia.su\0"
-"al.eu.org\0"
-"store.nf\0"
-"kayabe.hokkaido.jp\0brussels\0"
-"juegos\0"
-"savona.it\0"
-"usui.fukuoka.jp\0togliatti.su\0"
-"berg.no\0tjmaxx\0"
-"bahcavuotna.no\0"
-"coldwar.museum\0"
-"odda.no\0delta\0"
-"mus.mi.us\0"
-"rel.ht\0ryuoh.shiga.jp\0"
-"sand\xc3\xb8y.no\0"
-"kinokawa.wakayama.jp\0"
-"toyonaka.osaka.jp\0of.football\0"
-"francaise.museum\0snasa.no\0"
-"yurihonjo.akita.jp\0"
-"sasebo.nagasaki.jp\0"
-"cincinnati.museum\0"
-"shika.ishikawa.jp\0"
-"cc.ma.us\0"
-"arts.museum\0"
-"ed.jp\0"
-"sakura.tochigi.jp\0"
-"istmein.de\0"
-"gushikami.okinawa.jp\0"
-"kragero.no\0eu-central-1.elasticbeanstalk.com\0"
-"omasvuotna.no\0"
-"uk.primetel.cloud\0"
-"kvam.no\0"
-"nsn.us\0"
-"s3-website.eu-central-1.amazonaws.com\0"
-"miyakonojo.miyazaki.jp\0from-ri.com\0"
-"mi.it\0"
-"sweetpepper.org\0"
-"koya.wakayama.jp\0"
-"obira.hokkaido.jp\0"
-"oumu.hokkaido.jp\0"
-"photos\0"
-"valley.museum\0"
-"de.cool\0"
-"k12.ec\0ostroleka.pl\0s3.dualstack.eu-west-3.amazonaws.com\0"
-"urasoe.okinawa.jp\0"
-"sanagochi.tokushima.jp\0nz.eu.org\0"
-"doomdns.com\0from-ny.net\0"
-"namsos.no\0"
-"interactive.museum\0uzhgorod.ua\0"
-"lib.pa.us\0nowtv\0"
-"kred\0"
-"pics\0"
-"loseyourip.com\0"
-"locus\0"
-"hemne.no\0"
-"paroch.k12.ma.us\0"
-"moss.no\0from-ks.com\0"
-"yandex\0"
-"garden.museum\0"
-"\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0"
-"puglia.it\0radio\0"
-"nfshost.com\0"
-"konskowola.pl\0tel.tr\0"
-"linkyard-cloud.ch\0"
-"is-very-evil.org\0"
-"platter-app.com\0"
-"yugawa.fukushima.jp\0"
-"carboniaiglesias.it\0kisosaki.mie.jp\0chernivtsi.ua\0"
-"pub.sa\0"
-"oh.us\0"
-"hammerfest.no\0"
-"to.gov.br\0"
-"dynalias.net\0"
-"in-butter.de\0"
-"narusawa.yamanashi.jp\0labor.museum\0store.ve\0"
-"kanna.gunma.jp\0is-a-conservative.com\0alp1.ae.flow.ch\0"
-"\xe6\x94\xbf\xe5\xba\x9c.hk\0nishiazai.shiga.jp\0"
-"yasaka.nagano.jp\0"
-"mg.leg.br\0indie.porn\0"
-"pfizer\0"
-"rel.pl\0"
-"higashiyoshino.nara.jp\0sandiego.museum\0"
-"bible.museum\0fashion\0dnsfor.me\0"
-"kamishihoro.hokkaido.jp\0"
-"k12.il\0is-by.us\0"
-"off.ai\0higashichichibu.saitama.jp\0shimoda.shizuoka.jp\0"
-"ed.pw\0cc.wy.us\0"
-"onfabrica.com\0"
-"arte.bo\0iida.nagano.jp\0"
-"presse.km\0"
-"from-wy.com\0"
-"eu-4.evennode.com\0"
-"ethnology.museum\0stream\0"
-"nationalfirearms.museum\0"
-"sinaapp.com\0"
-"ce.it\0"
-"h\xc3\xa6gebostad.no\0"
-"elvendrell.museum\0firebaseapp.com\0"
-"nm.cn\0"
-"town\0"
-"vercelli.it\0no-ip.net\0"
-"susono.shizuoka.jp\0wien.funkfeuer.at\0"
-"parti.se\0"
-"dnepropetrovsk.ua\0kicks-ass.net\0"
-"asnes.no\0"
-"nagaoka.niigata.jp\0sk\xc3\xa5nland.no\0"
-"m.se\0myddns.rocks\0"
-"myasustor.com\0"
-"presse.ml\0now-dns.org\0"
-"oppdal.no\0"
-"it1.jenv-aruba.cloud\0"
-"paleo.museum\0"
-"karasjohka.no\0r\xc3\xa1isa.no\0mypets.ws\0"
-"akkeshi.hokkaido.jp\0iide.yamagata.jp\0"
-"slupsk.pl\0"
-"gs.jan-mayen.no\0vennesla.no\0"
-"grandrapids.museum\0s3-website.ap-south-1.amazonaws.com\0marine.ru\0"
-"nankoku.kochi.jp\0unazuki.toyama.jp\0"
-"store.ro\0"
-"toys\0"
-"mikawa.yamagata.jp\0zp.ua\0"
-"lel.br\0"
-"lebesby.no\0"
-"trade\0"
-"geology.museum\0lind\xc3\xa5s.no\0"
-"hornindal.no\0skien.no\0"
-"salud.bo\0chikushino.fukuoka.jp\0"
-"\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
-"so.it\0"
-"chirurgiens-dentistes.fr\0"
-"karate.museum\0lib.mn.us\0"
-"vard\xc3\xb8.no\0s3-eu-west-1.amazonaws.com\0"
-"eu-3.evennode.com\0"
-"mi.th\0"
-"is-a-anarchist.com\0"
-"store.st\0"
-"is-certified.com\0demo.jelastic.com\0"
-"aridagawa.wakayama.jp\0"
-"g12.br\0\xc3\xa5krehamn.no\0"
-"catholic\0"
-"k12.mt.us\0"
-"nakanoto.ishikawa.jp\0nikolaev.ua\0"
-"ecn.br\0bu.no\0"
-"tsumagoi.gunma.jp\0gliwice.pl\0"
-"surgeonshall.museum\0logoip.de\0"
-"rishiri.hokkaido.jp\0"
-"tomika.gifu.jp\0marumori.miyagi.jp\0"
-"ikeda.osaka.jp\0ulsan.kr\0"
-"b.bg\0emr.it\0cc.ne.us\0"
-"mi.us\0"
-"canon\0"
-"frosta.no\0xihuan\0"
-"cloud\0"
-"k12.ak.us\0ping\0"
-"b.br\0"
-"pink\0"
-"eaton.mi.us\0"
-"nishinomiya.hyogo.jp\0sciencecenters.museum\0h\xc3\xb8nefoss.no\0"
-"aremark.no\0ninja\0"
-"usdecorativearts.museum\0"
-"mizunami.gifu.jp\0"
-"friuli-ve-giulia.it\0"
-"ushistory.museum\0orkanger.no\0"
-"l\xc3\xa1hppi.no\0from-tn.com\0"
-"yaese.okinawa.jp\0virtual-user.de\0"
-"news\0nalchik.ru\0"
-"art.br\0lenug.su\0"
-"zhitomir.ua\0"
-"nagasaki.jp\0"
-"ru.com\0"
-"eu-2.evennode.com\0"
-"nsw.au\0"
-"\xe9\x95\xb7\xe9\x87\x8e.jp\0film.museum\0"
-"ayase.kanagawa.jp\0"
-"mup.gov.pl\0"
-"photography\0nalchik.su\0"
-"next\0"
-"ln.cn\0vr.it\0"
-"missile.museum\0"
-"\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0"
-"taxi.br\0"
-"chiryu.aichi.jp\0"
-"santabarbara.museum\0"
-"akashi.hyogo.jp\0"
-"art.do\0"
-"jdevcloud.com\0"
-"idnblogger.com\0"
-"inazawa.aichi.jp\0"
-"pl.ua\0"
-"\xe6\x95\x8e\xe8\x82\xb2.hk\0soja.okayama.jp\0rost.no\0"
-"hakuba.nagano.jp\0naha.okinawa.jp\0"
-"art.dz\0"
-"dnsdojo.net\0"
-"otsu.shiga.jp\0nasu.tochigi.jp\0"
-"masfjorden.no\0"
-"k12.tr\0serveirc.com\0"
-"rmit\0"
-"biella.it\0"
-"jpn.com\0"
-"ddnss.de\0"
-"bozen.it\0zhytomyr.ua\0weibo\0"
-"czeladz.pl\0"
-"royrvik.no\0"
-"enterprises\0"
-"ambulance.museum\0muenster.museum\0selfip.biz\0"
-"fbx-os.fr\0"
-"k12.vi\0poivron.org\0"
-"eu-1.evennode.com\0"
-"select\0sopot.pl\0"
-"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0exnet.su\0qoto.io\0"
-"basketball\0"
-"shinjo.okayama.jp\0barsy.support\0"
-"creation.museum\0"
-"leclerc\0"
-"on-web.fr\0"
-"foggia.it\0"
-"fetsund.no\0k12.ks.us\0"
-"aikawa.kanagawa.jp\0"
-"edogawa.tokyo.jp\0"
-"trentino-stirol.it\0delaware.museum\0"
-"modern.museum\0"
-"kozaki.chiba.jp\0"
-"art.ht\0"
-"jampa.br\0naka.ibaraki.jp\0"
-"gs.svalbard.no\0lib.tx.us\0"
-"ubank\0"
-"sandnessj\xc3\xb8""en.no\0"
-"lolipop.io\0"
-"design.aero\0fh.se\0"
-"cuneo.it\0"
-"storage\0from-ms.com\0from-nc.com\0"
-"csx.cc\0"
-"minamiechizen.fukui.jp\0"
-"minato.tokyo.jp\0"
-"aarp\0"
-"mt.eu.org\0"
-"bj.cn\0"
-"lib.ga.us\0"
-"educator.aero\0"
-"shirakawa.gifu.jp\0"
-"tanabe.kyoto.jp\0codes\0sites.static.land\0"
-"coastaldefence.museum\0"
-"arteducation.museum\0"
-"kr\xc3\xa5""anghke.no\0"
-"republican\0"
-"yoita.niigata.jp\0"
-"ts.it\0itoigawa.niigata.jp\0from-ct.com\0"
-"friuliv-giulia.it\0yoka.hyogo.jp\0"
-"is-a-cubicle-slave.com\0"
-"flight.aero\0"
-"bhz.br\0"
-"rnu.tn\0"
-"cartoonart.museum\0"
-"tysvar.no\0olsztyn.pl\0"
-"chesapeakebay.museum\0"
-"bulsan-suedtirol.it\0"
-"store.bb\0fukuroi.shizuoka.jp\0"
-"nanto.toyama.jp\0"
-"servebbs.net\0ybo.science\0"
-"monzaebrianza.it\0"
-"seihi.nagasaki.jp\0lib.as.us\0"
-"gs.rl.no\0"
-"sd.cn\0lindesnes.no\0"
-"air-traffic-control.aero\0lubartow.pl\0"
-"\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0"
-"v.bg\0yatomi.aichi.jp\0auto.pl\0cc.ny.us\0"
-"nm.us\0phone\0"
-"mill.museum\0accountants\0"
-"aurskog-h\xc3\xb8land.no\0"
-"takahama.aichi.jp\0"
-"chikuho.fukuoka.jp\0"
-"arida.wakayama.jp\0"
-"trentinsud-tirol.it\0furubira.hokkaido.jp\0"
-"ferrari\0"
-"saigawa.fukuoka.jp\0"
-"pa.it\0democrat\0"
-"history.museum\0"
-"cc.ar.us\0"
+"uslivinghistory.museum\0"
+"depot.museum\0"
+"fukagawa.hokkaido.jp\0"
+"shacknet.nu\0"
+"freebox-os.com\0"
+"bozen-s\xc3\xbc""dtirol.it\0oguni.yamagata.jp\0"
+"cnt.br\0nosegawa.nara.jp\0railway.museum\0"
+"lerdal.no\0*.dapps.earth\0"
+"k12.vi\0"
+"ap-southeast-2.elasticbeanstalk.com\0bitbridge.net\0"
+"zip\0zuerich\0"
+"reggio-emilia.it\0"
+"serveexchange.com\0"
+"kozaki.chiba.jp\0or.pw\0"
+"is-a-bulls-fan.com\0"
+"bjarkoy.no\0kindle\0"
+"curitiba.br\0"
+"mus.br\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0"
+"stalbans.museum\0"
+"lib.vt.us\0"
+"po.gov.pl\0"
+"shimoda.shizuoka.jp\0edu.scot\0"
+"umaji.kochi.jp\0"
+"shichinohe.aomori.jp\0lib.mn.us\0"
+"r.cdn77.net\0"
+"kasukabe.saitama.jp\0"
+"obninsk.su\0"
+"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0holdings\0playstation-cloud.com\0"
+"fh-muenster.io\0"
+"ichikai.tochigi.jp\0"
+"ao.it\0"
+"treviso.it\0"
+"kaas.gg\0"
+"res.aero\0"
+"sc.ke\0"
+"travelchannel\0"
+"sakai.fukui.jp\0"
+"no-ip.info\0"
+"aero\0"
+"sc.kr\0"
+"medecin.fr\0miami\0"
+"valle-d-aosta.it\0takayama.nagano.jp\0or.th\0"
+"boxfuse.io\0"
+"vard\xc3\xb8.no\0"
+"uji.kyoto.jp\0"
+"satosho.okayama.jp\0veg\xc3\xa5rshei.no\0"
+"ricoh\0ufcfan.org\0"
+"nohost.me\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0km.ua\0"
+"mitaka.tokyo.jp\0sc.ls\0pohl\0toolforge.org\0"
+"oystre-slidre.no\0discourse.group\0"
+"or.ug\0\xd1\x81\xd0\xbf\xd0\xb1.\xd1\x80\xd1\x83\xd1\x81\0"
+"stadt.museum\0or.tz\0promo\0cc.ua\0"
+"h\xc3\xa1mm\xc3\xa1rfeasta.no\0"
+"tadaoka.osaka.jp\0"
+"tomi.nagano.jp\0sakura.tochigi.jp\0"
+"adv.mz\0sa-east-1.elasticbeanstalk.com\0"
+"ube.yamaguchi.jp\0"
+"erimo.hokkaido.jp\0or.us\0"
+"emerck\0"
+"aioi.hyogo.jp\0"
+"starostwo.gov.pl\0"
+"futaba.fukushima.jp\0sor-varanger.no\0"
+"nagi.okayama.jp\0"
"deatnu.no\0"
-"ukco.me\0"
-"store.dk\0"
-"*.vps.myjino.ru\0"
-"perugia.it\0"
-"nb.ca\0erotika.hu\0"
-"k12.in.us\0\xd1\x80\xd1\x83\xd1\x81\0"
-"catering.aero\0"
-"art.pl\0"
-"hakone.kanagawa.jp\0"
-"dedyn.io\0"
-"v\xc3\xa5ler.\xc3\xb8stfold.no\0"
-"pueblo.bo\0nishitosa.kochi.jp\0\xe4\xb8\xad\xe5\x9b\xbd\0"
-"kunisaki.oita.jp\0medecin.km\0sydney\0"
-"okazaki.aichi.jp\0"
-"newport.museum\0s3.eu-central-1.amazonaws.com\0ath.cx\0"
-"pubtls.org\0"
-"nakamichi.yamanashi.jp\0leirvik.no\0travel.pl\0development.run\0"
-"judaica.museum\0vossevangen.no\0"
-"\xe4\xb8\xad\xe5\x9c\x8b\0"
-"motosu.gifu.jp\0"
-"gaular.no\0b.se\0"
-"cri.br\0"
-"kharkov.ua\0"
-"midori.gunma.jp\0"
-"\xe7\xbb\x84\xe7\xb9\x94.hk\0hyundai\0"
-"kawachinagano.osaka.jp\0"
-"moseushi.hokkaido.jp\0cern\0"
-"kutno.pl\0"
-"presse.ci\0sogndal.no\0"
-"shikaoi.hokkaido.jp\0ovre-eiker.no\0"
-"kinko.kagoshima.jp\0"
-"starnberg.museum\0"
-"gmbh\0"
-"able\0"
-"wales.museum\0*.backyards.banzaicloud.io\0"
-"tosashimizu.kochi.jp\0portal.museum\0konin.pl\0art.sn\0"
-"bplaced.de\0"
-"leangaviika.no\0"
-"trapani.it\0selfip.com\0"
-"chizu.tottori.jp\0resistance.museum\0"
-"my.eu.org\0"
-"app.banzaicloud.io\0"
-"television.museum\0"
-"lans.museum\0"
+"rio.br\0"
+"science.museum\0"
+"olsztyn.pl\0"
+"mayfirst.org\0noip.us\0"
+"is.eu.org\0"
+"mihama.mie.jp\0schmidt\0"
+"8.bg\0cc.al.us\0"
+"research.museum\0k12.mt.us\0"
+"dnsalias.net\0"
+"club.tw\0"
+"ono.fukushima.jp\0francaise.museum\0"
+"slattum.no\0"
"trolley.museum\0"
-"mazowsze.pl\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0lupin\0photo\0"
-"webhop.net\0in-dsl.de\0"
-"matsusaka.mie.jp\0co.business\0"
-"impertrix.com\0"
-"ris\xc3\xb8r.no\0"
-"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"sekigahara.gifu.jp\0arai.shizuoka.jp\0"
-"miho.ibaraki.jp\0"
-"nakai.kanagawa.jp\0travel.tt\0"
-"lib.ut.us\0"
-"portlligat.museum\0"
-"katowice.pl\0"
-"lucania.it\0"
-"mizusawa.iwate.jp\0"
-"square7.de\0"
-"seranishi.hiroshima.jp\0bahccavuotna.no\0porsanger.no\0rade.no\0zagan.pl\0weir\0"
-"appchizi.com\0"
-"flekkefjord.no\0"
-"poznan.pl\0"
-"toho.fukuoka.jp\0"
-"saobernardo.br\0xz.cn\0"
-"education\0"
-"loginline.io\0"
-"lincoln.museum\0"
-"sakurai.nara.jp\0franziskaner.museum\0"
-"emerck\0"
-"village.museum\0home-webserver.de\0"
-"\xe7\xb5\x84\xe7\xbb\x87.hk\0"
-"tagajo.miyagi.jp\0"
-"k12.gu.us\0"
-"broker.aero\0ullensaker.no\0kicks-ass.org\0"
-"honjo.akita.jp\0"
-"iyo.ehime.jp\0"
-"fujiyoshida.yamanashi.jp\0"
-"ouchi.saga.jp\0"
-"ikeda.nagano.jp\0e12.ve\0"
-"taka.hyogo.jp\0yuza.yamagata.jp\0"
-"kasukabe.saitama.jp\0snillfjord.no\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0"
-"kameyama.mie.jp\0\xeb\x8b\xb7\xeb\x84\xb7\0"
-"lezajsk.pl\0"
-"herokuapp.com\0"
-"dynu.net\0"
-"monash\0ddnsking.com\0"
-"azure\0"
-"cranbrook.museum\0square7.ch\0"
-"coz.br\0"
-"\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0nl.eu.org\0"
-"ooshika.nagano.jp\0lifestyle\0*.stg.dev\0"
-"lillesand.no\0"
-"ams1.jls.docktera.net\0"
-"stuttgart.museum\0"
-"kawaba.gunma.jp\0"
-"sx.cn\0chanel\0"
-"sampa.br\0esan.hokkaido.jp\0ohkura.yamagata.jp\0"
-"mihama.wakayama.jp\0"
-"buyshouses.net\0"
-"takamori.nagano.jp\0"
-"soeda.fukuoka.jp\0pa.us\0ap-northeast-2.elasticbeanstalk.com\0"
-"buzz\0"
-"bible\0"
-"yachiyo.chiba.jp\0godo.gifu.jp\0"
-"kanuma.tochigi.jp\0dyndns.dappnode.io\0"
-"stryn.no\0"
-"frog.museum\0"
-"toyo.kochi.jp\0"
-"it1.eur.aruba.jenv-aruba.cloud\0"
-"mr.no\0wif.gov.pl\0"
-"\xd1\x81\xd1\x80\xd0\xb1\0is-a-rockstar.com\0"
-"pu.it\0aknoluokta.no\0"
-"viking\0"
-"passagens\0"
-"legnica.pl\0"
-"az.us\0"
-"naturalsciences.museum\0naumburg.museum\0adobeaemcloud.com\0"
-"cechire.com\0lugs.org.uk\0"
-"market\0"
-"trani-andria-barletta.it\0wv.us\0toshiba\0"
-"*.oci.customer-oci.com\0"
-"aguni.okinawa.jp\0vuelos\0"
-"oppeg\xc3\xa5rd.no\0"
-"dynalias.org\0"
-"schmidt\0boomla.net\0"
-"of.by\0cn.it\0"
-"opole.pl\0"
-"us.com\0"
-"hyogo.jp\0"
-"gotdns.com\0"
-"8.bg\0\xe5\xb1\xb1\xe5\xbd\xa2.jp\0leczna.pl\0"
-"sandoy.no\0cri.nz\0"
-"miyako.fukuoka.jp\0"
-"df.gov.br\0"
-"daegu.kr\0"
-"wolomin.pl\0"
-"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0"
-"tools\0"
-"rj.gov.br\0takatori.nara.jp\0"
-"it.ao\0"
-"akishima.tokyo.jp\0"
-"izumozaki.niigata.jp\0"
-"lc.it\0*.kobe.jp\0"
-"poker\0hs.run\0"
-"blogsite.xyz\0"
-"ota.gunma.jp\0sydney.museum\0"
-"tokai.aichi.jp\0sd.us\0ng.eu.org\0"
-"cn.com\0"
-"panel.gg\0"
-"gsm.pl\0wbq.me\0"
-"living.museum\0"
-"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0"
-"rahkkeravju.no\0v.ua\0"
-"aukra.no\0kepno.pl\0"
-"ryokami.saitama.jp\0folionetwork.site\0"
-"takamori.kumamoto.jp\0"
-"kamisu.ibaraki.jp\0sakuho.nagano.jp\0"
-"wakasa.fukui.jp\0"
-"manaus.br\0toyota.yamaguchi.jp\0"
-"volkenkunde.museum\0asker.no\0serveminecraft.net\0"
-"ojiya.niigata.jp\0"
-"nis.za\0hu.com\0ravendb.community\0"
-"hakata.fukuoka.jp\0"
-"fusa.no\0gallery\0"
-"nakagawa.hokkaido.jp\0lebork.pl\0"
-"jfk.museum\0homedns.org\0"
-"lima-city.rocks\0"
-"oyama.tochigi.jp\0ilawa.pl\0"
+"asso.eu.org\0"
+"shingu.hyogo.jp\0from-ca.com\0"
+"amakusa.kumamoto.jp\0"
+"of.fashion\0"
+"my-wan.de\0"
+"*.triton.zone\0"
+"s3-us-gov-west-1.amazonaws.com\0wafflecell.com\0"
+"capital\0it.eu.org\0"
+"ohira.miyagi.jp\0"
+"trentino-altoadige.it\0"
+"skjervoy.no\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0corporation.museum\0gs.va.no\0"
+"customer.mythic-beasts.com\0"
+"guernsey.museum\0statefarm\0"
+"\xe8\xb4\xad\xe7\x89\xa9\0"
+"trycloudflare.com\0"
+"kamakura.kanagawa.jp\0warszawa.pl\0"
+"mcdir.ru\0"
+"\xe6\x84\x9b\xe5\xaa\x9b.jp\0"
+"oirase.aomori.jp\0"
+"rikubetsu.hokkaido.jp\0green\0"
+"british.museum\0"
+"ina.ibaraki.jp\0"
+"shishikui.tokushima.jp\0"
+"citi\0"
+"trana.no\0"
+"office\0"
+"yugawara.kanagawa.jp\0"
+"iizuna.nagano.jp\0is-found.org\0"
+"!city.kobe.jp\0money.museum\0\xd0\xb1\xd0\xb8\xd0\xb7.\xd1\x80\xd1\x83\xd1\x81\0"
+"aomori.jp\0"
+"ha.cn\0varoy.no\0city\0"
+"utazas.hu\0koto.tokyo.jp\0stavern.no\0"
+"gmina.pl\0"
+"hofu.yamaguchi.jp\0"
+"virtual.museum\0"
+"sc.ug\0"
+"in.eu.org\0"
+"honai.ehime.jp\0sc.tz\0"
+"hair\0"
+"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0"
+"higashiizumo.shimane.jp\0lorenskog.no\0"
+"asuke.aichi.jp\0"
+"namegawa.saitama.jp\0"
+"sc.us\0simple-url.com\0"
+"kaita.hiroshima.jp\0"
+"lea\xc5\x8bgaviika.no\0\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"parliament.nz\0"
+"newjersey.museum\0virgin\0"
+"dnsupdate.info\0"
+"mircloud.host\0"
+"fortmissoula.museum\0immobilien\0"
+"yao.osaka.jp\0"
+"minamata.kumamoto.jp\0"
+"creation.museum\0cc.va.us\0"
+"porn\0daemon.panel.gg\0"
+"kushiro.hokkaido.jp\0\xe5\xb9\xbf\xe4\xb8\x9c\0"
+"grp.lk\0"
+"monster\0"
+"cooperativa.bo\0"
+"jeep\0twmail.cc\0"
+"i.bg\0land-4-sale.us\0"
+"shinjo.okayama.jp\0"
+"eidsberg.no\0"
+"\xe7\xbd\x91\xe7\xab\x99\0"
+"uk.net\0"
+"\xe7\xbd\x91\xe5\x9d\x80\0"
+"hidaka.wakayama.jp\0post\0s3-website-us-west-1.amazonaws.com\0chimkent.su\0nid.io\0"
+"xen.prgmr.com\0"
+"kawanishi.yamagata.jp\0b\xc3\xa1hccavuotna.no\0serveftp.com\0"
+"def.br\0george\0"
+"free.hr\0"
+"s3.cn-north-1.amazonaws.com.cn\0"
+"funabashi.chiba.jp\0"
+"shimotsuke.tochigi.jp\0tysnes.no\0forgot.his.name\0es.leg.br\0"
+"skjerv\xc3\xb8y.no\0"
+"odo.br\0koga.ibaraki.jp\0"
+"shiraoka.saitama.jp\0"
+"gifts\0"
+"mw.gov.pl\0"
+"s3.ap-south-1.amazonaws.com\0"
+"szex.hu\0gs.tm.no\0"
+"lease\0"
+"is-a-republican.com\0"
+"\xd1\x83\xd0\xba\xd1\x80\0"
+"alessandria.it\0zamami.okinawa.jp\0noip.me\0"
+"tarama.okinawa.jp\0"
+"tp.it\0"
+"toon.ehime.jp\0"
+"og.ao\0scot\0"
+"condos\0"
+"bod\xc3\xb8.no\0final\0caa.li\0"
+"tottori.tottori.jp\0"
+"indianmarket.museum\0"
+"cl.it\0"
+"time.no\0"
+"iwate.jp\0"
+"sasaguri.fukuoka.jp\0dagestan.ru\0"
+"kuchinotsu.nagasaki.jp\0"
+"zapto.org\0"
+"crafting.xyz\0"
+"tysvar.no\0"
+"ms.gov.br\0"
+"kiyama.saga.jp\0meguro.tokyo.jp\0film.museum\0"
+"fm.br\0snoasa.no\0"
+"\xd5\xb0\xd5\xa1\xd5\xb5\0"
+"hachinohe.aomori.jp\0tranby.no\0"
+"dagestan.su\0"
+"pilot.aero\0lidl\0"
+"debian.net\0"
+"americanantiques.museum\0vlaanderen.museum\0"
+"bergen.no\0"
+"kita.tokyo.jp\0chintai\0mcpe.me\0"
+"birkenes.no\0"
+"kiyosu.aichi.jp\0"
+"webhop.biz\0"
+"iobb.net\0"
+"shinonsen.hyogo.jp\0"
+"dsmynas.org\0"
+"dp.ua\0"
+"homeunix.com\0"
+"mydrobo.com\0linkyard.cloud\0"
+"mt.gov.br\0ut.us\0"
+"stjohn.museum\0life\0"
+"umi.fukuoka.jp\0kolobrzeg.pl\0financial\0"
+"wegrow.pl\0"
+"charity\0"
+"in-the-band.net\0"
+"chita.aichi.jp\0"
+"synology-diskstation.de\0"
+"kouzushima.tokyo.jp\0b\xc3\xa5tsfjord.no\0vacations\0"
+"tydal.no\0de.cool\0"
+"uchihara.ibaraki.jp\0thruhere.net\0"
+"com.ac\0boutique\0"
+"com.af\0"
+"com.ag\0varggat.no\0washtenaw.mi.us\0"
+"takatori.nara.jp\0cc.ks.us\0"
+"com.ai\0ha.no\0"
+"sicilia.it\0"
+"com.al\0*.nodebalancer.linode.com\0ditchyourip.com\0"
+"com.am\0emp.br\0fortal.br\0andria-trani-barletta.it\0tonami.toyama.jp\0"
+"inawashiro.fukushima.jp\0gangaviika.no\0"
+"hiraizumi.iwate.jp\0"
+"com.ba\0lefrak\0"
+"com.ar\0com.bb\0karate.museum\0"
+"com.au\0"
+"plantation.museum\0"
+"com.aw\0"
+"com.bh\0"
+"com.bi\0"
+"com.az\0"
+"saroma.hokkaido.jp\0"
+"com.bm\0"
+"com.bn\0"
+"com.bo\0"
+"com.br\0"
+"com.bs\0kanagawa.jp\0"
+"com.bt\0rsvp\0"
+"v\xc3\xa5g\xc3\xa5.no\0"
+"frog.museum\0haus\0blogdns.org\0"
+"com.by\0com.ci\0"
+"com.bz\0"
+"com.cm\0"
+"com.cn\0"
+"com.co\0worse-than.tv\0"
+"nore-og-uvdal.no\0"
+"masoy.no\0"
+"wajiki.tokushima.jp\0turen.tn\0"
+"com.cu\0com.de\0"
+"portland.museum\0gs.nt.no\0"
+"com.cw\0"
+"moss.no\0"
+"com.cy\0asakawa.fukushima.jp\0apps.fbsbx.com\0"
+"wajima.ishikawa.jp\0"
+"fukui.fukui.jp\0"
+"com.dm\0og.it\0mitoyo.kagawa.jp\0from-ne.com\0"
+"l-o-g-i-n.de\0static-access.net\0"
+"com.do\0"
+"like\0"
+"yorkshire.museum\0"
+"com.ec\0fm.it\0"
+"com.ee\0eu-central-1.elasticbeanstalk.com\0"
+"com.eg\0"
+"i.ng\0holiday\0"
+"com.dz\0hichiso.gifu.jp\0"
+"salat.no\0"
+"nishiazai.shiga.jp\0yoga\0"
+"fedorainfracloud.org\0"
+"com.es\0kiso.nagano.jp\0"
+"com.et\0"
+"naroy.no\0"
+"com.fj\0"
+"miyashiro.saitama.jp\0\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0"
+"com.fm\0"
+"svalbard.no\0"
+"federation.aero\0com.fr\0"
+"murata.miyagi.jp\0"
+"com.ge\0"
+"surgeonshall.museum\0safety\0"
+"com.gh\0kv.ua\0"
+"com.gi\0"
+"i.ph\0limo\0"
+"com.gl\0"
+"sciencecenters.museum\0"
+"com.gn\0"
+"tamba.hyogo.jp\0"
+"com.gp\0"
+"com.gr\0"
+"com.gt\0nagareyama.chiba.jp\0"
+"com.gu\0vegas\0dd-dns.de\0"
+"link\0"
+"database.museum\0"
+"academy.museum\0baths.museum\0"
+"vic.edu.au\0com.gy\0"
+"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0"
+"com.hk\0granvin.no\0"
+"com.hn\0aquila.it\0perugia.it\0"
+"tagawa.fukuoka.jp\0"
+"defense.tn\0"
+"amagasaki.hyogo.jp\0misato.wakayama.jp\0"
+"com.hr\0"
+"com.ht\0amli.no\0"
+"bibai.hokkaido.jp\0money\0"
+"user.srcf.net\0"
+"com.im\0ohi.fukui.jp\0naamesjevuemie.no\0dy.fi\0"
+"wiki.bo\0fm.no\0jgora.pl\0gallery\0"
+"com.io\0bolzano.it\0sandefjord.no\0freesite.host\0"
+"hioki.kagoshima.jp\0"
+"wiki.br\0com.iq\0s3.dualstack.us-east-2.amazonaws.com\0"
+"com.is\0ogori.fukuoka.jp\0"
"k12.ok.us\0"
-"tachikawa.tokyo.jp\0"
-"netflix\0"
-"iwama.ibaraki.jp\0"
+"saijo.ehime.jp\0"
+"i.se\0"
+"mosjoen.no\0"
+"issmarterthanyou.com\0"
+"kanna.gunma.jp\0"
+"com.jo\0drangedal.no\0"
+"aerodrome.aero\0lima.zone\0"
+"dynalias.com\0"
+"kanoya.kagoshima.jp\0"
+"pacific.museum\0protection\0"
+"oristano.it\0com.kg\0redstone\0"
+"localhost.daplie.me\0"
+"com.ki\0austevoll.no\0infiniti\0servebbs.com\0"
+"nexus\0"
+"trentino-sued-tirol.it\0*.0emm.com\0firewall-gateway.net\0"
+"com.km\0limited\0"
+"tokai.ibaraki.jp\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0lotte\0"
+"yura.wakayama.jp\0evje-og-hornnes.no\0"
+"com.kp\0"
+"com.la\0"
+"iheya.okinawa.jp\0com.lb\0law.za\0"
+"com.lc\0bjugn.no\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0msk.ru\0"
+"com.kw\0"
+"lotto\0"
+"com.ky\0lib.va.us\0works\0blogsite.xyz\0"
+"com.kz\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0world\0"
+"londrina.br\0com.lk\0"
+"nasushiobara.tochigi.jp\0"
+"kurume.fukuoka.jp\0"
+"glug.org.uk\0"
+"adult\0"
+"ms.it\0com.lr\0"
+"msk.su\0ciscofreak.com\0"
+"kuzumaki.iwate.jp\0juedisches.museum\0gs.aa.no\0"
+"com.lv\0homegoods\0stada\0"
+"com.mg\0cn.com\0"
+"davvenj\xc3\xa1rga.no\0"
+"minamiizu.shizuoka.jp\0com.ly\0"
+"higashi.fukuoka.jp\0"
+"com.mk\0wuoz.gov.pl\0"
+"com.ml\0"
+"kamijima.ehime.jp\0is-a-democrat.com\0"
+"com.mo\0"
+"com.na\0"
+"*.kobe.jp\0com.ms\0"
+"com.mt\0"
+"com.mu\0"
+"com.mv\0com.nf\0"
+"ad.jp\0com.mw\0com.ng\0krokstadelva.no\0\xd8\xb9\xd8\xb1\xd8\xa8\0"
+"yn.cn\0com.mx\0sokndal.no\0seat\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0"
+"com.my\0com.ni\0"
+"bolivia.bo\0ltd.cy\0otago.museum\0est-a-la-maison.com\0"
+"dance\0"
+"ms.kr\0"
+"com.nr\0"
+"sakura.chiba.jp\0"
+"gz.cn\0hashbang.sh\0"
+"from-tn.com\0"
+"air.museum\0"
+"review\0"
+"\xc3\xa5rdal.no\0"
+"\xe4\xbc\x81\xe4\xb8\x9a\0"
+"boavista.br\0com.om\0auction\0"
+"net.eu.org\0"
+"dell-ogliastra.it\0live\0"
+"medicina.bo\0com.pa\0is-a-nascarfan.com\0"
+"taiji.wakayama.jp\0lon.wafaicloud.com\0"
+"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0"
+"com.pe\0"
+"res.in\0lebesby.no\0com.pf\0"
+"valleaosta.it\0"
+"artsandcrafts.museum\0com.ph\0"
+"shoes\0"
+"hasvik.no\0"
+"com.pk\0"
+"com.pl\0"
+"dyr\xc3\xb8y.no\0embaixada.st\0"
+"uwajima.ehime.jp\0"
+"beauxarts.museum\0"
+"tunes\0"
+"com.qa\0"
+"in.na\0namdalseid.no\0com.pr\0"
+"com.ps\0uber.space\0"
+"com.pt\0"
+"\xe9\x80\x9a\xe8\xb2\xa9\0"
"org.ac\0"
-"mosj\xc3\xb8""en.no\0"
-"org.ae\0"
-"org.af\0k.bg\0"
-"org.ag\0watari.miyagi.jp\0"
-"org.ai\0monmouth.museum\0"
-"luster.no\0florist\0"
-"minamisanriku.miyagi.jp\0m\xc4\x81ori.nz\0"
-"org.al\0map.fastly.net\0"
-"org.am\0"
-"org.ba\0collection.museum\0translate.goog\0"
-"org.ar\0org.bb\0"
-"musashimurayama.tokyo.jp\0hagebostad.no\0"
-"org.au\0grocery\0"
-"medecin.fr\0brandywinevalley.museum\0"
-"org.bh\0"
-"org.bi\0""64-b.it\0"
-"org.az\0"
-"\xe4\xbf\xa1\xe6\x81\xaf\0"
-"\xe6\xb2\x96\xe7\xb8\x84.jp\0"
-"org.bm\0"
-"org.bn\0"
-"org.bo\0kafjord.no\0"
-"org.br\0"
-"org.bs\0"
+"gjerdrum.no\0com.py\0"
+"org.ae\0ltd.gi\0in.ni\0training\0"
+"org.af\0philately.museum\0"
+"org.ag\0"
+"revista.bo\0"
+"org.ai\0"
+"aguni.okinawa.jp\0seek\0"
+"org.al\0"
+"org.am\0arakawa.tokyo.jp\0"
+"k12.vi.us\0"
+"r.bg\0com.re\0"
+"org.ba\0"
+"org.ar\0org.bb\0inder\xc3\xb8y.no\0"
+"hawaii.museum\0co.network\0"
+"org.au\0"
+"k12.id.us\0ltd.hk\0"
+"org.bh\0minano.saitama.jp\0"
+"org.bi\0udono.mie.jp\0"
+"org.az\0com.ro\0"
+"taishi.osaka.jp\0"
+"com.sa\0"
+"org.bm\0oishida.yamagata.jp\0rygge.no\0com.sb\0pt.eu.org\0"
+"org.bn\0naruto.tokushima.jp\0com.sc\0"
+"org.bo\0com.sd\0"
+"niepce.museum\0hitra.no\0com.se\0com.ru\0"
+"org.br\0naka.ibaraki.jp\0com.sg\0"
+"org.bs\0com.sh\0"
"org.bt\0"
-"nebraska.museum\0lexus\0"
-"midtre-gauldal.no\0infiniti\0"
-"org.bw\0l-o-g-i-n.de\0"
-"azurewebsites.net\0"
-"org.ci\0"
-"org.bz\0k12.ia.us\0"
-"oguni.kumamoto.jp\0shimonoseki.yamaguchi.jp\0ugim.gov.pl\0living\0play\0"
-"szex.hu\0jan-mayen.no\0"
-"org.cn\0filegear-gb.me\0"
-"org.co\0"
-"ao.it\0"
-"okaya.nagano.jp\0"
-"yabu.hyogo.jp\0"
-"org.cu\0olawa.pl\0"
-"org.cw\0is-a-guru.com\0"
-"org.cy\0cc.il.us\0"
-"org.dm\0kokubunji.tokyo.jp\0"
-"org.do\0"
-"uber.space\0"
-"expert\0"
-"org.ec\0nationalheritage.museum\0"
-"org.ee\0"
-"flt.cloud.muni.cz\0"
-"org.eg\0kamogawa.chiba.jp\0"
-"strand.no\0"
-"moka.tochigi.jp\0"
+"yusuhara.kochi.jp\0syncloud.it\0indowapblog.com\0"
+"barsyonline.co.uk\0urown.cloud\0"
+"org.bw\0com.sl\0"
+"de.gt\0"
+"org.ci\0com.sn\0"
+"org.bz\0com.so\0"
+"org.cn\0com.ss\0"
+"org.co\0com.st\0nym.by\0"
+"jaworzno.pl\0nym.bz\0"
+"com.sv\0"
+"ebina.kanagawa.jp\0"
+"\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0"
+"com.sy\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0"
+"org.cu\0com.tj\0"
+"\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0"
+"org.cw\0"
+"com.tm\0ams.cloudswitches.com\0"
+"org.cy\0ora.gunma.jp\0com.tn\0"
+"tamano.okayama.jp\0com.to\0"
+"com.ua\0"
+"parliament.cy\0org.dm\0com.tr\0"
+"org.do\0pt.it\0shimofusa.chiba.jp\0com.tt\0"
+"nishiokoppe.hokkaido.jp\0uscountryestate.museum\0user.party.eus\0"
+"ruhr\0"
+"forl\xc3\xac-cesena.it\0lo.it\0com.tw\0com.ug\0"
+"org.ec\0hadsel.no\0"
+"abc.br\0org.ee\0"
+"tselinograd.su\0"
+"org.eg\0oceanographic.museum\0"
+"dnsalias.org\0dyn-berlin.de\0nym.ec\0"
"org.dz\0"
-"maori.nz\0forex\0"
-"\xc3\xb8ystre-slidre.no\0"
+"*.kunden.ortsinfo.at\0"
+"com.vc\0"
+"catholic.edu.au\0chikusei.ibaraki.jp\0in.rs\0"
+"com.ve\0"
+"artanddesign.museum\0komforb.se\0"
"org.es\0"
-"org.et\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0"
-"ivgu.no\0adac\0"
-"tinn.no\0"
+"org.et\0com.uy\0com.vi\0"
+"state.museum\0com.uz\0appspot.com\0"
+"barclays\0"
+"int.ar\0ltd.lk\0"
+"xj.cn\0taka.hyogo.jp\0"
+"com.vn\0"
"org.fj\0"
-"historical.museum\0"
-"cn.ua\0"
-"org.fm\0k12.co.us\0"
-"oristano.it\0mragowo.pl\0"
-"karasjok.no\0"
-"satte.saitama.jp\0"
-"naples.it\0tysv\xc3\xa6r.no\0"
-"org.ge\0hokuto.hokkaido.jp\0of.no\0"
-"entertainment.aero\0cloudjiffy.net\0"
-"org.gg\0nativeamerican.museum\0winb.gov.pl\0"
-"org.gh\0"
-"he.cn\0org.gi\0ri.it\0"
-"bialowieza.pl\0imamat\0"
-"aure.no\0lib.md.us\0"
-"oz.au\0org.gl\0"
-"mihama.chiba.jp\0"
-"org.gn\0"
-"rexroth\0"
-"org.gp\0isa.kagoshima.jp\0lego\0school\0"
-"org.gr\0"
-"org.gt\0"
-"org.gu\0balestrand.no\0"
-"iwakura.aichi.jp\0yamakita.kanagawa.jp\0ks.ua\0"
+"romskog.no\0"
+"tuva.su\0"
+"org.fm\0"
+"plc.co.im\0leclerc\0\xe8\x81\x94\xe9\x80\x9a\0"
+"int.az\0"
+"com.vu\0"
+"matsuyama.ehime.jp\0"
+"int.bo\0satte.saitama.jp\0in.th\0"
+"org.ge\0larvik.no\0"
+"ac.gov.br\0org.gg\0vall\xc3\xa9""e-aoste.it\0"
+"org.gh\0fukushima.hokkaido.jp\0"
+"org.gi\0\xe9\x9d\x92\xe6\xa3\xae.jp\0"
+"rendalen.no\0"
+"nc.tr\0"
+"org.gl\0repair.men\0"
+"in.ua\0"
+"int.ci\0org.gn\0com.ws\0"
+"pubol.museum\0"
+"org.gp\0"
+"org.gr\0shop.ht\0toyama.jp\0"
+"shop.hu\0yoro.gifu.jp\0ltd.ng\0"
+"int.co\0org.gt\0yamagata.jp\0"
+"org.gu\0katori.chiba.jp\0"
+"soc.srcf.net\0de.ls\0"
+"nym.gr\0de.md\0"
"org.gy\0"
-"mod.gi\0org.hk\0gleeze.com\0"
-"suedtirol.it\0"
-"org.hn\0geisei.kochi.jp\0"
-"takehara.hiroshima.jp\0cn.vu\0"
-"niihama.ehime.jp\0"
-"org.ht\0business\0"
-"org.hu\0cherkasy.ua\0*.cloud.metacentrum.cz\0"
-"ube.yamaguchi.jp\0"
-"kochi.kochi.jp\0"
-"shimoji.okinawa.jp\0"
-"koka.shiga.jp\0room\0"
-"omi.niigata.jp\0ks.us\0"
-"laquila.it\0"
+"democracia.bo\0shiga.jp\0wblog.id\0"
+"org.hk\0"
+"tysv\xc3\xa6r.no\0ms.us\0nc.us\0"
+"aland.fi\0org.hn\0"
+"valleedaoste.it\0in.us\0nym.gy\0"
+"finearts.museum\0bardu.no\0com.ye\0"
+"nym.hk\0"
+"yamada.fukuoka.jp\0"
+"org.ht\0city.hu\0"
+"org.hu\0cipriani\0temasek\0"
+"omasvuotna.no\0"
+"okagaki.fukuoka.jp\0ashgabad.su\0"
+"for.sale\0"
+"flakstad.no\0nym.ie\0"
"org.il\0"
-"org.im\0maizuru.kyoto.jp\0soka.saitama.jp\0s3-website-us-west-1.amazonaws.com\0from-hi.com\0"
-"org.in\0"
-"j\xc3\xb8lster.no\0"
-"langev\xc3\xa5g.no\0"
-"from.hr\0org.iq\0"
+"org.im\0"
+"org.in\0monzabrianza.it\0chiba.jp\0storage.yandexcloud.net\0"
+"ask\xc3\xb8y.no\0"
+"mutsu.aomori.jp\0homes\0j.scaleforce.net\0"
+"org.iq\0"
"org.ir\0"
"org.is\0"
-"org.je\0fujisawa.iwate.jp\0"
-"gorlice.pl\0"
-"sa.gov.au\0"
-"masuda.shimane.jp\0"
-"hashikami.aomori.jp\0"
-"xen.prgmr.com\0"
-"nagiso.nagano.jp\0"
-"org.jo\0"
-"panama.museum\0uklugs.org\0"
-"finn\xc3\xb8y.no\0"
-"natural.bo\0"
-"uchiko.ehime.jp\0"
-"kamiichi.toyama.jp\0"
-"org.kg\0"
-"org.ki\0"
+"org.je\0translate.goog\0"
+"krym.ua\0com.zm\0today\0wmflabs.org\0"
+"habikino.osaka.jp\0sandiego.museum\0k12.ks.us\0"
+"manaus.br\0"
+"ushiku.ibaraki.jp\0fedorapeople.org\0"
+"org.jo\0k12.ca.us\0intuit\0"
+"cambridge.museum\0global.prod.fastly.net\0"
+"gujo.gifu.jp\0kaluga.su\0"
+"bryne.no\0"
+"rankoshi.hokkaido.jp\0monash\0"
+"arts.co\0"
+"org.kg\0idrett.no\0"
+"isa.kagoshima.jp\0org.ki\0jewishart.museum\0"
+"yalta.ua\0"
+"3utilities.com\0"
+"modena.it\0"
"org.km\0"
-"org.kn\0historicalsociety.museum\0"
+"saku.nagano.jp\0org.kn\0"
+"izumizaki.fukushima.jp\0mypi.co\0"
"org.kp\0"
-"org.la\0natuurwetenschappen.museum\0"
-"org.lb\0c.cdn77.org\0"
-"org.lc\0kopervik.no\0servesarcasm.com\0"
-"broke-it.net\0"
-"volda.no\0"
-"org.kw\0"
-"jx.cn\0hokksund.no\0skygearapp.com\0"
-"org.ky\0nico\0"
-"tsuchiura.ibaraki.jp\0org.kz\0"
-"org.lk\0vaksdal.no\0"
-"mcpe.me\0"
-"amusement.aero\0dr.na\0ga.us\0rugby\0"
-"auspost\0"
-"org.ma\0bel.tr\0"
-"org.lr\0"
-"jdf.br\0aogaki.hyogo.jp\0org.ls\0konsulat.gov.pl\0"
+"org.la\0"
+"kanmaki.nara.jp\0org.lb\0"
+"chikuzen.fukuoka.jp\0org.lc\0"
+"zlg.br\0"
+"izumo.shimane.jp\0kikugawa.shizuoka.jp\0"
+"org.kw\0pramerica\0nym.la\0"
+"uk0.bigv.io\0endoftheinternet.org\0"
+"fujimino.saitama.jp\0org.ky\0nym.lc\0"
+"org.kz\0"
+"org.lk\0"
+"brussels.museum\0"
+"higashishirakawa.gifu.jp\0nym.li\0"
+"nym.kz\0"
+"te.it\0org.ma\0"
+"org.lr\0utsira.no\0"
+"org.ls\0davvenjarga.no\0"
+"bunkyo.tokyo.jp\0"
"org.me\0"
-"rr.gov.br\0org.lv\0"
-"org.mg\0"
-"org.ly\0java\0clic2000.net\0"
-"shinkamigoto.nagasaki.jp\0soccer\0"
-"federation.aero\0org.mk\0cultural.museum\0"
+"org.lv\0"
+"sa.au\0org.mg\0b-data.io\0"
+"betainabox.com\0"
+"org.ly\0"
+"*.magentosite.cloud\0nym.lt\0"
+"org.mk\0demo.datacenter.fi\0nym.lu\0nym.me\0"
"org.ml\0"
-"trentinostirol.it\0viterbo.it\0"
-"org.mn\0salem.museum\0"
-"toyoake.aichi.jp\0org.mo\0"
-"nv.elastyco.com\0"
+"ca.it\0"
+"shobara.hiroshima.jp\0settsu.osaka.jp\0org.mn\0szkola.pl\0"
+"org.mo\0"
"org.na\0"
-"\xe6\x84\x9b\xe5\xaa\x9b.jp\0"
"org.ms\0"
-"org.mt\0"
-"togitsu.nagasaki.jp\0org.mu\0"
-"org.mv\0cancerresearch\0"
-"kyowa.hokkaido.jp\0org.mw\0org.ng\0cc.or.us\0"
-"org.mx\0"
-"bolzano.it\0org.my\0org.ni\0nv.us\0"
-"org.mz\0klodzko.pl\0\xce\xb5\xce\xbb\0nowruz\0"
-"is-an-anarchist.com\0"
-"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0"
-"itako.ibaraki.jp\0"
-"africa.com\0"
-"bronnoysund.no\0org.nr\0"
-"\xce\xb5\xcf\x85\0"
-"koebenhavn.museum\0freebox-os.com\0"
-"int.ar\0rs.gov.br\0sc.gov.br\0"
-"emp.br\0"
-"transport.museum\0"
-"aurskog-holand.no\0org.nz\0"
-"cremona.it\0hareid.no\0"
-"cc.hn\0"
-"org.om\0us-east-1.amazonaws.com\0community-pro.net\0"
-"int.az\0juedisches.museum\0servebbs.org\0"
-"yakumo.hokkaido.jp\0aquarium.museum\0org.pa\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0chat\0dev.static.land\0"
-"nowaruda.pl\0"
-"int.bo\0vall\xc3\xa9""e-aoste.it\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0"
-"org.pe\0"
-"songdalen.no\0org.pf\0"
-"my-router.de\0"
-"\xe5\xa4\xa7\xe9\x98\xaa.jp\0rad\xc3\xb8y.no\0org.ph\0nctu.me\0"
-"nayoro.hokkaido.jp\0bloghp.id\0"
-"iris.arpa\0org.pk\0ca.reclaim.cloud\0"
-"\xe6\x9d\xb1\xe4\xba\xac.jp\0org.pl\0"
-"int.ci\0"
-"trentin-sud-tirol.it\0tomobe.ibaraki.jp\0org.pn\0"
-"mantova.it\0"
-"\xc3\xb8rland.no\0"
-"mutsuzawa.chiba.jp\0nakagyo.kyoto.jp\0org.qa\0"
-"feira.br\0bs.it\0org.pr\0on.fashion\0"
-"int.co\0org.ps\0"
-"org.pt\0shw.io\0"
-"afamilycompany\0"
-"toyokawa.aichi.jp\0"
+"org.mt\0nym.mn\0"
+"org.mu\0budapest\0"
+"nl.ca\0org.mv\0"
+"org.mw\0org.ng\0"
+"int.is\0org.mx\0"
+"org.my\0org.ni\0"
+"org.mz\0\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0"
+"\xe9\xa6\x99\xe5\xb7\x9d.jp\0stateofdelaware.museum\0"
+"surrey.museum\0"
+"ltd.ua\0"
+"nym.mx\0nl.ci\0"
+"am.br\0trentinostirol.it\0s3.dualstack.ap-northeast-1.amazonaws.com\0"
+"h\xc3\xa1pmir.no\0org.nr\0"
+"sa.cr\0lancaster\0"
+"pages.dev\0no-ip.org\0"
+"paragliding.aero\0politica.bo\0"
+"riodejaneiro.museum\0ltd.uk\0"
+"coloradoplateau.museum\0"
+"org.nz\0\xe5\x9c\xa8\xe7\xba\xbf\0teaches-yoga.com\0"
+"oum.gov.pl\0"
+"org.om\0"
+"ltd.co.im\0"
+"nym.nz\0"
+"lib.ee\0org.pa\0"
+"lincoln.museum\0"
+"dallas.museum\0org.pe\0"
+"int.la\0org.pf\0"
+"freebox-os.fr\0"
+"org.ph\0"
+"r\xc3\xa6lingen.no\0"
+"org.pk\0nym.pe\0"
+"org.pl\0"
+"vadso.no\0s3-ca-central-1.amazonaws.com\0"
+"heroy.more-og-romsdal.no\0org.pn\0"
+"int.lk\0"
+"futtsu.chiba.jp\0kongsberg.no\0org.qa\0"
+"org.pr\0property\0mypep.link\0"
+"org.ps\0"
+"valle-daosta.it\0gjemnes.no\0org.pt\0"
+"de.us\0"
+"station.museum\0"
"org.py\0"
-"citadel\0nerdpol.ovh\0"
-"tsuyama.okayama.jp\0"
-"nyny.museum\0"
-"fuchu.hiroshima.jp\0art.museum\0"
-"k.se\0"
-"bieszczady.pl\0"
-"urown.cloud\0"
-"org.ro\0"
-"\xc4\x8d\xc3\xa1hcesuolo.no\0"
+"trentinosudtirol.it\0ca.na\0nym.pt\0"
+"\xe5\xa8\xb1\xe4\xb9\x90\0"
+"seoul.kr\0colonialwilliamsburg.museum\0"
+"yamagata.gifu.jp\0sarpsborg.no\0servehalflife.com\0"
+"helsinki\0"
+"in-addr.arpa\0catanzaro.it\0"
+"uk.oxa.cloud\0"
+"trentinoaadige.it\0"
+"is-uberleet.com\0"
+"katashina.gunma.jp\0trading\0"
+"sarufutsu.hokkaido.jp\0that.win\0"
+"bulsan-suedtirol.it\0"
+"int.mv\0"
+"int.mw\0"
+"niikappu.hokkaido.jp\0dsmynas.net\0"
+"int.ni\0r.se\0verisign\0"
+"org.ro\0na4u.ru\0"
"org.sa\0"
-"fujimi.saitama.jp\0org.sb\0"
-"br\xc3\xb8nn\xc3\xb8ysund.no\0org.rs\0org.sc\0"
+"takaharu.miyazaki.jp\0org.sb\0"
+"org.rs\0org.sc\0hdfc\0"
"org.sd\0"
-"org.se\0is-an-entertainer.com\0org.ru\0"
-"org.rw\0org.sg\0"
-"trysil.no\0org.sh\0ri.us\0"
-"philately.museum\0bloomberg\0"
-"yabuki.fukushima.jp\0"
-"org.sl\0"
-"kvafjord.no\0"
-"org.sn\0dr.tr\0"
-"org.so\0nike\0"
-"noboribetsu.hokkaido.jp\0mugi.tokushima.jp\0"
-"trentinos\xc3\xbc""dtirol.it\0southcarolina.museum\0org.ss\0"
-"org.st\0"
-"org.sv\0"
+"ochi.kochi.jp\0hammarfeasta.no\0org.se\0org.ru\0nym.ro\0"
+"shikama.miyagi.jp\0org.rw\0org.sg\0"
+"org.sh\0"
+"uozu.toyama.jp\0"
+"naumburg.museum\0usculture.museum\0org.sl\0"
+"broadcast.museum\0org.sn\0"
+"org.so\0"
+"bas.it\0laakesvuemie.no\0"
+"nym.sk\0"
+"moriyoshi.akita.jp\0omi.niigata.jp\0"
+"beskidy.pl\0org.ss\0"
+"nagahama.shiga.jp\0org.st\0"
+"org.sv\0grozny.su\0"
+"family.museum\0"
+"nishihara.kumamoto.jp\0"
"org.sy\0"
-"org.sz\0org.tj\0cards\0"
-"diskussionsbereich.de\0"
+"org.sz\0org.tj\0"
+"nym.su\0"
"org.tm\0"
-"skj\xc3\xa5k.no\0org.tn\0"
-"cc.na\0org.to\0"
-"forum\0"
-"org.ua\0"
-"org.tr\0appengine.flow.ch\0"
-"morena.br\0org.tt\0"
-"kvinesdal.no\0\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0"
-"rn.gov.br\0\xd1\x83\xd0\xba\xd1\x80\0"
-"lombardy.it\0org.tw\0org.ug\0"
-"\xe7\xa6\x8f\xe4\xba\x95.jp\0"
-"org.uk\0"
-"schools.nsw.edu.au\0"
-"athleta\0"
-"glas.museum\0"
-"kuwana.mie.jp\0"
-"andria-trani-barletta.it\0"
-"kamikawa.saitama.jp\0org.vc\0"
-"mibu.tochigi.jp\0linkyard.cloud\0"
+"org.tn\0mayfirst.info\0nym.sx\0"
+"hokuryu.hokkaido.jp\0ushistory.museum\0org.to\0"
+"\xe6\x94\xbf\xe5\xba\x9c.hk\0airtel\0prod\0"
+"sandnessj\xc3\xb8""en.no\0org.ua\0*.hosting.myjino.ru\0"
+"trani-barletta-andria.it\0ruovat.no\0org.tr\0prof\0"
+"vv.it\0karasjohka.no\0"
+"org.tt\0bnr.la\0"
+"medizinhistorisches.museum\0stjordalshalsen.no\0"
+"nsw.edu.au\0press.cy\0sa.it\0annaka.gunma.jp\0\xed\x95\x9c\xea\xb5\xad\0"
+"emiliaromagna.it\0davvesiida.no\0org.tw\0org.ug\0"
+"sexy\0"
+"carrara-massa.it\0int.pt\0pioneer\0"
+"idv.hk\0org.uk\0"
+"dni.us\0arts.ve\0club\0"
+"nym.tw\0"
+"freeddns.org\0"
+"org.vc\0"
+"hyuga.miyazaki.jp\0"
"org.ve\0"
-"otaki.chiba.jp\0yamada.iwate.jp\0"
-"okawa.fukuoka.jp\0jcloud-ver-jpc.ik-server.com\0*.stolos.io\0"
-"r\xc3\xb8ros.no\0cc.ms.us\0cc.nc.us\0org.uy\0org.vi\0"
-"tec.mi.us\0org.uz\0"
-"gateway.museum\0"
-"umig.gov.pl\0org.vn\0"
-"\xe5\xba\x83\xe5\xb3\xb6.jp\0my-gateway.de\0"
-"pasadena.museum\0wpenginepowered.com\0"
-"org.vu\0"
-"ro.gov.br\0higashi.fukuoka.jp\0plus\0from-mo.com\0"
-"int.is\0"
-"ardal.no\0\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0store\0"
-"bandai.fukushima.jp\0shacknet.nu\0"
-"kvalsund.no\0"
-"h\xc3\xb8ylandet.no\0"
-"inagi.tokyo.jp\0"
-"rikubetsu.hokkaido.jp\0shiraoi.hokkaido.jp\0yachiyo.ibaraki.jp\0tarumizu.kagoshima.jp\0"
-"saikai.nagasaki.jp\0org.ws\0"
-"cagliari.it\0"
-"intuit\0"
-"artdeco.museum\0readthedocs.io\0"
-"navigation.aero\0"
-"sebastopol.ua\0dyn-berlin.de\0"
-"uji.kyoto.jp\0nara.nara.jp\0"
-"int.la\0"
-"nesseby.no\0"
-"shijonawate.osaka.jp\0"
-"sado.niigata.jp\0"
-"slattum.no\0varoy.no\0cc.ia.us\0"
-"tatamotors\0"
-"gu.us\0"
-"int.lk\0"
-"ad.jp\0moskenes.no\0"
+"asso.fr\0"
+"her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0czeladz.pl\0"
+"design.museum\0org.uy\0org.vi\0"
+"org.uz\0"
+"engerdal.no\0"
+"org.vn\0"
+"sciencecenter.museum\0v\xc3\xa5ler.\xc3\xb8stfold.no\0blogdns.net\0"
+"russia.museum\0"
+"leka.no\0"
+"tamayu.shimane.jp\0weber\0"
+"asso.gp\0org.vu\0"
+"vix.br\0grozny.ru\0"
+"netbank\0"
+"is-a-bruinsfan.org\0"
+"int.ru\0gets-it.net\0"
+"awsmppl.com\0"
+"chuo.tokyo.jp\0"
+"nebraska.museum\0snasa.no\0"
+"te.ua\0honda\0"
+"piacenza.it\0"
+"is-by.us\0"
+"kashiwazaki.niigata.jp\0"
+"org.ws\0"
+"asakuchi.okayama.jp\0"
+"asso.ht\0finnoy.no\0"
+"jessheim.no\0"
+"ragusa.it\0"
+"couk.me\0"
+"aikawa.kanagawa.jp\0hamar.no\0"
+"int.tj\0"
+"technology.museum\0r\xc3\xb8ros.no\0"
+"kisarazu.chiba.jp\0kaszuby.pl\0"
+"lighting\0"
+"iwanai.hokkaido.jp\0opensocial.site\0"
+"hanamaki.iwate.jp\0org.ye\0"
+"al.gov.br\0"
+"int.tt\0"
+"q-a.eu.org\0"
+"geo.br\0divtasvuodna.no\0ca.us\0"
+"masuda.shimane.jp\0"
+"asso.bj\0"
"org.za\0"
-"nakano.tokyo.jp\0jondal.no\0"
-"kids.museum\0r\xc3\xb8st.no\0"
-"ebino.miyazaki.jp\0"
-"trentin-s\xc3\xbc""d-tirol.it\0takahagi.ibaraki.jp\0saitama.saitama.jp\0isa-hockeynut.com\0"
-"wanouchi.gifu.jp\0nachikatsuura.wakayama.jp\0oshima.yamaguchi.jp\0"
-"wajima.ishikawa.jp\0"
+"chikushino.fukuoka.jp\0nl.no\0org.yt\0"
+"ekloges.cy\0"
+"arts.ro\0"
+"sport.hu\0taiwa.miyagi.jp\0"
+"int.ve\0"
+"hidaka.hokkaido.jp\0"
"org.zm\0"
-"gorizia.it\0"
-"meland.no\0pila.pl\0"
-"birthplace.museum\0lib.ct.us\0"
-"gold\0"
-"sassari.it\0"
-"golf\0"
-"org.zw\0"
-"perso.ht\0"
-"int.mv\0spjelkavik.no\0"
-"int.mw\0"
-"gniezno.pl\0"
-"int.ni\0"
-"vestnes.no\0"
-"piemonte.it\0cc.ua\0"
-"pa.leg.br\0"
-"hidaka.kochi.jp\0"
-"hiroo.hokkaido.jp\0gangwon.kr\0archaeological.museum\0"
-"homeoffice.gov.uk\0"
-"tvedestrand.no\0"
-"pors\xc3\xa1\xc5\x8bgu.no\0"
-"ingatlan.hu\0s3.dualstack.eu-west-1.amazonaws.com\0"
-"vevelstad.no\0"
-"elasticbeanstalk.com\0na4u.ru\0"
-"lib.la.us\0"
-"cc.co.us\0"
-"khmelnitskiy.ua\0"
-"fuchu.toyama.jp\0"
-"sochi.su\0"
-"ivano-frankivsk.ua\0adult\0"
-"vestvagoy.no\0"
-"kamiizumi.saitama.jp\0nesoddtangen.no\0"
-"trentino.it\0kh.ua\0"
-"shibukawa.gunma.jp\0k12.ky.us\0"
-"kosei.shiga.jp\0dyndns-web.com\0"
-"konan.aichi.jp\0sango.nara.jp\0paas.leviracloud.eu\0"
-"lodingen.no\0"
-"skiptvet.no\0pb.leg.br\0"
-"narita.chiba.jp\0ryugasaki.ibaraki.jp\0f\xc3\xb8rde.no\0"
-"trentino-s\xc3\xbc""dtirol.it\0s\xc3\xb8gne.no\0"
-"limanowa.pl\0goog\0pages.wiardweb.com\0"
-"takahama.fukui.jp\0\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0"
-"wielun.pl\0int.pt\0from-dc.com\0"
-"buzen.fukuoka.jp\0iwi.nz\0s3-website-ap-northeast-1.amazonaws.com\0"
-"ichinomiya.chiba.jp\0nishimera.miyazaki.jp\0shiojiri.nagano.jp\0"
-"circus.museum\0"
-"gov.nc.tr\0lifeinsurance\0"
-"shiksha\0"
-"risor.no\0"
-"habikino.osaka.jp\0chernihiv.ua\0"
-"sm.ua\0"
-"theater.museum\0"
-"airtel\0"
-"newyork.museum\0b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0"
-"\xe8\x87\xba\xe7\x81\xa3\0"
-"webhop.info\0"
-"friuli-vegiulia.it\0yonabaru.okinawa.jp\0"
-"safe\0"
-"gemological.museum\0windows\0int.ru\0"
-"industries\0cust.retrosnub.co.uk\0"
-"mordovia.su\0"
-"aurland.no\0"
-"bci.dnstrace.pro\0"
-"yoshinogari.saga.jp\0"
-"homeftp.org\0"
-"ogaki.gifu.jp\0"
-"kuroiso.tochigi.jp\0"
-"hiji.oita.jp\0"
-"conn.uk\0"
-"alabama.museum\0"
-"toyota.aichi.jp\0byen.site\0"
-"int.tj\0"
-"movimiento.bo\0georgia.museum\0is-an-actor.com\0"
-"gildesk\xc3\xa5l.no\0halsa.no\0"
+"asso.ci\0wakuya.miyagi.jp\0"
+"6.bg\0chuo.chiba.jp\0takarazuka.hyogo.jp\0"
+"perso.ht\0int.vn\0"
+"yatomi.aichi.jp\0altervista.org\0cloudapp.net\0"
+"chambagri.fr\0"
+"shop.th\0"
+"mo\xc3\xa5reke.no\0org.zw\0vlaanderen\0"
+"koza.wakayama.jp\0troandin.no\0"
+"tjome.no\0"
+"it1.jenv-aruba.cloud\0"
+"kamisato.saitama.jp\0"
+"iwaki.fukushima.jp\0computer.museum\0"
+"kuromatsunai.hokkaido.jp\0"
+"of.london\0"
+"hikimi.shimane.jp\0"
+"lillesand.no\0"
+"williamhill\0"
+"okinawa.jp\0voting\0"
+"computerhistory.museum\0lanbib.se\0"
+"abarth\0"
+"asso.dz\0"
+"shiraoi.hokkaido.jp\0swidnik.pl\0"
+"biella.it\0bosch\0"
+"kami.miyagi.jp\0"
+"musashino.tokyo.jp\0byen.site\0"
+"vb.it\0"
+"shoo.okayama.jp\0lib.md.us\0"
+"arts.nf\0shop.ro\0"
+"fage\0rogers\0"
+"tmall\0"
+"guam.gu\0kakegawa.shizuoka.jp\0"
+"naka.hiroshima.jp\0tara.saga.jp\0"
+"solar\0"
+"machida.tokyo.jp\0is-a-chef.org\0"
+"\xe5\xae\xae\xe5\xb4\x8e.jp\0"
+"nahari.kochi.jp\0"
+"minami.tokushima.jp\0family\0"
+"carrd.co\0"
+"shop.pl\0merckmsd\0"
+"go.ci\0wakkanai.hokkaido.jp\0urasoe.okinawa.jp\0"
+"discover\0"
+"hs.kr\0ontario.museum\0imamat\0"
+"r\xc3\xa5""de.no\0"
+"jozi.biz\0"
+"go.cr\0anpachi.gifu.jp\0penza.su\0"
+"audible\0"
+"fukushima.fukushima.jp\0oregontrail.museum\0"
+"s3-eu-west-1.amazonaws.com\0"
+"cloud.goog\0"
+"khmelnytskyi.ua\0fail\0zara\0"
+"rackmaze.com\0"
+"uda.nara.jp\0"
+"s3.dualstack.eu-west-3.amazonaws.com\0"
+"tabuse.yamaguchi.jp\0clinique\0"
+"merseine.nu\0"
+"\xe5\x98\x89\xe9\x87\x8c\0"
+"lindesnes.no\0"
+"jcloud.ik-server.com\0siteleaf.net\0"
+"prof.pr\0"
+"lublin.pl\0"
+"gobo.wakayama.jp\0"
+"moka.tochigi.jp\0"
+"voyage\0conn.uk\0"
+"kudoyama.wakayama.jp\0bukhara.su\0"
+"higashitsuno.kochi.jp\0lilly\0"
+"katsushika.tokyo.jp\0dopaas.com\0"
+"idv.tw\0"
+"museumvereniging.museum\0"
"ancona.it\0"
-"nose.osaka.jp\0dynserv.org\0"
-"tamano.okayama.jp\0mircloud.host\0myvnc.com\0"
-"int.tt\0"
-"cnt.br\0naturhistorisches.museum\0rns.tn\0toray\0"
-"official.academy\0"
-"hoylandet.no\0blogspot.vn\0u2.xnbay.com\0"
-"scientist.aero\0osoyro.no\0jl.serv.net.mx\0"
-"ba.gov.br\0"
-"targi.pl\0yandexcloud.net\0"
-"freesite.host\0london.cloudapps.digital\0"
-"hara.nagano.jp\0"
-"lgbt\0"
-"se.gov.br\0"
-"lib.wy.us\0int.ve\0dyndns-wiki.com\0"
-"t.bg\0"
-"salvador.br\0mordovia.ru\0"
-"nord-aurdal.no\0"
-"beauty\0website\0"
-"vxl.sh\0"
-"ppg.br\0aostavalley.it\0kochi.jp\0"
-"gose.nara.jp\0"
-"int.vn\0"
-"chihayaakasaka.osaka.jp\0museum.tt\0"
-"k12.wa.us\0technology\0"
-"ringsaker.no\0tube\0wmflabs.org\0"
-"ravendb.run\0mymediapc.net\0"
-"lib.in.us\0"
-"shinshinotsu.hokkaido.jp\0starachowice.pl\0customer.speedpartner.de\0"
-"blackbaudcdn.net\0"
-"l\xc3\xa6rdal.no\0samnanger.no\0"
-"kamaishi.iwate.jp\0"
-"mp.br\0"
-"\xe7\xb5\x84\xe7\xb9\x94.tw\0s3-eu-west-3.amazonaws.com\0"
-"sale\0"
-"jewishart.museum\0blogspot.re\0"
-"law.za\0"
-"frei.no\0test-iserv.de\0"
-"kitahiroshima.hokkaido.jp\0"
-"dynathome.net\0msk.ru\0"
-"pages.dev\0blogspot.ro\0"
-"democracia.bo\0"
-"blogspot.rs\0"
-"b\xc3\xa1id\xc3\xa1r.no\0blogspot.ru\0blogspot.se\0"
-"shimotsuma.ibaraki.jp\0blogspot.sg\0"
-"loten.no\0blogspot.si\0"
-"msk.su\0"
-"blogspot.sk\0bounceme.net\0"
-"umaji.kochi.jp\0blogspot.sn\0"
-"mad.museum\0"
-"r\xc3\xb8yken.no\0"
-"kawai.iwate.jp\0extraspace\0"
-"takashima.shiga.jp\0comsec\0"
-"galsa.no\0hamburg\0blogspot.td\0"
-"aero\0"
-"tadotsu.kagawa.jp\0exhibition.museum\0online\0"
-"oyabe.toyama.jp\0cloud.interhostsolutions.be\0"
-"civilaviation.aero\0"
-"forum.hu\0taa.it\0"
-"sport.hu\0taketomi.okinawa.jp\0"
-"kuki.saitama.jp\0gyeongnam.kr\0"
-"morotsuka.miyazaki.jp\0"
-"sa.gov.pl\0sa.com\0"
-"her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0"
-"blogspot.tw\0blogspot.ug\0"
-"roma.it\0"
-"ninomiya.kanagawa.jp\0aviation.museum\0"
-"omuta.fukuoka.jp\0"
-"yahaba.iwate.jp\0grong.no\0troitsk.su\0"
-"malvik.no\0naroy.no\0"
-"hn.cn\0itau\0"
-"okegawa.saitama.jp\0"
-"lib.nm.us\0blogspot.mr\0"
-"fujieda.shizuoka.jp\0"
-"shakotan.hokkaido.jp\0"
-"fhsk.se\0blogspot.mx\0"
-"blogspot.my\0"
-"a.ssl.fastly.net\0"
-"blogspot.nl\0"
-"inagawa.hyogo.jp\0ua.rs\0"
-"qc.ca\0blogspot.no\0"
-"am.gov.br\0seiro.niigata.jp\0k12.me.us\0"
-"bar.pro\0"
-"\xe9\xa6\x99\xe5\xb7\x9d.jp\0balashov.su\0"
-"res.in\0"
-"cam.it\0"
-"ofunato.iwate.jp\0"
-"ng.ink\0"
-"sirdal.no\0"
-"antiques.museum\0"
-"agrinet.tn\0"
-"wloclawek.pl\0"
-"ybo.faith\0"
-"washtenaw.mi.us\0"
-"tsuruoka.yamagata.jp\0pi.leg.br\0"
-"blogspot.pe\0"
-"cruise\0"
-"cesenaforl\xc3\xac.it\0cheltenham.museum\0sherbrooke.museum\0"
-"kasama.ibaraki.jp\0kashima.saga.jp\0"
-"sarl\0"
-"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0isteingeek.de\0"
-"github.io\0"
-"lierne.no\0\xd5\xb0\xd5\xa1\xd5\xb5\0pioneer\0stockholm\0"
-"sakahogi.gifu.jp\0gyeongbuk.kr\0"
-"workshop.museum\0blogspot.qa\0"
-"teramo.it\0blogspot.pt\0"
-"familyds.com\0"
-"floro.no\0"
-"museum.mv\0"
-"museum.mw\0"
-"withyoutube.com\0"
-"yoshimi.saitama.jp\0ferrero\0"
-"gujo.gifu.jp\0school.museum\0"
-"hokkaido.jp\0museum.no\0lelux.site\0"
-"selbu.no\0"
-"blogspot.is\0"
-"blogspot.it\0"
-"perso.sn\0"
-"messina.it\0"
-"pinb.gov.pl\0"
-"airline.aero\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0paas.massivegrid.com\0"
-"info.gu\0"
-"kashihara.nara.jp\0"
-"barsy.site\0"
-"ve.it\0museum.om\0"
-"blogspot.jp\0"
-"trondheim.no\0\xe5\xb9\xbf\xe4\xb8\x9c\0"
-"meldal.no\0miasta.pl\0"
-"perso.tn\0is-a-liberal.com\0"
-"info.ht\0"
-"info.hu\0"
-"blogdns.com\0"
-"udine.it\0berkeley.museum\0"
-"virgin\0"
-"\xc3\xb8vre-eiker.no\0blogspot.kr\0"
-"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0"
-"yamamoto.miyagi.jp\0fujimi.nagano.jp\0save\0"
-"lib.ca.us\0"
-"mus.br\0info.et\0blogspot.li\0"
-"africa\0"
-"tomakomai.hokkaido.jp\0hamamatsu.shizuoka.jp\0"
-"yasu.shiga.jp\0"
-"info.fj\0wien\0"
-"journalist.aero\0ap.gov.br\0naustdal.no\0"
-"kouzushima.tokyo.jp\0"
-"b\xc3\xb8.nordland.no\0"
-"blogspot.lt\0blogspot.md\0"
-"blogspot.lu\0"
-"iwata.shizuoka.jp\0xx.gl\0"
-"vic.gov.au\0ama.shimane.jp\0eidskog.no\0review\0localhost.daplie.me\0"
-"showa.fukushima.jp\0"
-"baltimore.museum\0"
-"minokamo.gifu.jp\0hotel.tz\0blogspot.mk\0"
-"shiogama.miyagi.jp\0"
-"clock.museum\0"
-"barsy.shop\0"
-"bo.nordland.no\0"
-"nt.au\0"
-"reggio-emilia.it\0lamborghini\0"
-"hvaler.no\0"
-"uchinada.ishikawa.jp\0mielno.pl\0citi\0blogspot.fi\0"
-"ap.gov.pl\0"
-"info.cx\0"
-"saxo\0"
-"yonaguni.okinawa.jp\0"
-"nt.ca\0"
-"trader.aero\0blogspot.fr\0"
-"banamex\0"
-"info.ec\0sologne.museum\0"
-"cl.it\0city\0"
-"sumoto.kumamoto.jp\0"
-"gs.nl.no\0schaeffler\0"
-"passenger-association.aero\0"
-"natal.br\0"
-"6.bg\0"
-"blogspot.gr\0"
-"chernigov.ua\0pe.leg.br\0"
-"sorum.no\0pomorskie.pl\0"
-"info.bb\0kuriyama.hokkaido.jp\0minamitane.kagoshima.jp\0aki.kochi.jp\0siljan.no\0"
-"am.br\0accountant\0info.at\0"
-"info.au\0"
-"t.se\0blogspot.hk\0"
-"sb.ua\0"
-"info.az\0"
-"\xe4\xbc\x81\xe4\xb8\x9a\0trafficplex.cloud\0"
-"blogspot.hr\0"
-"in-addr.arpa\0info.bo\0kanie.aichi.jp\0"
-"blogspot.hu\0blogspot.ie\0"
-"toyooka.hyogo.jp\0tiffany\0"
-"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0blogspot.in\0"
-"tur.ar\0blogspot.ba\0"
-"britishcolumbia.museum\0br\xc3\xb8nn\xc3\xb8y.no\0"
-"info.co\0"
-"ryukyu\0blogspot.be\0"
-"fujisato.akita.jp\0divttasvuotna.no\0"
-"blogspot.bg\0"
-"usantiques.museum\0hosting\0"
-"wiki\0blogspot.bj\0"
-"cityeats\0"
-"fitjar.no\0"
-"youtube\0"
-"finnoy.no\0skjerv\xc3\xb8y.no\0"
-"tur.br\0sv.it\0horonobe.hokkaido.jp\0blogspot.ca\0"
-"lib.ny.us\0"
-"blogspot.cf\0"
-"blogspot.ch\0"
-"hirara.okinawa.jp\0nagato.yamaguchi.jp\0blogspot.cl\0"
-"mishima.fukushima.jp\0nosegawa.nara.jp\0"
-"santoandre.br\0"
-"date.hokkaido.jp\0"
-"dopaas.com\0"
-"kartuzy.pl\0"
-"groundhandling.aero\0usa.oita.jp\0busan.kr\0gjesdal.no\0"
-"nerima.tokyo.jp\0blogspot.de\0"
-"blogspot.cv\0"
-"blogspot.cz\0"
-"blogspot.dk\0"
-"hotel.lk\0"
-"hirakata.osaka.jp\0birkenes.no\0"
-"software.aero\0mielec.pl\0publishproxy.com\0"
-"i.bg\0praxi\0"
-"napoli.it\0lyngen.no\0"
-"clinton.museum\0hair\0"
-"olayan\0wmcloud.org\0"
-"\xe7\xb5\x84\xe7\xb9\x94.hk\0wine\0"
-"depot.museum\0"
-"doctor\0"
-"beskidy.pl\0"
-"kommunalforbund.se\0"
-"dgca.aero\0yachts\0"
-"certification.aero\0podlasie.pl\0pohl\0"
-"hashbang.sh\0"
-"toya.hokkaido.jp\0maniwa.okayama.jp\0"
-"ami.ibaraki.jp\0"
-"environment.museum\0bygland.no\0"
-"belem.br\0health-carereform.com\0"
-"reklam.hu\0"
-"now.sh\0"
-"kvitsoy.no\0wellbeingzone.co.uk\0"
-"cc.wa.us\0on-aptible.com\0"
-"trentino-s-tirol.it\0m\xc3\xa5s\xc3\xb8y.no\0"
-"adachi.tokyo.jp\0"
-"fedex\0dvrcam.info\0"
-"aver\xc3\xb8y.no\0*.ex.futurecms.at\0"
-"katano.osaka.jp\0sakura\0is-a-nurse.com\0"
-"macerata.it\0"
-"is-with-theband.com\0"
-"cieszyn.pl\0"
-"pol.dz\0"
-"cloudapp.net\0"
-"tr.eu.org\0"
-"at-band-camp.net\0"
-"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0"
-"mitou.yamaguchi.jp\0"
-"nombre.bo\0"
-"radoy.no\0"
-"homesecuritypc.com\0"
-"oyamazaki.kyoto.jp\0"
-"pulawy.pl\0"
-"lindas.no\0"
-"shriram\0homeftp.net\0"
-"kommune.no\0"
-"annaka.gunma.jp\0blogspot.ae\0"
-"hotel.hu\0"
-"wa.edu.au\0herad.no\0platform0.app\0"
-"hitachinaka.ibaraki.jp\0"
-"gs.tr.no\0"
-"jeep\0"
-"pro.az\0blogspot.al\0"
-"*.statics.cloud\0blogspot.am\0"
-"shimane.shimane.jp\0"
-"fl\xc3\xa5.no\0"
-"pro.br\0pr.leg.br\0"
-"sciences.museum\0"
-"k12.de.us\0"
-"misugi.mie.jp\0"
-"read-books.org\0"
-"\xe4\xb8\x89\xe9\x87\x8d.jp\0istanbul\0"
-"heguri.nara.jp\0artgallery.museum\0"
-"barefoot\0foundation\0"
-"nt.no\0orange\0"
-"gs.cn\0rg.it\0kurate.fukuoka.jp\0traeumtgerade.de\0"
-"ponpes.id\0rennebu.no\0"
-"g\xc3\xa1ivuotna.no\0"
-"pol.ht\0"
-"barrel-of-knowledge.info\0"
-"miyada.nagano.jp\0"
-"toride.ibaraki.jp\0"
-"pro.cy\0togura.nagano.jp\0"
-"mango\0"
-"webhop.me\0"
-"is-a-hunter.com\0armenia.su\0"
-"atami.shizuoka.jp\0"
-"pro.ec\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0"
-"ogawara.miyagi.jp\0"
-"info.ve\0"
-"tlon.network\0"
-"shimizu.shizuoka.jp\0toga.toyama.jp\0"
-"nanmoku.gunma.jp\0direct\0"
-"bryne.no\0"
-"aosta-valley.it\0"
-"info.vn\0"
-"la.us\0"
-"aejrie.no\0swinoujscie.pl\0"
-"yamada.fukuoka.jp\0shimizu.hokkaido.jp\0tcm.museum\0lacaixa\0"
-"zentsuji.kagawa.jp\0chungnam.kr\0"
-"transporte.bo\0"
-"isernia.it\0"
-"pro.fj\0kadogawa.miyazaki.jp\0tama.tokyo.jp\0artsandcrafts.museum\0"
-"ng.school\0"
-"tselinograd.su\0"
-"total\0"
-"myiphost.com\0"
-"abeno.osaka.jp\0"
-"lu.it\0me.it\0\xc3\xa1laheadju.no\0"
-"levanger.no\0"
-"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0"
-"murakami.niigata.jp\0*.elb.amazonaws.com.cn\0"
-"\xe7\xbd\x91\xe7\xbb\x9c.cn\0"
-"donna.no\0nt.ro\0frontier\0"
-"s3-ap-southeast-1.amazonaws.com\0telebit.app\0"
-"com.ac\0agano.niigata.jp\0"
-"vodka\0"
-"info.tn\0condos\0"
-"com.af\0"
-"com.ag\0"
-"s\xc3\xa1l\xc3\xa1t.no\0"
-"com.ai\0me.ke\0info.tr\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0"
+"cc.me.us\0dyndns-server.com\0"
+"shioya.tochigi.jp\0"
+"wsa.gov.pl\0"
+"g.bg\0"
+"friuli-vegiulia.it\0andoy.no\0"
+"inabe.mie.jp\0"
+"americanexpress\0wedding\0"
+"ketrzyn.pl\0"
+"namegata.ibaraki.jp\0"
+"goiania.br\0hekinan.aichi.jp\0pyatigorsk.ru\0"
+"cn-northwest-1.eb.amazonaws.com.cn\0"
+"k12.ct.us\0"
+"\xe6\x9b\xb8\xe7\xb1\x8d\0lelux.site\0"
+"\xe5\xbe\xb3\xe5\xb3\xb6.jp\0fujiidera.osaka.jp\0"
+"gaivuotna.no\0"
+"\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0"
+"lawyer\0"
+"guge\0is-a-chef.com\0"
+"wallonie.museum\0tuxfamily.org\0"
+"partners\0dvrdns.org\0"
"donostia.museum\0"
-"info.tt\0"
-"com.al\0hazu.aichi.jp\0kurashiki.okayama.jp\0crafts.museum\0lanbib.se\0filegear-ie.me\0"
-"com.am\0"
-"com.ba\0botanicgarden.museum\0info.tz\0"
-"com.ar\0com.bb\0"
-"lund.no\0church\0"
-"com.au\0"
-"matsumoto.kagoshima.jp\0porn\0"
-"com.aw\0muika.niigata.jp\0"
-"com.bh\0pro.ht\0alaheadju.no\0contractors\0"
-"com.bi\0\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0"
-"com.az\0from-ma.com\0"
-"agematsu.nagano.jp\0"
-"com.bm\0shopitsite.com\0"
-"com.bn\0oamishirasato.chiba.jp\0"
-"com.bo\0"
-"com.br\0i.ng\0lidl\0"
-"com.bs\0sk.ca\0od.ua\0"
-"com.bt\0"
-"info.ro\0"
-"haus\0"
-"lavagis.no\0"
-"com.by\0com.ci\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0servebbs.com\0"
-"com.bz\0"
-"info.sd\0"
-"post\0"
-"com.cm\0ina.saitama.jp\0mormon\0"
-"com.cn\0"
-"com.co\0ogliastra.it\0"
-"ora.gunma.jp\0nishiwaki.hyogo.jp\0"
-"bulsan-s\xc3\xbc""dtirol.it\0"
-"goshiki.hyogo.jp\0users.scale.virtualcloud.com.br\0"
-"com.cu\0com.de\0"
-"fukagawa.hokkaido.jp\0"
-"com.cw\0*.telebit.xyz\0"
-"com.cy\0"
-"naval.museum\0"
-"life\0"
-"square.museum\0"
-"com.dm\0"
-"com.do\0"
-"wakuya.miyagi.jp\0"
-"gotdns.ch\0"
-"campidano-medio.it\0rankoshi.hokkaido.jp\0info.pk\0"
-"com.ec\0misaki.osaka.jp\0i.ph\0info.pl\0"
-"com.ee\0"
-"ogawa.saitama.jp\0"
-"trd.br\0com.eg\0"
-"grp.lk\0"
-"info.pr\0"
-"com.dz\0"
-"\xe7\xbd\x91\xe7\xbb\x9c.hk\0myfast.host\0"
-"ato.br\0"
-"wi.us\0"
-"com.es\0"
-"com.et\0"
-"ogawa.nagano.jp\0googleapis.com\0"
-"patria.bo\0"
-"info.na\0"
-"skierva.no\0"
-"com.fj\0naruto.tokushima.jp\0"
-"com.fm\0info.mv\0info.nf\0"
-"ca.it\0nesodden.no\0analytics\0"
-"quicksytes.com\0"
-"info.ni\0"
-"com.fr\0firewall-gateway.de\0"
-"wallonie.museum\0"
-"com.ge\0chuo.chiba.jp\0pro.na\0"
-"togakushi.nagano.jp\0"
-"com.gh\0"
-"com.gi\0info.nr\0"
-"brussel.museum\0pro.mv\0"
-"bmd.br\0com.gl\0"
-"ab.ca\0"
-"com.gn\0"
-"express\0"
-"com.gp\0i.se\0"
-"com.gr\0tsukigata.hokkaido.jp\0versicherung\0"
-"wakayama.jp\0naturalhistorymuseum.museum\0"
-"com.gt\0"
-"com.gu\0bungoono.oita.jp\0scot\0vologda.su\0"
-"chimkent.su\0glitch.me\0vaporcloud.io\0"
-"reggioemilia.it\0info.la\0supplies\0"
-"com.gy\0"
-"golffan.us\0"
-"com.hk\0"
-"pesarourbino.it\0gs.vf.no\0vardo.no\0"
-"com.hn\0illustration.museum\0"
-"stpetersburg.museum\0s3-website-ap-southeast-1.amazonaws.com\0"
-"macapa.br\0otofuke.hokkaido.jp\0pro.om\0"
-"ong.br\0com.hr\0cc.sc.us\0"
-"barsy.info\0"
-"com.ht\0"
-"tahara.aichi.jp\0"
-"takayama.gunma.jp\0\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0dyn-o-saur.com\0"
-"pol.tr\0"
-"dp.ua\0"
-"info.ls\0\xd8\xb9\xd8\xb1\xd8\xa8\0"
-"takino.hyogo.jp\0like\0"
-"rio.br\0"
-"com.im\0mikasa.hokkaido.jp\0"
-"com.io\0"
-"aquarelle\0"
-"com.iq\0"
-"shimokitayama.nara.jp\0lapy.pl\0"
-"com.is\0trustee.museum\0me.so\0"
-"daiwa.hiroshima.jp\0"
-"from-la.net\0"
-"pro.pr\0dupont\0"
-"me.tc\0"
-"kmpsp.gov.pl\0tkmaxx\0"
-"ip6.arpa\0ca.na\0"
-"recht.pro\0"
-"nakadomari.aomori.jp\0"
-"com.jo\0"
-"skoczow.pl\0forgot.her.name\0"
-"lplfinancial\0"
-"gob.ar\0"
-"rimini.it\0joetsu.niigata.jp\0k12.nh.us\0"
-"com.kg\0"
-"kita.tokyo.jp\0"
-"nishigo.fukushima.jp\0com.ki\0"
-"zlg.br\0principe.st\0"
-"indianapolis.museum\0"
-"ltd.co.im\0info.ke\0"
-"com.km\0suwalki.pl\0swiebodzin.pl\0sells-it.net\0"
-"me.tz\0"
-"hole.no\0me.uk\0lib.ak.us\0"
-"gob.bo\0info.ki\0com.kp\0texas.museum\0"
-"minamiashigara.kanagawa.jp\0com.la\0uk.eu.org\0"
-"kosaka.akita.jp\0com.lb\0"
-"com.lc\0dielddanuorri.no\0"
-"shibuya.tokyo.jp\0"
-"limo\0"
-"com.kw\0me.us\0"
-"my.id\0com.ky\0"
-"poa.br\0com.kz\0"
-"ouda.nara.jp\0com.lk\0"
-"empresa.bo\0gob.cl\0"
-"mihama.mie.jp\0"
-"association.museum\0"
-"des.br\0siracusa.it\0dance\0"
-"link\0usercontent.jp\0"
-"com.lr\0"
-"ono.fukushima.jp\0"
-"sykkylven.no\0"
-"com.lv\0"
-"com.mg\0rygge.no\0"
-"\xe7\xbd\x91\xe7\xb5\xa1.hk\0oi.kanagawa.jp\0iwatsuki.saitama.jp\0montreal.museum\0"
-"com.ly\0me.vu\0"
-"furudono.fukushima.jp\0za.bz\0"
-"com.mk\0lib.id.us\0"
-"com.ml\0beep.pl\0"
-"helsinki\0"
-"com.mo\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0"
-"gob.do\0"
-"com.na\0"
-"of.london\0"
-"com.ms\0"
-"gob.ec\0com.mt\0"
-"kasugai.aichi.jp\0fujikawa.yamanashi.jp\0com.mu\0"
-"com.mv\0com.nf\0ox.rs\0"
-"kunneppu.hokkaido.jp\0shari.hokkaido.jp\0com.mw\0com.ng\0"
-"niigata.jp\0com.mx\0pro.tt\0"
-"com.my\0com.ni\0"
-"mydrobo.com\0"
-"is-a-celticsfan.org\0freeddns.org\0"
-"daejeon.kr\0"
-"higashikurume.tokyo.jp\0rsvp\0"
-"com.nr\0"
-"genting\0"
-"gob.es\0babia-gora.pl\0\xe5\x9c\xa8\xe7\xba\xbf\0"
-"chichibu.saitama.jp\0vs.mythic-beasts.com\0mintere.site\0"
-"shimotsuke.tochigi.jp\0"
-"maintenance.aero\0"
-"niteroi.br\0sucks\0"
-"jamison.museum\0"
-"gildeskal.no\0com.om\0"
-"coop.ht\0kazo.saitama.jp\0"
-"flowers\0"
-"miyako.iwate.jp\0com.pa\0"
-"pro.vn\0"
-"matsukawa.nagano.jp\0kitamoto.saitama.jp\0"
-"com.pe\0"
-"kitagawa.miyazaki.jp\0com.pf\0"
-"seg.br\0exposed\0"
-"com.ph\0"
-"historichouses.museum\0"
-"com.pk\0"
-"yamaga.kumamoto.jp\0nannestad.no\0com.pl\0"
-"yokawa.hyogo.jp\0"
-"trentin-suedtirol.it\0watarai.mie.jp\0"
-"com.qa\0lefrak\0"
-"evenes.no\0com.pr\0"
-"higashiagatsuma.gunma.jp\0com.ps\0s3-us-west-1.amazonaws.com\0"
-"com.pt\0"
-"gob.gt\0\xe5\xa8\xb1\xe4\xb9\x90\0"
-"mattel\0"
-"kasamatsu.gifu.jp\0"
-"r\xc3\xa6lingen.no\0com.py\0"
-"tonaki.okinawa.jp\0lawyer\0"
-"coop.br\0"
-"\xe7\xbd\x91\xe5\x9d\x80\0"
-"gob.hn\0komforb.se\0de.gt\0"
-"funabashi.chiba.jp\0brother\0"
-"osakikamijima.hiroshima.jp\0"
-"com.re\0"
-"kiyosato.hokkaido.jp\0"
-"hikari.yamaguchi.jp\0dunlop\0qualifioapp.com\0"
-"lib.ks.us\0"
-"kakamigahara.gifu.jp\0"
-"afjord.no\0ca.us\0"
-"com.ro\0"
-"kameoka.kyoto.jp\0"
-"com.sa\0"
-"fukuoka.jp\0com.sb\0"
-"com.sc\0"
-"com.sd\0"
-"com.se\0giize.com\0com.ru\0"
-"friuliveneziagiulia.it\0aga.niigata.jp\0com.sg\0es-1.axarnet.cloud\0"
-"kitaura.miyazaki.jp\0com.sh\0"
-"narviika.no\0"
-"com.sl\0"
-"annefrank.museum\0medizinhistorisches.museum\0com.sn\0"
-"com.so\0"
-"\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0\xe7\xbd\x91\xe7\xab\x99\0"
-"azumino.nagano.jp\0aramco\0"
-"com.ss\0"
-"com.st\0"
-"\xe6\xbb\x8b\xe8\xb3\x80.jp\0"
-"com.sv\0"
-"higashikagura.hokkaido.jp\0n\xc3\xb8tter\xc3\xb8y.no\0com.sy\0caravan\0"
-"okayama.jp\0com.tj\0memorial\0"
-"live\0service.one\0"
-"com.tm\0"
-"com.tn\0"
-"com.to\0android\0"
-"omigawa.chiba.jp\0zama.kanagawa.jp\0schokoladen.museum\0"
-"higashiura.aichi.jp\0itoman.okinawa.jp\0com.ua\0"
-"com.tr\0vladikavkaz.ru\0"
-"kiwa.mie.jp\0"
-"com.tt\0"
-"ariake.saga.jp\0ranzan.saitama.jp\0uozu.toyama.jp\0"
-"com.tw\0com.ug\0to.gt\0"
-"anpachi.gifu.jp\0*.quipelements.com\0"
-"prd.fr\0chippubetsu.hokkaido.jp\0shiwa.iwate.jp\0"
-"futsu.nagasaki.jp\0tawaramoto.nara.jp\0"
-"kiho.mie.jp\0colonialwilliamsburg.museum\0ivanovo.su\0"
-"haibara.shizuoka.jp\0"
-"riopreto.br\0kikuchi.kumamoto.jp\0"
-"muroto.kochi.jp\0"
-"vladikavkaz.su\0"
-"katagami.akita.jp\0com.vc\0"
-"takko.aomori.jp\0com.ve\0"
-"dh.bytemark.co.uk\0"
-"poniatowa.pl\0"
-"otaru.hokkaido.jp\0"
-"com.uy\0com.vi\0"
-"com.uz\0"
-"sch.ae\0"
-"com.vn\0de.ls\0"
-"de.md\0"
-"voss.no\0"
-"nordeste-idc.saveincloud.net\0"
-"asakawa.fukushima.jp\0takanabe.miyazaki.jp\0limited\0"
-"sobetsu.hokkaido.jp\0"
-"gov.ac\0yaizu.shizuoka.jp\0com.vu\0us.platform.sh\0"
-"hawaii.museum\0"
-"gov.ae\0to.it\0"
-"gov.af\0"
-"minamiuonuma.niigata.jp\0gob.mx\0"
-"gob.ni\0"
-"kongsberg.no\0"
-"gov.al\0architecture.museum\0"
-"barcelona\0"
-"amsterdam.museum\0hk.org\0"
-"gov.ba\0com.ws\0melbourne\0"
-"gov.ar\0gov.bb\0s3.dualstack.us-east-1.amazonaws.com\0"
-"gov.as\0myactivedirectory.com\0"
-"dnsalias.com\0"
+"nanto.toyama.jp\0salvadordali.museum\0"
+"\xc3\xa5lesund.no\0"
+"software.aero\0dnsking.ch\0"
+"commune.am\0"
+"dattoweb.com\0"
+"bergamo.it\0"
+"go.id\0kiho.mie.jp\0dnsupdater.de\0"
+"gj\xc3\xb8vik.no\0"
+"losangeles.museum\0"
+"tn.it\0"
+"kitchen\0"
+"pi.it\0fans\0"
+"hakodate.hokkaido.jp\0"
+"tsukumi.oita.jp\0nodum.co\0"
+"go.it\0"
+"kunohe.iwate.jp\0"
+"static.land\0"
+"bz.it\0hazu.aichi.jp\0kui.hiroshima.jp\0cruises\0"
+"ddnsfree.com\0"
+"sunagawa.hokkaido.jp\0ryugasaki.ibaraki.jp\0"
+"harstad.no\0"
+"nu.ca\0go.jp\0"
+"alstom\0"
+"chanel\0"
+"cloudns.asia\0"
+"go.ke\0*.gateway.dev\0"
+"oita.oita.jp\0"
+"nikolaev.ua\0"
+"gov.ac\0"
+"nakasatsunai.hokkaido.jp\0oy.lc\0"
+"gov.ae\0*.quipelements.com\0"
+"gov.af\0myfritz.net\0"
+"natori.miyagi.jp\0press.se\0\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"tanagura.fukushima.jp\0"
+"go.kr\0dolls.museum\0nodum.io\0"
+"gov.al\0kyotamba.kyoto.jp\0"
+"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0"
+"courses\0flap.id\0"
+"gov.ba\0"
+"gov.ar\0gov.bb\0"
+"gov.as\0"
"gov.au\0"
-"gov.bf\0custom.metacentrum.cz\0"
+"iris.arpa\0gov.bf\0dn.ua\0"
+"\xe7\xb5\x84\xe7\xbb\x87.hk\0susono.shizuoka.jp\0"
"gov.bh\0"
-"bosch\0"
-"gov.az\0tohma.hokkaido.jp\0koryo.nara.jp\0"
-"yoga\0isa-geek.org\0"
-"vindafjord.no\0"
-"gov.bm\0rochester.museum\0"
-"gov.bn\0"
-"ce.gov.br\0omihachiman.shiga.jp\0gob.pa\0"
-"gov.br\0"
-"gov.bs\0"
-"r.bg\0campinas.br\0gov.bt\0gov.cd\0gob.pe\0"
-"hirokawa.fukuoka.jp\0harstad.no\0"
-"repair\0"
-"gov.by\0bounty-full.com\0"
-"gov.bz\0s\xc3\xa1lat.no\0gob.pk\0"
-"plurinacional.bo\0gov.cl\0tateshina.nagano.jp\0"
+"gov.az\0east-kazakhstan.su\0"
+"ojiya.niigata.jp\0"
+"kamikawa.hyogo.jp\0"
+"gov.bm\0marriott\0"
+"gov.bn\0goto.nagasaki.jp\0"
+"asso.re\0farm\0"
+"western.museum\0"
+"gov.br\0\xe7\xbd\x91\xe7\xbb\x9c\0"
+"gov.bs\0watarai.mie.jp\0"
+"gov.bt\0gov.cd\0asahi.ibaraki.jp\0saintlouis.museum\0"
+"ostrowiec.pl\0help\0phx.enscaled.us\0"
+"mod.gi\0"
+"tunk.org\0"
+"gov.by\0koganei.tokyo.jp\0"
+"gov.bz\0suzuka.mie.jp\0"
+"gov.cl\0marnardal.no\0"
"gov.cm\0"
"gov.cn\0"
-"gov.co\0"
-"prato.it\0vn.ua\0"
-"mie.jp\0prd.km\0"
-"seat\0"
-"mihama.aichi.jp\0"
-"gov.cu\0godaddy\0to.md\0"
-"toda.saitama.jp\0"
-"gov.cx\0asahi.toyama.jp\0s3.ap-northeast-2.amazonaws.com\0"
-"gov.cy\0miyota.nagano.jp\0ueda.nagano.jp\0"
-"uni5.net\0centralus.azurestaticapps.net\0"
-"omaha.museum\0com.zm\0theworkpc.com\0"
-"lundbeck\0s3.dualstack.eu-west-2.amazonaws.com\0"
+"gov.co\0nabari.mie.jp\0"
+"barcelona.museum\0"
+"tourism.tn\0"
+"gov.cu\0cc.la.us\0grondar.za\0"
+"fast\0"
+"priv.hu\0misato.miyagi.jp\0no-ip.net\0"
+"gov.cx\0"
+"gov.cy\0"
"gov.dm\0"
-"okagaki.fukuoka.jp\0"
-"gov.do\0"
-"modelling.aero\0oldnavy\0is-a-doctor.com\0"
-"info.zm\0"
+"vagsoy.no\0"
+"gov.do\0tome.miyagi.jp\0"
+"crimea.ua\0"
"gov.ec\0"
-"lecco.it\0nishiarita.saga.jp\0x443.pw\0"
-"gov.ee\0yokote.akita.jp\0fujimino.saitama.jp\0"
-"hol.no\0"
+"gov.ee\0"
+"historyofscience.museum\0"
"gov.eg\0"
-"azure-mobile.net\0"
-"koganei.tokyo.jp\0"
-"gov.dz\0"
-"prd.mg\0aaa\0"
-"av.it\0fhv.se\0"
-"bergen.no\0"
-"b-data.io\0"
-"ustka.pl\0"
-"gov.et\0\xe8\xb4\xad\xe7\x89\xa9\0no-ip.biz\0"
-"sandnes.no\0"
-"historyofscience.museum\0nhlfan.net\0"
-"gov.fj\0us.ax\0"
-"\xc3\xb8rsta.no\0"
-"\xe5\x85\xac\xe5\x8f\xb8.cn\0abb\0"
-"abc\0"
-"est.pr\0"
-"cricket\0"
-"r\xc3\xb8mskog.no\0sm\xc3\xb8la.no\0dy.fi\0"
-"gov.gd\0"
-"gov.ge\0gob.sv\0"
-"gov.gh\0pug.it\0"
-"mat.br\0gov.gi\0"
-"\xe5\x85\xac\xe5\x8f\xb8.hk\0seek\0ybo.review\0"
-"bando.ibaraki.jp\0amot.no\0"
-"olecko.pl\0"
-"linkitools.space\0lima.zone\0"
+"gov.dz\0\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0"
+"tohma.hokkaido.jp\0"
+"imari.saga.jp\0nesodden.no\0"
+"gov.et\0balsan.it\0noda.iwate.jp\0"
+"capitalone\0"
+"niigata.jp\0berlin\0"
+"gov.fj\0unnan.shimane.jp\0"
+"asso.nc\0karm\xc3\xb8y.no\0"
+"go.pw\0"
+"jur.pro\0"
+"toei.aichi.jp\0oki.fukuoka.jp\0gb.net\0"
+"farmstead.museum\0cuisinella\0"
+"perso.sn\0"
+"press.ma\0"
+"gov.gd\0wodzislaw.pl\0academy\0"
+"gov.ge\0lifeinsurance\0"
+"lib.ny.us\0"
+"gov.gh\0berlin.museum\0"
+"gov.gi\0fla.no\0"
+"nu.it\0"
+"birdart.museum\0hisamitsu\0shaw\0"
+"wazuka.kyoto.jp\0"
+"orsites.com\0"
"gov.gn\0"
-"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0"
-"oceanographic.museum\0"
-"gov.gr\0"
-"esashi.hokkaido.jp\0"
-"ms.leg.br\0fra1-de.cloudjiffy.net\0""3utilities.com\0"
-"gov.gu\0gifu.jp\0motegi.tochigi.jp\0"
-"\xe5\xae\xae\xe5\x9f\x8e.jp\0"
-"gov.gy\0sch.id\0aichi.jp\0auction\0"
-"aco\0"
-"gov.hk\0philadelphia.museum\0lynx.mythic-beasts.com\0"
-"h\xc3\xa1mm\xc3\xa1rfeasta.no\0"
-"keymachine.de\0"
-"wiw.gov.pl\0"
-"wodzislaw.pl\0qbuser.com\0"
-"gob.ve\0"
-"gov.ie\0"
-"hl.cn\0sch.ir\0broadcast.museum\0health.nz\0beats\0"
-"nakasatsunai.hokkaido.jp\0"
-"vix.br\0gov.il\0de.us\0nodum.co\0"
-"gov.in\0ads\0"
-"delivery\0"
-"gov.iq\0mashike.hokkaido.jp\0"
-"gov.ir\0aeg\0"
-"gov.is\0"
-"gov.it\0sch.jo\0schoenbrunn.museum\0mt.leg.br\0"
-"house.museum\0sosnowiec.pl\0"
-"contact\0saves-the-whales.com\0"
-"maison\0"
-"bremanger.no\0"
-"krym.ua\0"
-"palmsprings.museum\0digital\0"
-"kembuchi.hokkaido.jp\0"
-"gov.jo\0jeju.kr\0\xe5\x98\x89\xe9\x87\x8c\0"
-"rybnik.pl\0"
-"ruhr\0"
-"club\0"
-"aus.basketball\0"
-"tours\0"
-"gov.kg\0govt.nz\0afl\0"
-"sumita.iwate.jp\0"
-"gov.ki\0compare\0"
-"sande.more-og-romsdal.no\0"
-"zgora.pl\0s3-website.us-east-2.amazonaws.com\0nodum.io\0"
-"gov.km\0inderoy.no\0"
+"sekikawa.niigata.jp\0"
+"\xce\xb5\xce\xbb\0"
+"gov.gr\0yoshioka.gunma.jp\0perso.tn\0"
+"av.it\0"
+"gov.gu\0ujiie.tochigi.jp\0elblag.pl\0gripe\0"
+"gov.gy\0"
+"trentino-s\xc3\xbc""dtirol.it\0fujikawaguchiko.yamanashi.jp\0\xce\xb5\xcf\x85\0akdn\0here\0"
+"gov.hk\0higashi.fukushima.jp\0"
+"jp.kg\0"
+"presidio.museum\0"
+"cable-modem.org\0"
+"usdecorativearts.museum\0hyllestad.no\0"
+"ab.ca\0gov.ie\0gyeongbuk.kr\0beats\0london\0"
+"priv.at\0"
+"zushi.kanagawa.jp\0"
+"niigata.niigata.jp\0guru\0repair\0"
+"gov.il\0"
+"gov.in\0palmsprings.museum\0"
+"echizen.fukui.jp\0go.th\0"
+"gov.iq\0go.tj\0diskussionsbereich.de\0"
+"gov.ir\0dreamhosters.com\0"
+"gov.is\0hagebostad.no\0barsy.site\0to.work\0"
+"gov.it\0"
+"filegear-sg.me\0"
+"gob.ar\0"
+"yuki.ibaraki.jp\0"
+"is-very-evil.org\0"
+"avoues.fr\0traniandriabarletta.it\0official.academy\0"
+"sakae.chiba.jp\0"
+"miyazu.kyoto.jp\0murayama.yamagata.jp\0jp.md\0"
+"go.ug\0"
+"gov.jo\0"
+"ikano\0"
+"sardinia.it\0go.tz\0tn.us\0epson\0"
+"tainai.niigata.jp\0"
+"daejeon.kr\0"
+"gob.bo\0\xc3\xb8ksnes.no\0"
+"utsunomiya.tochigi.jp\0"
+"taranto.it\0tateyama.chiba.jp\0"
+"gov.kg\0"
+"\xe5\x95\x86\xe5\x9f\x8e\0"
+"aisai.aichi.jp\0kanan.osaka.jp\0gov.ki\0glogow.pl\0"
+"tako.chiba.jp\0gov.km\0"
"gov.kn\0"
-"gov.kp\0sch.lk\0coop.rw\0"
-"ashoro.hokkaido.jp\0gov.la\0"
-"gov.lb\0badaddja.no\0"
-"gov.lc\0"
-"is-a-candidate.org\0"
-"gov.kw\0"
-"contagem.br\0"
+"tsk.tr\0istanbul\0"
+"gov.kp\0railroad.museum\0aver\xc3\xb8y.no\0dovre.no\0"
+"gob.cl\0gov.la\0smile\0"
+"gov.lb\0\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0pl.eu.org\0"
+"iwade.wakayama.jp\0gov.lc\0seljord.no\0"
+"hokkaido.jp\0"
+"asso.km\0gov.kw\0"
+"tingvoll.no\0"
"gov.ky\0"
-"mn.it\0tokoname.aichi.jp\0ashibetsu.hokkaido.jp\0gov.kz\0"
-"uri.arpa\0joso.ibaraki.jp\0gov.lk\0"
-"environmentalconservation.museum\0schule\0"
-"sch.ly\0"
-"tatebayashi.gunma.jp\0"
-"frosinone.it\0valer.hedmark.no\0"
+"gov.kz\0"
+"gov.lk\0\xe5\x81\xa5\xe5\xba\xb7\0"
+"logoip.com\0"
+"royken.no\0"
+"\xc3\xa5lg\xc3\xa5rd.no\0tele.amune.org\0"
+"cc.as.us\0"
"gov.ma\0"
-"gov.lr\0heimatunduhren.museum\0"
-"gov.ls\0l\xc3\xa4ns.museum\0"
-"tas.au\0gov.lt\0samsung\0"
-"gov.me\0hdfc\0"
+"iizuka.fukuoka.jp\0gov.lr\0"
+"gov.ls\0"
+"gob.do\0gov.lt\0g.se\0k12.in.us\0"
+"gov.me\0"
"gov.lv\0"
-"haga.tochigi.jp\0gov.mg\0cadaques.museum\0"
-"santacruz.museum\0"
+"gov.mg\0leksvik.no\0"
+"gob.ec\0myjino.ru\0"
"gov.ly\0"
-"aip.ee\0kai.yamanashi.jp\0kalmykia.su\0"
-"gov.mk\0austrheim.no\0"
-"gov.ml\0sch.ng\0fbxos.fr\0"
-"coop.tt\0"
-"gov.mn\0versailles.museum\0"
-"biz.bb\0gov.mo\0blogsite.org\0"
-"\xe7\xae\x87\xe4\xba\xba.hk\0"
-"biz.at\0miniserver.com\0"
-"gov.mr\0aig\0"
-"gov.ms\0kherson.ua\0alstom\0productions\0"
-"apps.lair.io\0"
-"gov.mu\0"
-"vc.it\0katsushika.tokyo.jp\0gov.mv\0"
-"biz.az\0gov.mw\0gov.ng\0"
-"vic.edu.au\0\xc3\xa5mli.no\0nesna.no\0"
-"takahashi.okayama.jp\0gov.my\0"
+"aparecida.br\0"
+"gov.mk\0"
+"gov.ml\0"
+"asso.mc\0keymachine.de\0"
+"gov.mn\0"
+"gov.mo\0"
+"gov.mr\0"
+"gov.ms\0"
+"engineer.aero\0cng.br\0"
+"gov.mu\0ostroleka.pl\0shia\0"
+"gov.mv\0"
+"gov.mw\0gov.ng\0"
+"gob.es\0"
+"gov.my\0"
"gov.mz\0"
-"marburg.museum\0"
-"from-az.net\0"
-"sciencecenter.museum\0averoy.no\0"
-"funagata.yamagata.jp\0"
-"coop.mv\0"
-"coop.mw\0"
+"erni\0barsy.info\0"
+"california.museum\0"
+"cloud.interhostsolutions.be\0"
"gov.nr\0"
-"fairwinds\0"
-"turek.pl\0"
-"ota.tokyo.jp\0final\0"
-"lpages.co\0"
-"ikawa.akita.jp\0vip.jelastic.cloud\0us.kg\0"
-"mitake.gifu.jp\0tobetsu.hokkaido.jp\0medical.museum\0"
-"is-a-socialist.com\0freeboxos.fr\0"
-"taranto.it\0zoological.museum\0gov.om\0"
-"iitate.fukushima.jp\0gotemba.shizuoka.jp\0"
-"isa-geek.com\0"
-"\xe7\xa7\x8b\xe7\x94\xb0.jp\0science-fiction.museum\0"
-"minami.fukuoka.jp\0udono.mie.jp\0westus2.azurestaticapps.net\0"
-"watch-and-clock.museum\0"
-"biz.cy\0sch.qa\0"
-"gov.ph\0biz.dk\0"
-"kalmykia.ru\0"
-"gov.pk\0health.vn\0"
-"assabu.hokkaido.jp\0gov.pl\0"
-"fm.br\0drammen.no\0av.tr\0company\0"
+"pharmacien.fr\0"
+"marumori.miyagi.jp\0cust.disrec.thingdust.io\0"
+"shikaoi.hokkaido.jp\0"
+"sakata.yamagata.jp\0"
+"nichinan.tottori.jp\0"
+"hino.tottori.jp\0"
+"zaporizhzhia.ua\0barsy.shop\0"
+"utazu.kagawa.jp\0lib.nm.us\0"
+"gov.om\0"
+"na.it\0saskatchewan.museum\0"
+"aaa.pro\0"
+"tourism.pl\0"
+"nanyo.yamagata.jp\0"
+"qld.gov.au\0nokia\0"
+"gov.ph\0"
+"gob.gt\0"
+"glitch.me\0"
+"gov.pk\0fastvps.host\0"
+"gov.pl\0"
+"omniwe.site\0"
"gov.pn\0"
-"v\xc3\xa5ler.hedmark.no\0mypep.link\0"
-"gov.qa\0"
-"kawahara.tottori.jp\0gov.pr\0"
-"gov.ps\0"
-"gov.pt\0"
-"eng.br\0"
-"moma.museum\0social\0"
+"cinema.museum\0"
+"schokokeks.net\0"
+"windmill.museum\0gov.qa\0"
+"gov.pr\0"
+"gob.hn\0potenza.it\0kiwa.mie.jp\0gov.ps\0"
+"chocolate.museum\0gov.pt\0"
+"nsupdate.info\0"
+"tw.cn\0"
"gov.py\0"
-"ogano.saitama.jp\0"
-"encyclopedic.museum\0holt\xc3\xa5len.no\0"
-"nishi.fukuoka.jp\0boleslawiec.pl\0"
-"izumo.shimane.jp\0"
-"biz.et\0s\xc3\xb8r-odal.no\0"
-"ing.pa\0coop.py\0from-nv.com\0"
-"miura.kanagawa.jp\0us.na\0"
-"minowa.nagano.jp\0"
-"nakatsugawa.gifu.jp\0"
-"finearts.museum\0fylkesbibl.no\0sch.sa\0"
-"biz.fj\0"
-"ogimi.okinawa.jp\0usculture.museum\0"
-"issmarterthanyou.com\0"
-"freeboxos.com\0"
-"england.museum\0"
-"study\0"
-"bz.it\0"
-"chocolate.museum\0gov.sa\0"
+"miyada.nagano.jp\0s3.eu-central-1.amazonaws.com\0"
+"ethnology.museum\0"
+"hitachiota.ibaraki.jp\0"
+"gx.cn\0inzai.chiba.jp\0higashiagatsuma.gunma.jp\0"
+"reggioemilia.it\0kunstsammlung.museum\0"
+"kagami.kochi.jp\0"
+"linde\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0bmoattachments.org\0"
+"arkhangelsk.su\0"
+"lesja.no\0"
+"my-router.de\0"
+"swiebodzin.pl\0"
+"miyagi.jp\0"
+"isleofman.museum\0r\xc3\xa1isa.no\0"
+"alstahaug.no\0mielno.pl\0"
+"forsand.no\0gov.sa\0av.tr\0"
"gov.sb\0"
-"gov.rs\0gov.sc\0is-a-teacher.com\0"
-"gov.sd\0sch.so\0"
-"gov.ru\0"
-"agents.aero\0yufu.oita.jp\0tr\xc3\xb8gstad.no\0\xe5\x81\xa5\xe5\xba\xb7\0paris.eu.org\0"
-"miyoshi.hiroshima.jp\0kaminoyama.yamagata.jp\0gov.rw\0gov.sg\0"
-"4.bg\0gov.sh\0"
-"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0tana.no\0biz.gl\0"
+"gov.rs\0gov.sc\0"
+"gov.sd\0"
+"kawanishi.hyogo.jp\0furniture.museum\0gov.ru\0"
+"dellogliastra.it\0legal\0"
+"takata.fukuoka.jp\0gov.rw\0gov.sg\0"
+"kumejima.okinawa.jp\0costume.museum\0gov.sh\0"
+"economia.bo\0pesarourbino.it\0schoenbrunn.museum\0"
+"is-with-theband.com\0"
"gov.sl\0"
-"demon.nl\0"
-"gov.so\0jp.net\0"
-"western.museum\0"
-"r.se\0"
+"drud.io\0"
+"gov.so\0"
+"trentinoalto-adige.it\0"
+"is-a-chef.net\0"
"gov.ss\0"
-"tateyama.toyama.jp\0gov.st\0"
-"anz\0"
-"coop.km\0"
-"aisai.aichi.jp\0aol\0"
-"huissier-justice.fr\0naoshima.kagawa.jp\0christiansburg.museum\0hl.no\0gov.sx\0"
-"gov.sy\0"
+"lavagis.no\0gov.st\0"
+"*.yokohama.jp\0work\0"
+"gov.sx\0"
+"gov.sy\0*.on-rio.io\0"
"gov.tj\0"
-"gov.tl\0"
+"gov.tl\0cc.mn.us\0coupons\0"
"gov.tm\0"
-"kumano.hiroshima.jp\0gov.tn\0"
-"gov.to\0edugit.org\0"
-"biz.id\0gov.ua\0primetel.cloud\0"
-"gov.tr\0"
-"uw.gov.pl\0router.management\0"
-"oyer.no\0gov.tt\0\xe3\x82\xa2\xe3\x83\x9e\xe3\x82\xbe\xe3\x83\xb3\0"
-"ownprovider.com\0"
-"gov.tw\0"
-"mo-siemens.io\0"
+"esp.br\0gov.tn\0"
+"*.kitakyushu.jp\0gov.to\0"
+"greta.fr\0gov.ua\0"
+"p.bg\0gov.tr\0"
+"opencraft.hosting\0"
+"shikokuchuo.ehime.jp\0gov.tt\0shop\0"
+"her\xc3\xb8y.nordland.no\0k12.me.us\0"
+"ashikaga.tochigi.jp\0gov.tw\0"
+"psi.br\0"
+"logistics.aero\0"
+"cremona.it\0gov.uk\0show\0"
+"\xe7\xbd\x91\xe7\xb5\xa1.hk\0"
+"aeroclub.aero\0"
+"hanamigawa.chiba.jp\0accountants\0"
+"gov.vc\0"
+"kishiwada.osaka.jp\0muenchen.museum\0gov.ve\0from-wa.com\0"
+"malopolska.pl\0"
+"fuji.shizuoka.jp\0"
+"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0"
+"gob.mx\0senseering.net\0"
+"gob.ni\0gov.vn\0is-a-celticsfan.org\0"
+"higashimatsuyama.saitama.jp\0catholic\0"
+"bir.ru\0"
+"tawaramoto.nara.jp\0"
+"ballooning.aero\0komaki.aichi.jp\0pagexl.com\0"
+"lom.it\0"
+"moriguchi.osaka.jp\0latrobe\0qc.com\0"
+"funagata.yamagata.jp\0"
+"store.nf\0"
+"from-id.com\0"
+"video.hu\0aomori.aomori.jp\0"
+"plc.ly\0"
+"pr.it\0lib.la.us\0"
+"kepno.pl\0"
+"gov.ws\0"
+"bentley\0homedns.org\0"
+"coop.ht\0gob.pa\0kerryhotels\0"
+"modum.no\0"
+"cs.it\0gob.pe\0"
+"olayangroup\0*.dev.adobeaemcloud.com\0"
+"hughes\0balena-devices.com\0"
+"ichikawamisato.yamanashi.jp\0gob.pk\0pixolino.com\0"
+"tc.br\0"
+"modelling.aero\0on.ca\0"
+"cultural.museum\0"
+"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0b\xc3\xa1l\xc3\xa1t.no\0gov.ye\0"
+"shimamaki.hokkaido.jp\0tsushima.nagasaki.jp\0"
+"niteroi.br\0slask.pl\0cool\0"
+"coop\0"
+"artdeco.museum\0stranda.no\0"
+"gov.za\0"
+"risor.no\0"
+"zp.ua\0is-an-entertainer.com\0"
+"coop.br\0"
+"unzen.nagasaki.jp\0vaporcloud.io\0"
+"gd.cn\0spacekit.io\0"
+"orange\0"
+"\xe4\xb8\x89\xe9\x87\x8d.jp\0"
+"sibenik.museum\0"
+"govt.nz\0tychy.pl\0"
+"ito.shizuoka.jp\0gov.zm\0"
+"daisen.akita.jp\0mizuho.tokyo.jp\0from-tx.com\0"
+"kounosu.saitama.jp\0"
+"eidfjord.no\0katowice.pl\0"
+"piw.gov.pl\0"
+"tsubetsu.hokkaido.jp\0"
+"seranishi.hiroshima.jp\0gov.zw\0own.pm\0"
+"workers.dev\0"
+"gorge.museum\0"
+"scienceandindustry.museum\0"
+"plurinacional.bo\0"
+"shinjuku.tokyo.jp\0austrheim.no\0priv.pl\0zhitomir.ua\0"
+"wakayama.jp\0mukawa.hokkaido.jp\0"
+"lom.no\0"
+"il.us\0"
+"from-dc.com\0"
+"joboji.iwate.jp\0nishiizu.shizuoka.jp\0"
+"hemsedal.no\0"
+"itako.ibaraki.jp\0"
+"taiki.mie.jp\0gob.sv\0"
+"cust.dev.thingdust.io\0"
+"ikoma.nara.jp\0lacaixa\0"
+"kasahara.gifu.jp\0\xe6\x94\xbf\xe5\x8a\xa1\0"
+"trentino-suedtirol.it\0"
+"langevag.no\0"
+"cc.gu.us\0"
+"eng.br\0leadpages.co\0"
+"nom.ad\0"
+"nom.ae\0"
+"nom.af\0"
+"nom.ag\0podlasie.pl\0edugit.org\0"
+"conference.aero\0k12.ky.us\0"
+"nom.ai\0"
+"from-va.com\0"
+"nom.al\0"
+"matsumae.hokkaido.jp\0priv.no\0"
+"dazaifu.fukuoka.jp\0"
+"gob.ve\0"
+"kokonoe.oita.jp\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0"
+"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0loginline.site\0"
+"pavia.it\0iveco\0"
+"waw.pl\0"
+"rennes\xc3\xb8y.no\0"
+"nativeamerican.museum\0aca.pro\0"
+"toba.mie.jp\0"
+"katsuragi.wakayama.jp\0"
+"fed.us\0store.ve\0nctu.me\0"
+"careers\0nom.bz\0"
+"univ.sn\0ma.leg.br\0nom.cl\0"
+"namsskogan.no\0"
+"sosa.chiba.jp\0"
+"nom.co\0plc.uk\0drud.us\0"
+"ss.it\0kawanehon.shizuoka.jp\0"
+"onrender.com\0"
+"toyo.kochi.jp\0kvafjord.no\0"
+"kannami.shizuoka.jp\0rackmaze.net\0"
+"priv.me\0"
+"\xe5\x8f\xb0\xe6\xb9\xbe\0"
+"akrehamn.no\0"
+"education.museum\0flekkefjord.no\0vinnica.ua\0\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0"
+"matta-varjjat.no\0"
+"salvador.br\0"
+"bo.it\0*.compute-1.amazonaws.com\0"
+"koga.fukuoka.jp\0"
+"bizen.okayama.jp\0mandal.no\0"
+"jelenia-gora.pl\0ally\0"
+"v\xc3\xa6r\xc3\xb8y.no\0pomorze.pl\0"
+"kariwa.niigata.jp\0"
+"fosnes.no\0"
+"walter\0"
+"silk\0"
+"sor-aurdal.no\0"
+"pila.pl\0"
+"kamo.niigata.jp\0sweden.museum\0no.eu.org\0"
+"rag-cloud-ch.hosteur.com\0"
+"nom.es\0ushuaia.museum\0jorpeland.no\0"
+"rivne.ua\0"
+"tula.su\0"
+"aoki.nagano.jp\0"
+"saikai.nagasaki.jp\0"
+"servep2p.com\0"
+"minamiuonuma.niigata.jp\0"
+"nom.fr\0itayanagi.aomori.jp\0sauda.no\0sina\0"
+"genting\0"
+"nom.gd\0"
+"asago.hyogo.jp\0nom.ge\0"
+"bolt.hu\0"
+"kitashiobara.fukushima.jp\0jobs.tt\0mintere.site\0"
+"nom.gl\0"
+"pr.us\0"
+"carboniaiglesias.it\0"
+"choyo.kumamoto.jp\0"
+"motobu.okinawa.jp\0store.ro\0"
+"it1-eur.jenv-arubabiz.cloud\0"
+"nom.gt\0"
+"dc.us\0loan\0"
+"yahiko.niigata.jp\0"
+"hashikami.aomori.jp\0likescandy.com\0"
+"giehtavuoatna.no\0"
+"kameoka.kyoto.jp\0*.sch.uk\0"
+"space-to-rent.com\0nom.hn\0"
+"cc.ok.us\0"
+"webhop.me\0"
+"ownip.net\0"
+"kawazu.shizuoka.jp\0nyuzen.toyama.jp\0store.st\0cc.ga.us\0"
+"kouhoku.saga.jp\0"
+"owariasahi.aichi.jp\0"
+"benevento.it\0azurewebsites.net\0"
+"al.eu.org\0"
+"p.se\0nom.im\0"
+"nakaniikawa.toyama.jp\0"
+"plants.museum\0"
+"jetzt\0ssl.origin.cdn77-secure.org\0"
+"leasing.aero\0k12.as.us\0"
+"\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0"
+"l\xc3\xa4ns.museum\0"
+"sci.eg\0higashimurayama.tokyo.jp\0career\0"
+"semine.miyagi.jp\0"
+"patria.bo\0"
+"2ix.at\0"
+"nom.ke\0"
+"chuo.yamanashi.jp\0"
+"nom.km\0"
+"gs.rl.no\0ro.im\0"
+"nz.eu.org\0"
+"kumagaya.saitama.jp\0mazury.pl\0twmail.net\0"
+"kvalsund.no\0"
+"vt.it\0ino.kochi.jp\0"
+"koka.shiga.jp\0volkswagen\0"
+"myasustor.com\0"
+"arezzo.it\0ro.it\0\xe5\x85\xb5\xe5\xba\xab.jp\0"
+"2ix.ch\0"
+"kagawa.jp\0austin.museum\0nom.li\0"
+"gs.ah.no\0"
+"lib.fl.us\0"
+"energy\0"
+"plesk.page\0"
+"forsale\0"
+"\xc3\xa5snes.no\0dynv6.net\0"
+"sasebo.nagasaki.jp\0""2ix.de\0"
+"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0"
+"site\0nom.lv\0"
+"nom.mg\0"
+"froland.no\0"
+"glade\0"
+"tromsa.no\0*.lcl.dev\0"
+"kashiwara.osaka.jp\0nom.mk\0"
+"miki.hyogo.jp\0kyiv.ua\0loft\0"
+"from-oh.com\0"
+"minamitane.kagoshima.jp\0"
+"amex\0"
+"industria.bo\0nom.nc\0kvits\xc3\xb8y.no\0is-a-llama.com\0es-1.axarnet.cloud\0brasilia.me\0"
+"sevastopol.ua\0"
+"j\xc3\xb8lster.no\0coop.rw\0"
+"trentino-s-tirol.it\0"
+"minamiboso.chiba.jp\0*.s5y.io\0"
+"nom.ni\0"
+"v-info.info\0"
+"fujimi.saitama.jp\0"
+"padua.it\0"
+"michigan.museum\0"
+"tolga.no\0"
+"toshiba\0"
+"wroclaw.pl\0"
+"za.net\0"
+"varese.it\0lind\xc3\xa5s.no\0"
+"nom.nu\0"
+"from-mn.com\0"
+"kyowa.hokkaido.jp\0"
+"hgtv\0"
+"honjo.akita.jp\0"
+"caxias.br\0"
+"\xe5\xa4\xa7\xe6\x8b\xbf\0"
+"broker\0"
+"yufu.oita.jp\0nom.pa\0"
+"securitytactics.com\0"
+"coop.tt\0is-a-student.com\0vladimir.su\0"
+"nom.pe\0"
+"verona.it\0beardu.no\0"
+"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0"
+"foggia.it\0capebreton.museum\0civilwar.museum\0"
+"nemuro.hokkaido.jp\0"
+"nom.pl\0"
+"cc.wa.us\0tushu\0poznan.pl\0"
+"oharu.aichi.jp\0"
+"mormon\0nom.qa\0"
+"hitachiomiya.ibaraki.jp\0hopto.org\0wedeploy.sh\0"
+"\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0"
+"higashine.yamagata.jp\0"
+"coop.mv\0"
+"coop.mw\0"
+"eti.br\0nom.pw\0"
+"schweiz.museum\0"
+"agdenes.no\0joburg\0"
+"y.bg\0"
+"hiroo.hokkaido.jp\0torsken.no\0tn.oxa.cloud\0"
+"tachikawa.tokyo.jp\0"
+"4.bg\0audio\0windows\0*.linodeobjects.com\0"
+"k12.nh.us\0philips\0"
+"yachimata.chiba.jp\0jeonnam.kr\0cog.mi.us\0"
+"bulsan.it\0catering\0"
+"powiat.pl\0k12.ia.us\0does-it.net\0"
+"kodaira.tokyo.jp\0"
+"intl.tn\0"
+"nom.re\0"
+"aejrie.no\0"
+"ureshino.mie.jp\0bievat.no\0casacam.net\0"
+"*.nagoya.jp\0kuroiso.tochigi.jp\0"
+"dev.br\0"
+"samegawa.fukushima.jp\0"
+"nom.ro\0"
+"nrw.museum\0bplaced.com\0"
+"nanjo.okinawa.jp\0"
+"vladimir.ru\0nom.rs\0"
+"sogndal.no\0"
+"asn.au\0"
+"sg.cloudswitches.com\0"
+"kuwana.mie.jp\0pinb.gov.pl\0nom.si\0"
+"makeup\0"
+"soundcast.me\0"
+"vestv\xc3\xa5g\xc3\xb8y.no\0"
+"for-better.biz\0"
+"cloudns.biz\0nom.st\0"
+"togo.aichi.jp\0"
+"coop.py\0"
+"nom.tj\0"
+"is-a-guru.com\0"
+"wada.nagano.jp\0"
+"nom.tm\0netflix\0"
+"koya.wakayama.jp\0"
+"entomology.museum\0"
+"sellsyourhome.org\0"
+"yawara.ibaraki.jp\0"
+"from-nh.com\0"
+"environment.museum\0usgarden.museum\0creditunion\0nom.ug\0"
+"palmas.br\0gok.pk\0"
+"kamogawa.chiba.jp\0"
+"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0"
+"mima.tokushima.jp\0"
+"principe.st\0\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
+"hino.tokyo.jp\0surnadal.no\0"
+"rockart.museum\0"
+"nom.vc\0"
+"s3-ap-northeast-1.amazonaws.com\0"
+"shopitsite.com\0"
+"trogstad.no\0contact\0nom.vg\0"
+"nom.uy\0"
+"jc.neen.it\0"
+"kasamatsu.gifu.jp\0coop.km\0kyoto\0"
+"panel.gg\0"
+"labor.museum\0n4t.co\0myftp.org\0"
+"audnedaln.no\0"
+"store.bb\0"
+"mikasa.hokkaido.jp\0africa\0"
+"ebetsu.hokkaido.jp\0itano.tokushima.jp\0higashikurume.tokyo.jp\0"
+"forlicesena.it\0"
+"flickr\0"
+"nakanoto.ishikawa.jp\0"
+"b\xc3\xb8.nordland.no\0"
+"nomi.ishikawa.jp\0mydatto.com\0"
+"vt.us\0"
+"gotdns.org\0"
+"kutno.pl\0"
+"busan.kr\0"
+"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0nj.us\0"
+"swinoujscie.pl\0"
+"namsos.no\0"
+"garden\0"
+"ak.us\0"
+"kamiamakusa.kumamoto.jp\0"
+"crafts.museum\0*.r.appspot.com\0"
+"fot.br\0"
+"yonezawa.yamagata.jp\0"
+"pvt.k12.ma.us\0"
+"quebec\0*.sensiosite.cloud\0"
+"sande.vestfold.no\0bar0.net\0"
+"store.dk\0"
+"k12.tn.us\0church\0"
+"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0azimuth.network\0"
+"e.bg\0\xe7\x86\x8a\xe6\x9c\xac.jp\0kinko.kagoshima.jp\0"
+"government.aero\0nom.za\0"
+"ddnsgeek.com\0"
+"k12.gu.us\0fresenius\0"
+"higashiosaka.osaka.jp\0"
+"cookingchannel\0"
+"geisei.kochi.jp\0fbx-os.fr\0"
+"kunitachi.tokyo.jp\0commbank\0jelastic.tsukaeru.net\0"
+"porsangu.no\0"
+"homesense\0wedeploy.me\0"
+"lewismiller.museum\0"
+"norfolk.museum\0institute\0repl.co\0"
+"blogspot.vn\0"
+"radio.am\0"
+"baseball\0"
+"lund.no\0"
+"cheltenham.museum\0vantaa.museum\0"
+"chosei.chiba.jp\0"
+"sannan.hyogo.jp\0"
+"kitadaito.okinawa.jp\0"
+"\xe7\xbd\x91\xe5\xba\x97\0"
+"radio.br\0"
+"kisofukushima.nagano.jp\0love\0"
+"pg.it\0suzuki\0"
+"gs.bu.no\0"
+"kr.it\0tenkawa.nara.jp\0lib.ga.us\0"
+"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0matsushige.tokushima.jp\0"
+"kamoenai.hokkaido.jp\0"
+"glass\0"
+"ch.it\0"
+"webhop.org\0"
+"jelastic.saveincloud.net\0"
+"ns.ca\0"
+"guitars\0"
+"asn.lv\0"
+"suifu.ibaraki.jp\0muroto.kochi.jp\0gausdal.no\0zero\0"
+"artgallery.museum\0"
+"sh.cn\0blogspot.re\0"
+"meinforum.net\0"
+"columbus.museum\0physio\0services\0"
+"aip.ee\0"
+"blogspot.ro\0"
+"fi.cr\0"
+"blogspot.rs\0"
+"lv.ua\0\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0"
+"insurance.aero\0blogspot.ru\0blogspot.se\0"
+"mg.leg.br\0"
+"blogspot.sg\0"
+"mt.eu.org\0blogspot.si\0"
+"chiyoda.tokyo.jp\0"
+"tmp.br\0blogspot.sk\0bloxcms.com\0"
+"e4.cz\0de.trendhosting.cloud\0"
+"sayama.saitama.jp\0blogspot.sn\0"
+"radio.fm\0"
+"!city.sendai.jp\0"
+"maserati\0blogspot.td\0jed.wafaicloud.com\0website.yandexcloud.net\0"
+"yamanouchi.nagano.jp\0"
+"online\0"
+"dating\0"
+"homelink.one\0"
+"ia.us\0"
+"sannohe.aomori.jp\0"
+"froya.no\0"
+"us.com\0"
+"blogsite.org\0"
+"kagoshima.jp\0"
+"kiev.ua\0"
+"s3.ap-northeast-2.amazonaws.com\0from-ct.com\0"
+"medio-campidano.it\0qoto.io\0"
+"opole.pl\0"
+"bari.it\0"
+"toyone.aichi.jp\0data\0blogspot.tw\0blogspot.ug\0"
+"sobetsu.hokkaido.jp\0arida.wakayama.jp\0"
+"namie.fukushima.jp\0"
+"date\0tatar\0"
+"gwiddle.co.uk\0"
+"lenvik.no\0ap-northeast-1.elasticbeanstalk.com\0"
+"neues.museum\0"
+"kaga.ishikawa.jp\0"
+"bronnoysund.no\0"
+"blogspot.mr\0"
+"countryestate.museum\0y.se\0"
+"hannan.osaka.jp\0ralingen.no\0\xe5\x8f\xb0\xe7\x81\xa3\0"
+"fitjar.no\0"
+"unusualperson.com\0"
+"oppegard.no\0"
+"blogspot.mx\0"
+"skin\0blogspot.my\0"
+"quebec.museum\0"
+"fastvps-server.com\0blogspot.nl\0rdv.to\0"
+"iwata.shizuoka.jp\0"
+"kisosaki.mie.jp\0blogspot.no\0"
+"hashimoto.wakayama.jp\0"
+"saves-the-whales.com\0"
+"barsyonline.com\0hicam.net\0"
+"wanggou\0"
+"s3-eu-west-3.amazonaws.com\0"
+"virtuel.museum\0"
+"ibestad.no\0"
+"hermes\0"
+"newspaper.museum\0s3.dualstack.eu-west-1.amazonaws.com\0"
+"law.pro\0horse\0mozilla-iot.org\0"
+"takanabe.miyazaki.jp\0yasaka.nagano.jp\0"
+"sorfold.no\0"
+"ny-1.paas.massivegrid.net\0"
+"gratis\0privatizehealthinsurance.net\0"
+"lib.wa.us\0scrapper-site.net\0blogspot.pe\0"
+"furniture\0"
+"lib.sd.us\0"
+"trentino-sud-tirol.it\0"
+"lib.ok.us\0"
+"ca.reclaim.cloud\0"
+"gjovik.no\0lib.in.us\0"
+"med.br\0"
+"olbia-tempio.it\0blogspot.qa\0"
+"co.com\0"
+"fi.it\0yame.fukuoka.jp\0allfinanz\0blogspot.pt\0"
+"*.cloud.metacentrum.cz\0"
+"exnet.su\0"
+"at.it\0"
+"mytuleap.com\0"
+"cargo.aero\0xbox\0"
+"imabari.ehime.jp\0supplies\0is-into-anime.com\0"
+"nagasaki.nagasaki.jp\0"
+"\xe6\x96\xb0\xe6\xbd\x9f.jp\0"
+"kosai.shizuoka.jp\0onza.mythic-beasts.com\0"
+"lipsy\0"
+"mitsue.nara.jp\0blogspot.is\0"
+"blogspot.it\0"
+"egyptian.museum\0dev.vu\0"
+"mo.cn\0"
+"med.ec\0blogspot.jp\0vipsinaapp.com\0"
+"ch.tc\0"
+"med.ee\0"
+"blogspot.co.at\0wedeploy.io\0"
+"dscloud.biz\0"
+"civilaviation.aero\0taa.it\0"
+"tochio.niigata.jp\0"
+"kr.ua\0a.run.app\0"
+"asker.no\0"
+"author.aero\0"
+"blogspot.kr\0"
+"minamiaiki.nagano.jp\0"
+"at.md\0"
+"gru.br\0"
+"lombardy.it\0sogne.no\0\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0blogspot.li\0"
+"fujisato.akita.jp\0kwpsp.gov.pl\0vpndns.net\0"
+"valdaosta.it\0naha.okinawa.jp\0nanbu.tottori.jp\0"
+"soccer\0"
+"yonago.tottori.jp\0wskr.gov.pl\0bplaced.net\0"
+"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0blogspot.lt\0blogspot.md\0"
+"blogspot.lu\0"
+"luxury\0"
+"soundandvision.museum\0my.eu.org\0myeffect.net\0"
+"oga.akita.jp\0blogspot.mk\0"
+"misaki.osaka.jp\0"
+"yoka.hyogo.jp\0k12.wi.us\0"
+"\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0"
+"takaishi.osaka.jp\0"
+"k12.mo.us\0groks-this.info\0"
+"e.se\0"
+"ecn.br\0blogspot.fi\0"
+"gangwon.kr\0"
+"chiropractic.museum\0historichouses.museum\0k12.az.us\0"
+"fhsk.se\0za.org\0"
+"med.ht\0brescia.it\0"
+"blogspot.fr\0"
+"h\xc3\xb8ylandet.no\0yamaxun\0"
+"community\0"
+"bharti\0"
+"kl\xc3\xa6""bu.no\0"
+"taki.mie.jp\0"
+"itabashi.tokyo.jp\0"
+"hvaler.no\0nov.ru\0"
+"leitungsen.de\0"
+"ing.pa\0"
+"blogspot.gr\0"
+"vikna.no\0"
+"gs.vf.no\0pomorskie.pl\0"
+"military.museum\0compare\0"
+"zgorzelec.pl\0space\0nov.su\0blogspot.hk\0hidora.com\0"
+"mihama.fukui.jp\0"
+"vi.it\0os.hedmark.no\0"
+"\xe6\x95\x8e\xe8\x82\xb2.hk\0"
+"wroc.pl\0"
+"blogspot.hr\0dev-myqnapcloud.com\0"
+"mo.it\0"
+"web.app\0"
+"blogspot.hu\0blogspot.ie\0"
+"gv.ao\0"
+"motorcycle.museum\0"
+"lib.al.us\0"
+"tinn.no\0flights\0"
+"gv.at\0pp.az\0*.customer-oci.com\0"
+"black\0"
+"taishi.hyogo.jp\0blogspot.in\0"
+"cistron.nl\0"
+"blogspot.ba\0"
+"sp.gov.br\0blogspot.co.id\0"
+"agrinet.tn\0hotmail\0"
+"blogspot.be\0"
+"blogspot.bg\0"
+"bd.se\0"
+"xz.cn\0dyroy.no\0hyatt\0"
+"blogspot.bj\0"
+"blogspot.co.il\0"
+"higashi.okinawa.jp\0"
+"sveio.no\0repl.run\0"
+"rotorcraft.aero\0"
+"sugito.saitama.jp\0blogspot.ca\0"
+"med.ly\0blogspot.cf\0eu.platform.sh\0"
+"cq.cn\0maif\0blogspot.ch\0"
+"nl.eu.org\0"
+"blogspot.cl\0"
+"twmail.org\0"
+"oyamazaki.kyoto.jp\0"
+"takaoka.toyama.jp\0"
+"ipiranga\0"
+"blogspot.de\0"
+"mihama.aichi.jp\0blogspot.cv\0"
+"myhome-server.de\0localzone.xyz\0stage.nodeart.io\0"
+"blogspot.cz\0"
+"blogspot.dk\0"
+"app.banzaicloud.io\0"
+"kakuda.miyagi.jp\0shimosuwa.nagano.jp\0"
+"otaki.saitama.jp\0"
"chuo.fukuoka.jp\0"
-"gov.uk\0app\0"
-"preservation.museum\0enebakk.no\0"
-"hasvik.no\0bydgoszcz.pl\0fage\0"
-"cargo.aero\0lazio.it\0kamiamakusa.kumamoto.jp\0"
-"\xe4\xbd\x90\xe8\xb3\x80.jp\0alta.no\0jolster.no\0gov.vc\0"
-"gov.ve\0"
-"js.wpenginepowered.com\0"
-"ggf.br\0ddnslive.com\0"
-"lib.ok.us\0abbott\0"
-"egyptian.museum\0"
-"bar\0"
-"gov.vn\0bbc\0wedeploy.sh\0"
-"\xe5\x95\x86\xe5\x9f\x8e\0discourse.team\0from-wa.com\0us.reclaim.cloud\0"
-"go.gov.br\0"
-"!www.ck\0shiroishi.miyagi.jp\0"
-"cng.br\0biz.ki\0blogspot.com.cy\0"
-"k12.mo.us\0"
-"leka.no\0"
-"carrd.co\0"
-"fm.it\0art\0bbt\0"
-"mo-i-rana.no\0bcg\0blogspot.com.ee\0"
-"ozu.ehime.jp\0gov.ws\0"
-"blogspot.com.eg\0"
-"vaapste.no\0fail\0landrover\0"
-"assisi.museum\0lib.vt.us\0"
-"g.bg\0cc.nj.us\0"
-"lowicz.pl\0mn.us\0bcn\0"
-"parliament.nz\0prod\0"
+"desa.id\0"
+"kasugai.aichi.jp\0med.om\0at.vg\0"
+"novara.it\0company\0"
+"so.gov.pl\0"
+"indianapolis.museum\0med.pa\0firestone\0"
+"yawata.kyoto.jp\0"
+"valled-aosta.it\0chihayaakasaka.osaka.jp\0usarts.museum\0"
+"n.bg\0"
+"reggio-calabria.it\0t\xc3\xb8nsberg.no\0"
+"groundhandling.aero\0"
+"med.pl\0"
+"kakinoki.shimane.jp\0ringebu.no\0"
+"yokaichiba.chiba.jp\0ap-south-1.elasticbeanstalk.com\0"
+"*.compute.amazonaws.com\0is-a-liberal.com\0"
+"lyngdal.no\0"
+"quest\0"
+"\xe6\x96\xb0\xe9\x97\xbb\0"
+"moroyama.saitama.jp\0lugs.org.uk\0"
+"unicloud.pl\0"
+"accident-prevention.aero\0"
+"iyo.ehime.jp\0oguni.kumamoto.jp\0"
+"aizubange.fukushima.jp\0itakura.gunma.jp\0"
+"gitpage.si\0"
+"suldal.no\0bip.sh\0"
+"la-spezia.it\0"
+"oyama.tochigi.jp\0gs.tr.no\0"
+"cosenza.it\0"
+"cloudera.site\0"
+"club.aero\0med.sa\0"
+"med.sd\0"
+"lib.ks.us\0blogspot.ae\0"
+"amsterdam.museum\0"
+"fr-1.paas.massivegrid.net\0"
+"rieti.it\0brumunddal.no\0ng.eu.org\0"
+"recipes\0rhcloud.com\0"
+"blogspot.al\0"
+"blogspot.am\0"
+"knowsitall.info\0svn-repos.de\0"
+"bearalv\xc3\xa1hki.no\0"
+"media.museum\0"
+"firewall-gateway.de\0"
+"cody.museum\0"
+"yamatsuri.fukushima.jp\0"
+"drobak.no\0n\xc3\xb8tter\xc3\xb8y.no\0"
+"omega\0"
+"athleta\0khplay.nl\0"
+"rexroth\0"
+"frogans\0"
+"\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0"
+"mragowo.pl\0"
+"is-a-cpa.com\0"
+"\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0"
+"r\xc3\xa5holt.no\0"
+"inderoy.no\0"
+"camdvr.org\0"
+"askoy.no\0aaa\0doesntexist.com\0"
+"izumozaki.niigata.jp\0"
+"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0qualifioapp.com\0"
+"agric.za\0"
+"ota.tokyo.jp\0town.museum\0"
+"uryu.hokkaido.jp\0"
+"movie\0"
+"vi.us\0"
+"teo.br\0noheji.aomori.jp\0eidsvoll.no\0nesset.no\0tran\xc3\xb8y.no\0"
+"nakagusuku.okinawa.jp\0"
+"abb\0"
+"mo.us\0abc\0"
+"kawakita.ishikawa.jp\0"
+"hob\xc3\xb8l.no\0realestate\0"
+"media\0"
+"shunan.yamaguchi.jp\0"
+"takko.aomori.jp\0dyn.home-webserver.de\0map.fastlylb.net\0"
+"uchiko.ehime.jp\0"
+"imageandsound.museum\0"
+"mup.gov.pl\0dclk\0"
+"minamimaki.nagano.jp\0dnsfor.me\0"
+"read-books.org\0"
+"blogspot.co.uk\0"
+"bristol.museum\0gehirn.ne.jp\0"
+"naganohara.gunma.jp\0vik.no\0"
+"pvh.br\0daiwa.hiroshima.jp\0aco\0"
+"nerima.tokyo.jp\0"
+"cupcake.is\0"
+"chicago.museum\0"
+"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0"
+"stalowa-wola.pl\0"
+"songdalen.no\0"
+"\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
+"sr.gov.pl\0"
+"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0bingo\0"
+"deloitte\0email\0from-ny.net\0"
+"shopware.store\0"
+"ads\0"
+"wzmiuw.gov.pl\0"
+"hyogo.jp\0"
+"kobierzyce.pl\0aeg\0"
+"naturhistorisches.museum\0"
+"shimokawa.hokkaido.jp\0"
+"trentinsud-tirol.it\0"
+"philadelphia.museum\0"
+"belau.pw\0"
+"altoadige.it\0nagasu.kumamoto.jp\0"
+"ikusaka.nagano.jp\0ambulance.museum\0ringerike.no\0"
+"ta.it\0"
+"uenohara.yamanashi.jp\0grue.no\0"
+"afl\0"
+"ichinohe.iwate.jp\0"
+"fr.it\0"
+"forum.hu\0clock.museum\0"
+"*.statics.cloud\0"
+"pp.se\0pp.ru\0"
+"\xe5\x85\xac\xe7\x9b\x8a\0"
+"shika.ishikawa.jp\0"
+"tromso.no\0"
+"miyoshi.tokushima.jp\0myactivedirectory.com\0"
+"pizza\0"
+"ikawa.akita.jp\0omitama.ibaraki.jp\0juegos\0"
+"daigo.ibaraki.jp\0kunisaki.oita.jp\0"
+"dlugoleka.pl\0discourse.team\0"
+"kawakami.nara.jp\0"
+"rissa.no\0"
+"oshino.yamanashi.jp\0wif.gov.pl\0"
+"kg.kr\0"
+"vagan.no\0"
+"war.museum\0"
+"pp.ua\0"
+"blogspot.co.ke\0"
+"aig\0"
+"misaki.okayama.jp\0"
+"kawagoe.mie.jp\0warmia.pl\0"
+"hikone.shiga.jp\0weibo\0"
+"nankoku.kochi.jp\0webhop.net\0"
+"friulivegiulia.it\0\xe5\x85\xab\xe5\x8d\xa6\0"
+"horokanai.hokkaido.jp\0"
+"usr.cloud.muni.cz\0"
+"g\xc3\xbcnstigbestellen.de\0"
+"togakushi.nagano.jp\0"
+"gv.vc\0"
+"ug.gov.pl\0"
+"midori.gunma.jp\0bus.museum\0nysa.pl\0"
+"amami.kagoshima.jp\0"
+"zapto.xyz\0"
+"takahashi.okayama.jp\0dyndns-home.com\0"
+"gniezno.pl\0"
+"ol.no\0orskog.no\0"
+"pmn.it\0"
+"maringa.br\0yoshikawa.saitama.jp\0cc.ny.us\0"
+"\xe5\xae\xae\xe5\x9f\x8e.jp\0"
+"glas.museum\0"
+"nationalheritage.museum\0"
+"frosinone.it\0"
+"motegi.tochigi.jp\0"
+"stj\xc3\xb8rdal.no\0"
+"chernigov.ua\0cc.az.us\0"
+"discovery.museum\0withgoogle.com\0"
+"jobs\0"
+"starnberg.museum\0"
+"casadelamoneda.museum\0n.se\0"
+"trentino-alto-adige.it\0"
+"koshigaya.saitama.jp\0eastafrica.museum\0s3.dualstack.sa-east-1.amazonaws.com\0"
+"stuff-4-sale.us\0"
+"chonan.chiba.jp\0""0e.vc\0"
+"journalist.aero\0lasalle\0"
+"mobi.gp\0"
+"holtalen.no\0"
+"blogspot.co.nz\0"
+"upow.gov.pl\0"
"support\0"
-"prof\0kaas.gg\0"
-"castle.museum\0"
-"blogspot.com.ar\0"
-"wakayama.wakayama.jp\0biz.ls\0"
-"tateyama.chiba.jp\0"
-"blogspot.com.au\0"
-"homesecuritymac.com\0"
-"kyotamba.kyoto.jp\0"
-"iwate.jp\0"
-"pharmacien.fr\0"
-"yotsukaido.chiba.jp\0"
-"ditchyourip.com\0"
-"sagae.yamagata.jp\0blogspot.com.br\0"
-"zj.cn\0"
-"maringa.br\0kawaguchi.saitama.jp\0\xc3\xb8ygarden.no\0gov.za\0east-kazakhstan.su\0mc.ax\0"
-"sch.zm\0"
-"discovery.museum\0biz.mv\0"
-"biz.mw\0"
-"is-a-hard-worker.com\0"
-"and.museum\0biz.ni\0blogspot.com.by\0"
-"aogashima.tokyo.jp\0"
-"spydeberg.no\0"
-"yokoshibahikari.chiba.jp\0"
-"blogspot.com.co\0"
-"kyiv.ua\0gov.zm\0"
-"biz.nr\0bet\0"
-"higashikawa.hokkaido.jp\0"
-"niiza.saitama.jp\0ballangen.no\0"
-"yuu.yamaguchi.jp\0st.no\0"
-"friulivgiulia.it\0"
-"togane.chiba.jp\0"
-"gov.zw\0"
-"sexy\0*.magentosite.cloud\0"
-"trentinosudtirol.it\0nishikawa.yamagata.jp\0"
-"kimitsu.chiba.jp\0nid.io\0"
-"mashiko.tochigi.jp\0"
-"*.sch.uk\0"
-"dynamisches-dns.de\0"
-"sortland.no\0"
-"is-a-player.com\0"
-"iki.nagasaki.jp\0biz.pk\0"
-"biz.pl\0ybo.party\0"
-"fm.no\0press\0definima.net\0"
-"scrapping.cc\0"
-"axa\0"
-"aws\0"
-"biz.pr\0"
-"minami.tokushima.jp\0skjak.no\0lib.co.us\0potager.org\0blogspot.com.es\0"
-"school.na\0"
-"sakaki.nagano.jp\0"
-"ui.nabu.casa\0*.firenet.ch\0"
-"rebun.hokkaido.jp\0orland.no\0balena-devices.com\0"
-"shangrila\0"
-"\xe8\x81\x94\xe9\x80\x9a\0"
-"ciscofreak.com\0"
-"saotome.st\0"
-"vestre-slidre.no\0fans\0ap-south-1.elasticbeanstalk.com\0"
-"yokosuka.kanagawa.jp\0klepp.no\0associates\0"
-"k12.dc.us\0"
-"bid\0\xe6\x9b\xb8\xe7\xb1\x8d\0"
-"dynv6.net\0arkhangelsk.su\0ngrok.io\0"
-"valdaosta.it\0"
-"ambulance.aero\0"
-"sowa.ibaraki.jp\0guge\0"
-"*.compute-1.amazonaws.com\0privatizehealthinsurance.net\0"
-"ulm.museum\0"
-"ha.cn\0re.it\0nyc.museum\0school.nz\0bio\0"
-"gifts\0"
-"wiih.gov.pl\0"
-"kaszuby.pl\0"
-"minamiawaji.hyogo.jp\0"
-"biz\0energy\0"
-"does-it.net\0est-le-patron.com\0fastlylb.net\0"
-"donetsk.ua\0yali.mythic-beasts.com\0"
-"yusuhara.kochi.jp\0nome.pt\0"
-"ac.leg.br\0"
-"applicationcloud.io\0"
-"\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0filegear-de.me\0"
-"carrara-massa.it\0"
-"biz.ss\0"
-"deloitte\0"
-"date.fukushima.jp\0"
-"hamburg.museum\0"
-"bauern.museum\0"
-"biz.tj\0"
-"re.kr\0"
-"cleaning\0"
-"hasura.app\0"
-"sn\xc3\xa5sa.no\0wedeploy.me\0"
-"linz.museum\0"
-"\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0"
-"biz.ua\0"
-"biz.tr\0"
-"skedsmokorset.no\0os.hordaland.no\0"
-"biz.tt\0"
-"kami.kochi.jp\0"
-"namegawa.saitama.jp\0"
-"minamata.kumamoto.jp\0lon.wafaicloud.com\0"
-"mitsubishi\0"
-"farm\0"
-"newmexico.museum\0kaufen\0statebank\0"
+"ogliastra.it\0"
+"higashiura.aichi.jp\0sopot.pl\0"
+"lubartow.pl\0"
+"anthropology.museum\0gucci\0"
+"ikaruga.nara.jp\0"
+"ayabe.kyoto.jp\0"
+"ferrara.it\0verbania.it\0"
+"wphostedmail.com\0"
+"vr.it\0"
+"rm.it\0lib.mt.us\0lib.nd.us\0"
+"childrens.museum\0"
+"kasuya.fukuoka.jp\0"
+"is.it\0"
+"acct.pro\0"
+"en.it\0"
+"valle-aosta.it\0"
+"ascolipiceno.it\0nanmoku.gunma.jp\0"
+"furukawa.miyagi.jp\0attorney\0\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0"
+"targi.pl\0anz\0"
+"in-butter.de\0"
+"aol\0"
+"is-a-doctor.com\0"
+"stordal.no\0bbs.tr\0"
+"kimobetsu.hokkaido.jp\0"
+"16-b.it\0"
+"yasuoka.nagano.jp\0"
+"apple\0"
+"md.ci\0\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0"
+"minamisanriku.miyagi.jp\0"
+"otaru.hokkaido.jp\0"
+"aogaki.hyogo.jp\0"
+"tlon.network\0"
+"app\0"
+"ginan.gifu.jp\0giessen.museum\0"
+"verm\xc3\xb6gensberatung\0"
+"lierne.no\0mywire.org\0"
+"kashiwa.chiba.jp\0"
+"fukuroi.shizuoka.jp\0musashimurayama.tokyo.jp\0tjeldsund.no\0"
+"naturalsciences.museum\0"
+"jele.host\0"
+"schwarz\0ui.nabu.casa\0"
+"kamo.kyoto.jp\0"
+"bar\0"
+"sciences.museum\0bbc\0gdynia.pl\0"
+"akita.akita.jp\0wv.us\0"
+"atl.jelastic.vps-host.net\0"
+"starachowice.pl\0"
+"mx.na\0herokussl.com\0"
+"sorum.no\0"
+"eng.pro\0"
+"art\0bbt\0"
+"takinoue.hokkaido.jp\0"
+"s\xc3\xb8rreisa.no\0"
+"iida.nagano.jp\0bcg\0"
+"cc.ne.us\0baby\0"
+"kobayashi.miyazaki.jp\0medical.museum\0bcn\0forumz.info\0"
+"gov.nc.tr\0vercel.app\0"
+"w.bg\0"
+"atsugi.kanagawa.jp\0\xe5\x85\xac\xe5\x8f\xb8\0"
+"2.bg\0"
+"hospital\0"
+"redirectme.net\0"
+"kozagawa.wakayama.jp\0tana.no\0"
+"sncf\0"
+"det.br\0to.gov.br\0takazaki.miyazaki.jp\0jele.club\0"
+"chernivtsi.ua\0"
+"gub.uy\0"
+"ong.br\0"
+"shoparena.pl\0"
+"katsuragi.nara.jp\0tokashiki.okinawa.jp\0prudential\0"
+"project.museum\0giize.com\0"
+"r\xc3\xa1hkker\xc3\xa1vju.no\0"
+"vana\0from-pa.com\0"
+"studio\0"
+"bet\0"
+"podzone.net\0"
+"chichibu.saitama.jp\0"
+"carrier.museum\0"
+"kawamata.fukushima.jp\0"
+"flight.aero\0"
+"lib.tn.us\0"
+"recreation.aero\0vologda.su\0myfast.space\0"
+"gs.hl.no\0"
+"akiruno.tokyo.jp\0"
+"takashima.shiga.jp\0v\xc3\xa1rgg\xc3\xa1t.no\0"
+"stathelle.no\0"
+"lt.it\0"
+"cloudns.eu\0"
+"yoshino.nara.jp\0dyndns-blog.com\0"
+"spreadbetting\0"
+"cz.it\0tokyo\0"
+"chirurgiens-dentistes.fr\0biev\xc3\xa1t.no\0"
+"rimini.it\0"
+"\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"yomitan.okinawa.jp\0folldal.no\0axa\0blogspot.co.za\0"
+"noda.chiba.jp\0"
+"salerno.it\0aws\0deal\0"
+"pe.ca\0is-slick.com\0"
+"mus.mi.us\0"
+"shingo.aomori.jp\0nishigo.fukushima.jp\0"
+"ikeda.gifu.jp\0elburg.museum\0"
+"shimabara.nagasaki.jp\0schlesisches.museum\0viking.museum\0pony.club\0"
+"kumakogen.ehime.jp\0antiques.museum\0"
+"management\0"
+"tj.cn\0bale.museum\0"
+"educator.aero\0"
+"codespot.com\0"
+"ybo.trade\0"
+"development.run\0"
+"sex.hu\0bid\0"
+"rehab\0"
+"sk\xc3\xa5nland.no\0from.work\0"
+"r\xc3\xb8yken.no\0"
+"brand.se\0"
+"toshima.tokyo.jp\0"
+"oxa.cloud\0"
+"arai.shizuoka.jp\0kanuma.tochigi.jp\0\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"ski.museum\0bio\0"
+"tas.au\0"
+"val-daosta.it\0"
+"ando.nara.jp\0"
+"kadoma.osaka.jp\0"
+"whoswho\0"
+"\xd9\x82\xd8\xb7\xd8\xb1\0group\0"
+"biz\0chungbuk.kr\0staging.onred.one\0"
+"mishima.fukushima.jp\0"
+"pictures\0"
+"logoip.de\0"
+"hakusan.ishikawa.jp\0"
+"nango.fukushima.jp\0nh.us\0cloudns.in\0"
+"planetarium.museum\0"
+"luxembourg.museum\0servecounterstrike.com\0"
+"ookuwa.nagano.jp\0"
+"yamaga.kumamoto.jp\0"
+"workisboring.com\0"
+"hisayama.fukuoka.jp\0shimane.shimane.jp\0"
+"ybo.party\0"
+"tecnologia.bo\0"
+"dyn-ip24.de\0"
+"ebino.miyazaki.jp\0is-a-photographer.com\0ras.ru\0"
+"indie.porn\0"
+"nirasaki.yamanashi.jp\0"
"indiana.museum\0"
-"square7.net\0"
-"green\0"
-"mc.it\0zapto.org\0"
-"reggio-calabria.it\0"
-"kagamiishi.fukushima.jp\0"
-"toyono.osaka.jp\0verm\xc3\xb6gensberater\0"
-"v\xc3\xa1rgg\xc3\xa1t.no\0"
-"uki.kumamoto.jp\0akdn\0"
-"tado.mie.jp\0dyndns-remote.com\0"
-"fjaler.no\0graphics\0co.com\0"
-"hirono.iwate.jp\0dallas.museum\0twmail.net\0"
-"ginoza.okinawa.jp\0"
-"biz.vn\0"
-"trentino-alto-adige.it\0modum.no\0"
-"fudai.iwate.jp\0kl\xc3\xa6""bu.no\0fast\0"
-"bms\0"
-"sn\xc3\xa5""ase.no\0"
-"s\xc3\xb8ndre-land.no\0witd.gov.pl\0"
-"bmw\0crafting.xyz\0"
-"s\xc3\xb8mna.no\0"
-"shioya.tochigi.jp\0"
-"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
-"mitoyo.kagawa.jp\0"
-"is-a-painter.com\0"
-"abo.pa\0quebec\0*.0emm.com\0"
-"holtalen.no\0equipment\0"
-"rocks\0"
-"desa.id\0securitytactics.com\0"
-"cloud.fedoraproject.org\0"
-"bio.br\0help\0"
-"kerryhotels\0"
-"builders\0dyndns.org\0ras.ru\0"
-"bom\0westeurope.azurestaticapps.net\0"
+"taku.saga.jp\0cc.ma.us\0yodobashi\0"
+"faith\0hdfcbank\0"
+"cloudns.cc\0for-our.info\0"
+"noshiro.akita.jp\0hostedpi.com\0"
+"isahaya.nagasaki.jp\0"
+"shibukawa.gunma.jp\0"
+"c.bg\0nozawaonsen.nagano.jp\0"
+"my-firewall.org\0"
+"yakumo.hokkaido.jp\0"
+"georgia.museum\0"
+"vallee-d-aoste.it\0channelsdvr.net\0"
+"house\0"
+"moonscale.net\0"
+"experts-comptables.fr\0"
+"malselv.no\0"
+"miyazaki.jp\0"
+"ikata.ehime.jp\0bahccavuotna.no\0"
+"hashima.gifu.jp\0*.platformsh.site\0"
+"sumoto.hyogo.jp\0shimoichi.nara.jp\0"
+"namerikawa.toyama.jp\0"
+"for-more.biz\0"
+"trondheim.no\0"
+"bms\0jcloud.kz\0"
+"shinagawa.tokyo.jp\0s3-website.us-east-2.amazonaws.com\0"
+"not.br\0"
+"bmw\0"
+"games.hu\0band\0"
+"tatamotors\0"
+"mihama.chiba.jp\0zoology.museum\0"
+"higashiyama.kyoto.jp\0labour.museum\0"
+"discount\0"
+"\xe6\x95\x99\xe8\x82\xb2.hk\0civilisation.museum\0fiat\0"
+"bank\0"
+"s3-ap-northeast-2.amazonaws.com\0"
+"u2.xnbay.com\0"
+"umbria.it\0takasaki.gunma.jp\0"
+"www.ro\0hockey\0"
+"zgora.pl\0"
+"pe.it\0"
+"arita.saga.jp\0"
+"kamikitayama.nara.jp\0"
+"cherkassy.ua\0"
+"lebtimnetz.de\0"
+"bom\0"
"boo\0"
-"fukumitsu.toyama.jp\0investments\0"
-"*.in.futurecms.at\0"
-"ruovat.no\0"
-"westfalen.museum\0bot\0"
-"ayabe.kyoto.jp\0tonsberg.no\0blogspot.com.mt\0"
-"balsan-suedtirol.it\0"
-"tone.ibaraki.jp\0box\0"
-"blogspot.com.ng\0cat.ax\0"
-"uchinomi.kagawa.jp\0travelchannel\0"
-"alfaromeo\0"
-"higashiyama.kyoto.jp\0"
-"firm.ht\0"
-"cab\0"
-"bod\xc3\xb8.no\0gok.pk\0capitalone\0"
-"backplaneapp.io\0"
-"my-wan.de\0"
-"oirase.aomori.jp\0"
-"firm.in\0"
-"cal\0"
-"cam\0isa-geek.net\0"
-"nagahama.shiga.jp\0stathelle.no\0biz.zm\0"
-"tsushima.nagasaki.jp\0fundacio.museum\0"
+"stackhero-network.com\0"
+"swatch\0"
+"tsuwano.shimane.jp\0"
+"bot\0"
+"volkenkunde.museum\0"
+"spydeberg.no\0"
+"bialowieza.pl\0"
+"box\0"
+"satx.museum\0"
+"sex.pl\0"
+"macerata.it\0nesseby.no\0"
+"kumamoto.kumamoto.jp\0cab\0"
+"finland.museum\0"
+"!city.nagoya.jp\0pe.kr\0"
+"arab\0"
+"eisenbahn.museum\0"
+"jl.cn\0fido\0"
+"jondal.no\0cal\0"
+"cam\0s3-website-us-east-1.amazonaws.com\0"
+"virtualuser.de\0"
+"wildlife.museum\0lpusercontent.com\0"
"cba\0"
-"car\0"
-"maebashi.gunma.jp\0rzeszow.pl\0"
-"cat\0okayama.okayama.jp\0"
-"ak.us\0"
-"vikna.no\0bar0.net\0"
-"free.hr\0"
-"taiwa.miyagi.jp\0cbn\0sener\0"
-"kaizuka.osaka.jp\0"
-"kagamino.okayama.jp\0"
-"health.museum\0"
-"kr\xc3\xb8""dsherad.no\0"
-"cbs\0"
-"charity\0blogspot.com.tr\0"
-"arezzo.it\0"
-"workinggroup.aero\0bo.it\0asakuchi.okayama.jp\0rnrt.tn\0"
-"\xe9\x80\x9a\xe8\xb2\xa9\0"
-"firm.co\0"
-"kazuno.akita.jp\0"
-"sic.it\0"
-"n\xc3\xa1vuotna.no\0"
-"kustanai.ru\0"
-"shonai.fukuoka.jp\0"
-"toyama.toyama.jp\0reviews\0"
-"um.gov.pl\0firm.dk\0"
-"experts-comptables.fr\0"
-"g.se\0"
-"contemporary.museum\0"
-"here\0"
-"suzuki\0"
-"tokai.ibaraki.jp\0ha.no\0lon-2.paas.massivegrid.net\0"
-"oygarden.no\0"
-"ceb\0"
-"randaberg.no\0is-a-lawyer.com\0"
-"kahoku.yamagata.jp\0kustanai.su\0"
-"tsuru.yamanashi.jp\0swiss\0"
-"lodi.it\0and\xc3\xb8y.no\0"
-"sytes.net\0"
-"s\xc3\xb8rfold.no\0family\0"
-"guru\0"
+"lt.ua\0car\0"
+"onna.okinawa.jp\0"
+"cat\0"
+"fr\xc3\xa6na.no\0mobi.tt\0"
+"niimi.okayama.jp\0haugesund.no\0h\xc3\xa6gebostad.no\0"
+"vibovalentia.it\0"
+"aga.niigata.jp\0"
+"nt.edu.au\0mobi.tz\0cbn\0"
+"chuo.osaka.jp\0"
+"nishi.osaka.jp\0"
+"alpha-myqnapcloud.com\0"
+"laquila.it\0*.webhare.dev\0"
+"kommune.no\0cbs\0dell\0bci.dnstrace.pro\0"
+"md.us\0ltda\0"
+"scjohnson\0doomdns.com\0"
+"tsuyama.okayama.jp\0"
+"takagi.nagano.jp\0"
+"dontexist.net\0"
+"\xe3\x82\xa2\xe3\x83\x9e\xe3\x82\xbe\xe3\x83\xb3\0"
+"tienda\0"
+"h\xc3\xa5.no\0"
+"kvanangen.no\0"
+"toga.toyama.jp\0rnrt.tn\0cc.or.us\0"
+"fukusaki.hyogo.jp\0"
+"mex.com\0"
+"64-b.it\0"
+"date.fukushima.jp\0\xe5\x95\x86\xe5\xba\x97\0"
+"karmoy.no\0"
+"hasami.nagasaki.jp\0"
+"zama.kanagawa.jp\0"
+"gentlentapis.com\0"
+"samnanger.no\0w.se\0red.sv\0staples\0"
+"*.backyards.banzaicloud.io\0"
+"nagara.chiba.jp\0"
+"andebu.no\0"
+"kurogi.fukuoka.jp\0atami.shizuoka.jp\0"
+"southwest.museum\0"
+"trentinos\xc3\xbc""dtirol.it\0"
"ceo\0"
-"cfa\0nflfan.org\0"
-"kawaue.gifu.jp\0iwanai.hokkaido.jp\0"
-"bytom.pl\0dn.ua\0rdv.to\0"
-"ninohe.iwate.jp\0cfd\0"
-"ravendb.me\0"
-"isleofman.museum\0"
-"buy\0marriott\0"
-"boutique\0"
-"express.aero\0"
-"college\0stcgroup\0"
-"gs.hm.no\0"
-"si.it\0"
-"lib.mt.us\0lib.nd.us\0"
-"\xe5\x8f\xb0\xe6\xb9\xbe\0"
-"tokigawa.saitama.jp\0yamagata.yamagata.jp\0"
-"journalism.museum\0"
-"mincom.tn\0"
-"columbia.museum\0"
-"tysnes.no\0"
-"chitose.hokkaido.jp\0"
-"is-into-cars.com\0soc.srcf.net\0"
-"mosjoen.no\0sharp\0"
-"motoyama.kochi.jp\0"
-"erni\0"
-"ohira.miyagi.jp\0us.gov.pl\0"
-"minami-alps.yamanashi.jp\0zgorzelec.pl\0wedeploy.io\0"
-"rendalen.no\0*.customer-oci.com\0blogspot.com.uy\0"
-"zushi.kanagawa.jp\0"
-"lib.va.us\0"
-"cc.mo.us\0"
-"rodeo\0zara\0"
-"kongsvinger.no\0"
-"weather\0"
-"ro.eu.org\0"
-"audible\0"
-"audio\0"
-"fresenius\0est-mon-blogueur.com\0"
-"kv\xc3\xa6nangen.no\0"
-"k12.vi.us\0"
-"kamigori.hyogo.jp\0eigersund.no\0"
-"stuff-4-sale.us\0"
-"wales\0"
-"kvinnherad.no\0"
+"student.aero\0"
+"cfa\0"
+"c.la\0"
+"sondrio.it\0cfd\0"
+"ozu.ehime.jp\0"
+"consultant.aero\0"
+"steinkjer.no\0latino\0"
+"buy\0"
+"toyosato.shiga.jp\0"
+"hasama.oita.jp\0"
+"fukuyama.hiroshima.jp\0minamiashigara.kanagawa.jp\0kashiba.nara.jp\0"
+"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0"
+"lig.it\0"
+"cloudns.us\0"
+"choshi.chiba.jp\0mobi.na\0saotome.st\0verm\xc3\xb6gensberater\0"
+"olayan\0"
+"mobi.ng\0"
+"omura.nagasaki.jp\0members.linode.com\0"
+"sakuragawa.ibaraki.jp\0bokn.no\0"
+"tobishima.aichi.jp\0kawagoe.saitama.jp\0lindas.no\0"
+"fg.it\0lib.az.us\0from-nj.com\0"
+"trade\0lcube-server.de\0"
+"ar.it\0wolomin.pl\0"
+"unj\xc3\xa1rga.no\0"
+"udine.it\0s3.dualstack.eu-central-1.amazonaws.com\0"
+"kafjord.no\0bss.design\0"
+"film\0"
+"ginoza.okinawa.jp\0"
+"jampa.br\0napoli.it\0"
+"channel\0"
+"averoy.no\0"
+"download\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0"
+"desi\0"
+"makinohara.shizuoka.jp\0"
+"fitness\0"
+"sayo.hyogo.jp\0aridagawa.wakayama.jp\0"
"bzh\0"
+"academia.bo\0tonosho.kagawa.jp\0"
+"9guacu.br\0"
+"college\0pdns.page\0"
+"sango.nara.jp\0"
+"the.br\0sohu\0"
+"ddr.museum\0from-sc.com\0\xd1\x8f.\xd1\x80\xd1\x83\xd1\x81\0"
+"bayern\0"
+"spjelkavik.no\0"
+"hitachinaka.ibaraki.jp\0c.cdn77.org\0en-root.fr\0"
+"shangrila\0"
+"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0"
+"myds.me\0"
+"saitama.jp\0"
+"komatsu\0dsmynas.com\0"
+"surgery\0"
+"jprs\0"
+"maritimo.museum\0sf.no\0"
+"ashiya.fukuoka.jp\0minamiminowa.nagano.jp\0"
+"tuscany.it\0venezia.it\0cc.sc.us\0"
+"pa.leg.br\0"
+"kariya.aichi.jp\0miyawaka.fukuoka.jp\0mobi.ke\0"
+"from-ma.com\0"
+"marylhurst.museum\0"
+"s3.dualstack.eu-west-2.amazonaws.com\0"
+"dyndns1.de\0"
+"off.ai\0"
+"lugansk.ua\0k12.ne.us\0"
+"c.se\0"
+"!city.yokohama.jp\0"
+"edeka\0is-a-rockstar.com\0"
+"fujishiro.ibaraki.jp\0"
+"ainan.ehime.jp\0s3-external-1.amazonaws.com\0"
+"hirokawa.fukuoka.jp\0takino.hyogo.jp\0sytes.net\0"
+"shiriuchi.hokkaido.jp\0dyn.cosidns.de\0"
+"hirara.okinawa.jp\0"
+"from-vt.com\0"
+"minamioguni.kumamoto.jp\0pb.leg.br\0"
+"m\xc4\x81ori.nz\0"
+"transporte.bo\0fie.ee\0askvoll.no\0"
+"florist\0"
+"army\0"
+"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0"
+"fire\0"
+"yaotsu.gifu.jp\0"
+"ichihara.chiba.jp\0"
+"shirakawa.gifu.jp\0"
+"\xe7\x82\xb9\xe7\x9c\x8b\0is-a-blogger.com\0"
+"carraramassa.it\0"
+"tomari.hokkaido.jp\0"
+"m\xc3\xa1latvuopmi.no\0"
+"profesional.bo\0"
+"co.ae\0com\0fudai.iwate.jp\0"
+"cyber.museum\0lib.ma.us\0"
+"co.ag\0okazaki.aichi.jp\0"
+"br\xc3\xb8nn\xc3\xb8y.no\0"
+"oi.kanagawa.jp\0minobu.yamanashi.jp\0lib.id.us\0cpa\0cloudapps.digital\0"
+"fish\0"
+"fet.no\0song\0"
+"\xc3\xb8ygarden.no\0melbourne\0"
+"co.am\0arpa\0auto.pl\0"
+"h\xc3\xa4kkinen.fi\0"
+"co.ao\0"
+"motoyama.kochi.jp\0flanders.museum\0"
+"co.bb\0"
+"co.at\0is-a-painter.com\0"
+"yamazoe.nara.jp\0"
+"co.bi\0"
+"barreau.bj\0hanyu.saitama.jp\0"
+"dad\0iamallama.com\0"
+"tanohata.iwate.jp\0sony\0"
+"co.bn\0"
+"louvre.museum\0badaddja.no\0"
+"*.ex.ortsinfo.at\0"
+"co.ca\0in-berlin.de\0"
+"myftp.biz\0"
+"nachikatsuura.wakayama.jp\0"
+"lohmus.me\0"
+"co.bw\0tempioolbia.it\0m\xc3\xa5lselv.no\0"
+"co.ci\0neat-url.com\0"
+"co.cl\0"
+"co.cm\0"
+"rv.ua\0"
+"showa.gunma.jp\0s3-website-ap-northeast-1.amazonaws.com\0"
+"cloudns.pw\0podzone.org\0"
+"day\0"
+"co.cr\0maori.nz\0ubank\0"
+"kurashiki.okayama.jp\0"
+"cuneo.it\0barsy.club\0"
+"friuliv-giulia.it\0urawa.saitama.jp\0myshopify.com\0"
+"yokoshibahikari.chiba.jp\0"
+"matsubara.osaka.jp\0"
+"\xe9\xb3\xa5\xe5\x8f\x96.jp\0co.cz\0"
+"crs\0csc\0co.dk\0"
+"lug.org.uk\0"
+"museet.museum\0"
+"kuroishi.aomori.jp\0homesecuritymac.com\0"
+"ouda.nara.jp\0"
+"\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0uy.com\0"
+"manno.kagawa.jp\0"
+"ar.us\0"
+"asda\0"
"cc.ut.us\0"
-"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0kofu.yamanashi.jp\0"
-"utazu.kagawa.jp\0tx.us\0sport\0fuettertdasnetz.de\0"
-"k12.il.us\0"
-"nishikatsura.yamanashi.jp\0cody.museum\0se.net\0ru.net\0"
-"ichihara.chiba.jp\0trycloudflare.com\0"
-"dscloud.biz\0"
-"agrar.hu\0"
-"ginan.gifu.jp\0"
-"higashiomi.shiga.jp\0"
-"newholland\0"
-"tsubetsu.hokkaido.jp\0"
-"isen.kagoshima.jp\0"
-"kvanangen.no\0"
-"north.museum\0community\0"
-"ascolipiceno.it\0bc.platform.sh\0"
-"lighting\0"
-"moriguchi.osaka.jp\0"
-"ee.eu.org\0"
-"\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0kozow.com\0"
-"otago.museum\0"
-"wanggou\0al.leg.br\0"
-"shingu.fukuoka.jp\0"
-"enscaled.sg\0"
-"name.hr\0si.eu.org\0"
-"hoyanger.no\0"
-"nakagawa.tokushima.jp\0"
-"omi.nagano.jp\0"
-"kagoshima.jp\0forte.id\0"
-"cc.pr.us\0"
-"storfjord.no\0"
-"wa.gov.au\0"
-"hakodate.hokkaido.jp\0firm.ve\0s3.dualstack.eu-central-1.amazonaws.com\0service.gov.uk\0"
-"kishiwada.osaka.jp\0from-nh.com\0"
-"tm.cy\0name.et\0"
-"aerobatic.aero\0"
-"nishinoomote.kagoshima.jp\0bedzin.pl\0"
-"in-vpn.org\0"
-"name.fj\0"
-"slz.br\0muni.il\0"
-"zuerich\0"
-"uk.com\0"
-"grane.no\0myhome-server.de\0"
-"office-on-the.net\0"
-"pz.it\0"
-"pvt.ge\0"
-"sar.it\0wafflecell.com\0"
-"naganohara.gunma.jp\0from-fl.com\0"
-"tm.dz\0"
-"taketa.oita.jp\0"
-"hurdal.no\0"
-"openair.museum\0shaw\0"
-"nieruchomosci.pl\0"
-"com\0"
-"eu.platform.sh\0"
-"pruszkow.pl\0"
-"kozagawa.wakayama.jp\0kwp.gov.pl\0cpa\0"
-"economia.bo\0ng.city\0point2this.com\0"
-"atm.pl\0firmdale\0couk.me\0"
+"arte\0"
+"yawatahama.ehime.jp\0"
+"vallee-aoste.it\0s3-website.ap-south-1.amazonaws.com\0"
+"aseral.no\0"
+"barclaycard\0dds\0"
+"l.bg\0wpmucdn.com\0"
+"xx.gl\0"
+"meet\0"
+"k12.mi.us\0"
+"getmyip.com\0"
+"barlettatraniandria.it\0moriya.ibaraki.jp\0"
+"workshop.museum\0eaton.mi.us\0from-ut.com\0"
+"k12.co.us\0sinaapp.com\0"
+"co.gg\0"
+"tarumizu.kagoshima.jp\0osaki.miyagi.jp\0"
+"travel.pl\0"
+"co.gl\0basketball\0"
+"bbva\0"
+"kotohira.kagawa.jp\0dev\0"
+"suginami.tokyo.jp\0valley.museum\0"
+"kainan.tokushima.jp\0"
+"fussa.tokyo.jp\0"
+"1kapp.com\0"
+"ntr.br\0"
+"co.gy\0"
+"tadotsu.kagawa.jp\0no-ip.biz\0noho.st\0"
+"ovre-eiker.no\0construction\0deno.dev\0"
+"minamiechizen.fukui.jp\0"
};
-static constexpr quint32 tldChunks[tldChunkCount] = {65522, 107441};
+static constexpr quint32 tldChunks[tldChunkCount] = {65534, 107981};
QT_END_NAMESPACE
diff --git a/src/network/socket/qlocalsocket.cpp b/src/network/socket/qlocalsocket.cpp
index 19c0b2389e..3ee98b85c8 100644
--- a/src/network/socket/qlocalsocket.cpp
+++ b/src/network/socket/qlocalsocket.cpp
@@ -219,7 +219,7 @@ QT_BEGIN_NAMESPACE
Attempts to close the socket. If there is pending data waiting to be
written, QLocalSocket will enter ClosingState and wait until all data
has been written. Eventually, it will enter UnconnectedState and emit
- the disconnectedFromServer() signal.
+ the disconnected() signal.
\sa connectToServer()
*/
diff --git a/src/network/socket/qlocalsocket.h b/src/network/socket/qlocalsocket.h
index 22763cb339..9d49ee6a47 100644
--- a/src/network/socket/qlocalsocket.h
+++ b/src/network/socket/qlocalsocket.h
@@ -44,6 +44,10 @@
#include <QtCore/qiodevice.h>
#include <QtNetwork/qabstractsocket.h>
+#ifndef QT_NO_DEBUG_STREAM
+#include <QtCore/qdebug.h>
+#endif
+
QT_REQUIRE_CONFIG(localserver);
QT_BEGIN_NAMESPACE
@@ -143,7 +147,6 @@ private:
};
#ifndef QT_NO_DEBUG_STREAM
-#include <QtCore/qdebug.h>
Q_NETWORK_EXPORT QDebug operator<<(QDebug, QLocalSocket::LocalSocketError);
Q_NETWORK_EXPORT QDebug operator<<(QDebug, QLocalSocket::LocalSocketState);
#endif
diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp
index 41ec5a94d4..677b431265 100644
--- a/src/network/socket/qlocalsocket_win.cpp
+++ b/src/network/socket/qlocalsocket_win.cpp
@@ -260,13 +260,10 @@ void QLocalSocketPrivate::_q_pipeClosed()
emit q->disconnected();
pipeReader->stop();
+ delete pipeWriter;
+ pipeWriter = nullptr;
destroyPipeHandles();
handle = INVALID_HANDLE_VALUE;
-
- if (pipeWriter) {
- delete pipeWriter;
- pipeWriter = 0;
- }
}
qint64 QLocalSocket::bytesAvailable() const
diff --git a/src/network/ssl/qasn1element.cpp b/src/network/ssl/qasn1element.cpp
index 13fc095e12..3df76c3774 100644
--- a/src/network/ssl/qasn1element.cpp
+++ b/src/network/ssl/qasn1element.cpp
@@ -327,8 +327,9 @@ qint64 QAsn1Element::toInteger(bool *ok) const
return 0;
}
- // NOTE: negative numbers are not handled
- if (mValue.at(0) & 0x80) {
+ // NOTE: - negative numbers are not handled
+ // - greater sizes would overflow
+ if (mValue.at(0) & 0x80 || mValue.size() > 8) {
if (ok)
*ok = false;
return 0;
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index a7c6b16b19..c0d893cba7 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -1798,7 +1798,7 @@ qint64 QSslSocket::readData(char *data, qint64 maxlen)
#endif
} else {
// possibly trigger another transmit() to decrypt more data from the socket
- if (d->plainSocket->bytesAvailable())
+ if (d->plainSocket->bytesAvailable() || d->hasUndecryptedData())
QMetaObject::invokeMethod(this, "_q_flushReadBuffer", Qt::QueuedConnection);
else if (d->state != QAbstractSocket::ConnectedState)
return maxlen ? qint64(-1) : qint64(0);
diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h
index 31b8b79302..161c3f2491 100644
--- a/src/network/ssl/qsslsocket_p.h
+++ b/src/network/ssl/qsslsocket_p.h
@@ -215,6 +215,8 @@ private:
static bool s_loadedCiphersAndCerts;
protected:
bool verifyErrorsHaveBeenIgnored();
+ // Only implemented/useful in Schannel for now
+ virtual bool hasUndecryptedData() { return false; };
bool paused;
bool flushTriggered;
bool systemOrSslErrorDetected = false;
diff --git a/src/network/ssl/qsslsocket_schannel_p.h b/src/network/ssl/qsslsocket_schannel_p.h
index 57c8c75629..30f5a9695b 100644
--- a/src/network/ssl/qsslsocket_schannel_p.h
+++ b/src/network/ssl/qsslsocket_schannel_p.h
@@ -123,6 +123,8 @@ private:
bool rootCertOnDemandLoadingAllowed();
+ bool hasUndecryptedData() override { return intermediateBuffer.size() > 0; }
+
SecPkgContext_ConnectionInfo connectionInfo = {};
SecPkgContext_StreamSizes streamSizes = {};
diff --git a/src/opengl/doc/src/qt6-changes.qdoc b/src/opengl/doc/src/qt6-changes.qdoc
index a64f71d22e..c4cb6d0220 100644
--- a/src/opengl/doc/src/qt6-changes.qdoc
+++ b/src/opengl/doc/src/qt6-changes.qdoc
@@ -67,7 +67,7 @@
\note A notable exception is \l QOpenGLContext, which still resides in
Qt Gui.
- \section1 QOpenGLWidgets
+ \section1 The QOpenGLWidgets class
Another exception is the \l QOpenGLWidget class. This has been moved to a new
module named \c{Qt OpenGL Widgets} and should be included from there.
diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
index 0497d210e5..eb693426d9 100644
--- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
+++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
@@ -49,6 +49,7 @@
#include <QtGui/qpointingdevice.h>
#include <QtGui/private/qhighdpiscaling_p.h>
#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/private/qpointingdevice_p.h>
#include <mutex>
@@ -465,6 +466,11 @@ void QEvdevTouchScreenHandler::registerPointingDevice()
m_device = new QPointingDevice(d->hw_name, id++,
QInputDevice::DeviceType::TouchScreen, QPointingDevice::PointerType::Finger,
caps, 16, 0);
+
+ auto geom = d->screenGeometry();
+ if (!geom.isNull())
+ QPointingDevicePrivate::get(m_device)->setAvailableVirtualGeometry(geom);
+
QWindowSystemInterface::registerInputDevice(m_device);
}
@@ -583,8 +589,10 @@ void QEvdevTouchScreenData::processInputEvent(input_event *data)
for (auto it = m_contacts.begin(), end = m_contacts.end(); it != end; /*erasing*/) {
Contact &contact(it.value());
- if (!contact.state)
+ if (!contact.state) {
+ ++it;
continue;
+ }
int key = m_typeB ? it.key() : contact.trackingId;
if (!m_typeB && m_lastContacts.contains(key)) {
@@ -635,12 +643,14 @@ void QEvdevTouchScreenData::processInputEvent(input_event *data)
for (auto it = m_contacts.begin(), end = m_contacts.end(); it != end; /*erasing*/) {
Contact &contact(it.value());
- if (!contact.state)
+ if (!contact.state) {
+ ++it;
continue;
+ }
if (contact.state == QEventPoint::State::Released) {
if (m_typeB) {
- contact.state = QEventPoint::State::Stationary;
+ contact.state = QEventPoint::State::Unknown;
} else {
it = m_contacts.erase(it);
continue;
diff --git a/src/plugins/imageformats/jpeg/CMakeLists.txt b/src/plugins/imageformats/jpeg/CMakeLists.txt
index 7e69e1aba6..660b8149e8 100644
--- a/src/plugins/imageformats/jpeg/CMakeLists.txt
+++ b/src/plugins/imageformats/jpeg/CMakeLists.txt
@@ -83,7 +83,6 @@ qt_internal_extend_target(QJpegPlugin CONDITION NOT QT_FEATURE_system_jpeg
../../../3rdparty/libjpeg/src/jsimd_none.c
../../../3rdparty/libjpeg/src/jutils.c
INCLUDE_DIRECTORIES
- ../../../3rdparty/libjpeg
../../../3rdparty/libjpeg/src
)
diff --git a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp
index 4e9828663f..da5235e491 100644
--- a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp
+++ b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp
@@ -71,10 +71,16 @@ void QComposeInputContext::ensureInitialized()
}
m_initialized = true;
- const char *locale = setlocale(LC_CTYPE, "");
- if (!locale)
- locale = setlocale(LC_CTYPE, nullptr);
- qCDebug(lcXkbCompose) << "detected locale (LC_CTYPE):" << locale;
+ // Get locale from user env settings, see also
+ // https://xkbcommon.org/doc/current/group__compose.html#compose-locale
+ const char *locale = getenv("LC_ALL");
+ if (!locale || !*locale)
+ locale = getenv("LC_CTYPE");
+ if (!locale || !*locale)
+ locale = getenv("LANG");
+ if (!locale || !*locale)
+ locale = "C";
+ qCDebug(lcXkbCompose) << "detected locale:" << locale;
m_composeTable = xkb_compose_table_new_from_locale(m_XkbContext, locale, XKB_COMPOSE_COMPILE_NO_FLAGS);
if (m_composeTable)
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index 559cdc6e57..0ddd47eb02 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -519,7 +519,7 @@ static void waitForServiceSetup(JNIEnv *env, jclass /*clazz*/)
QtAndroidPrivate::waitForServiceSetup();
}
-static jboolean startQtApplication(JNIEnv */*env*/, jclass /*clazz*/)
+static void startQtApplication(JNIEnv */*env*/, jclass /*clazz*/)
{
{
JNIEnv* env = nullptr;
@@ -558,7 +558,8 @@ static jboolean startQtApplication(JNIEnv */*env*/, jclass /*clazz*/)
sem_destroy(&m_exitSemaphore);
// We must call exit() to ensure that all global objects will be destructed
- exit(ret);
+ if (!qEnvironmentVariableIsSet("QT_ANDROID_NO_EXIT_CALL"))
+ exit(ret);
}
static void quitQtCoreApplication(JNIEnv *env, jclass /*clazz*/)
diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp
index e39f17a26f..1736238adb 100644
--- a/src/plugins/platforms/android/qandroidinputcontext.cpp
+++ b/src/plugins/platforms/android/qandroidinputcontext.cpp
@@ -94,6 +94,7 @@ private:
static QAndroidInputContext *m_androidInputContext = nullptr;
static char const *const QtNativeInputConnectionClassName = "org/qtproject/qt/android/QtNativeInputConnection";
static char const *const QtExtractedTextClassName = "org/qtproject/qt/android/QtExtractedText";
+static char const *const QtObjectType = "QDialog";
static jclass m_extractedTextClass = 0;
static jmethodID m_classConstructorMethodID = 0;
static jfieldID m_partialEndOffsetFieldID = 0;
@@ -645,7 +646,7 @@ void QAndroidInputContext::updateSelectionHandles()
}
auto curRect = im->cursorRectangle();
- QPoint cursorPoint = qGuiApp->focusWindow()->mapToGlobal(QPoint(curRect.x() + (curRect.width() / 2), curRect.y() + curRect.height()));
+ QPoint cursorPoint(window->mapToGlobal(QPoint(curRect.x() + (curRect.width() / 2), curRect.y() + curRect.height())));
QPoint editMenuPoint(cursorPoint.x(), cursorPoint.y());
m_handleMode &= ShowEditPopup;
m_handleMode |= ShowCursor;
@@ -665,10 +666,12 @@ void QAndroidInputContext::updateSelectionHandles()
if (cpos > anchor)
std::swap(leftRect, rightRect);
- QPoint leftPoint(leftRect.bottomLeft().toPoint() * pixelDensity);
- QPoint righPoint(rightRect.bottomRight().toPoint() * pixelDensity);
- QPoint editPoint(leftRect.united(rightRect).topLeft().toPoint() * pixelDensity);
- QtAndroidInput::updateHandles(m_handleMode, editPoint, EditContext::AllButtons, leftPoint, righPoint,
+ QPoint leftPoint(window->mapToGlobal(leftRect.bottomLeft().toPoint()));
+ QPoint righPoint(window->mapToGlobal(rightRect.bottomRight().toPoint()));
+ QPoint editPoint(window->mapToGlobal(leftRect.united(rightRect)
+ .topLeft().toPoint()));
+ QtAndroidInput::updateHandles(m_handleMode, editPoint * pixelDensity, EditContext::AllButtons,
+ leftPoint * pixelDensity, righPoint * pixelDensity,
query.value(Qt::ImCurrentSelection).toString().isRightToLeft());
m_hideCursorHandleTimer.stop();
}
@@ -692,7 +695,17 @@ void QAndroidInputContext::handleLocationChanged(int handleId, int x, int y)
double pixelDensity = window
? QHighDpiScaling::factor(window)
: QHighDpiScaling::factor(QtAndroid::androidPlatformIntegration()->screen());
- QPointF point(x / pixelDensity, y / pixelDensity);
+ auto object = m_focusObject->parent();
+ int dialogMoveX = 0;
+ while (object) {
+ if (QString::compare(object->metaObject()->className(),
+ QtObjectType, Qt::CaseInsensitive) == 0) {
+ dialogMoveX += object->property("x").toInt();
+ }
+ object = object->parent();
+ };
+
+ QPointF point((x / pixelDensity) - dialogMoveX, y / pixelDensity);
point.setY(point.y() - leftRect.width() / 2);
QInputMethodQueryEvent query(Qt::ImCursorPosition | Qt::ImAnchorPosition
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp
index c64805b4e2..e1cf2487fe 100644
--- a/src/plugins/platforms/android/qandroidplatformwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp
@@ -60,14 +60,21 @@ QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window)
m_windowId = winIdGenerator.fetchAndAddRelaxed(1) + 1;
setWindowState(window->windowStates());
+ // the following is in relation to the virtual geometry
const bool forceMaximize = m_windowState & (Qt::WindowMaximized | Qt::WindowFullScreen);
- const QRect requestedGeometry = forceMaximize ? QRect() : window->geometry();
- const QRect availableGeometry = (window->parent()) ? window->parent()->geometry() : platformScreen()->availableGeometry();
- const QRect finalGeometry = QPlatformWindow::initialGeometry(window, requestedGeometry,
- availableGeometry.width(), availableGeometry.height());
-
- if (requestedGeometry != finalGeometry)
- setGeometry(QHighDpi::toNativePixels(finalGeometry, window));
+ const QRect requestedNativeGeometry =
+ forceMaximize ? QRect() : QHighDpi::toNativePixels(window->geometry(), window);
+ const QRect availableDeviceIndependentGeometry = (window->parent())
+ ? window->parent()->geometry()
+ : QHighDpi::fromNativePixels(platformScreen()->availableGeometry(), window);
+
+ // initialGeometry returns in native pixels
+ const QRect finalNativeGeometry = QPlatformWindow::initialGeometry(
+ window, requestedNativeGeometry, availableDeviceIndependentGeometry.width(),
+ availableDeviceIndependentGeometry.height());
+
+ if (requestedNativeGeometry != finalNativeGeometry)
+ setGeometry(finalNativeGeometry);
}
void QAndroidPlatformWindow::lower()
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm
index 585518628d..0f5c638f7c 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm
@@ -389,6 +389,8 @@ id getValueAttribute(QAccessibleInterface *interface)
}
if (interface->state().checkable) {
+ if (interface->state().checkStateMixed)
+ return @(2);
return interface->state().checked ? @(1) : @(0);
}
diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h
index 1d01c0d1cf..d730a063a3 100644
--- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h
+++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h
@@ -48,6 +48,7 @@ QT_DECLARE_NAMESPACED_OBJC_INTERFACE(QNSOpenSavePanelDelegate, NSObject<NSOpenSa
QT_BEGIN_NAMESPACE
+class QEventLoop;
class QFileDialog;
class QFileDialogPrivate;
@@ -84,6 +85,7 @@ public:
private:
QNSOpenSavePanelDelegate *mDelegate;
QUrl mDir;
+ QEventLoop *m_eventLoop = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
index 0909b5e21a..e0fc7dd9ce 100644
--- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
+++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
@@ -179,35 +179,32 @@ static QString strippedText(QString s)
- (void)closePanel
{
- // An already closed/closing panel has its return code set
- if (mReturnCode != kReturnCodeNotSet)
- return;
-
*mCurrentSelection = QString::fromNSString([[mSavePanel URL] path]).normalized(QString::NormalizationForm_C);
- if ([mSavePanel respondsToSelector:@selector(close)])
+
+ if (mSavePanel.sheet)
+ [NSApp endSheet:mSavePanel];
+ else if (NSApp.modalWindow == mSavePanel)
+ [NSApp stopModal];
+ else
[mSavePanel close];
- if ([mSavePanel isSheet])
- [NSApp endSheet: mSavePanel];
}
- (void)showModelessPanel
{
- if (mOpenPanel){
- QFileInfo info(*mCurrentSelection);
- NSString *filepath = info.filePath().toNSString();
- NSURL *url = [NSURL fileURLWithPath:filepath isDirectory:info.isDir()];
- bool selectable = (mOptions->acceptMode() == QFileDialogOptions::AcceptSave)
- || [self panel:mOpenPanel shouldEnableURL:url];
-
- [self updateProperties];
- [mSavePanel setNameFieldStringValue:selectable ? info.fileName().toNSString() : @""];
-
- [mOpenPanel beginWithCompletionHandler:^(NSInteger result){
- mReturnCode = result;
- if (mHelper)
- mHelper->QNSOpenSavePanelDelegate_panelClosed(result == NSModalResponseOK);
- }];
- }
+ QFileInfo info(*mCurrentSelection);
+ NSString *filepath = info.filePath().toNSString();
+ NSURL *url = [NSURL fileURLWithPath:filepath isDirectory:info.isDir()];
+ bool selectable = (mOptions->acceptMode() == QFileDialogOptions::AcceptSave)
+ || [self panel:mSavePanel shouldEnableURL:url];
+
+ [self updateProperties];
+ [mSavePanel setNameFieldStringValue:selectable ? info.fileName().toNSString() : @""];
+
+ [mSavePanel beginWithCompletionHandler:^(NSInteger result){
+ mReturnCode = result;
+ if (mHelper)
+ mHelper->QNSOpenSavePanelDelegate_panelClosed(result == NSModalResponseOK);
+ }];
}
- (BOOL)runApplicationModalPanel
@@ -722,11 +719,14 @@ bool QCocoaFileDialogHelper::showCocoaFilePanel(Qt::WindowModality windowModalit
createNSOpenSavePanelDelegate();
if (!mDelegate)
return false;
- if (windowModality == Qt::NonModal)
- [mDelegate showModelessPanel];
- else if (windowModality == Qt::WindowModal && parent)
+
+ if (windowModality == Qt::WindowModal && parent)
[mDelegate showWindowModalSheet:parent];
- // no need to show a Qt::ApplicationModal dialog here, since it will be done in _q_platformRunNativeAppModalPanel()
+ else if (windowModality == Qt::ApplicationModal)
+ return true; // Defer until exec()
+ else
+ [mDelegate showModelessPanel];
+
return true;
}
@@ -738,6 +738,10 @@ bool QCocoaFileDialogHelper::hideCocoaFilePanel()
return false;
} else {
[mDelegate closePanel];
+
+ if (m_eventLoop)
+ m_eventLoop->exit();
+
// Even when we hide it, we are still using a
// native dialog, so return true:
return true;
@@ -746,16 +750,28 @@ bool QCocoaFileDialogHelper::hideCocoaFilePanel()
void QCocoaFileDialogHelper::exec()
{
- // Note: If NSApp is not running (which is the case if e.g a top-most
- // QEventLoop has been interrupted, and the second-most event loop has not
- // yet been reactivated (regardless if [NSApp run] is still on the stack)),
- // showing a native modal dialog will fail.
- QMacAutoReleasePool pool;
- if ([mDelegate runApplicationModalPanel])
- emit accept();
- else
- emit reject();
+ Q_ASSERT(mDelegate);
+ if (mDelegate->mSavePanel.visible) {
+ // WindowModal or NonModal, so already shown above
+ QEventLoop eventLoop;
+ m_eventLoop = &eventLoop;
+ eventLoop.exec(QEventLoop::DialogExec);
+ m_eventLoop = nullptr;
+ } else {
+ // ApplicationModal, so show and block using native APIs
+
+ // Note: If NSApp is not running (which is the case if e.g a top-most
+ // QEventLoop has been interrupted, and the second-most event loop has not
+ // yet been reactivated (regardless if [NSApp run] is still on the stack)),
+ // showing a native modal dialog will fail.
+
+ QMacAutoReleasePool pool;
+ if ([mDelegate runApplicationModalPanel])
+ emit accept();
+ else
+ emit reject();
+ }
}
bool QCocoaFileDialogHelper::defaultNameFilterDisables() const
diff --git a/src/plugins/platforms/cocoa/qcocoakeymapper.h b/src/plugins/platforms/cocoa/qcocoakeymapper.h
index dbf164c18e..e18c6e71fa 100644
--- a/src/plugins/platforms/cocoa/qcocoakeymapper.h
+++ b/src/plugins/platforms/cocoa/qcocoakeymapper.h
@@ -75,7 +75,7 @@ private:
bool updateKeyboard();
using VirtualKeyCode = unsigned short;
- const KeyMap &keyMapForKey(VirtualKeyCode virtualKey, QChar unicodeKey) const;
+ const KeyMap &keyMapForKey(VirtualKeyCode virtualKey) const;
QCFType<TISInputSourceRef> m_currentInputSource = nullptr;
diff --git a/src/plugins/platforms/cocoa/qcocoakeymapper.mm b/src/plugins/platforms/cocoa/qcocoakeymapper.mm
index caa68ae694..9a7b53d025 100644
--- a/src/plugins/platforms/cocoa/qcocoakeymapper.mm
+++ b/src/plugins/platforms/cocoa/qcocoakeymapper.mm
@@ -442,7 +442,7 @@ static constexpr Qt::KeyboardModifiers modifierCombinations[] = {
Returns a key map for the given \virtualKey based on all
possible modifier combinations.
*/
-const QCocoaKeyMapper::KeyMap &QCocoaKeyMapper::keyMapForKey(VirtualKeyCode virtualKey, QChar unicodeKey) const
+const QCocoaKeyMapper::KeyMap &QCocoaKeyMapper::keyMapForKey(VirtualKeyCode virtualKey) const
{
static_assert(sizeof(modifierCombinations) / sizeof(Qt::KeyboardModifiers) == kNumModifierCombinations);
@@ -452,7 +452,7 @@ const QCocoaKeyMapper::KeyMap &QCocoaKeyMapper::keyMapForKey(VirtualKeyCode virt
if (keyMap[Qt::NoModifier] != Qt::Key_unknown)
return keyMap; // Already filled
- qCDebug(lcQpaKeyMapper, "Updating key map for virtual key = 0x%02x!", (uint)virtualKey);
+ qCDebug(lcQpaKeyMapper, "Updating key map for virtual key 0x%02x", (uint)virtualKey);
// Key mapping via [NSEvent charactersByApplyingModifiers:] only works for key down
// events, but we might (wrongly) get into this code path for other key events such
@@ -476,9 +476,10 @@ const QCocoaKeyMapper::KeyMap &QCocoaKeyMapper::keyMapForKey(VirtualKeyCode virt
kUCKeyActionDown, modifierKeyState, m_keyboardKind, OptionBits(0),
&m_deadKeyState, maxStringLength, &actualStringLength, unicodeString);
- // Use translated unicode key if valid
+ // Use translated Unicode key if valid
+ QChar carbonUnicodeKey;
if (err == noErr && actualStringLength)
- unicodeKey = QChar(unicodeString[0]);
+ carbonUnicodeKey = QChar(unicodeString[0]);
if (@available(macOS 10.15, *)) {
if (canMapCocoaEvent) {
@@ -487,23 +488,29 @@ const QCocoaKeyMapper::KeyMap &QCocoaKeyMapper::keyMapForKey(VirtualKeyCode virt
// compare the results to Cocoa.
auto cocoaModifiers = toCocoaModifiers(qtModifiers);
auto *charactersWithModifiers = [NSApp.currentEvent charactersByApplyingModifiers:cocoaModifiers];
- Q_ASSERT(charactersWithModifiers && charactersWithModifiers.length > 0);
- auto cocoaUnicodeKey = QChar([charactersWithModifiers characterAtIndex:0]);
- if (cocoaUnicodeKey != unicodeKey) {
+
+ QChar cocoaUnicodeKey;
+ if (charactersWithModifiers.length > 0)
+ cocoaUnicodeKey = QChar([charactersWithModifiers characterAtIndex:0]);
+
+ if (cocoaUnicodeKey != carbonUnicodeKey) {
qCWarning(lcQpaKeyMapper) << "Mismatch between Cocoa" << cocoaUnicodeKey
- << "and Carbon" << unicodeKey << "for virtual key" << virtualKey
+ << "and Carbon" << carbonUnicodeKey << "for virtual key" << virtualKey
<< "with" << qtModifiers;
}
}
}
- int qtkey = toKeyCode(unicodeKey, virtualKey, qtModifiers);
- if (qtkey == Qt::Key_unknown)
- qtkey = unicodeKey.unicode();
+ int qtKey = toKeyCode(carbonUnicodeKey, virtualKey, qtModifiers);
+ if (qtKey == Qt::Key_unknown)
+ qtKey = carbonUnicodeKey.unicode();
- keyMap[i] = qtkey;
+ keyMap[i] = qtKey;
- qCDebug(lcQpaKeyMapper, " [%d] (%d,0x%02x,'%c')", i, qtkey, qtkey, qtkey);
+ qCDebug(lcQpaKeyMapper).verbosity(0) << "\t" << qtModifiers
+ << "+" << qUtf8Printable(QString::asprintf("0x%02x", virtualKey))
+ << "=" << qUtf8Printable(QString::asprintf("%d / 0x%02x /", qtKey, qtKey))
+ << QString::asprintf("%c", qtKey);
}
return keyMap;
@@ -517,7 +524,7 @@ QList<int> QCocoaKeyMapper::possibleKeys(const QKeyEvent *event) const
if (!nativeVirtualKey)
return ret;
- auto keyMap = keyMapForKey(nativeVirtualKey, QChar(event->key()));
+ auto keyMap = keyMapForKey(nativeVirtualKey);
auto unmodifiedKey = keyMap[Qt::NoModifier];
Q_ASSERT(unmodifiedKey != Qt::Key_unknown);
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm
index 1ad0cfea47..295d614ee6 100644
--- a/src/plugins/platforms/cocoa/qcocoamenu.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenu.mm
@@ -360,6 +360,17 @@ void QCocoaMenu::showPopup(const QWindow *parentWindow, const QRect &targetRect,
NSView *view = cocoaWindow ? cocoaWindow->view() : nil;
NSMenuItem *nsItem = item ? ((QCocoaMenuItem *)item)->nsItem() : nil;
+ // store the window that this popup belongs to so that we can evaluate whether we are modally blocked
+ bool resetMenuParent = false;
+ if (!menuParent()) {
+ setMenuParent(cocoaWindow);
+ resetMenuParent = true;
+ }
+ auto menuParentGuard = qScopeGuard([&]{
+ if (resetMenuParent)
+ setMenuParent(nullptr);
+ });
+
QScreen *screen = nullptr;
if (parentWindow)
screen = parentWindow->screen();
diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm
index 4806b244c3..0f17ec61c9 100644
--- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm
@@ -266,8 +266,7 @@ NSMenuItem *QCocoaMenuItem::sync()
while (depth < 3 && p && !(menubar = qobject_cast<QCocoaMenuBar *>(p))) {
++depth;
QCocoaMenuObject *menuObject = dynamic_cast<QCocoaMenuObject *>(p);
- Q_ASSERT(menuObject);
- p = menuObject->menuParent();
+ p = menuObject ? menuObject->menuParent() : nullptr;
}
if (menubar && depth < 3)
diff --git a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
index a975f2d76c..858039e5d5 100644
--- a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
+++ b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
@@ -102,7 +102,7 @@ void QCocoaSystemTrayIcon::init()
m_statusItem.button.target = m_delegate;
m_statusItem.button.action = @selector(statusItemClicked);
- [m_statusItem.button sendActionOn:NSEventMaskLeftMouseUp | NSEventMaskRightMouseUp | NSEventMaskOtherMouseUp];
+ [m_statusItem.button sendActionOn:NSEventMaskLeftMouseDown | NSEventMaskRightMouseDown | NSEventMaskOtherMouseDown];
}
void QCocoaSystemTrayIcon::cleanup()
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index d52343f0b8..28210c83ed 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -1857,7 +1857,7 @@ bool QCocoaWindow::shouldRefuseKeyWindowAndFirstResponder()
// This function speaks up if there's any reason
// to refuse key window or first responder state.
- if (window()->flags() & Qt::WindowDoesNotAcceptFocus)
+ if (window()->flags() & (Qt::WindowDoesNotAcceptFocus | Qt::WindowTransparentForInput))
return true;
if (m_inSetVisible) {
diff --git a/src/plugins/platforms/cocoa/qnsview_dragging.mm b/src/plugins/platforms/cocoa/qnsview_dragging.mm
index d4ab5f4a24..495462bf8d 100644
--- a/src/plugins/platforms/cocoa/qnsview_dragging.mm
+++ b/src/plugins/platforms/cocoa/qnsview_dragging.mm
@@ -296,7 +296,9 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin
QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag();
Q_ASSERT(nativeDrag);
nativeDrag->exitDragLoop();
- nativeDrag->setAcceptedAction(qt_mac_mapNSDragOperation(operation));
+ // for internal drag'n'drop, don't override the action the drop event accepted
+ if (!nativeDrag->currentDrag())
+ nativeDrag->setAcceptedAction(qt_mac_mapNSDragOperation(operation));
// Qt starts drag-and-drop on a mouse button press event. Cococa in
// this case won't send the matching release event, so we have to
diff --git a/src/plugins/platforms/cocoa/qnsview_menus.mm b/src/plugins/platforms/cocoa/qnsview_menus.mm
index 7ae274ab04..8cfac5556a 100644
--- a/src/plugins/platforms/cocoa/qnsview_menus.mm
+++ b/src/plugins/platforms/cocoa/qnsview_menus.mm
@@ -73,19 +73,21 @@ static bool selectorIsCutCopyPaste(SEL selector)
if (platformItem->menu())
return YES;
- // Check if a modal dialog is active. Validate only menu
- // items belonging to this view's window own menu bar.
- if (QGuiApplication::modalWindow()) {
+ // Check if a modal dialog is active. If so, enable only menu
+ // items explicitly belonging to this window's own menu bar, or to the window.
+ if (QGuiApplication::modalWindow() && QGuiApplication::modalWindow()->isActive()) {
QCocoaMenuBar *menubar = nullptr;
+ QCocoaWindow *menuWindow = nullptr;
QObject *menuParent = platformItem->menuParent();
while (menuParent && !(menubar = qobject_cast<QCocoaMenuBar *>(menuParent))) {
+ menuWindow = qobject_cast<QCocoaWindow *>(menuParent);
auto *menuObject = dynamic_cast<QCocoaMenuObject *>(menuParent);
- menuParent = menuObject->menuParent();
+ menuParent = menuObject ? menuObject->menuParent() : nullptr;
}
- // we have no menubar parent for the application menu items, e.g About and Preferences
- if (!menubar || menubar->cocoaWindow() != self.platformWindow)
+ if ((!menuWindow || menuWindow->window() != QGuiApplication::modalWindow())
+ && (!menubar || menubar->cocoaWindow() != self.platformWindow))
return NO;
}
diff --git a/src/plugins/platforms/ios/qiosinputcontext.mm b/src/plugins/platforms/ios/qiosinputcontext.mm
index 0eb12498b4..b7a9d57875 100644
--- a/src/plugins/platforms/ios/qiosinputcontext.mm
+++ b/src/plugins/platforms/ios/qiosinputcontext.mm
@@ -667,7 +667,8 @@ void QIOSInputContext::update(Qt::InputMethodQueries updatedProperties)
// focus object. We try to detect code paths that fail this assertion and smooth
// over the situation by doing a manual update of the focus object.
if (qApp->focusObject() != m_imeState.focusObject && updatedProperties != Qt::ImQueryAll) {
- qWarning() << "stale focus object" << m_imeState.focusObject << ", doing manual update";
+ qWarning() << "stale focus object" << static_cast<void *>(m_imeState.focusObject)
+ << ", doing manual update";
setFocusObject(qApp->focusObject());
return;
}
diff --git a/src/plugins/platforms/ios/qiostextinputoverlay.mm b/src/plugins/platforms/ios/qiostextinputoverlay.mm
index 89ace50a82..46dee86279 100644
--- a/src/plugins/platforms/ios/qiostextinputoverlay.mm
+++ b/src/plugins/platforms/ios/qiostextinputoverlay.mm
@@ -92,6 +92,7 @@ static void executeBlockWithoutAnimation(Block block)
@interface QIOSEditMenu : NSObject
@property (nonatomic, assign) BOOL visible;
@property (nonatomic, readonly) BOOL isHiding;
+@property (nonatomic, readonly) BOOL shownByUs;
@property (nonatomic, assign) BOOL reshowAfterHidden;
@end
@@ -110,6 +111,7 @@ static void executeBlockWithoutAnimation(Block block)
[center addObserverForName:UIMenuControllerDidHideMenuNotification
object:nil queue:nil usingBlock:^(NSNotification *) {
_isHiding = NO;
+ _shownByUs = NO;
if (self.reshowAfterHidden) {
// To not abort an ongoing hide transition when showing the menu, you can set
// reshowAfterHidden to wait until the transition finishes before reshowing it.
@@ -144,6 +146,10 @@ static void executeBlockWithoutAnimation(Block block)
return;
if (visible) {
+ // UIMenuController is a singleton that can be shown (and hidden) from anywhere.
+ // Try to keep track of whether or not is was shown by us (the gesture recognizers
+ // in this file) to avoid closing it if it was opened from elsewhere.
+ _shownByUs = YES;
// Note that the contents of the edit menu is decided by
// first responder, which is normally QIOSTextResponder.
QRectF cr = qApp->inputMethod()->cursorRectangle();
@@ -492,6 +498,7 @@ static void executeBlockWithoutAnimation(Block block)
[self createLoupe];
[self updateFocalPoint:QPointF::fromCGPoint(_lastTouchPoint)];
_loupeLayer.visible = YES;
+ QIOSTextInputOverlay::s_editMenu.visible = NO;
break;
case UIGestureRecognizerStateChanged:
// Tell the sub class to move the loupe to the correct position
@@ -739,6 +746,9 @@ static void executeBlockWithoutAnimation(Block block)
QObject::disconnect(_cursorConnection);
QObject::disconnect(_anchorConnection);
QObject::disconnect(_clipRectConnection);
+
+ if (QIOSTextInputOverlay::s_editMenu.shownByUs)
+ QIOSTextInputOverlay::s_editMenu.visible = NO;
}
}
@@ -840,20 +850,12 @@ static void executeBlockWithoutAnimation(Block block)
if (_cursorLayer.visible) {
_cursorLayer.visible = NO;
_anchorLayer.visible = NO;
- // Only hide the edit menu if we had a selection from before, since
- // the edit menu can also be used for other purposes by others (in
- // which case we try our best not to interfere).
- QIOSTextInputOverlay::s_editMenu.visible = NO;
}
+ if (QIOSTextInputOverlay::s_editMenu.shownByUs)
+ QIOSTextInputOverlay::s_editMenu.visible = NO;
return;
}
- if (_dragOnCursor || _dragOnAnchor) {
- // Ensure that the edit menu is hidden while
- // the user drags on any of the handles.
- QIOSTextInputOverlay::s_editMenu.visible = NO;
- }
-
if (!_cursorLayer.visible && QIOSTextInputOverlay::s_editMenu.isHiding) {
// Since the edit menu is hiding and this is the first selection thereafter, we
// assume that the selection came from the user tapping on a menu item. In that
diff --git a/src/plugins/platforms/ios/qiostextresponder.mm b/src/plugins/platforms/ios/qiostextresponder.mm
index 358ccbf602..0cc8c0ec54 100644
--- a/src/plugins/platforms/ios/qiostextresponder.mm
+++ b/src/plugins/platforms/ios/qiostextresponder.mm
@@ -227,13 +227,11 @@
self.keyboardType = UIKeyboardTypeEmailAddress;
else if (hints & Qt::ImhDigitsOnly)
self.keyboardType = UIKeyboardTypeNumberPad;
- else if (hints & Qt::ImhFormattedNumbersOnly)
- self.keyboardType = UIKeyboardTypeDecimalPad;
else if (hints & Qt::ImhDialableCharactersOnly)
self.keyboardType = UIKeyboardTypePhonePad;
else if (hints & Qt::ImhLatinOnly)
self.keyboardType = UIKeyboardTypeASCIICapable;
- else if (hints & Qt::ImhPreferNumbers)
+ else if (hints & (Qt::ImhPreferNumbers | Qt::ImhFormattedNumbersOnly))
self.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
else
self.keyboardType = UIKeyboardTypeDefault;
@@ -516,15 +514,23 @@
// from within a undo callback.
NSUndoManager *undoMgr = self.undoManager;
[undoMgr removeAllActions];
+
+ [undoMgr beginUndoGrouping];
+ [undoMgr registerUndoWithTarget:self selector:@selector(undo) object:nil];
+ [undoMgr endUndoGrouping];
[undoMgr beginUndoGrouping];
[undoMgr registerUndoWithTarget:self selector:@selector(undo) object:nil];
[undoMgr endUndoGrouping];
- // Schedule an operation that we immediately pop off to be able to schedule a redo
+ // Schedule operations that we immediately pop off to be able to schedule redos
+ [undoMgr beginUndoGrouping];
+ [undoMgr registerUndoWithTarget:self selector:@selector(registerRedo) object:nil];
+ [undoMgr endUndoGrouping];
[undoMgr beginUndoGrouping];
[undoMgr registerUndoWithTarget:self selector:@selector(registerRedo) object:nil];
[undoMgr endUndoGrouping];
[undoMgr undo];
+ [undoMgr undo];
// Note that, perhaps because of a bug in UIKit, the buttons on the shortcuts bar ends up
// disabled if a undo/redo callback doesn't lead to a [UITextInputDelegate textDidChange].
@@ -532,6 +538,11 @@
// become disabled when there is nothing more to undo (Qt didn't change anything upon receiving
// an undo request). This seems to be OK behavior, so we let it stay like that unless it shows
// to cause problems.
+
+ // QTBUG-63393: Having two operations on the rebuilt undo stack keeps the undo/redo widgets
+ // always enabled on the shortcut bar. This workaround was found by experimenting with
+ // removing the removeAllActions call, and is related to the unknown internal implementation
+ // details of how the shortcut bar updates the dimming of its buttons.
});
}
diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm
index 1b6a802ca2..864eef3641 100644
--- a/src/plugins/platforms/ios/qioswindow.mm
+++ b/src/plugins/platforms/ios/qioswindow.mm
@@ -46,6 +46,7 @@
#include "qiosscreen.h"
#include "qiosviewcontroller.h"
#include "quiview.h"
+#include "qiosinputcontext.h"
#include <QtGui/private/qwindow_p.h>
#include <qpa/qplatformintegration.h>
diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm
index 4c56e03f42..f52cbc3f3d 100644
--- a/src/plugins/platforms/ios/quiview.mm
+++ b/src/plugins/platforms/ios/quiview.mm
@@ -45,6 +45,7 @@
#include "qiostextresponder.h"
#include "qiosscreen.h"
#include "qioswindow.h"
+#include "qiosinputcontext.h"
#ifndef Q_OS_TVOS
#include "qiosmenu.h"
#endif
@@ -264,7 +265,8 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
- (BOOL)canBecomeFirstResponder
{
- return !(self.platformWindow->window()->flags() & Qt::WindowDoesNotAcceptFocus);
+ return !(self.platformWindow->window()->flags() & (Qt::WindowDoesNotAcceptFocus
+ | Qt::WindowTransparentForInput));
}
- (BOOL)becomeFirstResponder
@@ -651,6 +653,18 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
[super addInteraction:interaction];
}
+- (UIEditingInteractionConfiguration)editingInteractionConfiguration
+{
+ // We only want the three-finger-tap edit menu to be available when there's
+ // actually something to edit. Otherwise the OS will cause a slight delay
+ // before delivering the release of three finger touch input. Note that we
+ // do not do any hit testing here to check that the focus object is the one
+ // being tapped, as the behavior of native iOS apps is to trigger the menu
+ // regardless of where the gesture is being made.
+ return QIOSInputContext::instance()->inputMethodAccepted() ?
+ UIEditingInteractionConfigurationDefault : UIEditingInteractionConfigurationNone;
+}
+
@end
@implementation UIView (QtHelpers)
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
index 43a53d7cfc..171a3c268b 100644
--- a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
@@ -107,6 +107,17 @@ QWindowsUiaMainProvider::~QWindowsUiaMainProvider()
void QWindowsUiaMainProvider::notifyFocusChange(QAccessibleEvent *event)
{
if (QAccessibleInterface *accessible = event->accessibleInterface()) {
+ // If this is a table/tree/list, raise event for the focused cell/item instead.
+ if (accessible->tableInterface()) {
+ int count = accessible->childCount();
+ for (int i = 0; i < count; ++i) {
+ QAccessibleInterface *item = accessible->child(i);
+ if (item && item->isValid() && item->state().focused) {
+ accessible = item;
+ break;
+ }
+ }
+ }
if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) {
QWindowsUiaWrapper::instance()->raiseAutomationEvent(provider, UIA_AutomationFocusChangedEventId);
}
@@ -513,7 +524,7 @@ QString QWindowsUiaMainProvider::automationIdForAccessible(const QAccessibleInte
while (obj) {
QString name = obj->objectName();
if (name.isEmpty())
- return QString();
+ return result;
if (!result.isEmpty())
result.prepend(u'.');
result.prepend(name);
diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp
index 7435e124dc..bbd2b3177b 100644
--- a/src/plugins/platforms/xcb/qxcbconnection.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection.cpp
@@ -221,6 +221,12 @@ void QXcbConnection::printXcbEvent(const QLoggingCategory &log, const char *mess
}
#define CASE_PRINT_AND_RETURN(name) case name : PRINT_AND_RETURN(#name);
+#define XI_PRINT_AND_RETURN(name) { \
+ qCDebug(log, "%s | XInput Event(%s) | sequence: %d", message, name, sequence); \
+ return; \
+}
+#define XI_CASE_PRINT_AND_RETURN(name) case name : XI_PRINT_AND_RETURN(#name);
+
switch (response_type) {
CASE_PRINT_AND_RETURN( XCB_KEY_PRESS );
CASE_PRINT_AND_RETURN( XCB_KEY_RELEASE );
@@ -255,7 +261,44 @@ void QXcbConnection::printXcbEvent(const QLoggingCategory &log, const char *mess
CASE_PRINT_AND_RETURN( XCB_COLORMAP_NOTIFY );
CASE_PRINT_AND_RETURN( XCB_CLIENT_MESSAGE );
CASE_PRINT_AND_RETURN( XCB_MAPPING_NOTIFY );
- CASE_PRINT_AND_RETURN( XCB_GE_GENERIC );
+ case XCB_GE_GENERIC: {
+ if (hasXInput2() && isXIEvent(event)) {
+ auto *xiDeviceEvent = reinterpret_cast<const xcb_input_button_press_event_t*>(event); // qt_xcb_input_device_event_t
+ switch (xiDeviceEvent->event_type) {
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_KEY_PRESS );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_KEY_RELEASE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_BUTTON_PRESS );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_BUTTON_RELEASE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_MOTION );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_ENTER );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_LEAVE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_FOCUS_IN );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_FOCUS_OUT );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_HIERARCHY );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_PROPERTY );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_KEY_PRESS );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_KEY_RELEASE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_BUTTON_PRESS );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_BUTTON_RELEASE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_MOTION );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_TOUCH_BEGIN );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_TOUCH_UPDATE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_TOUCH_END );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_TOUCH_OWNERSHIP );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_TOUCH_BEGIN );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_TOUCH_UPDATE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_TOUCH_END );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_BARRIER_HIT );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_BARRIER_LEAVE );
+ default:
+ qCDebug(log, "%s | XInput Event(other type) | sequence: %d", message, sequence);
+ return;
+ }
+ } else {
+ qCDebug(log, "%s | %s(%d) | sequence: %d", message, "XCB_GE_GENERIC", response_type, sequence);
+ return;
+ }
+ }
}
// XFixes
if (isXFixesType(response_type, XCB_XFIXES_SELECTION_NOTIFY))
diff --git a/src/plugins/platforms/xcb/qxcbcursor.cpp b/src/plugins/platforms/xcb/qxcbcursor.cpp
index 42c7a52bd4..e58e181e49 100644
--- a/src/plugins/platforms/xcb/qxcbcursor.cpp
+++ b/src/plugins/platforms/xcb/qxcbcursor.cpp
@@ -534,6 +534,8 @@ bool updateCursorTheme(void *dpy, const QByteArray &theme) {
Q_UNUSED(screen);
Q_UNUSED(name);
QXcbCursor *self = static_cast<QXcbCursor *>(handle);
+ self->m_cursorHash.clear();
+
updateCursorTheme(self->connection()->xlib_display(),property.toByteArray());
}
@@ -559,14 +561,16 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape)
int cursorId = cursorIdForShape(cshape);
xcb_cursor_t cursor = XCB_NONE;
- // Try Xcursor first
#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library)
+ if (m_screen->xSettings()->initialized())
+ m_screen->xSettings()->registerCallbackForProperty("Gtk/CursorThemeName",cursorThemePropertyChanged,this);
+
+ // Try Xcursor first
if (cshape >= 0 && cshape <= Qt::LastCursor) {
void *dpy = connection()->xlib_display();
cursor = loadCursor(dpy, cshape);
if (!cursor && !m_gtkCursorThemeInitialized && m_screen->xSettings()->initialized()) {
QByteArray gtkCursorTheme = m_screen->xSettings()->setting("Gtk/CursorThemeName").toByteArray();
- m_screen->xSettings()->registerCallbackForProperty("Gtk/CursorThemeName",cursorThemePropertyChanged,this);
if (updateCursorTheme(dpy,gtkCursorTheme)) {
cursor = loadCursor(dpy, cshape);
}
diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp
index 9ab804ca1b..7495d0fdc3 100644
--- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp
+++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp
@@ -60,11 +60,11 @@ Qt::KeyboardModifiers QXcbKeyboard::translateModifiers(int s) const
ret |= Qt::ShiftModifier;
if (s & XCB_MOD_MASK_CONTROL)
ret |= Qt::ControlModifier;
- if (s & rmod_masks.alt)
+ if ((s & rmod_masks.alt) == rmod_masks.alt)
ret |= Qt::AltModifier;
- if (s & rmod_masks.meta)
+ if ((s & rmod_masks.meta) == rmod_masks.meta)
ret |= Qt::MetaModifier;
- if (s & rmod_masks.altgr)
+ if ((s & rmod_masks.altgr) == rmod_masks.altgr)
ret |= Qt::GroupSwitchModifier;
return ret;
}
diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp
index e1fa4d8416..2e4fc16998 100644
--- a/src/plugins/platforms/xcb/qxcbscreen.cpp
+++ b/src/plugins/platforms/xcb/qxcbscreen.cpp
@@ -114,17 +114,13 @@ QXcbVirtualDesktop::QXcbVirtualDesktop(QXcbConnection *connection, xcb_screen_t
}
auto dpiChangedCallback = [](QXcbVirtualDesktop *desktop, const QByteArray &, const QVariant &property, void *) {
- bool ok;
- int dpiTimes1k = property.toInt(&ok);
- if (!ok)
+ if (!desktop->setDpiFromXSettings(property))
return;
- int dpi = dpiTimes1k / 1024;
- if (desktop->m_forcedDpi == dpi)
- return;
- desktop->m_forcedDpi = dpi;
+ const auto dpi = desktop->forcedDpi();
for (QXcbScreen *screen : desktop->connection()->screens())
QWindowSystemInterface::handleScreenLogicalDotsPerInchChange(screen->QPlatformScreen::screen(), dpi, dpi);
};
+ setDpiFromXSettings(xSettings()->setting("Xft/DPI"));
xSettings()->registerCallbackForProperty("Xft/DPI", dpiChangedCallback, nullptr);
}
@@ -425,6 +421,19 @@ void QXcbVirtualDesktop::readXResources()
}
}
+bool QXcbVirtualDesktop::setDpiFromXSettings(const QVariant &property)
+{
+ bool ok;
+ int dpiTimes1k = property.toInt(&ok);
+ if (!ok)
+ return false;
+ int dpi = dpiTimes1k / 1024;
+ if (m_forcedDpi == dpi)
+ return false;
+ m_forcedDpi = dpi;
+ return true;
+}
+
QSurfaceFormat QXcbVirtualDesktop::surfaceFormatFor(const QSurfaceFormat &format) const
{
const xcb_visualid_t xcb_visualid = connection()->hasDefaultVisualId() ? connection()->defaultVisualId()
diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h
index aabf227a09..02b1868331 100644
--- a/src/plugins/platforms/xcb/qxcbscreen.h
+++ b/src/plugins/platforms/xcb/qxcbscreen.h
@@ -117,6 +117,8 @@ private:
QByteArray &stringValue);
void readXResources();
+ bool setDpiFromXSettings(const QVariant &property);
+
xcb_screen_t *m_screen;
const int m_number;
QList<QPlatformScreen *> m_screens;
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 359ee14488..858dc342e7 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -1109,27 +1109,44 @@ void QXcbWindow::setWindowState(Qt::WindowStates state)
if (state == m_windowState)
return;
- if ((m_windowState & Qt::WindowMinimized) && !(state & Qt::WindowMinimized)) {
+ // unset old state
+ if (m_windowState & Qt::WindowMinimized)
xcb_map_window(xcb_connection(), m_window);
- } else if (!(m_windowState & Qt::WindowMinimized) && (state & Qt::WindowMinimized)) {
- xcb_client_message_event_t event;
+ if (m_windowState & Qt::WindowMaximized)
+ setNetWmState(false,
+ atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ),
+ atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT));
+ if (m_windowState & Qt::WindowFullScreen)
+ setNetWmState(false, atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN));
- event.response_type = XCB_CLIENT_MESSAGE;
- event.format = 32;
- event.sequence = 0;
- event.window = m_window;
- event.type = atom(QXcbAtom::WM_CHANGE_STATE);
- event.data.data32[0] = XCB_ICCCM_WM_STATE_ICONIC;
- event.data.data32[1] = 0;
- event.data.data32[2] = 0;
- event.data.data32[3] = 0;
- event.data.data32[4] = 0;
+ // set new state
+ if (state & Qt::WindowMinimized) {
+ {
+ xcb_client_message_event_t event;
+
+ event.response_type = XCB_CLIENT_MESSAGE;
+ event.format = 32;
+ event.sequence = 0;
+ event.window = m_window;
+ event.type = atom(QXcbAtom::WM_CHANGE_STATE);
+ event.data.data32[0] = XCB_ICCCM_WM_STATE_ICONIC;
+ event.data.data32[1] = 0;
+ event.data.data32[2] = 0;
+ event.data.data32[3] = 0;
+ event.data.data32[4] = 0;
- xcb_send_event(xcb_connection(), 0, xcbScreen()->root(),
- XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT,
- (const char *)&event);
+ xcb_send_event(xcb_connection(), 0, xcbScreen()->root(),
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT,
+ (const char *)&event);
+ }
m_minimized = true;
}
+ if (state & Qt::WindowMaximized)
+ setNetWmState(true,
+ atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ),
+ atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT));
+ if (state & Qt::WindowFullScreen)
+ setNetWmState(true, atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN));
setNetWmState(state);
diff --git a/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp
index ec153f6e0c..85bdd1ab88 100644
--- a/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp
+++ b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp
@@ -185,7 +185,7 @@ void QXdgDesktopPortalFileDialog::openPortal()
QLatin1String("/org/freedesktop/portal/desktop"),
QLatin1String("org.freedesktop.portal.FileChooser"),
d->saveFile ? QLatin1String("SaveFile") : QLatin1String("OpenFile"));
- QString parentWindowId = QLatin1String("x11:") + QString::number(d->winId);
+ QString parentWindowId = QLatin1String("x11:") + QString::number(d->winId, 16);
QVariantMap options;
if (!d->acceptLabel.isEmpty())
diff --git a/src/plugins/sqldrivers/CMakeLists.txt b/src/plugins/sqldrivers/CMakeLists.txt
index e11840d182..6de087839e 100644
--- a/src/plugins/sqldrivers/CMakeLists.txt
+++ b/src/plugins/sqldrivers/CMakeLists.txt
@@ -16,9 +16,6 @@ if (NOT CMAKE_PROJECT_NAME STREQUAL "QtBase" AND NOT CMAKE_PROJECT_NAME STREQUAL
Sql
)
qt_prepare_standalone_project()
-
- # needed by qt_internal_add_plugin
- add_custom_target(qt_plugins)
else()
qt_internal_upgrade_cmake_policies()
endif()
diff --git a/src/plugins/sqldrivers/ibase/main.cpp b/src/plugins/sqldrivers/ibase/main.cpp
index 8d462afcdc..9f34899d8c 100644
--- a/src/plugins/sqldrivers/ibase/main.cpp
+++ b/src/plugins/sqldrivers/ibase/main.cpp
@@ -51,7 +51,7 @@ class QIBaseDriverPlugin : public QSqlDriverPlugin
public:
QIBaseDriverPlugin();
- QSqlDriver* create(const QString &);
+ QSqlDriver* create(const QString &) override;
};
QIBaseDriverPlugin::QIBaseDriverPlugin()
diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
index dd6eaab9cf..eb34f6e4cb 100644
--- a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
+++ b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
@@ -1283,7 +1283,8 @@ QVariant QODBCResult::data(int field)
d->fieldCache[i] = qGetDoubleData(d->hStmt, i);
break;
case QSql::HighPrecision:
- d->fieldCache[i] = qGetStringData(d->hStmt, i, info.length(), false);
+ const int extra = info.precision() > 0 ? 1 : 0;
+ d->fieldCache[i] = qGetStringData(d->hStmt, i, info.length() + extra, false);
break;
}
break;
diff --git a/src/plugins/sqldrivers/psql/CMakeLists.txt b/src/plugins/sqldrivers/psql/CMakeLists.txt
index 62e9619d16..ab3d6c03aa 100644
--- a/src/plugins/sqldrivers/psql/CMakeLists.txt
+++ b/src/plugins/sqldrivers/psql/CMakeLists.txt
@@ -1,8 +1,5 @@
# Generated from psql.pro.
-# FIXME cmake FindPostgreSQL is more exhaustive than the check we have for libpq-fe.h
-# it also checks for catalog/pg_type.h which is a more internal include, we should
-# add a way to tell cmake FindPostgreSQL to optionally only look for the libpq-fe.h one
qt_find_package(PostgreSQL) # special case
#####################################################################
@@ -27,3 +24,14 @@ qt_internal_add_plugin(QPSQLDriverPlugin
#### Keys ignored in scope 1:.:.:psql.pro:<TRUE>:
# OTHER_FILES = "psql.json"
+
+# PostgreSQL delivers header files that are not a part of PostgreSQL itself. When precompiled
+# headers are processed, MinGW uses 'pthread.h' from the PostgreSQL installation directory.
+# As result, we disable precompile headers for the plugin.
+# See also QTBUG-90850.
+if(MINGW)
+ set_target_properties(QPSQLDriverPlugin
+ PROPERTIES
+ DISABLE_PRECOMPILE_HEADERS ON
+ )
+endif()
diff --git a/src/plugins/sqldrivers/psql/qsql_psql.cpp b/src/plugins/sqldrivers/psql/qsql_psql.cpp
index b6b2174a01..4c3d6ca13f 100644
--- a/src/plugins/sqldrivers/psql/qsql_psql.cpp
+++ b/src/plugins/sqldrivers/psql/qsql_psql.cpp
@@ -696,8 +696,8 @@ QVariant QPSQLResult::data(int i)
#endif
case QMetaType::QByteArray: {
size_t len;
- unsigned char *data = PQunescapeBytea((const unsigned char*)val, &len);
- QByteArray ba(reinterpret_cast<const char *>(data), int(len));
+ unsigned char *data = PQunescapeBytea(reinterpret_cast<const unsigned char *>(val), &len);
+ QByteArray ba(reinterpret_cast<const char *>(data), len);
qPQfreemem(data);
return QVariant(ba);
}
diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
index 4f70728d73..3527d2cd32 100644
--- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
+++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
@@ -74,13 +74,18 @@ Q_DECLARE_METATYPE(sqlite3_stmt*)
QT_BEGIN_NAMESPACE
-static QString _q_escapeIdentifier(const QString &identifier)
+static QString _q_escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type)
{
QString res = identifier;
+ // If it contains [ and ] then we assume it to be escaped properly already as this indicates
+ // the syntax is exactly how it should be
+ if (identifier.contains(QLatin1Char('[')) && identifier.contains(QLatin1Char(']')))
+ return res;
if (!identifier.isEmpty() && !identifier.startsWith(QLatin1Char('"')) && !identifier.endsWith(QLatin1Char('"'))) {
res.replace(QLatin1Char('"'), QLatin1String("\"\""));
res.prepend(QLatin1Char('"')).append(QLatin1Char('"'));
- res.replace(QLatin1Char('.'), QLatin1String("\".\""));
+ if (type == QSqlDriver::TableName)
+ res.replace(QLatin1Char('.'), QLatin1String("\".\""));
}
return res;
}
@@ -905,13 +910,24 @@ static QSqlIndex qGetTableInfo(QSqlQuery &q, const QString &tableName, bool only
{
QString schema;
QString table(tableName);
- int indexOfSeparator = tableName.indexOf(QLatin1Char('.'));
+ const int indexOfSeparator = tableName.indexOf(QLatin1Char('.'));
if (indexOfSeparator > -1) {
- schema = tableName.left(indexOfSeparator).append(QLatin1Char('.'));
- table = tableName.mid(indexOfSeparator + 1);
+ const int indexOfCloseBracket = tableName.indexOf(QLatin1Char(']'));
+ if (indexOfCloseBracket != tableName.size() - 1) {
+ // Handles a case like databaseName.tableName
+ schema = tableName.left(indexOfSeparator + 1);
+ table = tableName.mid(indexOfSeparator + 1);
+ } else {
+ const int indexOfOpenBracket = tableName.lastIndexOf(QLatin1Char('['), indexOfCloseBracket);
+ if (indexOfOpenBracket > 0) {
+ // Handles a case like databaseName.[tableName]
+ schema = tableName.left(indexOfOpenBracket);
+ table = tableName.mid(indexOfOpenBracket);
+ }
+ }
}
- q.exec(QLatin1String("PRAGMA ") + schema + QLatin1String("table_info (") + _q_escapeIdentifier(table) + QLatin1Char(')'));
-
+ q.exec(QLatin1String("PRAGMA ") + schema + QLatin1String("table_info (") +
+ _q_escapeIdentifier(table, QSqlDriver::TableName) + QLatin1Char(')'));
QSqlIndex ind;
while (q.next()) {
bool isPk = q.value(5).toInt();
@@ -973,8 +989,7 @@ QVariant QSQLiteDriver::handle() const
QString QSQLiteDriver::escapeIdentifier(const QString &identifier, IdentifierType type) const
{
- Q_UNUSED(type);
- return _q_escapeIdentifier(identifier);
+ return _q_escapeIdentifier(identifier, type);
}
static void handle_sqlite_callback(void *qobj,int aoperation, char const *adbname, char const *atablename,
diff --git a/src/plugins/styles/android/qandroidstyle.cpp b/src/plugins/styles/android/qandroidstyle.cpp
index 1baf568fa9..63c5767126 100644
--- a/src/plugins/styles/android/qandroidstyle.cpp
+++ b/src/plugins/styles/android/qandroidstyle.cpp
@@ -607,7 +607,7 @@ QSize QAndroidStyle::sizeFromContents(ContentsType ct,
if (qApp->styleSheet().isEmpty())
txt = hdr->fontMetrics.size(0, hdr->text);
else
- txt = qApp->fontMetrics().size(0, hdr->text);
+ txt = QFontMetrics(QApplication::font()).size(0, hdr->text);
sz.setHeight(margin + qMax(iconSize, txt.height()) + margin);
sz.setWidth((nullIcon ? 0 : margin) + iconSize
diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm
index 1d924fd0d0..208a7b9323 100644
--- a/src/plugins/styles/mac/qmacstyle_mac.mm
+++ b/src/plugins/styles/mac/qmacstyle_mac.mm
@@ -5175,7 +5175,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
if (const QStyleOptionSlider *sb = qstyleoption_cast<const QStyleOptionSlider *>(opt)) {
const bool drawTrack = sb->subControls & SC_ScrollBarGroove;
- const bool drawKnob = sb->subControls & SC_ScrollBarSlider;
+ const bool drawKnob = sb->subControls & SC_ScrollBarSlider && sb->minimum != sb->maximum;
if (!drawTrack && !drawKnob)
break;
diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp
index 6cd5ccb880..ad8ebecf03 100644
--- a/src/printsupport/dialogs/qprintdialog_unix.cpp
+++ b/src/printsupport/dialogs/qprintdialog_unix.cpp
@@ -1133,7 +1133,8 @@ void QUnixPrintWidgetPrivate::updateWidget()
widget.lOutput->setVisible(printToFile);
widget.fileBrowser->setVisible(printToFile);
- widget.properties->setVisible(q->testOption(QAbstractPrintDialog::PrintShowPageSize));
+ if (q)
+ widget.properties->setVisible(q->testOption(QAbstractPrintDialog::PrintShowPageSize));
}
QUnixPrintWidgetPrivate::~QUnixPrintWidgetPrivate()
diff --git a/src/sql/doc/src/qt6-changes.qdoc b/src/sql/doc/src/qt6-changes.qdoc
index 750c1162b6..55c94d0b60 100644
--- a/src/sql/doc/src/qt6-changes.qdoc
+++ b/src/sql/doc/src/qt6-changes.qdoc
@@ -41,7 +41,7 @@
In this topic we summarize those changes in Qt SQL, and provide guidance
to handle them.
- \section1 QSqlQuery
+ \section1 The QSqlQuery class
\section2 boundValues() Signature
diff --git a/src/testlib/doc/src/qt6-changes.qdoc b/src/testlib/doc/src/qt6-changes.qdoc
index 0a735d855d..1b5b5e88ba 100644
--- a/src/testlib/doc/src/qt6-changes.qdoc
+++ b/src/testlib/doc/src/qt6-changes.qdoc
@@ -43,7 +43,7 @@
\section1 Touch-related functionality
- \section2 QTouchEventSequence
+ \section2 The QTouchEventSequence class
QTest::QTouchEventSequence functions taking a QWidget parameter has been moved
to a new class: QTest::QTouchEventWidgetSequence. The list of affected
diff --git a/src/testlib/qabstractitemmodeltester.cpp b/src/testlib/qabstractitemmodeltester.cpp
index dd643c8945..e6daf7bed4 100644
--- a/src/testlib/qabstractitemmodeltester.cpp
+++ b/src/testlib/qabstractitemmodeltester.cpp
@@ -438,7 +438,7 @@ void QAbstractItemModelTesterPrivate::parent()
// when asked for the parent of an invalid index.
MODELTESTER_VERIFY(!model->parent(QModelIndex()).isValid());
- if (model->rowCount() == 0)
+ if (model->rowCount() == 0 || model->columnCount() == 0)
return;
// Column 0 | Column 1 |
@@ -454,7 +454,7 @@ void QAbstractItemModelTesterPrivate::parent()
// Common error test #2, make sure that a second level index has a parent
// that is the first level index.
- if (model->rowCount(topIndex) > 0) {
+ if (model->rowCount(topIndex) > 0 && model->columnCount(topIndex) > 0) {
QModelIndex childIndex = model->index(0, 0, topIndex);
MODELTESTER_VERIFY(childIndex.isValid());
MODELTESTER_COMPARE(model->parent(childIndex), topIndex);
@@ -720,12 +720,12 @@ void QAbstractItemModelTesterPrivate::rowsAboutToBeRemoved(const QModelIndex &pa
Changing c;
c.parent = parent;
c.oldSize = model->rowCount(parent);
- if (start > 0) {
+ if (start > 0 && model->columnCount(parent) > 0) {
const QModelIndex startIndex = model->index(start - 1, 0, parent);
MODELTESTER_VERIFY(startIndex.isValid());
c.last = model->data(startIndex);
}
- if (end < c.oldSize - 1) {
+ if (end < c.oldSize - 1 && model->columnCount(parent) > 0) {
const QModelIndex endIndex = model->index(end + 1, 0, parent);
MODELTESTER_VERIFY(endIndex.isValid());
c.next = model->data(endIndex);
diff --git a/src/testlib/qtestblacklist.cpp b/src/testlib/qtestblacklist.cpp
index b9d174bbe0..597f3a723d 100644
--- a/src/testlib/qtestblacklist.cpp
+++ b/src/testlib/qtestblacklist.cpp
@@ -46,6 +46,7 @@
#include <QtCore/qcoreapplication.h>
#include <QtCore/qvariant.h>
#include <QtCore/QSysInfo>
+#include <QtCore/QOperatingSystemVersion>
#include <set>
@@ -214,6 +215,9 @@ static QSet<QByteArray> activeConditions()
if (distributionName == "macos") {
if (result.find(distributionName) == result.end())
result.insert("osx");
+ const auto version = QOperatingSystemVersion::current();
+ if (version.majorVersion() >= 11)
+ distributionRelease = QByteArray::number(version.majorVersion());
}
if (!distributionRelease.isEmpty()) {
QByteArray versioned = distributionName + "-" + distributionRelease;
diff --git a/src/tools/androiddeployqt/main.cpp b/src/tools/androiddeployqt/main.cpp
index 3936c108b5..c7b85071b0 100644
--- a/src/tools/androiddeployqt/main.cpp
+++ b/src/tools/androiddeployqt/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2019 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the tools applications of the Qt Toolkit.
@@ -2206,16 +2206,9 @@ bool copyQtFiles(Options *options)
qPrintable(sourceFileName));
}
} else {
- if (unmetDependencies.isEmpty()) {
- if (options->verbose) {
- fprintf(stdout, " -- Skipping %s, architecture mismatch.\n",
- qPrintable(sourceFileName));
- }
- } else {
- fprintf(stdout, " -- Skipping %s. It has unmet dependencies: %s.\n",
- qPrintable(sourceFileName),
- qPrintable(unmetDependencies.join(QLatin1Char(','))));
- }
+ fprintf(stdout, " -- Skipping %s. It has unmet dependencies: %s.\n",
+ qPrintable(sourceFileName),
+ qPrintable(unmetDependencies.join(QLatin1Char(','))));
}
continue;
}
diff --git a/src/widgets/dialogs/qprogressdialog.cpp b/src/widgets/dialogs/qprogressdialog.cpp
index 32834291b8..448acfc7f9 100644
--- a/src/widgets/dialogs/qprogressdialog.cpp
+++ b/src/widgets/dialogs/qprogressdialog.cpp
@@ -485,6 +485,8 @@ void QProgressDialogPrivate::adoptChildWidget(QWidget *c)
c->setParent(q, { });
}
ensureSizeIsAtLeastSizeHint();
+ //The layout should be updated again to prevent layout errors when the new 'widget' is replaced
+ layout();
if (c)
c->show();
}
diff --git a/src/widgets/doc/src/qt6-changes.qdoc b/src/widgets/doc/src/qt6-changes.qdoc
index 585021efeb..1f8e97a4ad 100644
--- a/src/widgets/doc/src/qt6-changes.qdoc
+++ b/src/widgets/doc/src/qt6-changes.qdoc
@@ -43,7 +43,7 @@
\section1 Kernel classes
- \section2 QWidget
+ \section2 The QWidget class
The virtual QWidget::enterEvent() handler now receives a QEnterEvent*
parameter which has information about the pointer position, rather than
@@ -71,15 +71,23 @@
\section1 Widgets
- \section2 QAbstractButton
+ \section2 The QAbstractButton class
The default timeout parameter for QAbstractButton::animateClick() is
removed to allow modern connection syntax without the need for qOverload.
- \section2 QComboBox
+ \section2 The QComboBox class
The QComboBox::setModel() function is now virtual.
+ \section1 ItemViews
+
+ \section2 The QAbstractItemView class
+
+ The virtual viewOptions() method that previously returned a QStyleOptionViewItem
+ object has been renamed to initViewItemOption, and initializes a
+ QStyleOptionViewItem object that's passed in through a pointer.
+
\section1 Styling Classes and related APIs
All versioned QStyleOption subclasses are consolidated, and the version
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index e426e09adf..7cc9c350e4 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -10309,14 +10309,16 @@ QVariant QGraphicsTextItem::inputMethodQuery(Qt::InputMethodQuery query) const
v = int(inputMethodHints());
else if (dd->control)
v = dd->control->inputMethodQuery(query, QVariant());
- if (v.userType() == QMetaType::QRectF)
- v = v.toRectF().translated(-dd->controlOffset());
- else if (v.userType() == QMetaType::QPointF)
- v = v.toPointF() - dd->controlOffset();
- else if (v.userType() == QMetaType::QRect)
- v = v.toRect().translated(-dd->controlOffset().toPoint());
- else if (v.userType() == QMetaType::QPoint)
- v = v.toPoint() - dd->controlOffset().toPoint();
+ if (dd->control) {
+ if (v.userType() == QMetaType::QRectF)
+ v = v.toRectF().translated(-dd->controlOffset());
+ else if (v.userType() == QMetaType::QPointF)
+ v = v.toPointF() - dd->controlOffset();
+ else if (v.userType() == QMetaType::QRect)
+ v = v.toRect().translated(-dd->controlOffset().toPoint());
+ else if (v.userType() == QMetaType::QPoint)
+ v = v.toPoint() - dd->controlOffset().toPoint();
+ }
return v;
}
diff --git a/src/widgets/itemviews/qabstractitemdelegate.cpp b/src/widgets/itemviews/qabstractitemdelegate.cpp
index 3b2d1a80ff..f675092bd0 100644
--- a/src/widgets/itemviews/qabstractitemdelegate.cpp
+++ b/src/widgets/itemviews/qabstractitemdelegate.cpp
@@ -369,10 +369,12 @@ bool QAbstractItemDelegate::helpEvent(QHelpEvent *event,
{
if (!event || !view)
return false;
- Q_D(QAbstractItemDelegate);
+ Q_UNUSED(index);
+ Q_UNUSED(option);
switch (event->type()) {
#if QT_CONFIG(tooltip)
case QEvent::ToolTip: {
+ Q_D(QAbstractItemDelegate);
QHelpEvent *he = static_cast<QHelpEvent*>(event);
const int precision = inherits("QItemDelegate") ? 10 : 6; // keep in sync with DBL_DIG in qitemdelegate.cpp
const QString tooltip = index.isValid() ?
@@ -393,6 +395,7 @@ bool QAbstractItemDelegate::helpEvent(QHelpEvent *event,
event->setAccepted(index.data(Qt::WhatsThisRole).isValid());
break;
case QEvent::WhatsThis: {
+ Q_D(QAbstractItemDelegate);
QHelpEvent *he = static_cast<QHelpEvent*>(event);
const int precision = inherits("QItemDelegate") ? 10 : 6; // keep in sync with DBL_DIG in qitemdelegate.cpp
const QString whatsthis = index.isValid() ?
@@ -403,6 +406,7 @@ bool QAbstractItemDelegate::helpEvent(QHelpEvent *event,
break;
}
#endif
+ case QEvent::None:
default:
break;
}
diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp
index ce7b98d780..35bc2aac9b 100644
--- a/src/widgets/itemviews/qlistview.cpp
+++ b/src/widgets/itemviews/qlistview.cpp
@@ -1791,7 +1791,7 @@ void QListViewPrivate::prepareItemsLayout()
// maximumViewportSize() already takes scrollbar into account if policy is
// Qt::ScrollBarAlwaysOn but scrollbar extent must be deduced if policy
// is Qt::ScrollBarAsNeeded
- int verticalMargin = vbarpolicy==Qt::ScrollBarAsNeeded
+ int verticalMargin = (vbarpolicy == Qt::ScrollBarAsNeeded) && (flow == QListView::LeftToRight || vbar->isVisible())
? q->style()->pixelMetric(QStyle::PM_ScrollBarExtent, nullptr, vbar) + frameAroundContents
: 0;
int horizontalMargin = hbarpolicy==Qt::ScrollBarAsNeeded
diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp
index c0b0ee4f2d..49585d8b26 100644
--- a/src/widgets/itemviews/qtreeview.cpp
+++ b/src/widgets/itemviews/qtreeview.cpp
@@ -1486,7 +1486,8 @@ void QTreeViewPrivate::adjustViewOptionsForIndex(QStyleOptionViewItem *option, c
void QTreeView::drawTree(QPainter *painter, const QRegion &region) const
{
Q_D(const QTreeView);
- const QList<QTreeViewItem> viewItems = d->viewItems;
+ // d->viewItems changes when posted layouts are executed in itemDecorationAt, so don't copy
+ const QList<QTreeViewItem> &viewItems = d->viewItems;
QStyleOptionViewItem option;
initViewItemOption(&option);
@@ -3484,6 +3485,7 @@ int QTreeViewPrivate::indentationForItem(int item) const
int QTreeViewPrivate::itemHeight(int item) const
{
+ Q_ASSERT(item < viewItems.count());
if (uniformRowHeights)
return defaultItemHeight;
if (viewItems.isEmpty())
diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp
index 12b39f3541..e1f7da6fcd 100644
--- a/src/widgets/itemviews/qtreewidget.cpp
+++ b/src/widgets/itemviews/qtreewidget.cpp
@@ -506,22 +506,18 @@ bool QTreeModel::insertColumns(int column, int count, const QModelIndex &parent)
bool QTreeModel::removeRows(int row, int count, const QModelIndex &parent) {
if (count < 1 || row < 0 || (row + count) > rowCount(parent))
return false;
-
- beginRemoveRows(parent, row, row + count - 1);
-
- QSignalBlocker blocker(this);
-
- QTreeWidgetItem *itm = item(parent);
+ QTreeWidgetItem *parentItem = item(parent);
+ // if parentItem is valid, begin/end RemoveRows is handled by takeChild below
+ if (!parentItem)
+ beginRemoveRows(parent, row, row + count - 1);
for (int i = row + count - 1; i >= row; --i) {
- QTreeWidgetItem *child = itm ? itm->takeChild(i) : rootItem->children.takeAt(i);
+ QTreeWidgetItem *child = parentItem ? parentItem->takeChild(i) : rootItem->children.takeAt(i);
Q_ASSERT(child);
child->view = nullptr;
delete child;
- child = nullptr;
}
- blocker.unblock();
-
- endRemoveRows();
+ if (!parentItem)
+ endRemoveRows();
return true;
}
diff --git a/src/widgets/kernel/qgridlayout.cpp b/src/widgets/kernel/qgridlayout.cpp
index 121bae0352..336a68cd80 100644
--- a/src/widgets/kernel/qgridlayout.cpp
+++ b/src/widgets/kernel/qgridlayout.cpp
@@ -149,14 +149,14 @@ public:
QRect cellRect(int row, int col) const;
inline QLayoutItem *itemAt(int index) const {
- if (index < things.count())
+ if (index >= 0 && index < things.count())
return things.at(index)->item();
else
return nullptr;
}
inline QLayoutItem *takeAt(int index) {
Q_Q(QGridLayout);
- if (index < things.count()) {
+ if (index >= 0 && index < things.count()) {
if (QGridBox *b = things.takeAt(index)) {
QLayoutItem *item = b->takeItem();
if (QLayout *l = item->layout()) {
@@ -184,7 +184,7 @@ public:
}
void getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const {
- if (index < things.count()) {
+ if (index >= 0 && index < things.count()) {
const QGridBox *b = things.at(index);
int toRow = b->toRow(rr);
int toCol = b->toCol(cc);
diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp
index db7aa1aaeb..05e3a97ed3 100644
--- a/src/widgets/kernel/qlayout.cpp
+++ b/src/widgets/kernel/qlayout.cpp
@@ -1320,6 +1320,11 @@ QRect QLayout::alignmentRect(const QRect &r) const
*/
void QLayout::removeWidget(QWidget *widget)
{
+ if (Q_UNLIKELY(!widget)) {
+ qWarning("QLayout::removeWidget: Cannot remove a null widget.");
+ return;
+ }
+
int i = 0;
QLayoutItem *child;
while ((child = itemAt(i))) {
diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp
index 8e7005fafa..d6197542c6 100644
--- a/src/widgets/styles/qfusionstyle.cpp
+++ b/src/widgets/styles/qfusionstyle.cpp
@@ -1723,12 +1723,13 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
font.setBold(true);
p->setFont(font);
- const QString textToDraw = s.left(t).toString();
+ QString textToDraw = s.left(t).toString();
if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) {
p->setPen(menuitem->palette.light().color());
p->drawText(vTextRect.adjusted(1, 1, 1, 1), text_flags, textToDraw);
p->setPen(discol);
}
+ textToDraw = menuitem->fontMetrics.elidedText(textToDraw, Qt::ElideMiddle, vTextRect.width());
p->drawText(vTextRect, text_flags, textToDraw);
p->restore();
}
diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp
index e7662ba5c6..315e2dcc0c 100644
--- a/src/widgets/styles/qstylesheetstyle.cpp
+++ b/src/widgets/styles/qstylesheetstyle.cpp
@@ -60,6 +60,7 @@
#if QT_CONFIG(textedit)
#include <qtextedit.h>
#endif
+#include <qplaintextedit.h>
#include <private/qwindowsstyle_p.h>
#if QT_CONFIG(combobox)
#include <qcombobox.h>
@@ -2106,6 +2107,9 @@ QRenderRule QStyleSheetStyle::renderRule(const QObject *obj, const QStyleOption
}
#endif
+ else if (const QPlainTextEdit *edit = qobject_cast<const QPlainTextEdit *>(obj)) {
+ extraClass |= (edit->isReadOnly() ? PseudoClass_ReadOnly : PseudoClass_Editable);
+ }
#if QT_CONFIG(textedit)
else if (const QTextEdit *edit = qobject_cast<const QTextEdit *>(obj)) {
extraClass |= (edit->isReadOnly() ? PseudoClass_ReadOnly : PseudoClass_Editable);
@@ -2541,7 +2545,9 @@ static quint64 extendedPseudoClass(const QWidget *w)
pc |= (edit->isReadOnly() ? PseudoClass_ReadOnly : PseudoClass_Editable);
} else
#endif
- { } // required for the above ifdef'ery to work
+ if (const QPlainTextEdit *edit = qobject_cast<const QPlainTextEdit *>(w)) {
+ pc |= (edit->isReadOnly() ? PseudoClass_ReadOnly : PseudoClass_Editable);
+ }
return pc;
}
@@ -3542,7 +3548,8 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
if (btn->features & QStyleOptionButton::HasMenu) {
QRenderRule subRule = renderRule(w, opt, PseudoElement_PushButtonMenuIndicator);
- QRect ir = positionRect(w, rule, subRule, PseudoElement_PushButtonMenuIndicator, opt->rect, opt->direction);
+ QRect ir = positionRect(w, rule, subRule, PseudoElement_PushButtonMenuIndicator,
+ baseStyle()->subElementRect(SE_PushButtonBevel, btn, w), opt->direction);
if (subRule.hasDrawable()) {
subRule.drawRule(p, ir);
} else {
@@ -3569,8 +3576,8 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
const uint horizontalAlignMask = Qt::AlignHCenter | Qt::AlignLeft | Qt::AlignRight;
const uint verticalAlignMask = Qt::AlignVCenter | Qt::AlignTop | Qt::AlignBottom;
- const Qt::Alignment textAlignment = rule.position()->textAlignment;
- if (rule.hasPosition() && textAlignment != 0) {
+ if (rule.hasPosition() && rule.position()->textAlignment != 0) {
+ Qt::Alignment textAlignment = rule.position()->textAlignment;
tf |= (textAlignment & verticalAlignMask) ? (textAlignment & verticalAlignMask) : Qt::AlignVCenter;
tf |= (textAlignment & horizontalAlignMask) ? (textAlignment & horizontalAlignMask) : Qt::AlignHCenter;
if (!styleHint(SH_UnderlineShortcut, button, w))
@@ -3629,8 +3636,6 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
iconRect.translate(pixelMetric(PM_ButtonShiftHorizontal, opt, w),
pixelMetric(PM_ButtonShiftVertical, opt, w));
p->drawPixmap(iconRect, pixmap);
- }else {
- tf |= textAlignment;
}
if (button->state & (State_On | State_Sunken))
@@ -3789,10 +3794,10 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
QRect pmr(0, 0, pixw, pixh);
pmr.moveCenter(iconRect.center());
p->drawPixmap(pmr.topLeft(), pixmap);
- } else if (checkable) {
+ } else if (mi.menuHasCheckableItems) {
QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
const QRect cmRect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
- if (subSubRule.hasDrawable() || checked) {
+ if (checkable && (subSubRule.hasDrawable() || checked)) {
QStyleOptionMenuItem newMi = mi;
if (!dis)
newMi.state |= State_Enabled;
@@ -5857,6 +5862,13 @@ QRect QStyleSheetStyle::subElementRect(SubElement se, const QStyleOption *opt, c
case SE_PushButtonBevel:
case SE_PushButtonFocusRect:
if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
+ if (btn->features & QStyleOptionButton::HasMenu
+ && hasStyleRule(w, PseudoElement_PushButtonMenuIndicator)) {
+ QStyleOptionButton btnOpt(*btn);
+ btnOpt.features &= ~QStyleOptionButton::HasMenu;
+ return rule.baseStyleCanDraw() ? baseStyle()->subElementRect(se, &btnOpt, w)
+ : QWindowsStyle::subElementRect(se, &btnOpt, w);
+ }
if (rule.hasBox() || !rule.hasNativeBorder()) {
return visualRect(opt->direction, opt->rect, se == SE_PushButtonBevel
? rule.borderRect(opt->rect)
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index 65017be384..0194b7bf52 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -3028,8 +3028,10 @@ void QComboBox::paintEvent(QPaintEvent *)
initStyleOption(&opt);
painter.drawComplexControl(QStyle::CC_ComboBox, opt);
- if (currentIndex() < 0)
- opt.palette.setBrush(QPalette::ButtonText, opt.palette.brush(QPalette::ButtonText).color().lighter());
+ if (currentIndex() < 0 && !placeholderText().isEmpty()) {
+ opt.palette.setBrush(QPalette::ButtonText, opt.palette.placeholderText());
+ opt.currentText = placeholderText();
+ }
// draw the icon and text
painter.drawControl(QStyle::CE_ComboBoxLabel, opt);
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp
index 4a877c7596..9643c4db43 100644
--- a/src/widgets/widgets/qlineedit.cpp
+++ b/src/widgets/widgets/qlineedit.cpp
@@ -2073,8 +2073,10 @@ void QLineEdit::paintEvent(QPaintEvent *)
// Asian users see an IM selection text as cursor on candidate
// selection phase of input method, so the ordinary cursor should be
- // invisible if we have a preedit string.
- if (d->cursorVisible && !d->control->isReadOnly())
+ // invisible if we have a preedit string. another condition is when inputmask
+ // isn't empty,we don't need draw cursor,because cursor and character overlaping
+ // area is white.
+ if (d->cursorVisible && !d->control->isReadOnly() && d->control->inputMask().isEmpty())
flags |= QWidgetLineControl::DrawCursor;
d->control->setCursorWidth(style()->pixelMetric(QStyle::PM_TextCursorWidth, &panel));
diff --git a/src/widgets/widgets/qlineedit_p.cpp b/src/widgets/widgets/qlineedit_p.cpp
index 1839941036..4143b848b5 100644
--- a/src/widgets/widgets/qlineedit_p.cpp
+++ b/src/widgets/widgets/qlineedit_p.cpp
@@ -479,7 +479,7 @@ void QLineEditPrivate::_q_clearButtonClicked()
Q_Q(QLineEdit);
if (!q->text().isEmpty()) {
q->clear();
- emit q->textEdited(QString());
+ _q_textEdited(QString());
}
}
diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp
index 1b61868868..89d77574f0 100644
--- a/src/widgets/widgets/qmdisubwindow.cpp
+++ b/src/widgets/widgets/qmdisubwindow.cpp
@@ -399,7 +399,7 @@ ControlLabel::ControlLabel(QMdiSubWindow *subWindow, QWidget *parent)
Q_UNUSED(subWindow);
setFocusPolicy(Qt::NoFocus);
updateWindowIcon();
- setFixedSize(label.size());
+ setFixedSize(label.size() / label.devicePixelRatio());
}
/*
@@ -407,7 +407,7 @@ ControlLabel::ControlLabel(QMdiSubWindow *subWindow, QWidget *parent)
*/
QSize ControlLabel::sizeHint() const
{
- return label.size();
+ return label.size() / label.devicePixelRatio();
}
/*
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index d704aac525..838a29f39e 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -2228,7 +2228,7 @@ void QMenu::setActiveAction(QAction *act)
{
Q_D(QMenu);
d->setCurrentAction(act, 0);
- if (d->scroll)
+ if (d->scroll && act)
d->scrollMenu(act, QMenuPrivate::QMenuScroller::ScrollCenter);
}
diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp
index 00fe383e1d..d2006d0562 100644
--- a/src/widgets/widgets/qplaintextedit.cpp
+++ b/src/widgets/widgets/qplaintextedit.cpp
@@ -962,7 +962,7 @@ void QPlainTextEditPrivate::pageUpDown(QTextCursor::MoveOperation op, QTextCurso
}
if (moveCursor) {
- control->setTextCursor(cursor);
+ control->setTextCursor(cursor, moveMode == QTextCursor::KeepAnchor);
pageUpDownLastCursorYIsValid = true;
}
}
@@ -2306,6 +2306,7 @@ void QPlainTextEdit::showEvent(QShowEvent *)
d->showCursorOnInitialShow = false;
ensureCursorVisible();
}
+ d->_q_adjustScrollbars();
}
/*! \reimp
diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp
index 50d7a62c50..8d3d472882 100644
--- a/src/widgets/widgets/qpushbutton.cpp
+++ b/src/widgets/widgets/qpushbutton.cpp
@@ -599,13 +599,6 @@ void QPushButton::showMenu()
d->_q_popupPressed();
}
-void QPushButtonPrivate::init()
-{
- Q_Q(QPushButton);
- q->setAttribute(Qt::WA_MacShowFocusRect);
- resetLayoutItemMargins();
-}
-
void QPushButtonPrivate::_q_popupPressed()
{
Q_Q(QPushButton);
@@ -670,6 +663,13 @@ QPoint QPushButtonPrivate::adjustedMenuPosition()
#endif // QT_CONFIG(menu)
+void QPushButtonPrivate::init()
+{
+ Q_Q(QPushButton);
+ q->setAttribute(Qt::WA_MacShowFocusRect);
+ resetLayoutItemMargins();
+}
+
void QPushButtonPrivate::resetLayoutItemMargins()
{
Q_Q(QPushButton);
diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp
index 946839c373..be9ec0a580 100644
--- a/src/widgets/widgets/qsizegrip.cpp
+++ b/src/widgets/widgets/qsizegrip.cpp
@@ -268,6 +268,18 @@ static Qt::Edges edgesFromCorner(Qt::Corner corner)
return Qt::Edges{};
}
+static bool usePlatformSizeGrip(const QWidget *tlw)
+{
+ const QString &platformName = QGuiApplication::platformName();
+ if (platformName.contains(u"xcb")) // ### FIXME QTBUG-69716
+ return false;
+ if (tlw->testAttribute(Qt::WA_TranslucentBackground)
+ && platformName == u"windows") {
+ return false; // QTBUG-90628, flicker when using translucency
+ }
+ return true;
+}
+
void QSizeGrip::mousePressEvent(QMouseEvent * e)
{
if (e->button() != Qt::LeftButton) {
@@ -287,11 +299,11 @@ void QSizeGrip::mousePressEvent(QMouseEvent * e)
&& tlw->windowHandle()
&& !(tlw->windowFlags() & Qt::X11BypassWindowManagerHint)
&& !tlw->testAttribute(Qt::WA_DontShowOnScreen)
- && !tlw->hasHeightForWidth()) {
+ && !tlw->hasHeightForWidth()
+ && usePlatformSizeGrip(tlw)) {
QPlatformWindow *platformWindow = tlw->windowHandle()->handle();
const Qt::Edges edges = edgesFromCorner(d->m_corner);
- if (!QGuiApplication::platformName().contains(QStringLiteral("xcb"))) // ### FIXME QTBUG-69716
- d->m_platformSizeGrip = platformWindow && platformWindow->startSystemResize(edges);
+ d->m_platformSizeGrip = platformWindow->startSystemResize(edges);
}
if (d->m_platformSizeGrip)
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp
index 3cc672fac2..5d7f36683e 100644
--- a/src/widgets/widgets/qtextedit.cpp
+++ b/src/widgets/widgets/qtextedit.cpp
@@ -270,7 +270,7 @@ void QTextEditPrivate::pageUpDown(QTextCursor::MoveOperation op, QTextCursor::Mo
vbar->triggerAction(QAbstractSlider::SliderPageStepAdd);
}
}
- control->setTextCursor(cursor);
+ control->setTextCursor(cursor, moveMode == QTextCursor::KeepAnchor);
}
#if QT_CONFIG(scrollbar)
diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp
index 29ac32cadc..77c62b106b 100644
--- a/src/widgets/widgets/qwidgetlinecontrol.cpp
+++ b/src/widgets/widgets/qwidgetlinecontrol.cpp
@@ -1944,10 +1944,15 @@ void QWidgetLineControl::processKeyEvent(QKeyEvent* event)
return;
}
- if (unknown)
+ if (unknown) {
event->ignore();
- else
+ } else {
+#ifndef QT_NO_CLIPBOARD
+ if (QApplication::clipboard()->supportsSelection())
+ copy(QClipboard::Selection);
+#endif
event->accept();
+ }
}
bool QWidgetLineControl::isUndoAvailable() const
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index 9fe6e3e1e3..5f307328a4 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -923,7 +923,7 @@ QTextDocument *QWidgetTextControl::document() const
return d->doc;
}
-void QWidgetTextControl::setTextCursor(const QTextCursor &cursor)
+void QWidgetTextControl::setTextCursor(const QTextCursor &cursor, bool selectionClipboard)
{
Q_D(QWidgetTextControl);
d->cursorIsFocusIndicator = false;
@@ -937,6 +937,11 @@ void QWidgetTextControl::setTextCursor(const QTextCursor &cursor)
d->repaintOldAndNewSelection(oldSelection);
if (posChanged)
emit cursorPositionChanged();
+
+#ifndef QT_NO_CLIPBOARD
+ if (selectionClipboard)
+ d->setClipboardSelection();
+#endif
}
QTextCursor QWidgetTextControl::textCursor() const
@@ -1226,6 +1231,9 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e)
if (e == QKeySequence::SelectAll) {
e->accept();
q->selectAll();
+#ifndef QT_NO_CLIPBOARD
+ setClipboardSelection();
+#endif
return;
}
#ifndef QT_NO_CLIPBOARD
@@ -1274,7 +1282,7 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e)
// example)
repaintSelection();
- if (e->key() == Qt::Key_Backspace && !(e->modifiers() & ~Qt::ShiftModifier)) {
+ if (e->key() == Qt::Key_Backspace && !(e->modifiers() & ~(Qt::ShiftModifier | Qt::GroupSwitchModifier))) {
QTextBlockFormat blockFmt = cursor.blockFormat();
QTextList *list = cursor.currentList();
if (list && cursor.atBlockStart() && !cursor.hasSelection()) {
@@ -1377,6 +1385,10 @@ process:
accept:
+#ifndef QT_NO_CLIPBOARD
+ setClipboardSelection();
+#endif
+
e->accept();
cursorOn = true;
diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h
index 54cb136621..54428e542b 100644
--- a/src/widgets/widgets/qwidgettextcontrol_p.h
+++ b/src/widgets/widgets/qwidgettextcontrol_p.h
@@ -105,7 +105,7 @@ public:
void setDocument(QTextDocument *document);
QTextDocument *document() const;
- void setTextCursor(const QTextCursor &cursor);
+ void setTextCursor(const QTextCursor &cursor, bool selectionClipboard = false);
QTextCursor textCursor() const;
void setTextInteractionFlags(Qt::TextInteractionFlags flags);