From 26272901b9b6d07ea8813e9f5e1383fbc404f522 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 23 Feb 2021 14:22:38 +0100 Subject: Add null pointer check The detailsText widget might be nullptr even if detailsButton is not. Both are tested elsewhere in code, e.g. in the _q_buttonClicked private slot, so be consistent. Address static analyzer warning 00b85157447772462c3b8ffc1da0ae3a Pick-to: 6.1 Change-Id: Ib8c31b79653a6e8a9011692cb84ffaa2fb8047e7 Reviewed-by: Oliver Eftevaag Reviewed-by: Richard Moe Gustavsen (cherry picked from commit 88d830929015e085a5532948170bebcdede98bb8) Reviewed-by: Volker Hilsheimer --- src/widgets/dialogs/qmessagebox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp index 4b7b511fbc..19f581767a 100644 --- a/src/widgets/dialogs/qmessagebox.cpp +++ b/src/widgets/dialogs/qmessagebox.cpp @@ -2046,7 +2046,7 @@ int QMessageBoxPrivate::showOldMessageBox(QWidget *parent, QMessageBox::Icon ico void QMessageBoxPrivate::retranslateStrings() { #if QT_CONFIG(textedit) - if (detailsButton) + if (detailsButton && detailsText) detailsButton->setLabel(detailsText->isHidden() ? ShowLabel : HideLabel); #endif } -- cgit v1.2.3 From 70a3fc07bb292c898dc18f49ba363f41f2c0f721 Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Thu, 11 Mar 2021 16:04:50 +0100 Subject: Minor robustness improvement of text code Fix a potential issue reported by static analysis Pick-to: 6.1 Change-Id: I41b8eaa3c0840eec054e880c4f3298ee32685b46 Reviewed-by: Konstantin Ritt (cherry picked from commit 9fa181446c446d315c592fa46acf7877d281fc65) Reviewed-by: Eirik Aavitsland --- src/gui/text/qtextdocumentwriter.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qtextdocumentwriter.cpp b/src/gui/text/qtextdocumentwriter.cpp index afe3574cdb..f01eda3018 100644 --- a/src/gui/text/qtextdocumentwriter.cpp +++ b/src/gui/text/qtextdocumentwriter.cpp @@ -249,9 +249,11 @@ QString QTextDocumentWriter::fileName () const */ bool QTextDocumentWriter::write(const QTextDocument *document) { - QByteArray suffix; + if (!d->device) + return false; - if (d->device && d->format.isEmpty()) { + QByteArray suffix; + if (d->format.isEmpty()) { // if there's no format, see if device is a file, and if so, find // the file suffix if (QFile *file = qobject_cast(d->device)) -- cgit v1.2.3 From 94ce755dcd823678b0338f4bb4149fe4eeb844c2 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Mon, 8 Feb 2021 12:13:13 +0100 Subject: Fix handling of surrogates in QBidiAlgorithm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prior code was naively assuming the character after a high surrogate would necessarily be a low surrogate, which is buggy. Fixes oss-fuzz issue 29718. Change-Id: I10f023c4b5024a0d76fea0a3672001063591ec6d Reviewed-by: Konstantin Ritt Reviewed-by: Robert Löhning Reviewed-by: Lars Knoll (cherry picked from commit aeeaab1a5ac0b4d91c9f9b542035b8970e4c61dd) --- src/gui/text/qtextengine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 5161323167..faf269f7c2 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -258,7 +258,7 @@ struct QBidiAlgorithm { for (int i = 0; i < length; ++i) { int pos = i; uint 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()); -- cgit v1.2.3 From ce13ba4f04f167f874d96844a42f371e48c4cdd7 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 19 Apr 2021 17:01:05 +0200 Subject: Fix ARM and MIPS runtime CPU feature flags The set values didn't match tested values, as the enum were already on flag form. Pick-to: 6.1 6.0 5.15 Change-Id: I9e8b0d419682122e8d40cd47bd68d840386c2066 Reviewed-by: Lars Knoll --- src/corelib/tools/qsimd.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index 0412a2693b..4bab186e58 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/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; @@ -505,18 +505,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 -- cgit v1.2.3 From 080f0362593786ac547ad8e499565a322f40b0b3 Mon Sep 17 00:00:00 2001 From: Doris Verria Date: Thu, 25 Mar 2021 13:34:41 +0100 Subject: Re-add horizontal offsets around QPushButton Change c6379e34993370e7e2208b51be384b738ce35817 removed the horizontal space around QPushButton for consistency with other widgets. To not break existing layouts that expect the extra space around the button re-add those offsets and fix the SE_PushButtonLayoutItem accordingly. Fixes: QTBUG-91892 Change-Id: Iad1a28cd3f974adc8ab8e75f7d90cc8508d5a3b4 Reviewed-by: Timur Pocheptsov --- src/plugins/styles/mac/qmacstyle_mac.mm | 65 +++++++-------------------------- 1 file changed, 13 insertions(+), 52 deletions(-) diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm index 9a263714a9..8c159e4107 100644 --- a/src/plugins/styles/mac/qmacstyle_mac.mm +++ b/src/plugins/styles/mac/qmacstyle_mac.mm @@ -195,10 +195,6 @@ const int QMacStylePrivate::PushButtonLeftOffset = 6; const int QMacStylePrivate::PushButtonRightOffset = 12; const int QMacStylePrivate::PushButtonContentPadding = 6; -const int pushButtonBevelRectOffsets[3] = { - QMacStylePrivate::PushButtonLeftOffset, 5, 5 -}; - QVector > QMacStylePrivate::scrollBars; // Title bar gradient colors for Lion were determined by inspecting PSDs exported @@ -1247,7 +1243,7 @@ void QMacStylePrivate::drawFocusRing(QPainter *p, const QRectF &targetRect, int } case Button_PopupButton: case SegmentedControl_Single: { - const qreal innerRadius = cw.type == Button_PushButton ? 3 : 4; + const qreal innerRadius = 4; const qreal outerRadius = innerRadius + focusRingWidth; hOffset = targetRect.left(); vOffset = targetRect.top(); @@ -1603,8 +1599,7 @@ QRectF QMacStylePrivate::CocoaControl::adjustedControlFrame(const QRectF &rect) const auto frameSize = defaultFrameSize(); if (type == QMacStylePrivate::Button_SquareButton) { frameRect = rect.adjusted(3, 1, -3, -1) - .adjusted(focusRingWidth, focusRingWidth, -focusRingWidth, -focusRingWidth) - .adjusted(-6.5, 0, 6.5, 0); + .adjusted(focusRingWidth, focusRingWidth, -focusRingWidth, -focusRingWidth); } else if (type == QMacStylePrivate::Button_PushButton) { // Start from the style option's top-left corner. frameRect = QRectF(rect.topLeft(), @@ -1613,8 +1608,6 @@ QRectF QMacStylePrivate::CocoaControl::adjustedControlFrame(const QRectF &rect) frameRect = frameRect.translated(0, 1.5); else if (size == QStyleHelper::SizeMini) frameRect = frameRect.adjusted(0, 0, -8, 0).translated(4, 4); - frameRect = frameRect.adjusted(-pushButtonBevelRectOffsets[size], 0, - pushButtonBevelRectOffsets[size], 0); } else { // Center in the style option's rect. frameRect = QRectF(QPointF(0, (rect.height() - frameSize.height()) / 2.0), @@ -1627,9 +1620,6 @@ QRectF QMacStylePrivate::CocoaControl::adjustedControlFrame(const QRectF &rect) frameRect = frameRect.adjusted(0, 0, -4, 0).translated(2, 1); else if (size == QStyleHelper::SizeMini) frameRect = frameRect.adjusted(0, 0, -9, 0).translated(5, 0); - if (type == QMacStylePrivate::Button_PullDown) - frameRect = frameRect.adjusted(-pushButtonBevelRectOffsets[size], 0, - pushButtonBevelRectOffsets[size], 0); } else if (type == QMacStylePrivate::ComboBox) { frameRect = frameRect.adjusted(0, 0, -6, 0).translated(4, 0); } @@ -3791,11 +3781,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter QRect textRect = itemTextRect( btn.fontMetrics, freeContentRect, Qt::AlignCenter, isEnabled, btn.text); if (hasMenu) { - if (ct == QMacStylePrivate::Button_SquareButton) - textRect.moveTo(w ? 8 : 11, textRect.top()); - else - textRect.moveTo(w ? (15 - pushButtonBevelRectOffsets[d->effectiveAquaSizeConstrain(b, w)]) - : 11, textRect.top()); // Supports Qt Quick Controls + textRect.moveTo(w ? 15 : 11, textRect.top()); // Supports Qt Quick Controls } // Draw the icon: if (hasIcon) { @@ -4943,24 +4929,14 @@ QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt, = qstyleoption_cast(opt)) { if ((buttonOpt->features & QStyleOptionButton::Flat)) break; // leave rect alone - if ((buttonOpt->features & QStyleOptionButton::CommandLinkButton)) { - rect = opt->rect; - if (controlSize == QStyleHelper::SizeLarge) - rect.adjust(+6, +4, -6, -8); - else if (controlSize == QStyleHelper::SizeSmall) - rect.adjust(+5, +4, -5, -6); - else - rect.adjust(+1, 0, -1, -2); - break; - } } rect = opt->rect; if (controlSize == QStyleHelper::SizeLarge) { - rect.adjust(0, +4, 0, -8); + rect.adjust(+6, +4, -6, -8); } else if (controlSize == QStyleHelper::SizeSmall) { - rect.adjust(0, +4, 0, -6); + rect.adjust(+5, +4, -5, -6); } else { - rect.adjust(0, 0, 0, -2); + rect.adjust(+1, 0, -1, -2); } break; case SE_RadioButtonLayoutItem: @@ -6389,12 +6365,9 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, break; #endif case QStyle::CT_PushButton: { - bool isFlat = false; - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { +if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) if (btn->features & QStyleOptionButton::CommandLinkButton) return QCommonStyle::sizeFromContents(ct, opt, sz, widget); - isFlat = btn->features & QStyleOptionButton::Flat; - } // By default, we fit the contents inside a normal rounded push button. // Do this by add enough space around the contents so that rounded @@ -6409,24 +6382,12 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, // All values as measured from HIThemeGetButtonBackgroundBounds() if (controlSize != QStyleHelper::SizeMini) sz.rwidth() += 12; // We like 12 over here. - - if (controlSize == QStyleHelper::SizeLarge) { - if (!isFlat) - sz.rwidth() -= 12; - if (sz.height() > 16) - sz.rheight() += pushButtonDefaultHeight[QStyleHelper::SizeLarge] - 16; - else - sz.setHeight(pushButtonDefaultHeight[QStyleHelper::SizeLarge]); - } else { - if (!isFlat) - sz.rwidth() -= 10; - if (controlSize == QStyleHelper::SizeMini) - sz.setHeight(24); - else - sz.setHeight(pushButtonDefaultHeight[QStyleHelper::SizeSmall]); - } - if (isFlat) - sz.rwidth() -= 13; + if (controlSize == QStyleHelper::SizeLarge && sz.height() > 16) + sz.rheight() += pushButtonDefaultHeight[QStyleHelper::SizeLarge] - 16; + else if (controlSize == QStyleHelper::SizeMini) + sz.setHeight(24); // FIXME Our previous HITheme-based logic returned this. + else + sz.setHeight(pushButtonDefaultHeight[controlSize]); break; } case QStyle::CT_MenuItem: -- cgit v1.2.3 From c4cc615b4d30a08999659ca63ac2f50d59bc72f7 Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Thu, 15 Apr 2021 20:33:35 +0200 Subject: Fix prl generation with static dependencies take 2 In the case of mulit-config we did install module pri files with the build path, which resulted in builds which uses those modules as dependencies in incorrect prl files containing also build paths. Use sed to correct pri files on install for debug and release builds also. Pick-to: 5.15.4 Task-number: QTBUG-91385 Change-Id: I3d78025acde4fa27977b9ab9ae0bf1d8e678e393 Reviewed-by: Joerg Bornemann --- mkspecs/features/qt_helper_lib.prf | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mkspecs/features/qt_helper_lib.prf b/mkspecs/features/qt_helper_lib.prf index 964e256ee0..2d67a30fb7 100644 --- a/mkspecs/features/qt_helper_lib.prf +++ b/mkspecs/features/qt_helper_lib.prf @@ -116,5 +116,22 @@ installed|if(!not_installed:qtConfig(static)) { pri_lib_replace.CONFIG = path pri_lib_replace.filename = qt_ext_$${MODULE}.pri QMAKE_INSTALL_REPLACE += pri_header_replace pri_lib_replace + if(msvc|qtConfig(debug_and_release)): { + rpl_lib_target = $$prefix$${TARGET}.$$suffix + pri_lib_release_replace.match = $$DESTDIR/$${rpl_lib_target} + pri_lib_release_replace.replace = $$qqt_dir/$${rpl_lib_target} + pri_lib_release_replace.CONFIG = path + pri_lib_release_replace.filename = qt_ext_$${MODULE}.pri + QMAKE_INSTALL_REPLACE += pri_lib_release_replace + win32: \ + rpl_lib_target = $$prefix$${TARGET}d.$$suffix + else: darwin: \ + rpl_lib_target = $$prefix$${TARGET}_debug.$$suffix + pri_lib_debug_replace.match = $$DESTDIR/$${rpl_lib_target} + pri_lib_debug_replace.replace = $$qqt_dir/$${rpl_lib_target} + pri_lib_debug_replace.CONFIG = path + pri_lib_debug_replace.filename = qt_ext_$${MODULE}.pri + QMAKE_INSTALL_REPLACE += pri_lib_debug_replace + } load(qt_installs) } -- cgit v1.2.3 From d2068a8108c9ba0168c6f107d2e000c40bd23bdf Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Mon, 12 Apr 2021 13:14:52 +0400 Subject: Read DPI from X Settings initially as well MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, Xft.dpi from X Resources is read initially, while changes are monitored for Xft/DPI from X Settings. These protocols are different and can have different values. E.g. MATE sets X Resources' Xft.dpi to 96.30859375, while X Settings' Xft/DPI is set to 197240 at 2x scale. This results in a very weird bug when Qt can't determine 2x scale initially, but if scale is changed at run time, Qt changes scale to the right value. The difference could be checked via xrdb -query and dump_xsettings (the second is from xsettingsd project). [ChangeLog] Qt now reads Xft/DPI from X settings at startup, and will prefer this value over Xft.dpi from X resources. Change-Id: If6adac0c88198579332ddebc673f1524f324c0e4 Reviewed-by: Morten Johan Sørvig (cherry picked from commit 6560778616b090f8cc73700675ec2ef385953fb6) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/xcb/qxcbscreen.cpp | 23 ++++++++++++++++------- src/plugins/platforms/xcb/qxcbscreen.h | 2 ++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index bf77e8f663..2957636129 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 2935cb72f9..c1dc4820be 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.h +++ b/src/plugins/platforms/xcb/qxcbscreen.h @@ -118,6 +118,8 @@ private: QByteArray &stringValue); void readXResources(); + bool setDpiFromXSettings(const QVariant &property); + xcb_screen_t *m_screen; const int m_number; QList m_screens; -- cgit v1.2.3 From 6c4e0e78b6d316df2c0b5897e19a4fac991c2efe Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 22 Sep 2020 07:09:38 -0700 Subject: QFile::copy: call syncToDisk on destination Syncing the source makes no sense. Fixes: QTBUG-86806 Change-Id: I0d3ff441bec041728945fffd1637205d9cf6ab72 Reviewed-by: Lars Knoll (cherry picked from commit ad9108e2e96ebf67147a72a7dab00398ff637695) Reviewed-by: Volker Hilsheimer --- src/corelib/io/qfile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index f4cce8e034..6bc66c9c8e 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -910,7 +910,7 @@ QFile::copy(const QString &newName) if (!error) { // Sync to disk if possible. Ignore errors (e.g. not supported). - d->fileEngine->syncToDisk(); + out.d_func()->fileEngine->syncToDisk(); if (!out.rename(newName)) { error = true; -- cgit v1.2.3 From 4903adbd442adff48eea1c7c8c0440a1130a0722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Thu, 15 Apr 2021 17:31:23 +0200 Subject: QNetworkDiskCache: Drop the file mmap-ing Presumably the code at some point would do a QByteArray::fromRawData-style thing. But now it doesn't do that so the current code was a bit strange. It would map the content of the file to memory only to then copy the content into a QByteArray. Then it reparents the file to the QBuffer, keeping it alive even if its not needed. Fixes: QTBUG-92838 Change-Id: I88f8cd1b64e0fd13d08b5cc4df44661e216da340 Reviewed-by: Timur Pocheptsov (cherry picked from commit c254d73be63033497838807119cb9cb47ca6c1fa) Reviewed-by: Qt Cherry-pick Bot --- src/network/access/qnetworkdiskcache.cpp | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/network/access/qnetworkdiskcache.cpp b/src/network/access/qnetworkdiskcache.cpp index fadf2e3fe0..066f928ebb 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); -- cgit v1.2.3 From bdd55c9c333fb969171a3cd6667160298bfe3571 Mon Sep 17 00:00:00 2001 From: Tapio Oksa Date: Tue, 16 Mar 2021 11:35:30 +0200 Subject: [Android] Remove signal and slot mechanism to listen states in editors Task-number: QTBUG-58013 Change-Id: I6f78fa327943d8c0a0b71ce6f59e55fe2282aa8d Reviewed-by: Ville Voutilainen --- .../platforms/android/qandroidinputcontext.cpp | 35 +++++++++++++++++----- .../platforms/android/qandroidinputcontext.h | 2 +- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index c7452ef0e4..f6d096b667 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -892,7 +892,34 @@ void QAndroidInputContext::update(Qt::InputMethodQueries queries) QSharedPointer query = focusObjectInputMethodQuery(queries); if (query.isNull()) return; -#warning TODO extract the needed data from query + + if (query->value(Qt::ImCursorPosition).toInt() >= 0 && + query->value(Qt::ImSurroundingText).toString() != nullptr && + query->value(Qt::ImSurroundingText).toString() + .left(query->value(Qt::ImCursorPosition).toInt()).length()>=0) { + // Cursos position should be always valid + // when object is composing + if (focusObjectIsComposing()) + return; + if (m_focusObject->isWidgetType()) + updateCursorPosition(); + else + updateCursorPositionInRange(query); + } +} + +void QAndroidInputContext::updateCursorPositionInRange(const QSharedPointer &query) +{ + QObject *input = qGuiApp->focusObject(); + QList attributes; + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, + query->value(Qt::ImCursorPosition).toInt(), 1)); + + QInputMethodEvent event(QString(), attributes); + QCoreApplication::sendEvent(input, &event); + QtAndroidInput::updateSelection(query->value(Qt::ImCursorPosition).toInt(), + query->value(Qt::ImCursorPosition).toInt(), 0, + query->value(Qt::ImSurroundingText).toString().length()); } void QAndroidInputContext::invokeAction(QInputMethod::Action action, int cursorPosition) @@ -925,12 +952,6 @@ void QAndroidInputContext::showInputPanel() if (query.isNull()) return; - disconnect(m_updateCursorPosConnection); - if (qGuiApp->focusObject()->metaObject()->indexOfSignal("cursorPositionChanged(int,int)") >= 0) // QLineEdit breaks the pattern - m_updateCursorPosConnection = connect(qGuiApp->focusObject(), SIGNAL(cursorPositionChanged(int,int)), this, SLOT(updateCursorPosition())); - else - m_updateCursorPosConnection = connect(qGuiApp->focusObject(), SIGNAL(cursorPositionChanged()), this, SLOT(updateCursorPosition())); - QRect rect = cursorRect(); QtAndroidInput::showSoftwareKeyboard(rect.left(), rect.top(), rect.width(), rect.height(), inputItemRectangle().height(), diff --git a/src/plugins/platforms/android/qandroidinputcontext.h b/src/plugins/platforms/android/qandroidinputcontext.h index 8b3a362343..921364bfa0 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.h +++ b/src/plugins/platforms/android/qandroidinputcontext.h @@ -156,13 +156,13 @@ private: void focusObjectStartComposing(); bool focusObjectStopComposing(); QRect cursorRect(); + void updateCursorPositionInRange(const QSharedPointer &query); private: ExtractedText m_extractedText; QString m_composingText; int m_composingTextStart; int m_composingCursor; - QMetaObject::Connection m_updateCursorPosConnection; HandleModes m_handleMode; int m_batchEditNestingLevel; QObject *m_focusObject; -- cgit v1.2.3 From d648b9fa8a5e1e757b827927d424b9c4346da080 Mon Sep 17 00:00:00 2001 From: Bartlomiej Moskal Date: Tue, 23 Mar 2021 10:08:20 +0100 Subject: Android: fix for isSoftwareKeyboard method isSoftwareKeyboard() method will rely on visibility flag from activityDelegate. In such case it also need to consider that keyboard is during the hiding. Fix the regression related with commit: e6ca200a3a0aecc2313becf959c1be4fe18bdfa1 Before this change Software Keyboard is not showing after changing the focus. It is happening when Keyboard is already visible and focus is changed to widget that also need the keyboard. In such case keyboard is hiding (and NOT showing again). Fixes: QTBUG-92051 Change-Id: I6a5d07b25442429fda6e715d09ea104432c5ef50 Reviewed-by: Rami Potinkara Reviewed-by: Ville Voutilainen (cherry picked from commit e402e1103b874c0bf91a1bc754752ee73ffadf33) Reviewed-by: Assam Boudjelthia --- .../org/qtproject/qt5/android/QtActivityDelegate.java | 9 +++++++-- .../jar/src/org/qtproject/qt5/android/QtNative.java | 17 ++++++++++++++++- .../org/qtproject/qt5/android/bindings/QtActivity.java | 4 ++++ src/plugins/platforms/android/androidjniinput.cpp | 4 +--- src/plugins/platforms/android/qandroidinputcontext.cpp | 3 ++- 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index a15a06a302..98dcd31685 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -190,6 +190,11 @@ public class QtActivityDelegate } } + public boolean isKeyboardVisible() + { + return m_keyboardIsVisible; + } + // input method hints - must be kept in sync with QTDIR/src/corelib/global/qnamespace.h private final int ImhHiddenText = 0x1; private final int ImhSensitiveData = 0x2; @@ -243,7 +248,7 @@ public class QtActivityDelegate if (m_keyboardIsVisible == visibility) return false; m_keyboardIsVisible = visibility; - QtNative.keyboardVisibilityChanged(m_keyboardIsVisible); + QtNative.keyboardVisibilityUpdated(m_keyboardIsVisible); if (visibility == false) updateFullScreen(); // Hiding the keyboard clears the immersive mode, so we need to set it again. @@ -1312,4 +1317,4 @@ public class QtActivityDelegate { QtNative.sendRequestPermissionsResult(requestCode, permissions, grantResults); } -} +} \ No newline at end of file diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index dbd356f7a5..c1210ab5b6 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -97,6 +97,7 @@ public class QtNative public static final String QtTAG = "Qt JAVA"; // string used for Log.x private static ArrayList m_lostActions = new ArrayList(); // a list containing all actions which could not be performed (e.g. the main activity is destroyed, etc.) private static boolean m_started = false; + private static boolean m_isKeyboardHiding = false; private static int m_displayMetricsScreenWidthPixels = 0; private static int m_displayMetricsScreenHeightPixels = 0; private static int m_displayMetricsDesktopWidthPixels = 0; @@ -922,6 +923,7 @@ public class QtNative private static void hideSoftwareKeyboard() { + m_isKeyboardHiding = true; runAction(new Runnable() { @Override public void run() { @@ -944,6 +946,13 @@ public class QtNative }); } + public static boolean isSoftwareKeyboardVisible() + { + if (m_activityDelegate == null) + return false; + return m_activityDelegate.isKeyboardVisible() && !m_isKeyboardHiding; + } + private static void notifyAccessibilityLocationChange() { runAction(new Runnable() { @@ -1308,6 +1317,12 @@ public class QtNative }); } + public static void keyboardVisibilityUpdated(boolean visibility) + { + m_isKeyboardHiding = false; + keyboardVisibilityChanged(visibility); + } + private static String[] listAssetContent(android.content.res.AssetManager asset, String path) { String [] list; ArrayList res = new ArrayList(); @@ -1419,4 +1434,4 @@ public class QtNative // service methods public static native IBinder onBind(Intent intent); // service methods -} +} \ No newline at end of file diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java index b27f03fc7d..bd8849f49b 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java @@ -1141,4 +1141,8 @@ public class QtActivity extends Activity { QtNative.activityDelegate().notifyObjectFocus(viewId); } + public boolean isKeyboardVisible() + { + return QtNative.activityDelegate().isKeyboardVisible(); + } } diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp index 4ab326410b..ba24b8ed4b 100644 --- a/src/plugins/platforms/android/androidjniinput.cpp +++ b/src/plugins/platforms/android/androidjniinput.cpp @@ -59,7 +59,6 @@ using namespace QtAndroid; namespace QtAndroidInput { static bool m_ignoreMouseEvents = false; - static bool m_softwareKeyboardVisible = false; static QRect m_softwareKeyboardRect; static QList m_touchPoints; @@ -115,7 +114,7 @@ namespace QtAndroidInput bool isSoftwareKeyboardVisible() { - return m_softwareKeyboardVisible; + return QJNIObjectPrivate::callStaticMethod(applicationClass(), "isSoftwareKeyboardVisible"); } QRect softwareKeyboardRect() @@ -806,7 +805,6 @@ namespace QtAndroidInput static void keyboardVisibilityChanged(JNIEnv */*env*/, jobject /*thiz*/, jboolean visibility) { - m_softwareKeyboardVisible = visibility; if (!visibility) m_softwareKeyboardRect = QRect(); diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index f6d096b667..4d8e50391b 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -953,7 +953,8 @@ void QAndroidInputContext::showInputPanel() return; QRect rect = cursorRect(); - QtAndroidInput::showSoftwareKeyboard(rect.left(), rect.top(), rect.width(), rect.height(), + if (!isInputPanelVisible()) + QtAndroidInput::showSoftwareKeyboard(rect.left(), rect.top(), rect.width(), rect.height(), inputItemRectangle().height(), query->value(Qt::ImHints).toUInt(), query->value(Qt::ImEnterKeyType).toUInt()); -- cgit v1.2.3 From be0aa6a9a230dc98994cb65d97b76be7ae695a44 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Thu, 15 Apr 2021 14:39:51 +0200 Subject: Unicode: fix the extended grapheme cluster algorithm UAX #29 in Unicode 11 changed the EGC algorithm to its current form. Although Qt has upgraded the Unicode tables all the way up to Unicode 13, the algorithm has never been adapted; in other words, it has been working by chance for years. Luckily, MOST of the cases were dealt with correctly, but emoji handling actually manages to break it. This commit: * Adds parsing of emoji-data.txt into the unicode table generator. That is necessary to extract the Extended_Pictographic property, which is used by the EGC algorithm. * Regenerates the tables. * Removes some obsoleted grapheme cluster break properties, and adds the ones added in the meanwhile. * Rewrites the EGC algorithm according to Unicode 13. This is done by simplifying a lot the lookup table. Some rules (GB11, GB12, GB13) can't be done by the table alone so some hand-rolled code is necessary in that case. * Thanks to these fixes, the complete upstream GraphemeBreakTest now passes. Remove the "edited" version that ignored some rows (because they were failing). Change-Id: Iaa07cb2e6d0ab9deac28397f46d9af189d2edf8b Fixes: QTBUG-92822 Reviewed-by: Thiago Macieira Reviewed-by: Konstantin Ritt (cherry picked from commit a794c5e287381bd056008b20ae55f9b1e0acf138) Reviewed-by: Qt CI Bot Reviewed-by: Lars Knoll --- src/corelib/text/qunicodetables.cpp | 12660 ++++++++++--------- src/corelib/text/qunicodetables_p.h | 5 +- src/corelib/text/qunicodetools.cpp | 181 +- .../qtextboundaryfinder/data/GraphemeBreakTest.txt | 8 +- .../data/GraphemeBreakTest.txt.full | 630 - util/unicode/README | 4 +- util/unicode/data/emoji-data.txt | 1261 ++ util/unicode/main.cpp | 71 +- 8 files changed, 7834 insertions(+), 6986 deletions(-) delete mode 100644 tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt.full create mode 100644 util/unicode/data/emoji-data.txt diff --git a/src/corelib/text/qunicodetables.cpp b/src/corelib/text/qunicodetables.cpp index 45c1238948..4730573d99 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,2009 +893,2004 @@ 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, 426, 426, 426, 426, 426, 426, 426, 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, 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, + + 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, - 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, 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, + + 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, - 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, + 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, - 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, + 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, - 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, + 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, - 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, + 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, - 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, - 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, 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, - 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, + 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, + + 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, - - 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, + 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, - 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, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 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, + + 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, - 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, + 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, - 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, + 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, + 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, - 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, + 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, - 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, + 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, - 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, + 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, - 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, + 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, - 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, + 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, - 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, + 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, 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, - - 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, + 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, 2056, 2056, + 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, + 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, 2057, 2057, 2057, 2057, 2057, 2057, - 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, - - 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, 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, - - 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, 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, - 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, - 2147, 2147, 2147, 2147, 202, 202, 202, 202, + 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, + + 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, - 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, - 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, + 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, 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, 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, 203, 203, 203, 203, 203, 203, 203, + + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, + 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, + 203, 203, 203, 203, 203, 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, + 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, + 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, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, - 2736, 2736, 2736, 2736, 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, 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, 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, - - 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, - - 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, - 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, - 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, - 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, + 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, 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, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, - 1731, 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, + 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, 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, 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, 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, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, + 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, 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, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, - 1724, 1724, 1724, 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, + 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, + 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, 2830, 2830, 2830, 2830, 2830, 2830, + 2830, 2830, 2830, 2830, 2830, 2830, 2830, 2830, + 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, 2848, 2848, 2848, 2848, 2848, 2848, + 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848, + 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, - 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, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, - 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 }; #define GET_PROP_INDEX(ucs4) \ @@ -6757,6 +6838,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 }, @@ -8089,12 +8171,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 }, @@ -8152,13 +8235,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 }, @@ -8176,6 +8260,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 }, @@ -8206,17 +8291,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 }, @@ -8231,6 +8319,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 }, @@ -8244,19 +8333,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 }, @@ -8300,6 +8395,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 }, @@ -8371,6 +8467,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 }, @@ -8380,14 +8477,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 }, @@ -8417,6 +8514,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 }, @@ -8425,6 +8524,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 }, @@ -8779,6 +8879,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 }, @@ -9536,6 +9637,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 }, @@ -9547,38 +9649,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 b2825e7695..e8cb2af993 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 67849aed29..858a408405 100644 --- a/src/corelib/text/qunicodetools.cpp +++ b/src/corelib/text/qunicodetools.cpp @@ -44,6 +44,8 @@ #include "qharfbuzz_p.h" +#include + #define FLAG(x) (1 << (x)) QT_BEGIN_NAMESPACE @@ -55,45 +57,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 @@ -101,7 +148,7 @@ static const State breakTable[QUnicodeTables::NumGraphemeBreakClasses][QUnicodeT static void getGraphemeBreaks(const ushort *string, quint32 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 (quint32 i = 0; i != len; ++i) { quint32 pos = i; uint ucs4 = string[i]; @@ -116,37 +163,55 @@ static void getGraphemeBreaks(const ushort *string, quint32 len, QCharAttributes 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/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt b/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt index a4eb3bf3f0..5baf292a07 100644 --- a/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt +++ b/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt @@ -618,11 +618,11 @@ ÷ 0061 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3] ÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] ÷ 0061 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] -# ÷ 0061 × 1F3FF ÷ 1F476 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] -# ÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [0.3] -# ÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] +÷ 0061 × 1F3FF ÷ 1F476 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] +÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [0.3] +÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] ÷ 0061 × 200D ÷ 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] -# ÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] +÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] ÷ 0061 × 200D ÷ 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] # # Lines: 602 diff --git a/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt.full b/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt.full deleted file mode 100644 index 5baf292a07..0000000000 --- a/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt.full +++ /dev/null @@ -1,630 +0,0 @@ -# GraphemeBreakTest-13.0.0.txt -# Date: 2019-11-15, 19:49:10 GMT -# © 2019 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# -# Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ -# -# Default Grapheme_Cluster_Break Test -# -# Format: -# (# )? -# contains hex Unicode code points, with -# ÷ wherever there is a break opportunity, and -# × wherever there is not. -# the format can change, but currently it shows: -# - the sample character name -# - (x) the Grapheme_Cluster_Break property value for the sample character -# - [x] the rule that determines whether there is a break or not, -# as listed in the Rules section of GraphemeBreakTest.html -# -# These samples may be extended or changed in the future. -# -÷ 0020 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0020 × 0308 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0020 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (CR) ÷ [0.3] -÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0020 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (LF) ÷ [0.3] -÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0020 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (Control) ÷ [0.3] -÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0020 × 034F ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0020 × 0308 × 034F ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0020 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0020 × 0308 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0020 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0020 × 0308 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0020 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0020 × 0308 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0020 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0020 × 0308 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0020 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0020 × 0308 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0020 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0020 × 0308 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0020 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0020 × 0308 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0020 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] (Other) ÷ [0.3] -÷ 0020 × 0308 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 000D ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] SPACE (Other) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 000D ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] (CR) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 000D × 000A ÷ # ÷ [0.2] (CR) × [3.0] (LF) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 000D ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Control) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 000D ÷ 034F ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 000D ÷ 0308 × 034F ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 000D ÷ 0600 ÷ # ÷ [0.2] (CR) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000D ÷ 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000D ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 000D ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 000D ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 000D ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 000D ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 000D ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 000D ÷ 231A ÷ # ÷ [0.2] (CR) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 000D ÷ 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 000D ÷ 200D ÷ # ÷ [0.2] (CR) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 000D ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Other) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 000A ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] SPACE (Other) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 000A ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] (CR) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 000A ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] (LF) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 000A ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Control) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 000A ÷ 034F ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 000A ÷ 0308 × 034F ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 000A ÷ 0600 ÷ # ÷ [0.2] (LF) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000A ÷ 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000A ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 000A ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 000A ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 000A ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 000A ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 000A ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 000A ÷ 231A ÷ # ÷ [0.2] (LF) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 000A ÷ 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 000A ÷ 200D ÷ # ÷ [0.2] (LF) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 000A ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Other) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0001 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] SPACE (Other) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0001 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] (CR) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0001 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] (LF) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0001 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Control) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0001 ÷ 034F ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0001 ÷ 0308 × 034F ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0001 ÷ 0600 ÷ # ÷ [0.2] (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0001 ÷ 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0001 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0001 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0001 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0001 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0001 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0001 ÷ 231A ÷ # ÷ [0.2] (Control) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0001 ÷ 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0001 ÷ 200D ÷ # ÷ [0.2] (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0001 ÷ 0308 × 200D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0001 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Other) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 034F ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 034F × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 034F ÷ 000D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (CR) ÷ [0.3] -÷ 034F × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 034F ÷ 000A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (LF) ÷ [0.3] -÷ 034F × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 034F ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (Control) ÷ [0.3] -÷ 034F × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 034F × 034F ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 034F × 0308 × 034F ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 034F ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 034F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 034F ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 034F × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 034F × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 034F × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 034F ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 034F × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 034F ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 034F × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 034F ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 034F × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 034F ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 034F × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 034F ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 034F × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 034F ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 034F × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 034F × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 034F × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 034F × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 034F × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 034F ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] (Other) ÷ [0.3] -÷ 034F × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 1F1E6 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (CR) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (LF) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (Control) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 1F1E6 × 034F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1F1E6 × 0308 × 034F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1F1E6 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1F1E6 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1F1E6 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1F1E6 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1F1E6 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1F1E6 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1F1E6 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] (Other) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0600 × 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] SPACE (Other) ÷ [0.3] -÷ 0600 × 0308 ÷ 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0600 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (CR) ÷ [0.3] -÷ 0600 × 0308 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0600 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (LF) ÷ [0.3] -÷ 0600 × 0308 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0600 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (Control) ÷ [0.3] -÷ 0600 × 0308 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0600 × 034F ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0600 × 0308 × 034F ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0600 × 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0600 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0600 × 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0600 × 0308 ÷ 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0600 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0600 × 0308 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0600 × 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0600 × 0308 ÷ 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0600 × 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0600 × 0308 ÷ 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0600 × 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0600 × 0308 ÷ 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0600 × AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0600 × 0308 ÷ AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0600 × AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0600 × 0308 ÷ AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0600 × 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] WATCH (ExtPict) ÷ [0.3] -÷ 0600 × 0308 ÷ 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0600 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0600 × 0308 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0600 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0600 × 0308 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0600 × 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] (Other) ÷ [0.3] -÷ 0600 × 0308 ÷ 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (CR) ÷ [0.3] -÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (LF) ÷ [0.3] -÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (Control) ÷ [0.3] -÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0903 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0903 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0903 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0903 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0903 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0903 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0903 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0903 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0903 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0903 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0903 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0903 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] (Other) ÷ [0.3] -÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 1100 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1100 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1100 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (CR) ÷ [0.3] -÷ 1100 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 1100 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (LF) ÷ [0.3] -÷ 1100 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 1100 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (Control) ÷ [0.3] -÷ 1100 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 1100 × 034F ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1100 × 0308 × 034F ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1100 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1100 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1100 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1100 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1100 × 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1100 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1100 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1100 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1100 × AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1100 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1100 × AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1100 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1100 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1100 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1100 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1100 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1100 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1100 × 0308 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1100 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] (Other) ÷ [0.3] -÷ 1100 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 1160 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1160 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1160 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (CR) ÷ [0.3] -÷ 1160 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 1160 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (LF) ÷ [0.3] -÷ 1160 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 1160 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (Control) ÷ [0.3] -÷ 1160 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 1160 × 034F ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1160 × 0308 × 034F ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1160 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1160 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1160 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1160 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1160 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1160 × 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1160 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1160 × 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1160 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1160 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1160 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1160 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1160 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1160 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1160 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1160 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1160 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1160 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1160 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1160 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] (Other) ÷ [0.3] -÷ 1160 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 11A8 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 11A8 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 11A8 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (CR) ÷ [0.3] -÷ 11A8 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 11A8 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (LF) ÷ [0.3] -÷ 11A8 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 11A8 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (Control) ÷ [0.3] -÷ 11A8 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 11A8 × 034F ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 11A8 × 0308 × 034F ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 11A8 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 11A8 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 11A8 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 11A8 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 11A8 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 11A8 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 11A8 × 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 11A8 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 11A8 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 11A8 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 11A8 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 11A8 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 11A8 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 11A8 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 11A8 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 11A8 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 11A8 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 11A8 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 11A8 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] (Other) ÷ [0.3] -÷ 11A8 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ AC00 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ AC00 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ AC00 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (CR) ÷ [0.3] -÷ AC00 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ AC00 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (LF) ÷ [0.3] -÷ AC00 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ AC00 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (Control) ÷ [0.3] -÷ AC00 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ AC00 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ AC00 × 0308 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ AC00 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ AC00 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC00 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC00 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC00 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC00 × 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ AC00 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ AC00 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ AC00 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ AC00 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ AC00 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ AC00 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ AC00 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ AC00 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ AC00 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ AC00 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ AC00 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ AC00 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ AC00 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ AC00 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] (Other) ÷ [0.3] -÷ AC00 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ AC01 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ AC01 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ AC01 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (CR) ÷ [0.3] -÷ AC01 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ AC01 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (LF) ÷ [0.3] -÷ AC01 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ AC01 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (Control) ÷ [0.3] -÷ AC01 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ AC01 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ AC01 × 0308 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ AC01 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ AC01 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC01 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC01 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC01 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC01 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ AC01 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ AC01 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ AC01 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ AC01 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ AC01 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ AC01 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ AC01 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ AC01 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ AC01 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ AC01 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ AC01 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ AC01 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ AC01 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ AC01 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] (Other) ÷ [0.3] -÷ AC01 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 231A ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 231A × 0308 ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 231A ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (CR) ÷ [0.3] -÷ 231A × 0308 ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 231A ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (LF) ÷ [0.3] -÷ 231A × 0308 ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 231A ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (Control) ÷ [0.3] -÷ 231A × 0308 ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 231A × 034F ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 231A × 0308 × 034F ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 231A ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 231A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 231A ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 231A × 0308 ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 231A × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 231A × 0308 × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 231A ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 231A × 0308 ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 231A ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 231A × 0308 ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 231A ÷ 11A8 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 231A × 0308 ÷ 11A8 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 231A ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 231A × 0308 ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 231A ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 231A × 0308 ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 231A ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 231A × 0308 ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 231A × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 231A × 0308 × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 231A × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 231A × 0308 × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 231A ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] (Other) ÷ [0.3] -÷ 231A × 0308 ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0300 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0300 × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0300 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0300 × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0300 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0300 × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0300 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0300 × 034F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0300 × 0308 × 034F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0300 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0300 × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0300 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0300 × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0300 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0300 × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0300 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0300 × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0300 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0300 × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0300 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0300 × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0300 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0300 × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0300 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 200D × 0308 ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 200D ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 200D × 0308 ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 200D ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 200D × 0308 ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 200D × 034F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 200D × 0308 × 034F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 200D ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 200D ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 200D × 0308 ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 200D ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 200D × 0308 ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 200D ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 200D × 0308 ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 200D ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 200D × 0308 ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 200D ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 200D × 0308 ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 200D ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 200D × 0308 ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 200D ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 200D × 0308 ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 200D ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 200D × 0308 ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0378 ÷ 0020 ÷ # ÷ [0.2] (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0378 × 0308 ÷ 0020 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0378 ÷ 000D ÷ # ÷ [0.2] (Other) ÷ [5.0] (CR) ÷ [0.3] -÷ 0378 × 0308 ÷ 000D ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0378 ÷ 000A ÷ # ÷ [0.2] (Other) ÷ [5.0] (LF) ÷ [0.3] -÷ 0378 × 0308 ÷ 000A ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0378 ÷ 0001 ÷ # ÷ [0.2] (Other) ÷ [5.0] (Control) ÷ [0.3] -÷ 0378 × 0308 ÷ 0001 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0378 × 034F ÷ # ÷ [0.2] (Other) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0378 × 0308 × 034F ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0378 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0378 ÷ 0600 ÷ # ÷ [0.2] (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0378 × 0308 ÷ 0600 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0378 × 0903 ÷ # ÷ [0.2] (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0378 ÷ 1100 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0378 × 0308 ÷ 1100 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0378 ÷ 1160 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0378 × 0308 ÷ 1160 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0378 ÷ 11A8 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0378 × 0308 ÷ 11A8 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0378 ÷ AC00 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0378 ÷ AC01 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0378 × 0308 ÷ AC01 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0378 ÷ 231A ÷ # ÷ [0.2] (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0378 × 0308 ÷ 231A ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0378 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0378 × 200D ÷ # ÷ [0.2] (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0378 × 0308 × 200D ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0378 ÷ 0378 ÷ # ÷ [0.2] (Other) ÷ [999.0] (Other) ÷ [0.3] -÷ 0378 × 0308 ÷ 0378 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] (CR) × [3.0] (LF) ÷ [4.0] LATIN SMALL LETTER A (Other) ÷ [5.0] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [0.3] -÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [0.3] -÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC LETTER NOON (Other) ÷ [0.3] -÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC00 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC01 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 1F1E6 × 200D ÷ 1F1E7 × 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0061 × 0308 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] -÷ 0061 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] -÷ 0061 × 1F3FF ÷ 1F476 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] -÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [0.3] -÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] -÷ 0061 × 200D ÷ 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] -÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] -÷ 0061 × 200D ÷ 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] -# -# Lines: 602 -# -# EOF diff --git a/util/unicode/README b/util/unicode/README index 2ff8176084..1b6efb237e 100644 --- a/util/unicode/README +++ b/util/unicode/README @@ -4,8 +4,8 @@ To update: * Find the data (UAX #44, UCD; not the XML version) at ftp://www.unicode.org/Public/zipped/$Version/ * Unpack the zip file; for each file in data/, replace with the new - version; find the *BreakProperty.txt in auxiliary/. (These last are - only in the zip, not in the web-space's unpacked versions.) + version; find the *BreakProperty.txt in auxiliary/ and emoji-data.txt + in emoji/. * In tst_QTextBoundaryFinder's data/ sub-directory, update its files from the auxiliary/ sub-directory of the UCD data. * If needed, add an entry to enum QChar::UnicodeVersion for the new diff --git a/util/unicode/data/emoji-data.txt b/util/unicode/data/emoji-data.txt new file mode 100644 index 0000000000..5d7dc1b156 --- /dev/null +++ b/util/unicode/data/emoji-data.txt @@ -0,0 +1,1261 @@ +# emoji-data.txt +# Date: 2020-01-28, 20:52:38 GMT +# © 2020 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Emoji Data for UTS #51 +# Version: 13.0 +# +# For documentation and usage, see http://www.unicode.org/reports/tr51 +# +# Format: +# ; # +# Note: there is no guarantee as to the structure of whitespace or comments +# +# Characters and sequences are listed in code point order. Users should be shown a more natural order. +# See the CLDR collation order for Emoji. + + +# ================================================ + +# All omitted code points have Emoji=No +# @missing: 0000..10FFFF ; Emoji ; No + +0023 ; Emoji # E0.0 [1] (#️) number sign +002A ; Emoji # E0.0 [1] (*️) asterisk +0030..0039 ; Emoji # E0.0 [10] (0️..9️) digit zero..digit nine +00A9 ; Emoji # E0.6 [1] (©️) copyright +00AE ; Emoji # E0.6 [1] (®️) registered +203C ; Emoji # E0.6 [1] (‼️) double exclamation mark +2049 ; Emoji # E0.6 [1] (⁉️) exclamation question mark +2122 ; Emoji # E0.6 [1] (™️) trade mark +2139 ; Emoji # E0.6 [1] (ℹ️) information +2194..2199 ; Emoji # E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow +21A9..21AA ; Emoji # E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right +231A..231B ; Emoji # E0.6 [2] (⌚..⌛) watch..hourglass done +2328 ; Emoji # E1.0 [1] (⌨️) keyboard +23CF ; Emoji # E1.0 [1] (⏏️) eject button +23E9..23EC ; Emoji # E0.6 [4] (⏩..⏬) fast-forward button..fast down button +23ED..23EE ; Emoji # E0.7 [2] (⏭️..⏮️) next track button..last track button +23EF ; Emoji # E1.0 [1] (⏯️) play or pause button +23F0 ; Emoji # E0.6 [1] (⏰) alarm clock +23F1..23F2 ; Emoji # E1.0 [2] (⏱️..⏲️) stopwatch..timer clock +23F3 ; Emoji # E0.6 [1] (⏳) hourglass not done +23F8..23FA ; Emoji # E0.7 [3] (⏸️..⏺️) pause button..record button +24C2 ; Emoji # E0.6 [1] (Ⓜ️) circled M +25AA..25AB ; Emoji # E0.6 [2] (▪️..▫️) black small square..white small square +25B6 ; Emoji # E0.6 [1] (▶️) play button +25C0 ; Emoji # E0.6 [1] (◀️) reverse button +25FB..25FE ; Emoji # E0.6 [4] (◻️..◾) white medium square..black medium-small square +2600..2601 ; Emoji # E0.6 [2] (☀️..☁️) sun..cloud +2602..2603 ; Emoji # E0.7 [2] (☂️..☃️) umbrella..snowman +2604 ; Emoji # E1.0 [1] (☄️) comet +260E ; Emoji # E0.6 [1] (☎️) telephone +2611 ; Emoji # E0.6 [1] (☑️) check box with check +2614..2615 ; Emoji # E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage +2618 ; Emoji # E1.0 [1] (☘️) shamrock +261D ; Emoji # E0.6 [1] (☝️) index pointing up +2620 ; Emoji # E1.0 [1] (☠️) skull and crossbones +2622..2623 ; Emoji # E1.0 [2] (☢️..☣️) radioactive..biohazard +2626 ; Emoji # E1.0 [1] (☦️) orthodox cross +262A ; Emoji # E0.7 [1] (☪️) star and crescent +262E ; Emoji # E1.0 [1] (☮️) peace symbol +262F ; Emoji # E0.7 [1] (☯️) yin yang +2638..2639 ; Emoji # E0.7 [2] (☸️..☹️) wheel of dharma..frowning face +263A ; Emoji # E0.6 [1] (☺️) smiling face +2640 ; Emoji # E4.0 [1] (♀️) female sign +2642 ; Emoji # E4.0 [1] (♂️) male sign +2648..2653 ; Emoji # E0.6 [12] (♈..♓) Aries..Pisces +265F ; Emoji # E11.0 [1] (♟️) chess pawn +2660 ; Emoji # E0.6 [1] (♠️) spade suit +2663 ; Emoji # E0.6 [1] (♣️) club suit +2665..2666 ; Emoji # E0.6 [2] (♥️..♦️) heart suit..diamond suit +2668 ; Emoji # E0.6 [1] (♨️) hot springs +267B ; Emoji # E0.6 [1] (♻️) recycling symbol +267E ; Emoji # E11.0 [1] (♾️) infinity +267F ; Emoji # E0.6 [1] (♿) wheelchair symbol +2692 ; Emoji # E1.0 [1] (⚒️) hammer and pick +2693 ; Emoji # E0.6 [1] (⚓) anchor +2694 ; Emoji # E1.0 [1] (⚔️) crossed swords +2695 ; Emoji # E4.0 [1] (⚕️) medical symbol +2696..2697 ; Emoji # E1.0 [2] (⚖️..⚗️) balance scale..alembic +2699 ; Emoji # E1.0 [1] (⚙️) gear +269B..269C ; Emoji # E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis +26A0..26A1 ; Emoji # E0.6 [2] (⚠️..⚡) warning..high voltage +26A7 ; Emoji # E13.0 [1] (⚧️) transgender symbol +26AA..26AB ; Emoji # E0.6 [2] (⚪..⚫) white circle..black circle +26B0..26B1 ; Emoji # E1.0 [2] (⚰️..⚱️) coffin..funeral urn +26BD..26BE ; Emoji # E0.6 [2] (⚽..⚾) soccer ball..baseball +26C4..26C5 ; Emoji # E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud +26C8 ; Emoji # E0.7 [1] (⛈️) cloud with lightning and rain +26CE ; Emoji # E0.6 [1] (⛎) Ophiuchus +26CF ; Emoji # E0.7 [1] (⛏️) pick +26D1 ; Emoji # E0.7 [1] (⛑️) rescue worker’s helmet +26D3 ; Emoji # E0.7 [1] (⛓️) chains +26D4 ; Emoji # E0.6 [1] (⛔) no entry +26E9 ; Emoji # E0.7 [1] (⛩️) shinto shrine +26EA ; Emoji # E0.6 [1] (⛪) church +26F0..26F1 ; Emoji # E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground +26F2..26F3 ; Emoji # E0.6 [2] (⛲..⛳) fountain..flag in hole +26F4 ; Emoji # E0.7 [1] (⛴️) ferry +26F5 ; Emoji # E0.6 [1] (⛵) sailboat +26F7..26F9 ; Emoji # E0.7 [3] (⛷️..⛹️) skier..person bouncing ball +26FA ; Emoji # E0.6 [1] (⛺) tent +26FD ; Emoji # E0.6 [1] (⛽) fuel pump +2702 ; Emoji # E0.6 [1] (✂️) scissors +2705 ; Emoji # E0.6 [1] (✅) check mark button +2708..270C ; Emoji # E0.6 [5] (✈️..✌️) airplane..victory hand +270D ; Emoji # E0.7 [1] (✍️) writing hand +270F ; Emoji # E0.6 [1] (✏️) pencil +2712 ; Emoji # E0.6 [1] (✒️) black nib +2714 ; Emoji # E0.6 [1] (✔️) check mark +2716 ; Emoji # E0.6 [1] (✖️) multiply +271D ; Emoji # E0.7 [1] (✝️) latin cross +2721 ; Emoji # E0.7 [1] (✡️) star of David +2728 ; Emoji # E0.6 [1] (✨) sparkles +2733..2734 ; Emoji # E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star +2744 ; Emoji # E0.6 [1] (❄️) snowflake +2747 ; Emoji # E0.6 [1] (❇️) sparkle +274C ; Emoji # E0.6 [1] (❌) cross mark +274E ; Emoji # E0.6 [1] (❎) cross mark button +2753..2755 ; Emoji # E0.6 [3] (❓..❕) question mark..white exclamation mark +2757 ; Emoji # E0.6 [1] (❗) exclamation mark +2763 ; Emoji # E1.0 [1] (❣️) heart exclamation +2764 ; Emoji # E0.6 [1] (❤️) red heart +2795..2797 ; Emoji # E0.6 [3] (➕..➗) plus..divide +27A1 ; Emoji # E0.6 [1] (➡️) right arrow +27B0 ; Emoji # E0.6 [1] (➰) curly loop +27BF ; Emoji # E1.0 [1] (➿) double curly loop +2934..2935 ; Emoji # E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down +2B05..2B07 ; Emoji # E0.6 [3] (⬅️..⬇️) left arrow..down arrow +2B1B..2B1C ; Emoji # E0.6 [2] (⬛..⬜) black large square..white large square +2B50 ; Emoji # E0.6 [1] (⭐) star +2B55 ; Emoji # E0.6 [1] (⭕) hollow red circle +3030 ; Emoji # E0.6 [1] (〰️) wavy dash +303D ; Emoji # E0.6 [1] (〽️) part alternation mark +3297 ; Emoji # E0.6 [1] (㊗️) Japanese “congratulations” button +3299 ; Emoji # E0.6 [1] (㊙️) Japanese “secret” button +1F004 ; Emoji # E0.6 [1] (🀄) mahjong red dragon +1F0CF ; Emoji # E0.6 [1] (🃏) joker +1F170..1F171 ; Emoji # E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) +1F17E..1F17F ; Emoji # E0.6 [2] (🅾️..🅿️) O button (blood type)..P button +1F18E ; Emoji # E0.6 [1] (🆎) AB button (blood type) +1F191..1F19A ; Emoji # E0.6 [10] (🆑..🆚) CL button..VS button +1F1E6..1F1FF ; Emoji # E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z +1F201..1F202 ; Emoji # E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button +1F21A ; Emoji # E0.6 [1] (🈚) Japanese “free of charge” button +1F22F ; Emoji # E0.6 [1] (🈯) Japanese “reserved” button +1F232..1F23A ; Emoji # E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button +1F250..1F251 ; Emoji # E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button +1F300..1F30C ; Emoji # E0.6 [13] (🌀..🌌) cyclone..milky way +1F30D..1F30E ; Emoji # E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas +1F30F ; Emoji # E0.6 [1] (🌏) globe showing Asia-Australia +1F310 ; Emoji # E1.0 [1] (🌐) globe with meridians +1F311 ; Emoji # E0.6 [1] (🌑) new moon +1F312 ; Emoji # E1.0 [1] (🌒) waxing crescent moon +1F313..1F315 ; Emoji # E0.6 [3] (🌓..🌕) first quarter moon..full moon +1F316..1F318 ; Emoji # E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon +1F319 ; Emoji # E0.6 [1] (🌙) crescent moon +1F31A ; Emoji # E1.0 [1] (🌚) new moon face +1F31B ; Emoji # E0.6 [1] (🌛) first quarter moon face +1F31C ; Emoji # E0.7 [1] (🌜) last quarter moon face +1F31D..1F31E ; Emoji # E1.0 [2] (🌝..🌞) full moon face..sun with face +1F31F..1F320 ; Emoji # E0.6 [2] (🌟..🌠) glowing star..shooting star +1F321 ; Emoji # E0.7 [1] (🌡️) thermometer +1F324..1F32C ; Emoji # E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face +1F32D..1F32F ; Emoji # E1.0 [3] (🌭..🌯) hot dog..burrito +1F330..1F331 ; Emoji # E0.6 [2] (🌰..🌱) chestnut..seedling +1F332..1F333 ; Emoji # E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree +1F334..1F335 ; Emoji # E0.6 [2] (🌴..🌵) palm tree..cactus +1F336 ; Emoji # E0.7 [1] (🌶️) hot pepper +1F337..1F34A ; Emoji # E0.6 [20] (🌷..🍊) tulip..tangerine +1F34B ; Emoji # E1.0 [1] (🍋) lemon +1F34C..1F34F ; Emoji # E0.6 [4] (🍌..🍏) banana..green apple +1F350 ; Emoji # E1.0 [1] (🍐) pear +1F351..1F37B ; Emoji # E0.6 [43] (🍑..🍻) peach..clinking beer mugs +1F37C ; Emoji # E1.0 [1] (🍼) baby bottle +1F37D ; Emoji # E0.7 [1] (🍽️) fork and knife with plate +1F37E..1F37F ; Emoji # E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn +1F380..1F393 ; Emoji # E0.6 [20] (🎀..🎓) ribbon..graduation cap +1F396..1F397 ; Emoji # E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon +1F399..1F39B ; Emoji # E0.7 [3] (🎙️..🎛️) studio microphone..control knobs +1F39E..1F39F ; Emoji # E0.7 [2] (🎞️..🎟️) film frames..admission tickets +1F3A0..1F3C4 ; Emoji # E0.6 [37] (🎠..🏄) carousel horse..person surfing +1F3C5 ; Emoji # E1.0 [1] (🏅) sports medal +1F3C6 ; Emoji # E0.6 [1] (🏆) trophy +1F3C7 ; Emoji # E1.0 [1] (🏇) horse racing +1F3C8 ; Emoji # E0.6 [1] (🏈) american football +1F3C9 ; Emoji # E1.0 [1] (🏉) rugby football +1F3CA ; Emoji # E0.6 [1] (🏊) person swimming +1F3CB..1F3CE ; Emoji # E0.7 [4] (🏋️..🏎️) person lifting weights..racing car +1F3CF..1F3D3 ; Emoji # E1.0 [5] (🏏..🏓) cricket game..ping pong +1F3D4..1F3DF ; Emoji # E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium +1F3E0..1F3E3 ; Emoji # E0.6 [4] (🏠..🏣) house..Japanese post office +1F3E4 ; Emoji # E1.0 [1] (🏤) post office +1F3E5..1F3F0 ; Emoji # E0.6 [12] (🏥..🏰) hospital..castle +1F3F3 ; Emoji # E0.7 [1] (🏳️) white flag +1F3F4 ; Emoji # E1.0 [1] (🏴) black flag +1F3F5 ; Emoji # E0.7 [1] (🏵️) rosette +1F3F7 ; Emoji # E0.7 [1] (🏷️) label +1F3F8..1F407 ; Emoji # E1.0 [16] (🏸..🐇) badminton..rabbit +1F408 ; Emoji # E0.7 [1] (🐈) cat +1F409..1F40B ; Emoji # E1.0 [3] (🐉..🐋) dragon..whale +1F40C..1F40E ; Emoji # E0.6 [3] (🐌..🐎) snail..horse +1F40F..1F410 ; Emoji # E1.0 [2] (🐏..🐐) ram..goat +1F411..1F412 ; Emoji # E0.6 [2] (🐑..🐒) ewe..monkey +1F413 ; Emoji # E1.0 [1] (🐓) rooster +1F414 ; Emoji # E0.6 [1] (🐔) chicken +1F415 ; Emoji # E0.7 [1] (🐕) dog +1F416 ; Emoji # E1.0 [1] (🐖) pig +1F417..1F429 ; Emoji # E0.6 [19] (🐗..🐩) boar..poodle +1F42A ; Emoji # E1.0 [1] (🐪) camel +1F42B..1F43E ; Emoji # E0.6 [20] (🐫..🐾) two-hump camel..paw prints +1F43F ; Emoji # E0.7 [1] (🐿️) chipmunk +1F440 ; Emoji # E0.6 [1] (👀) eyes +1F441 ; Emoji # E0.7 [1] (👁️) eye +1F442..1F464 ; Emoji # E0.6 [35] (👂..👤) ear..bust in silhouette +1F465 ; Emoji # E1.0 [1] (👥) busts in silhouette +1F466..1F46B ; Emoji # E0.6 [6] (👦..👫) boy..woman and man holding hands +1F46C..1F46D ; Emoji # E1.0 [2] (👬..👭) men holding hands..women holding hands +1F46E..1F4AC ; Emoji # E0.6 [63] (👮..💬) police officer..speech balloon +1F4AD ; Emoji # E1.0 [1] (💭) thought balloon +1F4AE..1F4B5 ; Emoji # E0.6 [8] (💮..💵) white flower..dollar banknote +1F4B6..1F4B7 ; Emoji # E1.0 [2] (💶..💷) euro banknote..pound banknote +1F4B8..1F4EB ; Emoji # E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag +1F4EC..1F4ED ; Emoji # E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag +1F4EE ; Emoji # E0.6 [1] (📮) postbox +1F4EF ; Emoji # E1.0 [1] (📯) postal horn +1F4F0..1F4F4 ; Emoji # E0.6 [5] (📰..📴) newspaper..mobile phone off +1F4F5 ; Emoji # E1.0 [1] (📵) no mobile phones +1F4F6..1F4F7 ; Emoji # E0.6 [2] (📶..📷) antenna bars..camera +1F4F8 ; Emoji # E1.0 [1] (📸) camera with flash +1F4F9..1F4FC ; Emoji # E0.6 [4] (📹..📼) video camera..videocassette +1F4FD ; Emoji # E0.7 [1] (📽️) film projector +1F4FF..1F502 ; Emoji # E1.0 [4] (📿..🔂) prayer beads..repeat single button +1F503 ; Emoji # E0.6 [1] (🔃) clockwise vertical arrows +1F504..1F507 ; Emoji # E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker +1F508 ; Emoji # E0.7 [1] (🔈) speaker low volume +1F509 ; Emoji # E1.0 [1] (🔉) speaker medium volume +1F50A..1F514 ; Emoji # E0.6 [11] (🔊..🔔) speaker high volume..bell +1F515 ; Emoji # E1.0 [1] (🔕) bell with slash +1F516..1F52B ; Emoji # E0.6 [22] (🔖..🔫) bookmark..pistol +1F52C..1F52D ; Emoji # E1.0 [2] (🔬..🔭) microscope..telescope +1F52E..1F53D ; Emoji # E0.6 [16] (🔮..🔽) crystal ball..downwards button +1F549..1F54A ; Emoji # E0.7 [2] (🕉️..🕊️) om..dove +1F54B..1F54E ; Emoji # E1.0 [4] (🕋..🕎) kaaba..menorah +1F550..1F55B ; Emoji # E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock +1F55C..1F567 ; Emoji # E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty +1F56F..1F570 ; Emoji # E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock +1F573..1F579 ; Emoji # E0.7 [7] (🕳️..🕹️) hole..joystick +1F57A ; Emoji # E3.0 [1] (🕺) man dancing +1F587 ; Emoji # E0.7 [1] (🖇️) linked paperclips +1F58A..1F58D ; Emoji # E0.7 [4] (🖊️..🖍️) pen..crayon +1F590 ; Emoji # E0.7 [1] (🖐️) hand with fingers splayed +1F595..1F596 ; Emoji # E1.0 [2] (🖕..🖖) middle finger..vulcan salute +1F5A4 ; Emoji # E3.0 [1] (🖤) black heart +1F5A5 ; Emoji # E0.7 [1] (🖥️) desktop computer +1F5A8 ; Emoji # E0.7 [1] (🖨️) printer +1F5B1..1F5B2 ; Emoji # E0.7 [2] (🖱️..🖲️) computer mouse..trackball +1F5BC ; Emoji # E0.7 [1] (🖼️) framed picture +1F5C2..1F5C4 ; Emoji # E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet +1F5D1..1F5D3 ; Emoji # E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar +1F5DC..1F5DE ; Emoji # E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper +1F5E1 ; Emoji # E0.7 [1] (🗡️) dagger +1F5E3 ; Emoji # E0.7 [1] (🗣️) speaking head +1F5E8 ; Emoji # E2.0 [1] (🗨️) left speech bubble +1F5EF ; Emoji # E0.7 [1] (🗯️) right anger bubble +1F5F3 ; Emoji # E0.7 [1] (🗳️) ballot box with ballot +1F5FA ; Emoji # E0.7 [1] (🗺️) world map +1F5FB..1F5FF ; Emoji # E0.6 [5] (🗻..🗿) mount fuji..moai +1F600 ; Emoji # E1.0 [1] (😀) grinning face +1F601..1F606 ; Emoji # E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face +1F607..1F608 ; Emoji # E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns +1F609..1F60D ; Emoji # E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes +1F60E ; Emoji # E1.0 [1] (😎) smiling face with sunglasses +1F60F ; Emoji # E0.6 [1] (😏) smirking face +1F610 ; Emoji # E0.7 [1] (😐) neutral face +1F611 ; Emoji # E1.0 [1] (😑) expressionless face +1F612..1F614 ; Emoji # E0.6 [3] (😒..😔) unamused face..pensive face +1F615 ; Emoji # E1.0 [1] (😕) confused face +1F616 ; Emoji # E0.6 [1] (😖) confounded face +1F617 ; Emoji # E1.0 [1] (😗) kissing face +1F618 ; Emoji # E0.6 [1] (😘) face blowing a kiss +1F619 ; Emoji # E1.0 [1] (😙) kissing face with smiling eyes +1F61A ; Emoji # E0.6 [1] (😚) kissing face with closed eyes +1F61B ; Emoji # E1.0 [1] (😛) face with tongue +1F61C..1F61E ; Emoji # E0.6 [3] (😜..😞) winking face with tongue..disappointed face +1F61F ; Emoji # E1.0 [1] (😟) worried face +1F620..1F625 ; Emoji # E0.6 [6] (😠..😥) angry face..sad but relieved face +1F626..1F627 ; Emoji # E1.0 [2] (😦..😧) frowning face with open mouth..anguished face +1F628..1F62B ; Emoji # E0.6 [4] (😨..😫) fearful face..tired face +1F62C ; Emoji # E1.0 [1] (😬) grimacing face +1F62D ; Emoji # E0.6 [1] (😭) loudly crying face +1F62E..1F62F ; Emoji # E1.0 [2] (😮..😯) face with open mouth..hushed face +1F630..1F633 ; Emoji # E0.6 [4] (😰..😳) anxious face with sweat..flushed face +1F634 ; Emoji # E1.0 [1] (😴) sleeping face +1F635 ; Emoji # E0.6 [1] (😵) dizzy face +1F636 ; Emoji # E1.0 [1] (😶) face without mouth +1F637..1F640 ; Emoji # E0.6 [10] (😷..🙀) face with medical mask..weary cat +1F641..1F644 ; Emoji # E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes +1F645..1F64F ; Emoji # E0.6 [11] (🙅..🙏) person gesturing NO..folded hands +1F680 ; Emoji # E0.6 [1] (🚀) rocket +1F681..1F682 ; Emoji # E1.0 [2] (🚁..🚂) helicopter..locomotive +1F683..1F685 ; Emoji # E0.6 [3] (🚃..🚅) railway car..bullet train +1F686 ; Emoji # E1.0 [1] (🚆) train +1F687 ; Emoji # E0.6 [1] (🚇) metro +1F688 ; Emoji # E1.0 [1] (🚈) light rail +1F689 ; Emoji # E0.6 [1] (🚉) station +1F68A..1F68B ; Emoji # E1.0 [2] (🚊..🚋) tram..tram car +1F68C ; Emoji # E0.6 [1] (🚌) bus +1F68D ; Emoji # E0.7 [1] (🚍) oncoming bus +1F68E ; Emoji # E1.0 [1] (🚎) trolleybus +1F68F ; Emoji # E0.6 [1] (🚏) bus stop +1F690 ; Emoji # E1.0 [1] (🚐) minibus +1F691..1F693 ; Emoji # E0.6 [3] (🚑..🚓) ambulance..police car +1F694 ; Emoji # E0.7 [1] (🚔) oncoming police car +1F695 ; Emoji # E0.6 [1] (🚕) taxi +1F696 ; Emoji # E1.0 [1] (🚖) oncoming taxi +1F697 ; Emoji # E0.6 [1] (🚗) automobile +1F698 ; Emoji # E0.7 [1] (🚘) oncoming automobile +1F699..1F69A ; Emoji # E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck +1F69B..1F6A1 ; Emoji # E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway +1F6A2 ; Emoji # E0.6 [1] (🚢) ship +1F6A3 ; Emoji # E1.0 [1] (🚣) person rowing boat +1F6A4..1F6A5 ; Emoji # E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light +1F6A6 ; Emoji # E1.0 [1] (🚦) vertical traffic light +1F6A7..1F6AD ; Emoji # E0.6 [7] (🚧..🚭) construction..no smoking +1F6AE..1F6B1 ; Emoji # E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water +1F6B2 ; Emoji # E0.6 [1] (🚲) bicycle +1F6B3..1F6B5 ; Emoji # E1.0 [3] (🚳..🚵) no bicycles..person mountain biking +1F6B6 ; Emoji # E0.6 [1] (🚶) person walking +1F6B7..1F6B8 ; Emoji # E1.0 [2] (🚷..🚸) no pedestrians..children crossing +1F6B9..1F6BE ; Emoji # E0.6 [6] (🚹..🚾) men’s room..water closet +1F6BF ; Emoji # E1.0 [1] (🚿) shower +1F6C0 ; Emoji # E0.6 [1] (🛀) person taking bath +1F6C1..1F6C5 ; Emoji # E1.0 [5] (🛁..🛅) bathtub..left luggage +1F6CB ; Emoji # E0.7 [1] (🛋️) couch and lamp +1F6CC ; Emoji # E1.0 [1] (🛌) person in bed +1F6CD..1F6CF ; Emoji # E0.7 [3] (🛍️..🛏️) shopping bags..bed +1F6D0 ; Emoji # E1.0 [1] (🛐) place of worship +1F6D1..1F6D2 ; Emoji # E3.0 [2] (🛑..🛒) stop sign..shopping cart +1F6D5 ; Emoji # E12.0 [1] (🛕) hindu temple +1F6D6..1F6D7 ; Emoji # E13.0 [2] (🛖..🛗) hut..elevator +1F6E0..1F6E5 ; Emoji # E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat +1F6E9 ; Emoji # E0.7 [1] (🛩️) small airplane +1F6EB..1F6EC ; Emoji # E1.0 [2] (🛫..🛬) airplane departure..airplane arrival +1F6F0 ; Emoji # E0.7 [1] (🛰️) satellite +1F6F3 ; Emoji # E0.7 [1] (🛳️) passenger ship +1F6F4..1F6F6 ; Emoji # E3.0 [3] (🛴..🛶) kick scooter..canoe +1F6F7..1F6F8 ; Emoji # E5.0 [2] (🛷..🛸) sled..flying saucer +1F6F9 ; Emoji # E11.0 [1] (🛹) skateboard +1F6FA ; Emoji # E12.0 [1] (🛺) auto rickshaw +1F6FB..1F6FC ; Emoji # E13.0 [2] (🛻..🛼) pickup truck..roller skate +1F7E0..1F7EB ; Emoji # E12.0 [12] (🟠..🟫) orange circle..brown square +1F90C ; Emoji # E13.0 [1] (🤌) pinched fingers +1F90D..1F90F ; Emoji # E12.0 [3] (🤍..🤏) white heart..pinching hand +1F910..1F918 ; Emoji # E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns +1F919..1F91E ; Emoji # E3.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Emoji # E5.0 [1] (🤟) love-you gesture +1F920..1F927 ; Emoji # E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face +1F928..1F92F ; Emoji # E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head +1F930 ; Emoji # E3.0 [1] (🤰) pregnant woman +1F931..1F932 ; Emoji # E5.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F93A ; Emoji # E3.0 [8] (🤳..🤺) selfie..person fencing +1F93C..1F93E ; Emoji # E3.0 [3] (🤼..🤾) people wrestling..person playing handball +1F93F ; Emoji # E12.0 [1] (🤿) diving mask +1F940..1F945 ; Emoji # E3.0 [6] (🥀..🥅) wilted flower..goal net +1F947..1F94B ; Emoji # E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform +1F94C ; Emoji # E5.0 [1] (🥌) curling stone +1F94D..1F94F ; Emoji # E11.0 [3] (🥍..🥏) lacrosse..flying disc +1F950..1F95E ; Emoji # E3.0 [15] (🥐..🥞) croissant..pancakes +1F95F..1F96B ; Emoji # E5.0 [13] (🥟..🥫) dumpling..canned food +1F96C..1F970 ; Emoji # E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts +1F971 ; Emoji # E12.0 [1] (🥱) yawning face +1F972 ; Emoji # E13.0 [1] (🥲) smiling face with tear +1F973..1F976 ; Emoji # E11.0 [4] (🥳..🥶) partying face..cold face +1F977..1F978 ; Emoji # E13.0 [2] (🥷..🥸) ninja..disguised face +1F97A ; Emoji # E11.0 [1] (🥺) pleading face +1F97B ; Emoji # E12.0 [1] (🥻) sari +1F97C..1F97F ; Emoji # E11.0 [4] (🥼..🥿) lab coat..flat shoe +1F980..1F984 ; Emoji # E1.0 [5] (🦀..🦄) crab..unicorn +1F985..1F991 ; Emoji # E3.0 [13] (🦅..🦑) eagle..squid +1F992..1F997 ; Emoji # E5.0 [6] (🦒..🦗) giraffe..cricket +1F998..1F9A2 ; Emoji # E11.0 [11] (🦘..🦢) kangaroo..swan +1F9A3..1F9A4 ; Emoji # E13.0 [2] (🦣..🦤) mammoth..dodo +1F9A5..1F9AA ; Emoji # E12.0 [6] (🦥..🦪) sloth..oyster +1F9AB..1F9AD ; Emoji # E13.0 [3] (🦫..🦭) beaver..seal +1F9AE..1F9AF ; Emoji # E12.0 [2] (🦮..🦯) guide dog..white cane +1F9B0..1F9B9 ; Emoji # E11.0 [10] (🦰..🦹) red hair..supervillain +1F9BA..1F9BF ; Emoji # E12.0 [6] (🦺..🦿) safety vest..mechanical leg +1F9C0 ; Emoji # E1.0 [1] (🧀) cheese wedge +1F9C1..1F9C2 ; Emoji # E11.0 [2] (🧁..🧂) cupcake..salt +1F9C3..1F9CA ; Emoji # E12.0 [8] (🧃..🧊) beverage box..ice +1F9CB ; Emoji # E13.0 [1] (🧋) bubble tea +1F9CD..1F9CF ; Emoji # E12.0 [3] (🧍..🧏) person standing..deaf person +1F9D0..1F9E6 ; Emoji # E5.0 [23] (🧐..🧦) face with monocle..socks +1F9E7..1F9FF ; Emoji # E11.0 [25] (🧧..🧿) red envelope..nazar amulet +1FA70..1FA73 ; Emoji # E12.0 [4] (🩰..🩳) ballet shoes..shorts +1FA74 ; Emoji # E13.0 [1] (🩴) thong sandal +1FA78..1FA7A ; Emoji # E12.0 [3] (🩸..🩺) drop of blood..stethoscope +1FA80..1FA82 ; Emoji # E12.0 [3] (🪀..🪂) yo-yo..parachute +1FA83..1FA86 ; Emoji # E13.0 [4] (🪃..🪆) boomerang..nesting dolls +1FA90..1FA95 ; Emoji # E12.0 [6] (🪐..🪕) ringed planet..banjo +1FA96..1FAA8 ; Emoji # E13.0 [19] (🪖..🪨) military helmet..rock +1FAB0..1FAB6 ; Emoji # E13.0 [7] (🪰..🪶) fly..feather +1FAC0..1FAC2 ; Emoji # E13.0 [3] (🫀..🫂) anatomical heart..people hugging +1FAD0..1FAD6 ; Emoji # E13.0 [7] (🫐..🫖) blueberries..teapot + +# Total elements: 1367 + +# ================================================ + +# All omitted code points have Emoji_Presentation=No +# @missing: 0000..10FFFF ; Emoji_Presentation ; No + +231A..231B ; Emoji_Presentation # E0.6 [2] (⌚..⌛) watch..hourglass done +23E9..23EC ; Emoji_Presentation # E0.6 [4] (⏩..⏬) fast-forward button..fast down button +23F0 ; Emoji_Presentation # E0.6 [1] (⏰) alarm clock +23F3 ; Emoji_Presentation # E0.6 [1] (⏳) hourglass not done +25FD..25FE ; Emoji_Presentation # E0.6 [2] (◽..◾) white medium-small square..black medium-small square +2614..2615 ; Emoji_Presentation # E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage +2648..2653 ; Emoji_Presentation # E0.6 [12] (♈..♓) Aries..Pisces +267F ; Emoji_Presentation # E0.6 [1] (♿) wheelchair symbol +2693 ; Emoji_Presentation # E0.6 [1] (⚓) anchor +26A1 ; Emoji_Presentation # E0.6 [1] (⚡) high voltage +26AA..26AB ; Emoji_Presentation # E0.6 [2] (⚪..⚫) white circle..black circle +26BD..26BE ; Emoji_Presentation # E0.6 [2] (⚽..⚾) soccer ball..baseball +26C4..26C5 ; Emoji_Presentation # E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud +26CE ; Emoji_Presentation # E0.6 [1] (⛎) Ophiuchus +26D4 ; Emoji_Presentation # E0.6 [1] (⛔) no entry +26EA ; Emoji_Presentation # E0.6 [1] (⛪) church +26F2..26F3 ; Emoji_Presentation # E0.6 [2] (⛲..⛳) fountain..flag in hole +26F5 ; Emoji_Presentation # E0.6 [1] (⛵) sailboat +26FA ; Emoji_Presentation # E0.6 [1] (⛺) tent +26FD ; Emoji_Presentation # E0.6 [1] (⛽) fuel pump +2705 ; Emoji_Presentation # E0.6 [1] (✅) check mark button +270A..270B ; Emoji_Presentation # E0.6 [2] (✊..✋) raised fist..raised hand +2728 ; Emoji_Presentation # E0.6 [1] (✨) sparkles +274C ; Emoji_Presentation # E0.6 [1] (❌) cross mark +274E ; Emoji_Presentation # E0.6 [1] (❎) cross mark button +2753..2755 ; Emoji_Presentation # E0.6 [3] (❓..❕) question mark..white exclamation mark +2757 ; Emoji_Presentation # E0.6 [1] (❗) exclamation mark +2795..2797 ; Emoji_Presentation # E0.6 [3] (➕..➗) plus..divide +27B0 ; Emoji_Presentation # E0.6 [1] (➰) curly loop +27BF ; Emoji_Presentation # E1.0 [1] (➿) double curly loop +2B1B..2B1C ; Emoji_Presentation # E0.6 [2] (⬛..⬜) black large square..white large square +2B50 ; Emoji_Presentation # E0.6 [1] (⭐) star +2B55 ; Emoji_Presentation # E0.6 [1] (⭕) hollow red circle +1F004 ; Emoji_Presentation # E0.6 [1] (🀄) mahjong red dragon +1F0CF ; Emoji_Presentation # E0.6 [1] (🃏) joker +1F18E ; Emoji_Presentation # E0.6 [1] (🆎) AB button (blood type) +1F191..1F19A ; Emoji_Presentation # E0.6 [10] (🆑..🆚) CL button..VS button +1F1E6..1F1FF ; Emoji_Presentation # E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z +1F201 ; Emoji_Presentation # E0.6 [1] (🈁) Japanese “here” button +1F21A ; Emoji_Presentation # E0.6 [1] (🈚) Japanese “free of charge” button +1F22F ; Emoji_Presentation # E0.6 [1] (🈯) Japanese “reserved” button +1F232..1F236 ; Emoji_Presentation # E0.6 [5] (🈲..🈶) Japanese “prohibited” button..Japanese “not free of charge” button +1F238..1F23A ; Emoji_Presentation # E0.6 [3] (🈸..🈺) Japanese “application” button..Japanese “open for business” button +1F250..1F251 ; Emoji_Presentation # E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button +1F300..1F30C ; Emoji_Presentation # E0.6 [13] (🌀..🌌) cyclone..milky way +1F30D..1F30E ; Emoji_Presentation # E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas +1F30F ; Emoji_Presentation # E0.6 [1] (🌏) globe showing Asia-Australia +1F310 ; Emoji_Presentation # E1.0 [1] (🌐) globe with meridians +1F311 ; Emoji_Presentation # E0.6 [1] (🌑) new moon +1F312 ; Emoji_Presentation # E1.0 [1] (🌒) waxing crescent moon +1F313..1F315 ; Emoji_Presentation # E0.6 [3] (🌓..🌕) first quarter moon..full moon +1F316..1F318 ; Emoji_Presentation # E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon +1F319 ; Emoji_Presentation # E0.6 [1] (🌙) crescent moon +1F31A ; Emoji_Presentation # E1.0 [1] (🌚) new moon face +1F31B ; Emoji_Presentation # E0.6 [1] (🌛) first quarter moon face +1F31C ; Emoji_Presentation # E0.7 [1] (🌜) last quarter moon face +1F31D..1F31E ; Emoji_Presentation # E1.0 [2] (🌝..🌞) full moon face..sun with face +1F31F..1F320 ; Emoji_Presentation # E0.6 [2] (🌟..🌠) glowing star..shooting star +1F32D..1F32F ; Emoji_Presentation # E1.0 [3] (🌭..🌯) hot dog..burrito +1F330..1F331 ; Emoji_Presentation # E0.6 [2] (🌰..🌱) chestnut..seedling +1F332..1F333 ; Emoji_Presentation # E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree +1F334..1F335 ; Emoji_Presentation # E0.6 [2] (🌴..🌵) palm tree..cactus +1F337..1F34A ; Emoji_Presentation # E0.6 [20] (🌷..🍊) tulip..tangerine +1F34B ; Emoji_Presentation # E1.0 [1] (🍋) lemon +1F34C..1F34F ; Emoji_Presentation # E0.6 [4] (🍌..🍏) banana..green apple +1F350 ; Emoji_Presentation # E1.0 [1] (🍐) pear +1F351..1F37B ; Emoji_Presentation # E0.6 [43] (🍑..🍻) peach..clinking beer mugs +1F37C ; Emoji_Presentation # E1.0 [1] (🍼) baby bottle +1F37E..1F37F ; Emoji_Presentation # E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn +1F380..1F393 ; Emoji_Presentation # E0.6 [20] (🎀..🎓) ribbon..graduation cap +1F3A0..1F3C4 ; Emoji_Presentation # E0.6 [37] (🎠..🏄) carousel horse..person surfing +1F3C5 ; Emoji_Presentation # E1.0 [1] (🏅) sports medal +1F3C6 ; Emoji_Presentation # E0.6 [1] (🏆) trophy +1F3C7 ; Emoji_Presentation # E1.0 [1] (🏇) horse racing +1F3C8 ; Emoji_Presentation # E0.6 [1] (🏈) american football +1F3C9 ; Emoji_Presentation # E1.0 [1] (🏉) rugby football +1F3CA ; Emoji_Presentation # E0.6 [1] (🏊) person swimming +1F3CF..1F3D3 ; Emoji_Presentation # E1.0 [5] (🏏..🏓) cricket game..ping pong +1F3E0..1F3E3 ; Emoji_Presentation # E0.6 [4] (🏠..🏣) house..Japanese post office +1F3E4 ; Emoji_Presentation # E1.0 [1] (🏤) post office +1F3E5..1F3F0 ; Emoji_Presentation # E0.6 [12] (🏥..🏰) hospital..castle +1F3F4 ; Emoji_Presentation # E1.0 [1] (🏴) black flag +1F3F8..1F407 ; Emoji_Presentation # E1.0 [16] (🏸..🐇) badminton..rabbit +1F408 ; Emoji_Presentation # E0.7 [1] (🐈) cat +1F409..1F40B ; Emoji_Presentation # E1.0 [3] (🐉..🐋) dragon..whale +1F40C..1F40E ; Emoji_Presentation # E0.6 [3] (🐌..🐎) snail..horse +1F40F..1F410 ; Emoji_Presentation # E1.0 [2] (🐏..🐐) ram..goat +1F411..1F412 ; Emoji_Presentation # E0.6 [2] (🐑..🐒) ewe..monkey +1F413 ; Emoji_Presentation # E1.0 [1] (🐓) rooster +1F414 ; Emoji_Presentation # E0.6 [1] (🐔) chicken +1F415 ; Emoji_Presentation # E0.7 [1] (🐕) dog +1F416 ; Emoji_Presentation # E1.0 [1] (🐖) pig +1F417..1F429 ; Emoji_Presentation # E0.6 [19] (🐗..🐩) boar..poodle +1F42A ; Emoji_Presentation # E1.0 [1] (🐪) camel +1F42B..1F43E ; Emoji_Presentation # E0.6 [20] (🐫..🐾) two-hump camel..paw prints +1F440 ; Emoji_Presentation # E0.6 [1] (👀) eyes +1F442..1F464 ; Emoji_Presentation # E0.6 [35] (👂..👤) ear..bust in silhouette +1F465 ; Emoji_Presentation # E1.0 [1] (👥) busts in silhouette +1F466..1F46B ; Emoji_Presentation # E0.6 [6] (👦..👫) boy..woman and man holding hands +1F46C..1F46D ; Emoji_Presentation # E1.0 [2] (👬..👭) men holding hands..women holding hands +1F46E..1F4AC ; Emoji_Presentation # E0.6 [63] (👮..💬) police officer..speech balloon +1F4AD ; Emoji_Presentation # E1.0 [1] (💭) thought balloon +1F4AE..1F4B5 ; Emoji_Presentation # E0.6 [8] (💮..💵) white flower..dollar banknote +1F4B6..1F4B7 ; Emoji_Presentation # E1.0 [2] (💶..💷) euro banknote..pound banknote +1F4B8..1F4EB ; Emoji_Presentation # E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag +1F4EC..1F4ED ; Emoji_Presentation # E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag +1F4EE ; Emoji_Presentation # E0.6 [1] (📮) postbox +1F4EF ; Emoji_Presentation # E1.0 [1] (📯) postal horn +1F4F0..1F4F4 ; Emoji_Presentation # E0.6 [5] (📰..📴) newspaper..mobile phone off +1F4F5 ; Emoji_Presentation # E1.0 [1] (📵) no mobile phones +1F4F6..1F4F7 ; Emoji_Presentation # E0.6 [2] (📶..📷) antenna bars..camera +1F4F8 ; Emoji_Presentation # E1.0 [1] (📸) camera with flash +1F4F9..1F4FC ; Emoji_Presentation # E0.6 [4] (📹..📼) video camera..videocassette +1F4FF..1F502 ; Emoji_Presentation # E1.0 [4] (📿..🔂) prayer beads..repeat single button +1F503 ; Emoji_Presentation # E0.6 [1] (🔃) clockwise vertical arrows +1F504..1F507 ; Emoji_Presentation # E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker +1F508 ; Emoji_Presentation # E0.7 [1] (🔈) speaker low volume +1F509 ; Emoji_Presentation # E1.0 [1] (🔉) speaker medium volume +1F50A..1F514 ; Emoji_Presentation # E0.6 [11] (🔊..🔔) speaker high volume..bell +1F515 ; Emoji_Presentation # E1.0 [1] (🔕) bell with slash +1F516..1F52B ; Emoji_Presentation # E0.6 [22] (🔖..🔫) bookmark..pistol +1F52C..1F52D ; Emoji_Presentation # E1.0 [2] (🔬..🔭) microscope..telescope +1F52E..1F53D ; Emoji_Presentation # E0.6 [16] (🔮..🔽) crystal ball..downwards button +1F54B..1F54E ; Emoji_Presentation # E1.0 [4] (🕋..🕎) kaaba..menorah +1F550..1F55B ; Emoji_Presentation # E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock +1F55C..1F567 ; Emoji_Presentation # E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty +1F57A ; Emoji_Presentation # E3.0 [1] (🕺) man dancing +1F595..1F596 ; Emoji_Presentation # E1.0 [2] (🖕..🖖) middle finger..vulcan salute +1F5A4 ; Emoji_Presentation # E3.0 [1] (🖤) black heart +1F5FB..1F5FF ; Emoji_Presentation # E0.6 [5] (🗻..🗿) mount fuji..moai +1F600 ; Emoji_Presentation # E1.0 [1] (😀) grinning face +1F601..1F606 ; Emoji_Presentation # E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face +1F607..1F608 ; Emoji_Presentation # E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns +1F609..1F60D ; Emoji_Presentation # E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes +1F60E ; Emoji_Presentation # E1.0 [1] (😎) smiling face with sunglasses +1F60F ; Emoji_Presentation # E0.6 [1] (😏) smirking face +1F610 ; Emoji_Presentation # E0.7 [1] (😐) neutral face +1F611 ; Emoji_Presentation # E1.0 [1] (😑) expressionless face +1F612..1F614 ; Emoji_Presentation # E0.6 [3] (😒..😔) unamused face..pensive face +1F615 ; Emoji_Presentation # E1.0 [1] (😕) confused face +1F616 ; Emoji_Presentation # E0.6 [1] (😖) confounded face +1F617 ; Emoji_Presentation # E1.0 [1] (😗) kissing face +1F618 ; Emoji_Presentation # E0.6 [1] (😘) face blowing a kiss +1F619 ; Emoji_Presentation # E1.0 [1] (😙) kissing face with smiling eyes +1F61A ; Emoji_Presentation # E0.6 [1] (😚) kissing face with closed eyes +1F61B ; Emoji_Presentation # E1.0 [1] (😛) face with tongue +1F61C..1F61E ; Emoji_Presentation # E0.6 [3] (😜..😞) winking face with tongue..disappointed face +1F61F ; Emoji_Presentation # E1.0 [1] (😟) worried face +1F620..1F625 ; Emoji_Presentation # E0.6 [6] (😠..😥) angry face..sad but relieved face +1F626..1F627 ; Emoji_Presentation # E1.0 [2] (😦..😧) frowning face with open mouth..anguished face +1F628..1F62B ; Emoji_Presentation # E0.6 [4] (😨..😫) fearful face..tired face +1F62C ; Emoji_Presentation # E1.0 [1] (😬) grimacing face +1F62D ; Emoji_Presentation # E0.6 [1] (😭) loudly crying face +1F62E..1F62F ; Emoji_Presentation # E1.0 [2] (😮..😯) face with open mouth..hushed face +1F630..1F633 ; Emoji_Presentation # E0.6 [4] (😰..😳) anxious face with sweat..flushed face +1F634 ; Emoji_Presentation # E1.0 [1] (😴) sleeping face +1F635 ; Emoji_Presentation # E0.6 [1] (😵) dizzy face +1F636 ; Emoji_Presentation # E1.0 [1] (😶) face without mouth +1F637..1F640 ; Emoji_Presentation # E0.6 [10] (😷..🙀) face with medical mask..weary cat +1F641..1F644 ; Emoji_Presentation # E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes +1F645..1F64F ; Emoji_Presentation # E0.6 [11] (🙅..🙏) person gesturing NO..folded hands +1F680 ; Emoji_Presentation # E0.6 [1] (🚀) rocket +1F681..1F682 ; Emoji_Presentation # E1.0 [2] (🚁..🚂) helicopter..locomotive +1F683..1F685 ; Emoji_Presentation # E0.6 [3] (🚃..🚅) railway car..bullet train +1F686 ; Emoji_Presentation # E1.0 [1] (🚆) train +1F687 ; Emoji_Presentation # E0.6 [1] (🚇) metro +1F688 ; Emoji_Presentation # E1.0 [1] (🚈) light rail +1F689 ; Emoji_Presentation # E0.6 [1] (🚉) station +1F68A..1F68B ; Emoji_Presentation # E1.0 [2] (🚊..🚋) tram..tram car +1F68C ; Emoji_Presentation # E0.6 [1] (🚌) bus +1F68D ; Emoji_Presentation # E0.7 [1] (🚍) oncoming bus +1F68E ; Emoji_Presentation # E1.0 [1] (🚎) trolleybus +1F68F ; Emoji_Presentation # E0.6 [1] (🚏) bus stop +1F690 ; Emoji_Presentation # E1.0 [1] (🚐) minibus +1F691..1F693 ; Emoji_Presentation # E0.6 [3] (🚑..🚓) ambulance..police car +1F694 ; Emoji_Presentation # E0.7 [1] (🚔) oncoming police car +1F695 ; Emoji_Presentation # E0.6 [1] (🚕) taxi +1F696 ; Emoji_Presentation # E1.0 [1] (🚖) oncoming taxi +1F697 ; Emoji_Presentation # E0.6 [1] (🚗) automobile +1F698 ; Emoji_Presentation # E0.7 [1] (🚘) oncoming automobile +1F699..1F69A ; Emoji_Presentation # E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck +1F69B..1F6A1 ; Emoji_Presentation # E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway +1F6A2 ; Emoji_Presentation # E0.6 [1] (🚢) ship +1F6A3 ; Emoji_Presentation # E1.0 [1] (🚣) person rowing boat +1F6A4..1F6A5 ; Emoji_Presentation # E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light +1F6A6 ; Emoji_Presentation # E1.0 [1] (🚦) vertical traffic light +1F6A7..1F6AD ; Emoji_Presentation # E0.6 [7] (🚧..🚭) construction..no smoking +1F6AE..1F6B1 ; Emoji_Presentation # E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water +1F6B2 ; Emoji_Presentation # E0.6 [1] (🚲) bicycle +1F6B3..1F6B5 ; Emoji_Presentation # E1.0 [3] (🚳..🚵) no bicycles..person mountain biking +1F6B6 ; Emoji_Presentation # E0.6 [1] (🚶) person walking +1F6B7..1F6B8 ; Emoji_Presentation # E1.0 [2] (🚷..🚸) no pedestrians..children crossing +1F6B9..1F6BE ; Emoji_Presentation # E0.6 [6] (🚹..🚾) men’s room..water closet +1F6BF ; Emoji_Presentation # E1.0 [1] (🚿) shower +1F6C0 ; Emoji_Presentation # E0.6 [1] (🛀) person taking bath +1F6C1..1F6C5 ; Emoji_Presentation # E1.0 [5] (🛁..🛅) bathtub..left luggage +1F6CC ; Emoji_Presentation # E1.0 [1] (🛌) person in bed +1F6D0 ; Emoji_Presentation # E1.0 [1] (🛐) place of worship +1F6D1..1F6D2 ; Emoji_Presentation # E3.0 [2] (🛑..🛒) stop sign..shopping cart +1F6D5 ; Emoji_Presentation # E12.0 [1] (🛕) hindu temple +1F6D6..1F6D7 ; Emoji_Presentation # E13.0 [2] (🛖..🛗) hut..elevator +1F6EB..1F6EC ; Emoji_Presentation # E1.0 [2] (🛫..🛬) airplane departure..airplane arrival +1F6F4..1F6F6 ; Emoji_Presentation # E3.0 [3] (🛴..🛶) kick scooter..canoe +1F6F7..1F6F8 ; Emoji_Presentation # E5.0 [2] (🛷..🛸) sled..flying saucer +1F6F9 ; Emoji_Presentation # E11.0 [1] (🛹) skateboard +1F6FA ; Emoji_Presentation # E12.0 [1] (🛺) auto rickshaw +1F6FB..1F6FC ; Emoji_Presentation # E13.0 [2] (🛻..🛼) pickup truck..roller skate +1F7E0..1F7EB ; Emoji_Presentation # E12.0 [12] (🟠..🟫) orange circle..brown square +1F90C ; Emoji_Presentation # E13.0 [1] (🤌) pinched fingers +1F90D..1F90F ; Emoji_Presentation # E12.0 [3] (🤍..🤏) white heart..pinching hand +1F910..1F918 ; Emoji_Presentation # E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns +1F919..1F91E ; Emoji_Presentation # E3.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Emoji_Presentation # E5.0 [1] (🤟) love-you gesture +1F920..1F927 ; Emoji_Presentation # E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face +1F928..1F92F ; Emoji_Presentation # E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head +1F930 ; Emoji_Presentation # E3.0 [1] (🤰) pregnant woman +1F931..1F932 ; Emoji_Presentation # E5.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F93A ; Emoji_Presentation # E3.0 [8] (🤳..🤺) selfie..person fencing +1F93C..1F93E ; Emoji_Presentation # E3.0 [3] (🤼..🤾) people wrestling..person playing handball +1F93F ; Emoji_Presentation # E12.0 [1] (🤿) diving mask +1F940..1F945 ; Emoji_Presentation # E3.0 [6] (🥀..🥅) wilted flower..goal net +1F947..1F94B ; Emoji_Presentation # E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform +1F94C ; Emoji_Presentation # E5.0 [1] (🥌) curling stone +1F94D..1F94F ; Emoji_Presentation # E11.0 [3] (🥍..🥏) lacrosse..flying disc +1F950..1F95E ; Emoji_Presentation # E3.0 [15] (🥐..🥞) croissant..pancakes +1F95F..1F96B ; Emoji_Presentation # E5.0 [13] (🥟..🥫) dumpling..canned food +1F96C..1F970 ; Emoji_Presentation # E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts +1F971 ; Emoji_Presentation # E12.0 [1] (🥱) yawning face +1F972 ; Emoji_Presentation # E13.0 [1] (🥲) smiling face with tear +1F973..1F976 ; Emoji_Presentation # E11.0 [4] (🥳..🥶) partying face..cold face +1F977..1F978 ; Emoji_Presentation # E13.0 [2] (🥷..🥸) ninja..disguised face +1F97A ; Emoji_Presentation # E11.0 [1] (🥺) pleading face +1F97B ; Emoji_Presentation # E12.0 [1] (🥻) sari +1F97C..1F97F ; Emoji_Presentation # E11.0 [4] (🥼..🥿) lab coat..flat shoe +1F980..1F984 ; Emoji_Presentation # E1.0 [5] (🦀..🦄) crab..unicorn +1F985..1F991 ; Emoji_Presentation # E3.0 [13] (🦅..🦑) eagle..squid +1F992..1F997 ; Emoji_Presentation # E5.0 [6] (🦒..🦗) giraffe..cricket +1F998..1F9A2 ; Emoji_Presentation # E11.0 [11] (🦘..🦢) kangaroo..swan +1F9A3..1F9A4 ; Emoji_Presentation # E13.0 [2] (🦣..🦤) mammoth..dodo +1F9A5..1F9AA ; Emoji_Presentation # E12.0 [6] (🦥..🦪) sloth..oyster +1F9AB..1F9AD ; Emoji_Presentation # E13.0 [3] (🦫..🦭) beaver..seal +1F9AE..1F9AF ; Emoji_Presentation # E12.0 [2] (🦮..🦯) guide dog..white cane +1F9B0..1F9B9 ; Emoji_Presentation # E11.0 [10] (🦰..🦹) red hair..supervillain +1F9BA..1F9BF ; Emoji_Presentation # E12.0 [6] (🦺..🦿) safety vest..mechanical leg +1F9C0 ; Emoji_Presentation # E1.0 [1] (🧀) cheese wedge +1F9C1..1F9C2 ; Emoji_Presentation # E11.0 [2] (🧁..🧂) cupcake..salt +1F9C3..1F9CA ; Emoji_Presentation # E12.0 [8] (🧃..🧊) beverage box..ice +1F9CB ; Emoji_Presentation # E13.0 [1] (🧋) bubble tea +1F9CD..1F9CF ; Emoji_Presentation # E12.0 [3] (🧍..🧏) person standing..deaf person +1F9D0..1F9E6 ; Emoji_Presentation # E5.0 [23] (🧐..🧦) face with monocle..socks +1F9E7..1F9FF ; Emoji_Presentation # E11.0 [25] (🧧..🧿) red envelope..nazar amulet +1FA70..1FA73 ; Emoji_Presentation # E12.0 [4] (🩰..🩳) ballet shoes..shorts +1FA74 ; Emoji_Presentation # E13.0 [1] (🩴) thong sandal +1FA78..1FA7A ; Emoji_Presentation # E12.0 [3] (🩸..🩺) drop of blood..stethoscope +1FA80..1FA82 ; Emoji_Presentation # E12.0 [3] (🪀..🪂) yo-yo..parachute +1FA83..1FA86 ; Emoji_Presentation # E13.0 [4] (🪃..🪆) boomerang..nesting dolls +1FA90..1FA95 ; Emoji_Presentation # E12.0 [6] (🪐..🪕) ringed planet..banjo +1FA96..1FAA8 ; Emoji_Presentation # E13.0 [19] (🪖..🪨) military helmet..rock +1FAB0..1FAB6 ; Emoji_Presentation # E13.0 [7] (🪰..🪶) fly..feather +1FAC0..1FAC2 ; Emoji_Presentation # E13.0 [3] (🫀..🫂) anatomical heart..people hugging +1FAD0..1FAD6 ; Emoji_Presentation # E13.0 [7] (🫐..🫖) blueberries..teapot + +# Total elements: 1148 + +# ================================================ + +# All omitted code points have Emoji_Modifier=No +# @missing: 0000..10FFFF ; Emoji_Modifier ; No + +1F3FB..1F3FF ; Emoji_Modifier # E1.0 [5] (🏻..🏿) light skin tone..dark skin tone + +# Total elements: 5 + +# ================================================ + +# All omitted code points have Emoji_Modifier_Base=No +# @missing: 0000..10FFFF ; Emoji_Modifier_Base ; No + +261D ; Emoji_Modifier_Base # E0.6 [1] (☝️) index pointing up +26F9 ; Emoji_Modifier_Base # E0.7 [1] (⛹️) person bouncing ball +270A..270C ; Emoji_Modifier_Base # E0.6 [3] (✊..✌️) raised fist..victory hand +270D ; Emoji_Modifier_Base # E0.7 [1] (✍️) writing hand +1F385 ; Emoji_Modifier_Base # E0.6 [1] (🎅) Santa Claus +1F3C2..1F3C4 ; Emoji_Modifier_Base # E0.6 [3] (🏂..🏄) snowboarder..person surfing +1F3C7 ; Emoji_Modifier_Base # E1.0 [1] (🏇) horse racing +1F3CA ; Emoji_Modifier_Base # E0.6 [1] (🏊) person swimming +1F3CB..1F3CC ; Emoji_Modifier_Base # E0.7 [2] (🏋️..🏌️) person lifting weights..person golfing +1F442..1F443 ; Emoji_Modifier_Base # E0.6 [2] (👂..👃) ear..nose +1F446..1F450 ; Emoji_Modifier_Base # E0.6 [11] (👆..👐) backhand index pointing up..open hands +1F466..1F46B ; Emoji_Modifier_Base # E0.6 [6] (👦..👫) boy..woman and man holding hands +1F46C..1F46D ; Emoji_Modifier_Base # E1.0 [2] (👬..👭) men holding hands..women holding hands +1F46E..1F478 ; Emoji_Modifier_Base # E0.6 [11] (👮..👸) police officer..princess +1F47C ; Emoji_Modifier_Base # E0.6 [1] (👼) baby angel +1F481..1F483 ; Emoji_Modifier_Base # E0.6 [3] (💁..💃) person tipping hand..woman dancing +1F485..1F487 ; Emoji_Modifier_Base # E0.6 [3] (💅..💇) nail polish..person getting haircut +1F48F ; Emoji_Modifier_Base # E0.6 [1] (💏) kiss +1F491 ; Emoji_Modifier_Base # E0.6 [1] (💑) couple with heart +1F4AA ; Emoji_Modifier_Base # E0.6 [1] (💪) flexed biceps +1F574..1F575 ; Emoji_Modifier_Base # E0.7 [2] (🕴️..🕵️) person in suit levitating..detective +1F57A ; Emoji_Modifier_Base # E3.0 [1] (🕺) man dancing +1F590 ; Emoji_Modifier_Base # E0.7 [1] (🖐️) hand with fingers splayed +1F595..1F596 ; Emoji_Modifier_Base # E1.0 [2] (🖕..🖖) middle finger..vulcan salute +1F645..1F647 ; Emoji_Modifier_Base # E0.6 [3] (🙅..🙇) person gesturing NO..person bowing +1F64B..1F64F ; Emoji_Modifier_Base # E0.6 [5] (🙋..🙏) person raising hand..folded hands +1F6A3 ; Emoji_Modifier_Base # E1.0 [1] (🚣) person rowing boat +1F6B4..1F6B5 ; Emoji_Modifier_Base # E1.0 [2] (🚴..🚵) person biking..person mountain biking +1F6B6 ; Emoji_Modifier_Base # E0.6 [1] (🚶) person walking +1F6C0 ; Emoji_Modifier_Base # E0.6 [1] (🛀) person taking bath +1F6CC ; Emoji_Modifier_Base # E1.0 [1] (🛌) person in bed +1F90C ; Emoji_Modifier_Base # E13.0 [1] (🤌) pinched fingers +1F90F ; Emoji_Modifier_Base # E12.0 [1] (🤏) pinching hand +1F918 ; Emoji_Modifier_Base # E1.0 [1] (🤘) sign of the horns +1F919..1F91E ; Emoji_Modifier_Base # E3.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Emoji_Modifier_Base # E5.0 [1] (🤟) love-you gesture +1F926 ; Emoji_Modifier_Base # E3.0 [1] (🤦) person facepalming +1F930 ; Emoji_Modifier_Base # E3.0 [1] (🤰) pregnant woman +1F931..1F932 ; Emoji_Modifier_Base # E5.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F939 ; Emoji_Modifier_Base # E3.0 [7] (🤳..🤹) selfie..person juggling +1F93C..1F93E ; Emoji_Modifier_Base # E3.0 [3] (🤼..🤾) people wrestling..person playing handball +1F977 ; Emoji_Modifier_Base # E13.0 [1] (🥷) ninja +1F9B5..1F9B6 ; Emoji_Modifier_Base # E11.0 [2] (🦵..🦶) leg..foot +1F9B8..1F9B9 ; Emoji_Modifier_Base # E11.0 [2] (🦸..🦹) superhero..supervillain +1F9BB ; Emoji_Modifier_Base # E12.0 [1] (🦻) ear with hearing aid +1F9CD..1F9CF ; Emoji_Modifier_Base # E12.0 [3] (🧍..🧏) person standing..deaf person +1F9D1..1F9DD ; Emoji_Modifier_Base # E5.0 [13] (🧑..🧝) person..elf + +# Total elements: 122 + +# ================================================ + +# All omitted code points have Emoji_Component=No +# @missing: 0000..10FFFF ; Emoji_Component ; No + +0023 ; Emoji_Component # E0.0 [1] (#️) number sign +002A ; Emoji_Component # E0.0 [1] (*️) asterisk +0030..0039 ; Emoji_Component # E0.0 [10] (0️..9️) digit zero..digit nine +200D ; Emoji_Component # E0.0 [1] (‍) zero width joiner +20E3 ; Emoji_Component # E0.0 [1] (⃣) combining enclosing keycap +FE0F ; Emoji_Component # E0.0 [1] () VARIATION SELECTOR-16 +1F1E6..1F1FF ; Emoji_Component # E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z +1F3FB..1F3FF ; Emoji_Component # E1.0 [5] (🏻..🏿) light skin tone..dark skin tone +1F9B0..1F9B3 ; Emoji_Component # E11.0 [4] (🦰..🦳) red hair..white hair +E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..cancel tag + +# Total elements: 146 + +# ================================================ + +# All omitted code points have Extended_Pictographic=No +# @missing: 0000..10FFFF ; Extended_Pictographic ; No + +00A9 ; Extended_Pictographic# E0.6 [1] (©️) copyright +00AE ; Extended_Pictographic# E0.6 [1] (®️) registered +203C ; Extended_Pictographic# E0.6 [1] (‼️) double exclamation mark +2049 ; Extended_Pictographic# E0.6 [1] (⁉️) exclamation question mark +2122 ; Extended_Pictographic# E0.6 [1] (™️) trade mark +2139 ; Extended_Pictographic# E0.6 [1] (ℹ️) information +2194..2199 ; Extended_Pictographic# E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow +21A9..21AA ; Extended_Pictographic# E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right +231A..231B ; Extended_Pictographic# E0.6 [2] (⌚..⌛) watch..hourglass done +2328 ; Extended_Pictographic# E1.0 [1] (⌨️) keyboard +2388 ; Extended_Pictographic# E0.0 [1] (⎈) HELM SYMBOL +23CF ; Extended_Pictographic# E1.0 [1] (⏏️) eject button +23E9..23EC ; Extended_Pictographic# E0.6 [4] (⏩..⏬) fast-forward button..fast down button +23ED..23EE ; Extended_Pictographic# E0.7 [2] (⏭️..⏮️) next track button..last track button +23EF ; Extended_Pictographic# E1.0 [1] (⏯️) play or pause button +23F0 ; Extended_Pictographic# E0.6 [1] (⏰) alarm clock +23F1..23F2 ; Extended_Pictographic# E1.0 [2] (⏱️..⏲️) stopwatch..timer clock +23F3 ; Extended_Pictographic# E0.6 [1] (⏳) hourglass not done +23F8..23FA ; Extended_Pictographic# E0.7 [3] (⏸️..⏺️) pause button..record button +24C2 ; Extended_Pictographic# E0.6 [1] (Ⓜ️) circled M +25AA..25AB ; Extended_Pictographic# E0.6 [2] (▪️..▫️) black small square..white small square +25B6 ; Extended_Pictographic# E0.6 [1] (▶️) play button +25C0 ; Extended_Pictographic# E0.6 [1] (◀️) reverse button +25FB..25FE ; Extended_Pictographic# E0.6 [4] (◻️..◾) white medium square..black medium-small square +2600..2601 ; Extended_Pictographic# E0.6 [2] (☀️..☁️) sun..cloud +2602..2603 ; Extended_Pictographic# E0.7 [2] (☂️..☃️) umbrella..snowman +2604 ; Extended_Pictographic# E1.0 [1] (☄️) comet +2605 ; Extended_Pictographic# E0.0 [1] (★) BLACK STAR +2607..260D ; Extended_Pictographic# E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION +260E ; Extended_Pictographic# E0.6 [1] (☎️) telephone +260F..2610 ; Extended_Pictographic# E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX +2611 ; Extended_Pictographic# E0.6 [1] (☑️) check box with check +2612 ; Extended_Pictographic# E0.0 [1] (☒) BALLOT BOX WITH X +2614..2615 ; Extended_Pictographic# E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage +2616..2617 ; Extended_Pictographic# E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE +2618 ; Extended_Pictographic# E1.0 [1] (☘️) shamrock +2619..261C ; Extended_Pictographic# E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX +261D ; Extended_Pictographic# E0.6 [1] (☝️) index pointing up +261E..261F ; Extended_Pictographic# E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX +2620 ; Extended_Pictographic# E1.0 [1] (☠️) skull and crossbones +2621 ; Extended_Pictographic# E0.0 [1] (☡) CAUTION SIGN +2622..2623 ; Extended_Pictographic# E1.0 [2] (☢️..☣️) radioactive..biohazard +2624..2625 ; Extended_Pictographic# E0.0 [2] (☤..☥) CADUCEUS..ANKH +2626 ; Extended_Pictographic# E1.0 [1] (☦️) orthodox cross +2627..2629 ; Extended_Pictographic# E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM +262A ; Extended_Pictographic# E0.7 [1] (☪️) star and crescent +262B..262D ; Extended_Pictographic# E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE +262E ; Extended_Pictographic# E1.0 [1] (☮️) peace symbol +262F ; Extended_Pictographic# E0.7 [1] (☯️) yin yang +2630..2637 ; Extended_Pictographic# E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH +2638..2639 ; Extended_Pictographic# E0.7 [2] (☸️..☹️) wheel of dharma..frowning face +263A ; Extended_Pictographic# E0.6 [1] (☺️) smiling face +263B..263F ; Extended_Pictographic# E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY +2640 ; Extended_Pictographic# E4.0 [1] (♀️) female sign +2641 ; Extended_Pictographic# E0.0 [1] (♁) EARTH +2642 ; Extended_Pictographic# E4.0 [1] (♂️) male sign +2643..2647 ; Extended_Pictographic# E0.0 [5] (♃..♇) JUPITER..PLUTO +2648..2653 ; Extended_Pictographic# E0.6 [12] (♈..♓) Aries..Pisces +2654..265E ; Extended_Pictographic# E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT +265F ; Extended_Pictographic# E11.0 [1] (♟️) chess pawn +2660 ; Extended_Pictographic# E0.6 [1] (♠️) spade suit +2661..2662 ; Extended_Pictographic# E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT +2663 ; Extended_Pictographic# E0.6 [1] (♣️) club suit +2664 ; Extended_Pictographic# E0.0 [1] (♤) WHITE SPADE SUIT +2665..2666 ; Extended_Pictographic# E0.6 [2] (♥️..♦️) heart suit..diamond suit +2667 ; Extended_Pictographic# E0.0 [1] (♧) WHITE CLUB SUIT +2668 ; Extended_Pictographic# E0.6 [1] (♨️) hot springs +2669..267A ; Extended_Pictographic# E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS +267B ; Extended_Pictographic# E0.6 [1] (♻️) recycling symbol +267C..267D ; Extended_Pictographic# E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL +267E ; Extended_Pictographic# E11.0 [1] (♾️) infinity +267F ; Extended_Pictographic# E0.6 [1] (♿) wheelchair symbol +2680..2685 ; Extended_Pictographic# E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 +2690..2691 ; Extended_Pictographic# E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG +2692 ; Extended_Pictographic# E1.0 [1] (⚒️) hammer and pick +2693 ; Extended_Pictographic# E0.6 [1] (⚓) anchor +2694 ; Extended_Pictographic# E1.0 [1] (⚔️) crossed swords +2695 ; Extended_Pictographic# E4.0 [1] (⚕️) medical symbol +2696..2697 ; Extended_Pictographic# E1.0 [2] (⚖️..⚗️) balance scale..alembic +2698 ; Extended_Pictographic# E0.0 [1] (⚘) FLOWER +2699 ; Extended_Pictographic# E1.0 [1] (⚙️) gear +269A ; Extended_Pictographic# E0.0 [1] (⚚) STAFF OF HERMES +269B..269C ; Extended_Pictographic# E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis +269D..269F ; Extended_Pictographic# E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT +26A0..26A1 ; Extended_Pictographic# E0.6 [2] (⚠️..⚡) warning..high voltage +26A2..26A6 ; Extended_Pictographic# E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN +26A7 ; Extended_Pictographic# E13.0 [1] (⚧️) transgender symbol +26A8..26A9 ; Extended_Pictographic# E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN +26AA..26AB ; Extended_Pictographic# E0.6 [2] (⚪..⚫) white circle..black circle +26AC..26AF ; Extended_Pictographic# E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL +26B0..26B1 ; Extended_Pictographic# E1.0 [2] (⚰️..⚱️) coffin..funeral urn +26B2..26BC ; Extended_Pictographic# E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE +26BD..26BE ; Extended_Pictographic# E0.6 [2] (⚽..⚾) soccer ball..baseball +26BF..26C3 ; Extended_Pictographic# E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING +26C4..26C5 ; Extended_Pictographic# E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud +26C6..26C7 ; Extended_Pictographic# E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN +26C8 ; Extended_Pictographic# E0.7 [1] (⛈️) cloud with lightning and rain +26C9..26CD ; Extended_Pictographic# E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR +26CE ; Extended_Pictographic# E0.6 [1] (⛎) Ophiuchus +26CF ; Extended_Pictographic# E0.7 [1] (⛏️) pick +26D0 ; Extended_Pictographic# E0.0 [1] (⛐) CAR SLIDING +26D1 ; Extended_Pictographic# E0.7 [1] (⛑️) rescue worker’s helmet +26D2 ; Extended_Pictographic# E0.0 [1] (⛒) CIRCLED CROSSING LANES +26D3 ; Extended_Pictographic# E0.7 [1] (⛓️) chains +26D4 ; Extended_Pictographic# E0.6 [1] (⛔) no entry +26D5..26E8 ; Extended_Pictographic# E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD +26E9 ; Extended_Pictographic# E0.7 [1] (⛩️) shinto shrine +26EA ; Extended_Pictographic# E0.6 [1] (⛪) church +26EB..26EF ; Extended_Pictographic# E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE +26F0..26F1 ; Extended_Pictographic# E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground +26F2..26F3 ; Extended_Pictographic# E0.6 [2] (⛲..⛳) fountain..flag in hole +26F4 ; Extended_Pictographic# E0.7 [1] (⛴️) ferry +26F5 ; Extended_Pictographic# E0.6 [1] (⛵) sailboat +26F6 ; Extended_Pictographic# E0.0 [1] (⛶) SQUARE FOUR CORNERS +26F7..26F9 ; Extended_Pictographic# E0.7 [3] (⛷️..⛹️) skier..person bouncing ball +26FA ; Extended_Pictographic# E0.6 [1] (⛺) tent +26FB..26FC ; Extended_Pictographic# E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL +26FD ; Extended_Pictographic# E0.6 [1] (⛽) fuel pump +26FE..2701 ; Extended_Pictographic# E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS +2702 ; Extended_Pictographic# E0.6 [1] (✂️) scissors +2703..2704 ; Extended_Pictographic# E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS +2705 ; Extended_Pictographic# E0.6 [1] (✅) check mark button +2708..270C ; Extended_Pictographic# E0.6 [5] (✈️..✌️) airplane..victory hand +270D ; Extended_Pictographic# E0.7 [1] (✍️) writing hand +270E ; Extended_Pictographic# E0.0 [1] (✎) LOWER RIGHT PENCIL +270F ; Extended_Pictographic# E0.6 [1] (✏️) pencil +2710..2711 ; Extended_Pictographic# E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB +2712 ; Extended_Pictographic# E0.6 [1] (✒️) black nib +2714 ; Extended_Pictographic# E0.6 [1] (✔️) check mark +2716 ; Extended_Pictographic# E0.6 [1] (✖️) multiply +271D ; Extended_Pictographic# E0.7 [1] (✝️) latin cross +2721 ; Extended_Pictographic# E0.7 [1] (✡️) star of David +2728 ; Extended_Pictographic# E0.6 [1] (✨) sparkles +2733..2734 ; Extended_Pictographic# E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star +2744 ; Extended_Pictographic# E0.6 [1] (❄️) snowflake +2747 ; Extended_Pictographic# E0.6 [1] (❇️) sparkle +274C ; Extended_Pictographic# E0.6 [1] (❌) cross mark +274E ; Extended_Pictographic# E0.6 [1] (❎) cross mark button +2753..2755 ; Extended_Pictographic# E0.6 [3] (❓..❕) question mark..white exclamation mark +2757 ; Extended_Pictographic# E0.6 [1] (❗) exclamation mark +2763 ; Extended_Pictographic# E1.0 [1] (❣️) heart exclamation +2764 ; Extended_Pictographic# E0.6 [1] (❤️) red heart +2765..2767 ; Extended_Pictographic# E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET +2795..2797 ; Extended_Pictographic# E0.6 [3] (➕..➗) plus..divide +27A1 ; Extended_Pictographic# E0.6 [1] (➡️) right arrow +27B0 ; Extended_Pictographic# E0.6 [1] (➰) curly loop +27BF ; Extended_Pictographic# E1.0 [1] (➿) double curly loop +2934..2935 ; Extended_Pictographic# E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down +2B05..2B07 ; Extended_Pictographic# E0.6 [3] (⬅️..⬇️) left arrow..down arrow +2B1B..2B1C ; Extended_Pictographic# E0.6 [2] (⬛..⬜) black large square..white large square +2B50 ; Extended_Pictographic# E0.6 [1] (⭐) star +2B55 ; Extended_Pictographic# E0.6 [1] (⭕) hollow red circle +3030 ; Extended_Pictographic# E0.6 [1] (〰️) wavy dash +303D ; Extended_Pictographic# E0.6 [1] (〽️) part alternation mark +3297 ; Extended_Pictographic# E0.6 [1] (㊗️) Japanese “congratulations” button +3299 ; Extended_Pictographic# E0.6 [1] (㊙️) Japanese “secret” button +1F000..1F003 ; Extended_Pictographic# E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND +1F004 ; Extended_Pictographic# E0.6 [1] (🀄) mahjong red dragon +1F005..1F0CE ; Extended_Pictographic# E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS +1F0CF ; Extended_Pictographic# E0.6 [1] (🃏) joker +1F0D0..1F0FF ; Extended_Pictographic# E0.0 [48] (🃐..🃿) .. +1F10D..1F10F ; Extended_Pictographic# E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH +1F12F ; Extended_Pictographic# E0.0 [1] (🄯) COPYLEFT SYMBOL +1F16C..1F16F ; Extended_Pictographic# E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE +1F170..1F171 ; Extended_Pictographic# E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) +1F17E..1F17F ; Extended_Pictographic# E0.6 [2] (🅾️..🅿️) O button (blood type)..P button +1F18E ; Extended_Pictographic# E0.6 [1] (🆎) AB button (blood type) +1F191..1F19A ; Extended_Pictographic# E0.6 [10] (🆑..🆚) CL button..VS button +1F1AD..1F1E5 ; Extended_Pictographic# E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. +1F201..1F202 ; Extended_Pictographic# E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button +1F203..1F20F ; Extended_Pictographic# E0.0 [13] (🈃..🈏) .. +1F21A ; Extended_Pictographic# E0.6 [1] (🈚) Japanese “free of charge” button +1F22F ; Extended_Pictographic# E0.6 [1] (🈯) Japanese “reserved” button +1F232..1F23A ; Extended_Pictographic# E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button +1F23C..1F23F ; Extended_Pictographic# E0.0 [4] (🈼..🈿) .. +1F249..1F24F ; Extended_Pictographic# E0.0 [7] (🉉..🉏) .. +1F250..1F251 ; Extended_Pictographic# E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button +1F252..1F2FF ; Extended_Pictographic# E0.0 [174] (🉒..🋿) .. +1F300..1F30C ; Extended_Pictographic# E0.6 [13] (🌀..🌌) cyclone..milky way +1F30D..1F30E ; Extended_Pictographic# E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas +1F30F ; Extended_Pictographic# E0.6 [1] (🌏) globe showing Asia-Australia +1F310 ; Extended_Pictographic# E1.0 [1] (🌐) globe with meridians +1F311 ; Extended_Pictographic# E0.6 [1] (🌑) new moon +1F312 ; Extended_Pictographic# E1.0 [1] (🌒) waxing crescent moon +1F313..1F315 ; Extended_Pictographic# E0.6 [3] (🌓..🌕) first quarter moon..full moon +1F316..1F318 ; Extended_Pictographic# E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon +1F319 ; Extended_Pictographic# E0.6 [1] (🌙) crescent moon +1F31A ; Extended_Pictographic# E1.0 [1] (🌚) new moon face +1F31B ; Extended_Pictographic# E0.6 [1] (🌛) first quarter moon face +1F31C ; Extended_Pictographic# E0.7 [1] (🌜) last quarter moon face +1F31D..1F31E ; Extended_Pictographic# E1.0 [2] (🌝..🌞) full moon face..sun with face +1F31F..1F320 ; Extended_Pictographic# E0.6 [2] (🌟..🌠) glowing star..shooting star +1F321 ; Extended_Pictographic# E0.7 [1] (🌡️) thermometer +1F322..1F323 ; Extended_Pictographic# E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN +1F324..1F32C ; Extended_Pictographic# E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face +1F32D..1F32F ; Extended_Pictographic# E1.0 [3] (🌭..🌯) hot dog..burrito +1F330..1F331 ; Extended_Pictographic# E0.6 [2] (🌰..🌱) chestnut..seedling +1F332..1F333 ; Extended_Pictographic# E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree +1F334..1F335 ; Extended_Pictographic# E0.6 [2] (🌴..🌵) palm tree..cactus +1F336 ; Extended_Pictographic# E0.7 [1] (🌶️) hot pepper +1F337..1F34A ; Extended_Pictographic# E0.6 [20] (🌷..🍊) tulip..tangerine +1F34B ; Extended_Pictographic# E1.0 [1] (🍋) lemon +1F34C..1F34F ; Extended_Pictographic# E0.6 [4] (🍌..🍏) banana..green apple +1F350 ; Extended_Pictographic# E1.0 [1] (🍐) pear +1F351..1F37B ; Extended_Pictographic# E0.6 [43] (🍑..🍻) peach..clinking beer mugs +1F37C ; Extended_Pictographic# E1.0 [1] (🍼) baby bottle +1F37D ; Extended_Pictographic# E0.7 [1] (🍽️) fork and knife with plate +1F37E..1F37F ; Extended_Pictographic# E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn +1F380..1F393 ; Extended_Pictographic# E0.6 [20] (🎀..🎓) ribbon..graduation cap +1F394..1F395 ; Extended_Pictographic# E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS +1F396..1F397 ; Extended_Pictographic# E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon +1F398 ; Extended_Pictographic# E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS +1F399..1F39B ; Extended_Pictographic# E0.7 [3] (🎙️..🎛️) studio microphone..control knobs +1F39C..1F39D ; Extended_Pictographic# E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES +1F39E..1F39F ; Extended_Pictographic# E0.7 [2] (🎞️..🎟️) film frames..admission tickets +1F3A0..1F3C4 ; Extended_Pictographic# E0.6 [37] (🎠..🏄) carousel horse..person surfing +1F3C5 ; Extended_Pictographic# E1.0 [1] (🏅) sports medal +1F3C6 ; Extended_Pictographic# E0.6 [1] (🏆) trophy +1F3C7 ; Extended_Pictographic# E1.0 [1] (🏇) horse racing +1F3C8 ; Extended_Pictographic# E0.6 [1] (🏈) american football +1F3C9 ; Extended_Pictographic# E1.0 [1] (🏉) rugby football +1F3CA ; Extended_Pictographic# E0.6 [1] (🏊) person swimming +1F3CB..1F3CE ; Extended_Pictographic# E0.7 [4] (🏋️..🏎️) person lifting weights..racing car +1F3CF..1F3D3 ; Extended_Pictographic# E1.0 [5] (🏏..🏓) cricket game..ping pong +1F3D4..1F3DF ; Extended_Pictographic# E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium +1F3E0..1F3E3 ; Extended_Pictographic# E0.6 [4] (🏠..🏣) house..Japanese post office +1F3E4 ; Extended_Pictographic# E1.0 [1] (🏤) post office +1F3E5..1F3F0 ; Extended_Pictographic# E0.6 [12] (🏥..🏰) hospital..castle +1F3F1..1F3F2 ; Extended_Pictographic# E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT +1F3F3 ; Extended_Pictographic# E0.7 [1] (🏳️) white flag +1F3F4 ; Extended_Pictographic# E1.0 [1] (🏴) black flag +1F3F5 ; Extended_Pictographic# E0.7 [1] (🏵️) rosette +1F3F6 ; Extended_Pictographic# E0.0 [1] (🏶) BLACK ROSETTE +1F3F7 ; Extended_Pictographic# E0.7 [1] (🏷️) label +1F3F8..1F3FA ; Extended_Pictographic# E1.0 [3] (🏸..🏺) badminton..amphora +1F400..1F407 ; Extended_Pictographic# E1.0 [8] (🐀..🐇) rat..rabbit +1F408 ; Extended_Pictographic# E0.7 [1] (🐈) cat +1F409..1F40B ; Extended_Pictographic# E1.0 [3] (🐉..🐋) dragon..whale +1F40C..1F40E ; Extended_Pictographic# E0.6 [3] (🐌..🐎) snail..horse +1F40F..1F410 ; Extended_Pictographic# E1.0 [2] (🐏..🐐) ram..goat +1F411..1F412 ; Extended_Pictographic# E0.6 [2] (🐑..🐒) ewe..monkey +1F413 ; Extended_Pictographic# E1.0 [1] (🐓) rooster +1F414 ; Extended_Pictographic# E0.6 [1] (🐔) chicken +1F415 ; Extended_Pictographic# E0.7 [1] (🐕) dog +1F416 ; Extended_Pictographic# E1.0 [1] (🐖) pig +1F417..1F429 ; Extended_Pictographic# E0.6 [19] (🐗..🐩) boar..poodle +1F42A ; Extended_Pictographic# E1.0 [1] (🐪) camel +1F42B..1F43E ; Extended_Pictographic# E0.6 [20] (🐫..🐾) two-hump camel..paw prints +1F43F ; Extended_Pictographic# E0.7 [1] (🐿️) chipmunk +1F440 ; Extended_Pictographic# E0.6 [1] (👀) eyes +1F441 ; Extended_Pictographic# E0.7 [1] (👁️) eye +1F442..1F464 ; Extended_Pictographic# E0.6 [35] (👂..👤) ear..bust in silhouette +1F465 ; Extended_Pictographic# E1.0 [1] (👥) busts in silhouette +1F466..1F46B ; Extended_Pictographic# E0.6 [6] (👦..👫) boy..woman and man holding hands +1F46C..1F46D ; Extended_Pictographic# E1.0 [2] (👬..👭) men holding hands..women holding hands +1F46E..1F4AC ; Extended_Pictographic# E0.6 [63] (👮..💬) police officer..speech balloon +1F4AD ; Extended_Pictographic# E1.0 [1] (💭) thought balloon +1F4AE..1F4B5 ; Extended_Pictographic# E0.6 [8] (💮..💵) white flower..dollar banknote +1F4B6..1F4B7 ; Extended_Pictographic# E1.0 [2] (💶..💷) euro banknote..pound banknote +1F4B8..1F4EB ; Extended_Pictographic# E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag +1F4EC..1F4ED ; Extended_Pictographic# E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag +1F4EE ; Extended_Pictographic# E0.6 [1] (📮) postbox +1F4EF ; Extended_Pictographic# E1.0 [1] (📯) postal horn +1F4F0..1F4F4 ; Extended_Pictographic# E0.6 [5] (📰..📴) newspaper..mobile phone off +1F4F5 ; Extended_Pictographic# E1.0 [1] (📵) no mobile phones +1F4F6..1F4F7 ; Extended_Pictographic# E0.6 [2] (📶..📷) antenna bars..camera +1F4F8 ; Extended_Pictographic# E1.0 [1] (📸) camera with flash +1F4F9..1F4FC ; Extended_Pictographic# E0.6 [4] (📹..📼) video camera..videocassette +1F4FD ; Extended_Pictographic# E0.7 [1] (📽️) film projector +1F4FE ; Extended_Pictographic# E0.0 [1] (📾) PORTABLE STEREO +1F4FF..1F502 ; Extended_Pictographic# E1.0 [4] (📿..🔂) prayer beads..repeat single button +1F503 ; Extended_Pictographic# E0.6 [1] (🔃) clockwise vertical arrows +1F504..1F507 ; Extended_Pictographic# E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker +1F508 ; Extended_Pictographic# E0.7 [1] (🔈) speaker low volume +1F509 ; Extended_Pictographic# E1.0 [1] (🔉) speaker medium volume +1F50A..1F514 ; Extended_Pictographic# E0.6 [11] (🔊..🔔) speaker high volume..bell +1F515 ; Extended_Pictographic# E1.0 [1] (🔕) bell with slash +1F516..1F52B ; Extended_Pictographic# E0.6 [22] (🔖..🔫) bookmark..pistol +1F52C..1F52D ; Extended_Pictographic# E1.0 [2] (🔬..🔭) microscope..telescope +1F52E..1F53D ; Extended_Pictographic# E0.6 [16] (🔮..🔽) crystal ball..downwards button +1F546..1F548 ; Extended_Pictographic# E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS +1F549..1F54A ; Extended_Pictographic# E0.7 [2] (🕉️..🕊️) om..dove +1F54B..1F54E ; Extended_Pictographic# E1.0 [4] (🕋..🕎) kaaba..menorah +1F54F ; Extended_Pictographic# E0.0 [1] (🕏) BOWL OF HYGIEIA +1F550..1F55B ; Extended_Pictographic# E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock +1F55C..1F567 ; Extended_Pictographic# E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty +1F568..1F56E ; Extended_Pictographic# E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK +1F56F..1F570 ; Extended_Pictographic# E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock +1F571..1F572 ; Extended_Pictographic# E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY +1F573..1F579 ; Extended_Pictographic# E0.7 [7] (🕳️..🕹️) hole..joystick +1F57A ; Extended_Pictographic# E3.0 [1] (🕺) man dancing +1F57B..1F586 ; Extended_Pictographic# E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE +1F587 ; Extended_Pictographic# E0.7 [1] (🖇️) linked paperclips +1F588..1F589 ; Extended_Pictographic# E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL +1F58A..1F58D ; Extended_Pictographic# E0.7 [4] (🖊️..🖍️) pen..crayon +1F58E..1F58F ; Extended_Pictographic# E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN +1F590 ; Extended_Pictographic# E0.7 [1] (🖐️) hand with fingers splayed +1F591..1F594 ; Extended_Pictographic# E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND +1F595..1F596 ; Extended_Pictographic# E1.0 [2] (🖕..🖖) middle finger..vulcan salute +1F597..1F5A3 ; Extended_Pictographic# E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX +1F5A4 ; Extended_Pictographic# E3.0 [1] (🖤) black heart +1F5A5 ; Extended_Pictographic# E0.7 [1] (🖥️) desktop computer +1F5A6..1F5A7 ; Extended_Pictographic# E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS +1F5A8 ; Extended_Pictographic# E0.7 [1] (🖨️) printer +1F5A9..1F5B0 ; Extended_Pictographic# E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE +1F5B1..1F5B2 ; Extended_Pictographic# E0.7 [2] (🖱️..🖲️) computer mouse..trackball +1F5B3..1F5BB ; Extended_Pictographic# E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE +1F5BC ; Extended_Pictographic# E0.7 [1] (🖼️) framed picture +1F5BD..1F5C1 ; Extended_Pictographic# E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER +1F5C2..1F5C4 ; Extended_Pictographic# E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet +1F5C5..1F5D0 ; Extended_Pictographic# E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES +1F5D1..1F5D3 ; Extended_Pictographic# E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar +1F5D4..1F5DB ; Extended_Pictographic# E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL +1F5DC..1F5DE ; Extended_Pictographic# E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper +1F5DF..1F5E0 ; Extended_Pictographic# E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART +1F5E1 ; Extended_Pictographic# E0.7 [1] (🗡️) dagger +1F5E2 ; Extended_Pictographic# E0.0 [1] (🗢) LIPS +1F5E3 ; Extended_Pictographic# E0.7 [1] (🗣️) speaking head +1F5E4..1F5E7 ; Extended_Pictographic# E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT +1F5E8 ; Extended_Pictographic# E2.0 [1] (🗨️) left speech bubble +1F5E9..1F5EE ; Extended_Pictographic# E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE +1F5EF ; Extended_Pictographic# E0.7 [1] (🗯️) right anger bubble +1F5F0..1F5F2 ; Extended_Pictographic# E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD +1F5F3 ; Extended_Pictographic# E0.7 [1] (🗳️) ballot box with ballot +1F5F4..1F5F9 ; Extended_Pictographic# E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK +1F5FA ; Extended_Pictographic# E0.7 [1] (🗺️) world map +1F5FB..1F5FF ; Extended_Pictographic# E0.6 [5] (🗻..🗿) mount fuji..moai +1F600 ; Extended_Pictographic# E1.0 [1] (😀) grinning face +1F601..1F606 ; Extended_Pictographic# E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face +1F607..1F608 ; Extended_Pictographic# E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns +1F609..1F60D ; Extended_Pictographic# E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes +1F60E ; Extended_Pictographic# E1.0 [1] (😎) smiling face with sunglasses +1F60F ; Extended_Pictographic# E0.6 [1] (😏) smirking face +1F610 ; Extended_Pictographic# E0.7 [1] (😐) neutral face +1F611 ; Extended_Pictographic# E1.0 [1] (😑) expressionless face +1F612..1F614 ; Extended_Pictographic# E0.6 [3] (😒..😔) unamused face..pensive face +1F615 ; Extended_Pictographic# E1.0 [1] (😕) confused face +1F616 ; Extended_Pictographic# E0.6 [1] (😖) confounded face +1F617 ; Extended_Pictographic# E1.0 [1] (😗) kissing face +1F618 ; Extended_Pictographic# E0.6 [1] (😘) face blowing a kiss +1F619 ; Extended_Pictographic# E1.0 [1] (😙) kissing face with smiling eyes +1F61A ; Extended_Pictographic# E0.6 [1] (😚) kissing face with closed eyes +1F61B ; Extended_Pictographic# E1.0 [1] (😛) face with tongue +1F61C..1F61E ; Extended_Pictographic# E0.6 [3] (😜..😞) winking face with tongue..disappointed face +1F61F ; Extended_Pictographic# E1.0 [1] (😟) worried face +1F620..1F625 ; Extended_Pictographic# E0.6 [6] (😠..😥) angry face..sad but relieved face +1F626..1F627 ; Extended_Pictographic# E1.0 [2] (😦..😧) frowning face with open mouth..anguished face +1F628..1F62B ; Extended_Pictographic# E0.6 [4] (😨..😫) fearful face..tired face +1F62C ; Extended_Pictographic# E1.0 [1] (😬) grimacing face +1F62D ; Extended_Pictographic# E0.6 [1] (😭) loudly crying face +1F62E..1F62F ; Extended_Pictographic# E1.0 [2] (😮..😯) face with open mouth..hushed face +1F630..1F633 ; Extended_Pictographic# E0.6 [4] (😰..😳) anxious face with sweat..flushed face +1F634 ; Extended_Pictographic# E1.0 [1] (😴) sleeping face +1F635 ; Extended_Pictographic# E0.6 [1] (😵) dizzy face +1F636 ; Extended_Pictographic# E1.0 [1] (😶) face without mouth +1F637..1F640 ; Extended_Pictographic# E0.6 [10] (😷..🙀) face with medical mask..weary cat +1F641..1F644 ; Extended_Pictographic# E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes +1F645..1F64F ; Extended_Pictographic# E0.6 [11] (🙅..🙏) person gesturing NO..folded hands +1F680 ; Extended_Pictographic# E0.6 [1] (🚀) rocket +1F681..1F682 ; Extended_Pictographic# E1.0 [2] (🚁..🚂) helicopter..locomotive +1F683..1F685 ; Extended_Pictographic# E0.6 [3] (🚃..🚅) railway car..bullet train +1F686 ; Extended_Pictographic# E1.0 [1] (🚆) train +1F687 ; Extended_Pictographic# E0.6 [1] (🚇) metro +1F688 ; Extended_Pictographic# E1.0 [1] (🚈) light rail +1F689 ; Extended_Pictographic# E0.6 [1] (🚉) station +1F68A..1F68B ; Extended_Pictographic# E1.0 [2] (🚊..🚋) tram..tram car +1F68C ; Extended_Pictographic# E0.6 [1] (🚌) bus +1F68D ; Extended_Pictographic# E0.7 [1] (🚍) oncoming bus +1F68E ; Extended_Pictographic# E1.0 [1] (🚎) trolleybus +1F68F ; Extended_Pictographic# E0.6 [1] (🚏) bus stop +1F690 ; Extended_Pictographic# E1.0 [1] (🚐) minibus +1F691..1F693 ; Extended_Pictographic# E0.6 [3] (🚑..🚓) ambulance..police car +1F694 ; Extended_Pictographic# E0.7 [1] (🚔) oncoming police car +1F695 ; Extended_Pictographic# E0.6 [1] (🚕) taxi +1F696 ; Extended_Pictographic# E1.0 [1] (🚖) oncoming taxi +1F697 ; Extended_Pictographic# E0.6 [1] (🚗) automobile +1F698 ; Extended_Pictographic# E0.7 [1] (🚘) oncoming automobile +1F699..1F69A ; Extended_Pictographic# E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck +1F69B..1F6A1 ; Extended_Pictographic# E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway +1F6A2 ; Extended_Pictographic# E0.6 [1] (🚢) ship +1F6A3 ; Extended_Pictographic# E1.0 [1] (🚣) person rowing boat +1F6A4..1F6A5 ; Extended_Pictographic# E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light +1F6A6 ; Extended_Pictographic# E1.0 [1] (🚦) vertical traffic light +1F6A7..1F6AD ; Extended_Pictographic# E0.6 [7] (🚧..🚭) construction..no smoking +1F6AE..1F6B1 ; Extended_Pictographic# E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water +1F6B2 ; Extended_Pictographic# E0.6 [1] (🚲) bicycle +1F6B3..1F6B5 ; Extended_Pictographic# E1.0 [3] (🚳..🚵) no bicycles..person mountain biking +1F6B6 ; Extended_Pictographic# E0.6 [1] (🚶) person walking +1F6B7..1F6B8 ; Extended_Pictographic# E1.0 [2] (🚷..🚸) no pedestrians..children crossing +1F6B9..1F6BE ; Extended_Pictographic# E0.6 [6] (🚹..🚾) men’s room..water closet +1F6BF ; Extended_Pictographic# E1.0 [1] (🚿) shower +1F6C0 ; Extended_Pictographic# E0.6 [1] (🛀) person taking bath +1F6C1..1F6C5 ; Extended_Pictographic# E1.0 [5] (🛁..🛅) bathtub..left luggage +1F6C6..1F6CA ; Extended_Pictographic# E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL +1F6CB ; Extended_Pictographic# E0.7 [1] (🛋️) couch and lamp +1F6CC ; Extended_Pictographic# E1.0 [1] (🛌) person in bed +1F6CD..1F6CF ; Extended_Pictographic# E0.7 [3] (🛍️..🛏️) shopping bags..bed +1F6D0 ; Extended_Pictographic# E1.0 [1] (🛐) place of worship +1F6D1..1F6D2 ; Extended_Pictographic# E3.0 [2] (🛑..🛒) stop sign..shopping cart +1F6D3..1F6D4 ; Extended_Pictographic# E0.0 [2] (🛓..🛔) STUPA..PAGODA +1F6D5 ; Extended_Pictographic# E12.0 [1] (🛕) hindu temple +1F6D6..1F6D7 ; Extended_Pictographic# E13.0 [2] (🛖..🛗) hut..elevator +1F6D8..1F6DF ; Extended_Pictographic# E0.0 [8] (🛘..🛟) .. +1F6E0..1F6E5 ; Extended_Pictographic# E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat +1F6E6..1F6E8 ; Extended_Pictographic# E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE +1F6E9 ; Extended_Pictographic# E0.7 [1] (🛩️) small airplane +1F6EA ; Extended_Pictographic# E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE +1F6EB..1F6EC ; Extended_Pictographic# E1.0 [2] (🛫..🛬) airplane departure..airplane arrival +1F6ED..1F6EF ; Extended_Pictographic# E0.0 [3] (🛭..🛯) .. +1F6F0 ; Extended_Pictographic# E0.7 [1] (🛰️) satellite +1F6F1..1F6F2 ; Extended_Pictographic# E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE +1F6F3 ; Extended_Pictographic# E0.7 [1] (🛳️) passenger ship +1F6F4..1F6F6 ; Extended_Pictographic# E3.0 [3] (🛴..🛶) kick scooter..canoe +1F6F7..1F6F8 ; Extended_Pictographic# E5.0 [2] (🛷..🛸) sled..flying saucer +1F6F9 ; Extended_Pictographic# E11.0 [1] (🛹) skateboard +1F6FA ; Extended_Pictographic# E12.0 [1] (🛺) auto rickshaw +1F6FB..1F6FC ; Extended_Pictographic# E13.0 [2] (🛻..🛼) pickup truck..roller skate +1F6FD..1F6FF ; Extended_Pictographic# E0.0 [3] (🛽..🛿) .. +1F774..1F77F ; Extended_Pictographic# E0.0 [12] (🝴..🝿) .. +1F7D5..1F7DF ; Extended_Pictographic# E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. +1F7E0..1F7EB ; Extended_Pictographic# E12.0 [12] (🟠..🟫) orange circle..brown square +1F7EC..1F7FF ; Extended_Pictographic# E0.0 [20] (🟬..🟿) .. +1F80C..1F80F ; Extended_Pictographic# E0.0 [4] (🠌..🠏) .. +1F848..1F84F ; Extended_Pictographic# E0.0 [8] (🡈..🡏) .. +1F85A..1F85F ; Extended_Pictographic# E0.0 [6] (🡚..🡟) .. +1F888..1F88F ; Extended_Pictographic# E0.0 [8] (🢈..🢏) .. +1F8AE..1F8FF ; Extended_Pictographic# E0.0 [82] (🢮..🣿) .. +1F90C ; Extended_Pictographic# E13.0 [1] (🤌) pinched fingers +1F90D..1F90F ; Extended_Pictographic# E12.0 [3] (🤍..🤏) white heart..pinching hand +1F910..1F918 ; Extended_Pictographic# E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns +1F919..1F91E ; Extended_Pictographic# E3.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Extended_Pictographic# E5.0 [1] (🤟) love-you gesture +1F920..1F927 ; Extended_Pictographic# E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face +1F928..1F92F ; Extended_Pictographic# E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head +1F930 ; Extended_Pictographic# E3.0 [1] (🤰) pregnant woman +1F931..1F932 ; Extended_Pictographic# E5.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F93A ; Extended_Pictographic# E3.0 [8] (🤳..🤺) selfie..person fencing +1F93C..1F93E ; Extended_Pictographic# E3.0 [3] (🤼..🤾) people wrestling..person playing handball +1F93F ; Extended_Pictographic# E12.0 [1] (🤿) diving mask +1F940..1F945 ; Extended_Pictographic# E3.0 [6] (🥀..🥅) wilted flower..goal net +1F947..1F94B ; Extended_Pictographic# E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform +1F94C ; Extended_Pictographic# E5.0 [1] (🥌) curling stone +1F94D..1F94F ; Extended_Pictographic# E11.0 [3] (🥍..🥏) lacrosse..flying disc +1F950..1F95E ; Extended_Pictographic# E3.0 [15] (🥐..🥞) croissant..pancakes +1F95F..1F96B ; Extended_Pictographic# E5.0 [13] (🥟..🥫) dumpling..canned food +1F96C..1F970 ; Extended_Pictographic# E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts +1F971 ; Extended_Pictographic# E12.0 [1] (🥱) yawning face +1F972 ; Extended_Pictographic# E13.0 [1] (🥲) smiling face with tear +1F973..1F976 ; Extended_Pictographic# E11.0 [4] (🥳..🥶) partying face..cold face +1F977..1F978 ; Extended_Pictographic# E13.0 [2] (🥷..🥸) ninja..disguised face +1F979 ; Extended_Pictographic# E0.0 [1] (🥹) +1F97A ; Extended_Pictographic# E11.0 [1] (🥺) pleading face +1F97B ; Extended_Pictographic# E12.0 [1] (🥻) sari +1F97C..1F97F ; Extended_Pictographic# E11.0 [4] (🥼..🥿) lab coat..flat shoe +1F980..1F984 ; Extended_Pictographic# E1.0 [5] (🦀..🦄) crab..unicorn +1F985..1F991 ; Extended_Pictographic# E3.0 [13] (🦅..🦑) eagle..squid +1F992..1F997 ; Extended_Pictographic# E5.0 [6] (🦒..🦗) giraffe..cricket +1F998..1F9A2 ; Extended_Pictographic# E11.0 [11] (🦘..🦢) kangaroo..swan +1F9A3..1F9A4 ; Extended_Pictographic# E13.0 [2] (🦣..🦤) mammoth..dodo +1F9A5..1F9AA ; Extended_Pictographic# E12.0 [6] (🦥..🦪) sloth..oyster +1F9AB..1F9AD ; Extended_Pictographic# E13.0 [3] (🦫..🦭) beaver..seal +1F9AE..1F9AF ; Extended_Pictographic# E12.0 [2] (🦮..🦯) guide dog..white cane +1F9B0..1F9B9 ; Extended_Pictographic# E11.0 [10] (🦰..🦹) red hair..supervillain +1F9BA..1F9BF ; Extended_Pictographic# E12.0 [6] (🦺..🦿) safety vest..mechanical leg +1F9C0 ; Extended_Pictographic# E1.0 [1] (🧀) cheese wedge +1F9C1..1F9C2 ; Extended_Pictographic# E11.0 [2] (🧁..🧂) cupcake..salt +1F9C3..1F9CA ; Extended_Pictographic# E12.0 [8] (🧃..🧊) beverage box..ice +1F9CB ; Extended_Pictographic# E13.0 [1] (🧋) bubble tea +1F9CC ; Extended_Pictographic# E0.0 [1] (🧌) +1F9CD..1F9CF ; Extended_Pictographic# E12.0 [3] (🧍..🧏) person standing..deaf person +1F9D0..1F9E6 ; Extended_Pictographic# E5.0 [23] (🧐..🧦) face with monocle..socks +1F9E7..1F9FF ; Extended_Pictographic# E11.0 [25] (🧧..🧿) red envelope..nazar amulet +1FA00..1FA6F ; Extended_Pictographic# E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. +1FA70..1FA73 ; Extended_Pictographic# E12.0 [4] (🩰..🩳) ballet shoes..shorts +1FA74 ; Extended_Pictographic# E13.0 [1] (🩴) thong sandal +1FA75..1FA77 ; Extended_Pictographic# E0.0 [3] (🩵..🩷) .. +1FA78..1FA7A ; Extended_Pictographic# E12.0 [3] (🩸..🩺) drop of blood..stethoscope +1FA7B..1FA7F ; Extended_Pictographic# E0.0 [5] (🩻..🩿) .. +1FA80..1FA82 ; Extended_Pictographic# E12.0 [3] (🪀..🪂) yo-yo..parachute +1FA83..1FA86 ; Extended_Pictographic# E13.0 [4] (🪃..🪆) boomerang..nesting dolls +1FA87..1FA8F ; Extended_Pictographic# E0.0 [9] (🪇..🪏) .. +1FA90..1FA95 ; Extended_Pictographic# E12.0 [6] (🪐..🪕) ringed planet..banjo +1FA96..1FAA8 ; Extended_Pictographic# E13.0 [19] (🪖..🪨) military helmet..rock +1FAA9..1FAAF ; Extended_Pictographic# E0.0 [7] (🪩..🪯) .. +1FAB0..1FAB6 ; Extended_Pictographic# E13.0 [7] (🪰..🪶) fly..feather +1FAB7..1FABF ; Extended_Pictographic# E0.0 [9] (🪷..🪿) .. +1FAC0..1FAC2 ; Extended_Pictographic# E13.0 [3] (🫀..🫂) anatomical heart..people hugging +1FAC3..1FACF ; Extended_Pictographic# E0.0 [13] (🫃..🫏) .. +1FAD0..1FAD6 ; Extended_Pictographic# E13.0 [7] (🫐..🫖) blueberries..teapot +1FAD7..1FAFF ; Extended_Pictographic# E0.0 [41] (🫗..🫿) .. +1FC00..1FFFD ; Extended_Pictographic# E0.0[1022] (🰀..🿽) .. + +# Total elements: 3537 + +#EOF diff --git a/util/unicode/main.cpp b/util/unicode/main.cpp index 58dc22620e..eed180cb8e 100644 --- a/util/unicode/main.cpp +++ b/util/unicode/main.cpp @@ -291,10 +291,7 @@ static const char *grapheme_break_class_string = " GraphemeBreak_T,\n" " GraphemeBreak_LV,\n" " GraphemeBreak_LVT,\n" - " Graphemebreak_E_Base,\n" - " Graphemebreak_E_Modifier,\n" - " Graphemebreak_Glue_After_Zwj,\n" - " Graphemebreak_E_Base_GAZ,\n" + " GraphemeBreak_Extended_Pictographic,\n" "\n" " NumGraphemeBreakClasses\n" "};\n\n"; @@ -314,10 +311,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, GraphemeBreak_Unassigned }; @@ -344,11 +338,8 @@ static void initGraphemeBreak() { GraphemeBreak_T, "T" }, { GraphemeBreak_LV, "LV" }, { GraphemeBreak_LVT, "LVT" }, - { Graphemebreak_E_Base, "E_Base" }, - { Graphemebreak_E_Modifier, "E_Modifier" }, - { Graphemebreak_Glue_After_Zwj, "Glue_After_Zwj" }, - { Graphemebreak_E_Base_GAZ, "E_Base_GAZ" }, - { GraphemeBreak_Unassigned, 0 } + { GraphemeBreak_Extended_Pictographic, "Extended_Pictographic" }, + { GraphemeBreak_Unassigned, nullptr } }; GraphemeBreakList *d = breaks; while (d->name) { @@ -1915,6 +1906,59 @@ static void readGraphemeBreak() } } +static void readEmojiData() +{ + qDebug("Reading emoji-data.txt"); + + QFile f("data/emoji-data.txt"); + if (!f.open(QFile::ReadOnly)) + qFatal("Couldn't find emoji-data.txt"); + + while (!f.atEnd()) { + QByteArray line; + line.resize(1024); + int len = f.readLine(line.data(), 1024); + line.resize(len-1); + + int comment = line.indexOf('#'); + if (comment >= 0) + line = line.left(comment); + line.replace(" ", ""); + + if (line.isEmpty()) + continue; + + QList l = line.split(';'); + Q_ASSERT(l.size() == 2); + + // NOTE: for the moment we process emoji_data only to extract + // the code points with Extended_Pictographic. This is needed by + // extended grapheme clustering (cf. the GB11 rule in UAX #29). + if (l[1] != "Extended_Pictographic") + continue; + + QByteArray codes = l[0]; + codes.replace("..", "."); + QList cl = codes.split('.'); + + bool ok; + int from = cl[0].toInt(&ok, 16); + Q_ASSERT(ok); + int to = from; + if (cl.size() == 2) { + to = cl[1].toInt(&ok, 16); + Q_ASSERT(ok); + } + + for (int codepoint = from; codepoint <= to; ++codepoint) { + UnicodeData &ud = UnicodeData::valueRef(codepoint); + // Check we're not overwriting the data from GraphemeBreakProperty.txt... + Q_ASSERT(ud.p.graphemeBreakClass == GraphemeBreak_Any); + ud.p.graphemeBreakClass = GraphemeBreak_Extended_Pictographic; + } + } +} + static void readWordBreak() { qDebug("Reading WordBreakProperty.txt"); @@ -3037,6 +3081,7 @@ int main(int, char **) // readBlocks(); readScripts(); readGraphemeBreak(); + readEmojiData(); readWordBreak(); readSentenceBreak(); readLineBreak(); -- cgit v1.2.3 From e5ad0e76839331f0b2b2e2592168234df7548f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kai=20K=C3=B6hne?= Date: Thu, 15 Apr 2021 12:42:22 +0200 Subject: Doc: Mark QSet::toList, QSet::fromList, QList::toSet, QList::fromSet as obsolete They got deprecated in code already in 92f98427326. Make sure they are marked as deprecated in the documenation, too, and give examples on what to use instead. Change-Id: I003020a44cbc6187dc813796c7f93f9f9d93bf0b Reviewed-by: Edward Welbourne Reviewed-by: Paul Wicking --- src/corelib/doc/snippets/code/doc_src_qset.cpp | 20 ------- .../snippets/code/src_corelib_tools_qlistdata.cpp | 38 ------------ src/corelib/tools/qlist.cpp | 68 ++++++++++++++++------ src/corelib/tools/qset.qdoc | 55 +++++++++++++---- 4 files changed, 92 insertions(+), 89 deletions(-) diff --git a/src/corelib/doc/snippets/code/doc_src_qset.cpp b/src/corelib/doc/snippets/code/doc_src_qset.cpp index 96ef07738b..100661e00a 100644 --- a/src/corelib/doc/snippets/code/doc_src_qset.cpp +++ b/src/corelib/doc/snippets/code/doc_src_qset.cpp @@ -156,23 +156,3 @@ QSet::const_iterator it = std::find_if(set.cbegin(), set.cend(), predic if (it != set.constEnd()) cout << "Found Jeanette" << endl; //! [12] - - -//! [13] -QSet set; -set << "red" << "green" << "blue" << ... << "black"; - -QList list = set.toList(); -std::sort(list.begin(), list.end()); -//! [13] - - -//! [14] -QStringList list; -list << "Julia" << "Mike" << "Mike" << "Julia" << "Julia"; - -QSet set = QSet::fromList(list); -set.contains("Julia"); // returns true -set.contains("Mike"); // returns true -set.size(); // returns 2 -//! [14] diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qlistdata.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qlistdata.cpp index 38fa526ef4..78875c19e2 100644 --- a/src/corelib/doc/snippets/code/src_corelib_tools_qlistdata.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_tools_qlistdata.cpp @@ -240,41 +240,3 @@ list << "Sven" << "Kim" << "Ola"; QVector vect = list.toVector(); // vect: ["Sven", "Kim", "Ola"] //! [22] - - -//! [23] -QSet set; -set << 20 << 30 << 40 << ... << 70; - -QList list = QList::fromSet(set); -std::sort(list.begin(), list.end()); -//! [23] - - -//! [24] -QStringList list; -list << "Julia" << "Mike" << "Mike" << "Julia" << "Julia"; - -QSet set = list.toSet(); -set.contains("Julia"); // returns true -set.contains("Mike"); // returns true -set.size(); // returns 2 -//! [24] - - -//! [25] -std::list stdlist; -list.push_back(1.2); -list.push_back(0.5); -list.push_back(3.14); - -QList list = QList::fromStdList(stdlist); -//! [25] - - -//! [26] -QList list; -list << 1.2 << 0.5 << 3.14; - -std::list stdlist = list.toStdList(); -//! [26] diff --git a/src/corelib/tools/qlist.cpp b/src/corelib/tools/qlist.cpp index c0b0912249..eb5a06bb33 100644 --- a/src/corelib/tools/qlist.cpp +++ b/src/corelib/tools/qlist.cpp @@ -2017,7 +2017,7 @@ void **QListData::erase(void **xi) \include containers-range-constructor.qdocinc - \sa fromSet(), toVector(), QVector::toList() + \sa toVector(), QVector::toList() */ /*! \fn template QVector QList::toVector() const @@ -2030,61 +2030,91 @@ void **QListData::erase(void **xi) \include containers-range-constructor.qdocinc - \sa toSet(), fromVector(), QVector::fromList() + \sa fromVector(), QVector::fromList() */ /*! \fn template QList QList::fromSet(const QSet &set) + \obsolete Returns a QList object with the data contained in \a set. The order of the elements in the QList is undefined. - Example: - - \snippet code/src_corelib_tools_qlistdata.cpp 23 - \include containers-range-constructor.qdocinc - \sa fromVector(), toSet(), QSet::toList() + \oldcode + QSet set; + // ... + QList list = QList::fromSet(set); + \newcode + QSet set; + // ... + QList list(set.begin(), set.end()); + \endcode + + \sa QList(InputIterator, InputIterator), fromVector(), toSet(), QSet::toList() */ /*! \fn template QSet QList::toSet() const + \obsolete Returns a QSet object with the data contained in this QList. Since QSet doesn't allow duplicates, the resulting QSet might be smaller than the original list was. - Example: - - \snippet code/src_corelib_tools_qlistdata.cpp 24 - \include containers-range-constructor.qdocinc - \sa toVector(), fromSet(), QSet::fromList() + \oldcode + QStringList list; + // ... + QSet set = list.toSet(); + \newcode + QStringList list; + // ... + QSet set(list.begin(), list.end()); + \endcode + + \sa QSet::QSet(InputIterator, InputIterator), toVector(), fromSet(), QSet::fromList() */ /*! \fn template QList QList::fromStdList(const std::list &list) + \obsolete Returns a QList object with the data contained in \a list. The order of the elements in the QList is the same as in \a list. - Example: - - \snippet code/src_corelib_tools_qlistdata.cpp 25 - \include containers-range-constructor.qdocinc - \sa toStdList(), QVector::fromStdVector() + \oldcode + std::list stdlist; + // ... + QList list = QList::fromStdList(stdlist); + \newcode + std::list stdlist; + // ... + QList list(stdlist.begin(), stdlist.end()); + \endcode + + \sa QList(InputIterator, InputIterator), toStdList(), QVector::fromStdVector() */ /*! \fn template std::list QList::toStdList() const + \obsolete Returns a std::list object with the data contained in this QList. Example: - \snippet code/src_corelib_tools_qlistdata.cpp 26 - \include containers-range-constructor.qdocinc + \oldcode + QList list; + // ... + std::list stdlist = list.toStdList(); + \newcode + QList list; + // ... + std::list stdlist(list.begin(), list.end()); + \endcode + \sa fromStdList(), QVector::toStdVector() */ diff --git a/src/corelib/tools/qset.qdoc b/src/corelib/tools/qset.qdoc index 42dd1288ac..dcd6de3d5c 100644 --- a/src/corelib/tools/qset.qdoc +++ b/src/corelib/tools/qset.qdoc @@ -1071,17 +1071,32 @@ */ /*! \fn template QList QSet::toList() const + \obsolete Returns a new QList containing the elements in the set. The order of the elements in the QList is undefined. - Example: + \include containers-range-constructor.qdocinc - \snippet code/doc_src_qset.cpp 13 + \oldcode + QSet set; + // ... + QList list = set.toList(); + \newcode + QSet set; + // ... + QList list(set.begin(), set.end()); + \endcode - \include containers-range-constructor.qdocinc + or - \sa fromList(), QList::fromSet() + \code + QSet set; + // ... + QList list = set.values(); + \endcode + + \sa QList::QList(InputIterator, InputIterator), values(), fromList(), QList::fromSet() */ /*! \fn template QList QSet::values() const @@ -1089,28 +1104,44 @@ Returns a new QList containing the elements in the set. The order of the elements in the QList is undefined. - This is the same as toList(). - \include containers-range-constructor.qdocinc - \sa fromList(), QList::fromSet() + \oldcode + QSet set; + // ... + QList list = set.values(); + \newcode + QSet set; + // ... + QList list(set.begin(), set.end()); + \endcode + + + \sa QList::QList(InputIterator, InputIterator) */ /*! \fn template QSet QSet::fromList(const QList &list) + \obsolete Returns a new QSet object containing the data contained in \a list. Since QSet doesn't allow duplicates, the resulting QSet might be smaller than the \a list, because QList can contain duplicates. - Example: - - \snippet code/doc_src_qset.cpp 14 - \include containers-range-constructor.qdocinc - \sa toList(), QList::toSet() + \oldcode + QStringList list; + // ... + QSet set = QSet::fromList(list); + \newcode + QStringList list; + // ... + QSet set(list.begin(), list.end()); + \endcode + + \sa QSet(InputIterator, InputIterator), values(), QList::toSet() */ /*! -- cgit v1.2.3 From f21a3a451ff531fc1ed6bcf24a188db49fc02cd2 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 16 Apr 2021 16:11:07 +0200 Subject: SQLite: Handle tables and fields with a dot in the name correctly Fixes: QTBUG-91885 Change-Id: Iba76bb50266dd4fb5f50e4ea1549d1d2bb6e3431 Reviewed-by: Edward Welbourne (cherry picked from commit 66acee69a1563488e5950645c171d6be73dd5f70) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp | 33 +++++++++++---- .../models/qsqltablemodel/tst_qsqltablemodel.cpp | 48 ++++++++++++++++++++++ 2 files changed, 72 insertions(+), 9 deletions(-) diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp index 2fcb132be8..6ecb089f76 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/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp index 44dd4a74cf..157565bc03 100644 --- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp +++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp @@ -157,6 +157,9 @@ private slots: void invalidFilterAndHeaderData_data() { generic_data(); } void invalidFilterAndHeaderData(); //QTBUG-23879 + + void sqlite_selectFromIdentifierWithDot_data() { generic_data("QSQLITE"); } + void sqlite_selectFromIdentifierWithDot(); private: void generic_data(const QString& engine=QString()); void generic_data_with_strategies(const QString& engine=QString()); @@ -2138,5 +2141,50 @@ void tst_QSqlTableModel::modelInAnotherThread() QVERIFY(t.isFinished()); } +void tst_QSqlTableModel::sqlite_selectFromIdentifierWithDot() +{ + QFETCH(QString, dbName); + QSqlDatabase db = QSqlDatabase::database(dbName); + CHECK_DATABASE(db); + { + const auto fieldDot = qTableName("fieldDot", __FILE__, db); + tst_Databases::safeDropTable(db, fieldDot); + QSqlQuery qry(db); + QVERIFY_SQL(qry, exec("create table " + fieldDot + " (id int primary key, " + "\"person.firstname\" varchar(20))")); + QVERIFY_SQL(qry, exec("insert into " + fieldDot + " values(1, 'Andy')")); + QSqlTableModel model(0, db); + model.setTable(fieldDot); + QVERIFY_SQL(model, select()); + QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); + QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Andy")); + } + const auto tableDot = QLatin1Char('[') + qTableName("table.dot", __FILE__, db) + QLatin1Char(']'); + { + tst_Databases::safeDropTable(db, tableDot); + QSqlQuery qry(db); + QVERIFY_SQL(qry, exec("create table " + tableDot + " (id int primary key, " + "\"person.firstname\" varchar(20))")); + QVERIFY_SQL(qry, exec("insert into " + tableDot + " values(1, 'Andy')")); + QSqlTableModel model(0, db); + model.setTable(tableDot); + QVERIFY_SQL(model, select()); + QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); + QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Andy")); + } + { + QSqlDatabase attachedDb = QSqlDatabase::addDatabase("QSQLITE", "attachedDb"); + attachedDb.setDatabaseName(db.databaseName().replace("foo.db", "attached.db")); + QVERIFY(attachedDb.open()); + QSqlQuery qry(attachedDb); + QVERIFY_SQL(qry, exec(QString("attach '%1' AS 'attached'").arg(db.databaseName()))); + QSqlTableModel model(0, attachedDb); + model.setTable(QString("attached.%1").arg(tableDot)); + QVERIFY_SQL(model, select()); + QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); + QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Andy")); + } +} + QTEST_MAIN(tst_QSqlTableModel) #include "tst_qsqltablemodel.moc" -- cgit v1.2.3 From 390bf93dd70925a959db6c3da5fd5323f8e9adca Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 22 Apr 2021 13:47:21 +0200 Subject: Do not access internal allThreads data unlocked Change-Id: I54eb67571fff07ffdbf9d2b77c96bb85e3fae5e0 Reviewed-by: Sona Kurazyan Reviewed-by: Thiago Macieira (cherry picked from commit ffb5635c1a34d23d85e3cb42310e14a81fa24f6e) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/thread/qthreadpool.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/thread/qthreadpool.cpp b/src/corelib/thread/qthreadpool.cpp index d62efbadfa..14d7acffb2 100644 --- a/src/corelib/thread/qthreadpool.cpp +++ b/src/corelib/thread/qthreadpool.cpp @@ -788,6 +788,7 @@ bool QThreadPool::contains(const QThread *thread) const const QThreadPoolThread *poolThread = qobject_cast(thread); if (!poolThread) return false; + QMutexLocker locker(&d->mutex); return d->allThreads.contains(const_cast(poolThread)); } -- cgit v1.2.3 From 89e2a96182fdafa531cd9ca72c7ffc8131be019c Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Thu, 11 Mar 2021 14:40:39 +1000 Subject: wasm: fix timestamp for events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This partially reverts 7ba6ce9ed5c3e3a775f5ea2fcbbbc1f628e0624a Change-Id: Id76911f5abb729098325640cc9226be01f91aab1 Fixes: QTBUG-91720 Reviewed-by: Morten Johan Sørvig --- src/plugins/platforms/wasm/qwasmeventtranslator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp index d8a838c75d..c059227c89 100644 --- a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp +++ b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp @@ -817,7 +817,7 @@ int QWasmEventTranslator::handleTouch(int eventType, const EmscriptenTouchEvent quint64 QWasmEventTranslator::getTimestamp() { - return QDeadlineTimer::current().deadlineNSecs() / 1000; + return static_cast(emscripten_performance_now()); } struct KeyMapping { Qt::Key from, to; }; -- cgit v1.2.3 From 4343fd921cac5b71c0a968a93550ff8e87f39159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pekka=20Geh=C3=B6r?= Date: Fri, 26 Feb 2021 12:26:51 +0200 Subject: [Android] Fix select handles misplacement on QDialog Get select handles {Left, Right}Point from a mapToGlobal with a cursorRectangle of anchorRectangle of the selected word/text Change-Id: I3425104c90f0efe6a1e4337328cf06dc93685b6f Task-number: QTBUG-90799 Reviewed-by: Rami Potinkara Reviewed-by: Ville Voutilainen (cherry picked from commit 56b54743e001c4af196c1e4786118d88b1d2cd2f) Reviewed-by: Assam Boudjelthia --- .../platforms/android/qandroidinputcontext.cpp | 25 ++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index 4d8e50391b..b1a50d92ad 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -95,6 +95,7 @@ private: static QAndroidInputContext *m_androidInputContext = 0; static char const *const QtNativeInputConnectionClassName = "org/qtproject/qt5/android/QtNativeInputConnection"; static char const *const QtExtractedTextClassName = "org/qtproject/qt5/android/QtExtractedText"; +static char const *const QtObjectType = "QDialog"; static jclass m_extractedTextClass = 0; static jmethodID m_classConstructorMethodID = 0; static jfieldID m_partialEndOffsetFieldID = 0; @@ -646,7 +647,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; @@ -666,10 +667,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(); } @@ -693,7 +696,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 -- cgit v1.2.3 From 5a8f1cfab7e692367c4dddbcc6775864c5a4c246 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 13 Jan 2021 17:40:18 +0100 Subject: macOS: Don't override action set during drop handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the drop has been handled, the target might have accepted a specific action by calling QDropEvent::setDropAction. Don't override that with the operation received by the OS if the drag'n'drop operation takes place within the same application. If the operation comes from outside, we have no choice but to trust the OS. This way the drag-site will get the action accepted by the drop-site when QDrag::drag returns. Fixes: QTBUG-77427 Change-Id: I0e4c86adeeea66b345966a03a3251fa62263b3e8 Reviewed-by: Tor Arne Vestbø (cherry picked from commit a014300898bd3bd574ef19bba7123d4b5a07789b) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/cocoa/qnsview_dragging.mm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/cocoa/qnsview_dragging.mm b/src/plugins/platforms/cocoa/qnsview_dragging.mm index 1d3820997c..0dab09e421 100644 --- a/src/plugins/platforms/cocoa/qnsview_dragging.mm +++ b/src/plugins/platforms/cocoa/qnsview_dragging.mm @@ -297,7 +297,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 -- cgit v1.2.3 From 695509a9e7f466b984153350a096e839c4952993 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 29 Apr 2021 10:31:53 +0200 Subject: Fix build with GCC 11: include Amends: 0afad46bb71b106780dd641de768a81d9f6c6a51 Task-number: QTBUG-90395 Change-Id: I396a9f0cee270054c93b2636ebf3e1494f590953 Reviewed-by: Andy Shaw --- src/corelib/text/qbytearraymatcher.h | 2 ++ src/corelib/tools/qoffsetstringarray_p.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/corelib/text/qbytearraymatcher.h b/src/corelib/text/qbytearraymatcher.h index 0ed0da7c9f..2f1cd9106e 100644 --- a/src/corelib/text/qbytearraymatcher.h +++ b/src/corelib/text/qbytearraymatcher.h @@ -42,6 +42,8 @@ #include +#include + QT_BEGIN_NAMESPACE diff --git a/src/corelib/tools/qoffsetstringarray_p.h b/src/corelib/tools/qoffsetstringarray_p.h index d5eab4b102..5ecda511d4 100644 --- a/src/corelib/tools/qoffsetstringarray_p.h +++ b/src/corelib/tools/qoffsetstringarray_p.h @@ -55,6 +55,7 @@ #include #include +#include QT_BEGIN_NAMESPACE -- cgit v1.2.3 From 6152d2cb3f715782106f26e1870453a1bb89b87a Mon Sep 17 00:00:00 2001 From: Bartlomiej Moskal Date: Fri, 26 Mar 2021 12:03:27 +0100 Subject: Android: Fix Touch event position depending on Surface Touch event position is counted from begin of Surface. Later method QAndroidPlatformScreen::topLevelAt(..) is trying to return the top level window at the touch event position. In case when Surface is moved, we should also add this move to event position. If it is not happening, touch event will not be assigned to correct window. Fixes: QTBUG-65927 Change-Id: I549b9ec964cb09607153c60b9d9f6e0068a04cc2 Reviewed-by: Rami Potinkara Reviewed-by: Ville Voutilainen (cherry picked from commit 06b0b2be160e6122d1a80e7c37916512429cd145) --- src/android/jar/src/org/qtproject/qt5/android/QtSurface.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java index 08b5a80f7e..2e88da1740 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java @@ -101,6 +101,11 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback @Override public boolean onTouchEvent(MotionEvent event) { + // QTBUG-65927 + // Fix event positions depending on Surface position. + // In case when Surface is moved, we should also add this move to event position + event.setLocation(event.getX() + getX(), event.getY() + getY()); + QtNative.sendTouchEvent(event, getId()); m_gestureDetector.onTouchEvent(event); return true; -- cgit v1.2.3 From f52084e7dfabca0985a4c0f18403d514c3e4b994 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Wed, 28 Apr 2021 15:19:27 +0200 Subject: Fix mix-guided use of const reference variable It needs to be a mutable value variable to be std::move()d. Change-Id: I9d78b2975f8964e7a7eb06771b0069d9b9e6661e Reviewed-by: Thiago Macieira (cherry picked from commit 8ec07b4afc93160e15c1aaa746fd027f2d37f70e) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/time/qtimezoneprivate_tz.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp index 1e1864e2f4..f70b6eab3d 100644 --- a/src/corelib/time/qtimezoneprivate_tz.cpp +++ b/src/corelib/time/qtimezoneprivate_tz.cpp @@ -875,7 +875,7 @@ QTzTimeZoneCacheEntry QTzTimeZoneCache::fetchEntry(const QByteArray &ianaId) void QTzTimeZonePrivate::init(const QByteArray &ianaId) { static QTzTimeZoneCache tzCache; - const auto &entry = tzCache.fetchEntry(ianaId); + auto entry = tzCache.fetchEntry(ianaId); if (entry.m_tranTimes.isEmpty() && entry.m_posixRule.isEmpty()) return; // Invalid after all ! -- cgit v1.2.3 From 8ce794b4a738e8f80681de237095d5c71a542546 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Mon, 18 May 2020 14:04:30 +0200 Subject: Windows: Update the hasFrame setting when changing window flags Since changing the window flags can make it frameless or have a frame then it should ensure that the hasFrame setting is updated accordingly when the window flags do. Change-Id: I7bf4995d7967623b117426d8750e63fa97967e2c Fixes: QTBUG-84029 Reviewed-by: Friedemann Kleint (cherry picked from commit 60ec350bc79d562c0611bc31e8655729272c31d6) Reviewed-by: Liang Qi --- src/plugins/platforms/windows/qwindowswindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 62825eb3f5..22551ba26e 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -2156,6 +2156,7 @@ QWindowsWindowData QWindowsWindow::setWindowFlags_sys(Qt::WindowFlags wt, QWindowsWindowData result = m_data; result.flags = creationData.flags; result.embedded = creationData.embedded; + result.hasFrame = (creationData.style & (WS_DLGFRAME | WS_THICKFRAME)); return result; } -- cgit v1.2.3 From 259a167beb094929b3b26c8072b970f3903ef65d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Mon, 22 Mar 2021 11:02:52 +0100 Subject: HTTP/2 authentication required With Qt 6 we made HTTP/2 default, which exposed missing handling of 401 Unauthorized (and 407 Proxy Authentication Required). In HTTP/1.* we would handle this after the response had finished, while handling the status code. For h2 this path isn't used since it is heavily reliant on the structure we have for HTTP/1.* (one request per channel). So we must handle the status code and header directly. Having that part fixed exposed another issue - when resetting/rewinding uploaded data we were not resetting the 'totallyUploadedData' counter in the reply (this, in turn, exposed another small issue). Because of that we did not actually send any data on the retry, only sending the content-length followed by no data. Finally, the small issue mentioned in the previous paragraph was how we check if we have uploaded all our data. It was only checking if the byte-device was atEnd(), which it was. But only because it had not yet prepared any data for us. Fixes: QTBUG-91284 Change-Id: I798d105b02688b18a02897cc476f19f57a47f98f Reviewed-by: Timur Pocheptsov Reviewed-by: Edward Welbourne (cherry picked from commit 52a0eb4791727157a7b385f7e022faad28da4821) --- src/network/access/qhttp2protocolhandler.cpp | 101 +++++++++++++++++---- src/network/access/qhttpnetworkconnection.cpp | 4 +- .../access/qhttpnetworkconnectionchannel.cpp | 20 ++-- src/network/access/qhttpnetworkrequest.cpp | 4 +- src/network/access/qhttpnetworkrequest_p.h | 1 + tests/auto/network/access/http2/http2srv.cpp | 26 ++++++ tests/auto/network/access/http2/http2srv.h | 8 ++ tests/auto/network/access/http2/tst_http2.cpp | 82 +++++++++++++++++ 8 files changed, 217 insertions(+), 29 deletions(-) diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp index 0c4b8aea67..6d8039a741 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(sessionSendWindowSize, stream.sendWindow); - while (!stream.data()->atEnd() && slot) { + while (replyPrivate->totallyUploadedData < request.contentLength() && slot) { qint64 chunkSize = 0; const uchar *src = reinterpret_cast(stream.data()->readPointer(slot, chunkSize)); @@ -1019,8 +1023,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); } @@ -1088,7 +1094,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; @@ -1108,7 +1114,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) { @@ -1146,6 +1152,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'; @@ -1165,21 +1172,79 @@ 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->spdyRequestsToSend.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); if (httpReplyPrivate->isCompressed() && httpRequest.d->autoDecompress) httpReplyPrivate->removeAutoDecompressHeader(); - 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) @@ -1248,10 +1313,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 ce96ed395d..ab4faab7f6 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -510,8 +510,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 8fd132b716..f2d1f1a4f1 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -697,17 +697,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 a410f8acb1..8dd8cbe92c 100644 --- a/src/network/access/qhttpnetworkrequest.cpp +++ b/src/network/access/qhttpnetworkrequest.cpp @@ -65,6 +65,7 @@ QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(const QHttpNetworkRequest withCredentials(other.withCredentials), ssl(other.ssl), preConnect(other.preConnect), + needResendWithCredentials(other.needResendWithCredentials), redirectCount(other.redirectCount), redirectPolicy(other.redirectPolicy), peerVerifyName(other.peerVerifyName) @@ -92,7 +93,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 ff72df5d39..7bd1449995 100644 --- a/src/network/access/qhttpnetworkrequest_p.h +++ b/src/network/access/qhttpnetworkrequest_p.h @@ -183,6 +183,7 @@ public: bool withCredentials; bool ssl; bool preConnect; + bool needResendWithCredentials = false; int redirectCount; QNetworkRequest::RedirectPolicy redirectPolicy; QString peerVerifyName; diff --git a/tests/auto/network/access/http2/http2srv.cpp b/tests/auto/network/access/http2/http2srv.cpp index a8eebf5a24..c374b6abd8 100644 --- a/tests/auto/network/access/http2/http2srv.cpp +++ b/tests/auto/network/access/http2/http2srv.cpp @@ -120,6 +120,11 @@ void Http2Server::setResponseBody(const QByteArray &body) responseBody = body; } +void Http2Server::setAuthenticationHeader(const QByteArray &authentication) +{ + authenticationHeader = authentication; +} + void Http2Server::emulateGOAWAY(int timeout) { Q_ASSERT(timeout >= 0); @@ -138,6 +143,17 @@ bool Http2Server::isClearText() const return connectionType == H2Type::h2c || connectionType == H2Type::h2cDirect; } +QByteArray Http2Server::requestAuthorizationHeader() +{ + const auto isAuthHeader = [](const HeaderField &field) { + return field.name == "authorization"; + }; + const auto requestHeaders = decoder.decodedHeader(); + const auto authentication = + std::find_if(requestHeaders.cbegin(), requestHeaders.cend(), isAuthHeader); + return authentication == requestHeaders.cend() ? QByteArray() : authentication->value; +} + void Http2Server::startServer() { if (listen()) { @@ -736,6 +752,9 @@ void Http2Server::handleDATA() streamWindows.erase(it); emit receivedData(streamID); } + emit receivedDATAFrame(streamID, + QByteArray(reinterpret_cast(inboundFrame.dataBegin()), + inboundFrame.dataSize())); } void Http2Server::handleWINDOW_UPDATE() @@ -816,6 +835,9 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody) if (emptyBody) writer.addFlag(FrameFlag::END_STREAM); + // We assume any auth is correct. Leaves the checking to the test itself + const bool hasAuth = !requestAuthorizationHeader().isEmpty(); + HttpHeader header; if (redirectWhileReading) { if (redirectSent) { @@ -832,6 +854,10 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody) header.push_back({"location", url.arg(isClearText() ? QStringLiteral("http") : QStringLiteral("https"), QString::number(targetPort)).toLatin1()}); + } else if (!authenticationHeader.isEmpty() && !hasAuth) { + header.push_back({ ":status", "401" }); + header.push_back(HPack::HeaderField("www-authenticate", authenticationHeader)); + authenticationHeader.clear(); } else { header.push_back({":status", "200"}); } diff --git a/tests/auto/network/access/http2/http2srv.h b/tests/auto/network/access/http2/http2srv.h index 3105684d59..013af86cc8 100644 --- a/tests/auto/network/access/http2/http2srv.h +++ b/tests/auto/network/access/http2/http2srv.h @@ -86,11 +86,15 @@ public: // To be called before server started: void enablePushPromise(bool enabled, const QByteArray &path = QByteArray()); void setResponseBody(const QByteArray &body); + // No authentication data is generated for the method, the full header value must be set + void setAuthenticationHeader(const QByteArray &authentication); void emulateGOAWAY(int timeout); void redirectOpenStream(quint16 targetPort); bool isClearText() const; + QByteArray requestAuthorizationHeader(); + // Invokables, since we can call them from the main thread, // but server (can) work on its own thread. Q_INVOKABLE void startServer(); @@ -127,6 +131,8 @@ Q_SIGNALS: void decompressionFailed(quint32 streamID); void receivedRequest(quint32 streamID); void receivedData(quint32 streamID); + // Emitted for every DATA frame. Includes the content of the frame as \a body. + void receivedDATAFrame(quint32 streamID, const QByteArray &body); void windowUpdate(quint32 streamID); void sendingData(); @@ -211,6 +217,8 @@ private: bool redirectSent = false; quint16 targetPort = 0; QAtomicInt interrupted; + + QByteArray authenticationHeader; protected slots: void ignoreErrorSlot(); }; diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp index 6702f25b16..175b60d4bd 100644 --- a/tests/auto/network/access/http2/tst_http2.cpp +++ b/tests/auto/network/access/http2/tst_http2.cpp @@ -111,6 +111,9 @@ private slots: void connectToHost(); void maxFrameSize(); + void authenticationRequired_data(); + void authenticationRequired(); + protected slots: // Slots to listen to our in-process server: void serverStarted(quint16 port); @@ -767,6 +770,85 @@ void tst_Http2::maxFrameSize() QVERIFY(serverGotSettingsACK); } +void tst_Http2::authenticationRequired_data() +{ + QTest::addColumn("success"); + + QTest::addRow("failed-auth") << false; + QTest::addRow("successful-auth") << true; +} + +void tst_Http2::authenticationRequired() +{ + clearHTTP2State(); + + QFETCH(const bool, success); + + ServerPtr targetServer(newServer(defaultServerSettings, defaultConnectionType())); + targetServer->setResponseBody("Hello"); + targetServer->setAuthenticationHeader("Basic realm=\"Shadow\""); + + QMetaObject::invokeMethod(targetServer.data(), "startServer", Qt::QueuedConnection); + runEventLoop(); + + QVERIFY(serverPort != 0); + + nRequests = 1; + + auto url = requestUrl(defaultConnectionType()); + url.setPath("/index.html"); + QNetworkRequest request(url); + + QByteArray expectedBody = "Hello, World!"; + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + request.setAttribute(QNetworkRequest::Http2AllowedAttribute, QVariant(true)); + QScopedPointer reply; + reply.reset(manager->post(request, expectedBody)); + + bool authenticationRequested = false; + connect(manager.get(), &QNetworkAccessManager::authenticationRequired, reply.get(), + [&](QNetworkReply *, QAuthenticator *auth) { + authenticationRequested = true; + if (success) { + auth->setUser("admin"); + auth->setPassword("admin"); + } + }); + + QByteArray receivedBody; + connect(targetServer.get(), &Http2Server::receivedDATAFrame, reply.get(), + [&receivedBody](quint32 streamID, const QByteArray &body) { + if (streamID == 3) // The expected body is on the retry, so streamID == 3 + receivedBody += body; + }); + + if (success) + connect(reply.get(), &QNetworkReply::finished, this, &tst_Http2::replyFinished); + else + connect(reply.get(), &QNetworkReply::errorOccurred, this, &tst_Http2::replyFinishedWithError); + // Since we're using self-signed certificates, + // ignore SSL errors: + reply->ignoreSslErrors(); + + runEventLoop(); + STOP_ON_FAILURE + + if (!success) + QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError); + // else: no error (is checked in tst_Http2::replyFinished) + + QVERIFY(authenticationRequested); + + const auto isAuthenticated = [](QByteArray bv) { + return bv == "Basic YWRtaW46YWRtaW4="; // admin:admin + }; + // Get the "authorization" header out from the server and make sure it's as expected: + auto reqAuthHeader = targetServer->requestAuthorizationHeader(); + QCOMPARE(isAuthenticated(reqAuthHeader), success); + if (success) + QCOMPARE(receivedBody, expectedBody); +} + void tst_Http2::serverStarted(quint16 port) { serverPort = port; -- cgit v1.2.3 From 3c2418cdc35d7f45c2ddc35698b0e7f31fc61fe2 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 29 Apr 2021 15:40:44 +0200 Subject: uic/Python: Add comments for mypy to ignore star imports Amends 2f975b39a967cd2ac1c234a200eb6b9c11d8b5b2. Fixes: PYSIDE-1404 Change-Id: I534d78bdf44eb02bf80831a3d6c1d080a4e08698 Reviewed-by: Christian Tismer Reviewed-by: Cristian Maureira-Fredes (cherry picked from commit ac95326ad46fbff310ad25baaf96262d851509c1) --- src/tools/uic/python/pythonwriteimports.cpp | 6 +++--- tests/auto/tools/uic/baseline/config.ui.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/tools/uic/python/pythonwriteimports.cpp b/src/tools/uic/python/pythonwriteimports.cpp index ec01690283..8c29e0b4be 100644 --- a/src/tools/uic/python/pythonwriteimports.cpp +++ b/src/tools/uic/python/pythonwriteimports.cpp @@ -39,9 +39,9 @@ QT_BEGIN_NAMESPACE static const char *standardImports = -R"I(from PySide2.QtCore import * -from PySide2.QtGui import * -from PySide2.QtWidgets import * +R"I(from PySide2.QtCore import * # type: ignore +from PySide2.QtGui import * # type: ignore +from PySide2.QtWidgets import * # type: ignore )I"; // Change the name of a qrc file "dir/foo.qrc" file to the Python diff --git a/tests/auto/tools/uic/baseline/config.ui.py b/tests/auto/tools/uic/baseline/config.ui.py index 8cf1600b41..d8f1dec3a4 100644 --- a/tests/auto/tools/uic/baseline/config.ui.py +++ b/tests/auto/tools/uic/baseline/config.ui.py @@ -36,9 +36,9 @@ ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ -from PySide2.QtCore import * -from PySide2.QtGui import * -from PySide2.QtWidgets import * +from PySide2.QtCore import * # type: ignore +from PySide2.QtGui import * # type: ignore +from PySide2.QtWidgets import * # type: ignore from gammaview import GammaView -- cgit v1.2.3 From f0367f87d89806b54fc5768ae59c0927e506b325 Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Fri, 26 Feb 2021 12:11:03 +0100 Subject: QSsl: fix UB pointer use MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Weird macro had inverted notion of type safety: instead of casting parameters and return values (they are pointers) to work with generic OPENSSL_sk_xxx functions, it was ... casting a function pointer to an invalid type to get ... nothing, but UB. Home-brewed (un)'safestack'!!! Change-Id: Ib91a7ba4cd472f370836797e422456f91a4385b0 Reviewed-by: Mårten Nordheim Reviewed-by: Edward Welbourne (cherry picked from commit 9fc2f1f076b953ff0979fb73ed6e70ac9bde278c) --- src/network/ssl/qsslcertificate_openssl.cpp | 4 ++-- src/network/ssl/qsslsocket_openssl_symbols_p.h | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/network/ssl/qsslcertificate_openssl.cpp b/src/network/ssl/qsslcertificate_openssl.cpp index 17c987f415..25573b68ae 100644 --- a/src/network/ssl/qsslcertificate_openssl.cpp +++ b/src/network/ssl/qsslcertificate_openssl.cpp @@ -356,7 +356,7 @@ static QVariant x509UnknownExtensionToValue(X509_EXTENSION *ext) QVariantList list; bool isMap = false; - for (int j = 0; j < q_SKM_sk_num(CONF_VALUE, val); j++) { + for (int j = 0; j < q_SKM_sk_num(val); j++) { CONF_VALUE *nval = q_SKM_sk_value(CONF_VALUE, val, j); if (nval->name && nval->value) { isMap = true; @@ -428,7 +428,7 @@ static QVariant x509ExtensionToValue(X509_EXTENSION *ext) return QVariant(); QVariantMap result; - for (int i=0; i < q_SKM_sk_num(ACCESS_DESCRIPTION, info); i++) { + for (int i=0; i < q_SKM_sk_num(info); i++) { ACCESS_DESCRIPTION *ad = q_SKM_sk_value(ACCESS_DESCRIPTION, info, i); GENERAL_NAME *name = ad->location; diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index 69e64842bf..aacae8f677 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -269,8 +269,8 @@ int q_DH_bits(DH *dh); # define q_SSL_load_error_strings() q_OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) -#define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_OPENSSL_sk_num)(st) -#define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_OPENSSL_sk_value)(st, i) +#define q_SKM_sk_num(st) q_OPENSSL_sk_num((OPENSSL_STACK *)st) +#define q_SKM_sk_value(type, st,i) (type *)q_OPENSSL_sk_value((OPENSSL_STACK *)st, i) #define q_OPENSSL_add_all_algorithms_conf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ | OPENSSL_INIT_ADD_ALL_DIGESTS \ @@ -611,14 +611,14 @@ void q_PKCS12_free(PKCS12 *pkcs12); #define q_BIO_get_mem_data(b, pp) (int)q_BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp) #define q_BIO_pending(b) (int)q_BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) #define q_SSL_CTX_set_mode(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) -#define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num(GENERAL_NAME, (st)) +#define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num((st)) #define q_sk_GENERAL_NAME_value(st, i) q_SKM_sk_value(GENERAL_NAME, (st), (i)) void q_GENERAL_NAME_free(GENERAL_NAME *a); -#define q_sk_X509_num(st) q_SKM_sk_num(X509, (st)) +#define q_sk_X509_num(st) q_SKM_sk_num((st)) #define q_sk_X509_value(st, i) q_SKM_sk_value(X509, (st), (i)) -#define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num(SSL_CIPHER, (st)) +#define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num((st)) #define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i)) #define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \ q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) -- cgit v1.2.3 From bd54cf95897b1303fd41d185ac55bbd275b79956 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Fri, 9 Apr 2021 14:01:32 +0200 Subject: Update CLDR-derived data to newly-released v39 Routine update with minor changes to locale data, no new languages, territories or scripts. Various Spanish locales change m_grouping_top from 1 to 2, reversing a change to a test of Costa Rica's currency formatting made in commit bb6a73260ec8272647265f42180963604ad0f755. Includes updates to time-zone IDs. Regenerated on 5.15 as the cherry-pick from dev has quite different data. Fixes: QTBUG-91478 Change-Id: I78ee161275b3c456c5800a7317a96947c932cf8e Reviewed-by: Thiago Macieira (cherry picked from commit 6235893d54b8fbf5c8bd54e33cd82b55042555f1) Reviewed-by: Qt CI Bot Reviewed-by: Lars Knoll --- src/corelib/text/qlocale.qdoc | 2 +- src/corelib/text/qlocale_data_p.h | 651 ++++++------ src/corelib/time/qhijricalendar_data_p.h | 6 +- src/corelib/time/qjalalicalendar_data_p.h | 6 +- src/corelib/time/qromancalendar_data_p.h | 2 +- src/corelib/time/qtimezoneprivate_data_p.h | 1245 ++++++++++++----------- tests/auto/corelib/text/qlocale/tst_qlocale.cpp | 2 + 7 files changed, 955 insertions(+), 959 deletions(-) diff --git a/src/corelib/text/qlocale.qdoc b/src/corelib/text/qlocale.qdoc index 67fa0f4b62..49ac2a7852 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 bdef8c811d..c438b28351 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-09 from the - Common Locale Data Repository v38 + This part of the file was generated on 2021-04-26 from the + Common Locale Data Repository v39 http://www.unicode.org/cldr/ @@ -314,7 +314,6 @@ static const QLocaleId likely_subtags[] = { { 259, 0, 0 }, { 259, 7, 37 }, // mgo -> mgo_Latn_CM { 81, 0, 0 }, { 81, 7, 134 }, // mh -> mh_Latn_MH { 79, 0, 0 }, { 79, 7, 154 }, // mi -> mi_Latn_NZ - { 356, 0, 0 }, { 356, 130, 103 }, // mis -> mis_Hatr_IQ { 74, 0, 0 }, { 74, 2, 127 }, // mk -> mk_Cyrl_MK { 77, 0, 0 }, { 77, 24, 100 }, // ml -> ml_Mlym_IN { 82, 0, 0 }, { 82, 2, 143 }, // mn -> mn_Cyrl_MN @@ -718,7 +717,6 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 138 }, { 37, 7, 138 }, // und_YT -> fr_Latn_YT { 0, 0, 240 }, { 104, 7, 240 }, // und_ZW -> sn_Latn_ZW { 0, 134, 0 }, { 177, 134, 91 }, // und_Adlm -> ff_Adlm_GN - { 0, 105, 0 }, { 335, 105, 178 }, // und_Aghb -> lez_Aghb_RU { 0, 128, 0 }, { 340, 128, 100 }, // und_Ahom -> aho_Ahom_IN { 0, 1, 0 }, { 8, 1, 64 }, // und_Arab -> ar_Arab_EG { 0, 1, 46 }, { 76, 1, 46 }, // und_Arab_CC -> ms_Arab_CC @@ -782,7 +780,6 @@ static const QLocaleId likely_subtags[] = { { 0, 56, 0 }, { 280, 56, 170 }, // und_Hano -> hnn_Hano_PH { 0, 5, 0 }, { 25, 5, 44 }, // und_Hans -> zh_Hans_CN { 0, 6, 0 }, { 25, 6, 208 }, // und_Hant -> zh_Hant_TW - { 0, 130, 0 }, { 356, 130, 103 }, // und_Hatr -> mis_Hatr_IQ { 0, 18, 0 }, { 48, 18, 105 }, // und_Hebr -> he_Hebr_IL { 0, 18, 38 }, { 137, 18, 38 }, // und_Hebr_CA -> yi_Hebr_CA { 0, 18, 224 }, { 137, 18, 224 }, // und_Hebr_GB -> yi_Hebr_GB @@ -1288,64 +1285,64 @@ static const QLocaleData locale_data[] = { { 6, 7, 127, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 14,9 , 14,9 , 113,6 , 10,17 , 37,5 , 8,10 , 310,28 , 338,58 , 396,15 , 411,28 , 338,58 , 396,15 , 7,11 , 7,10 , 54,4 , 5,17 , 22,23 , {77,75,68}, 11,3 , 198,54 , 19,5 , 24,7 , 51,5 , 64,18 , 2, 1, 1, 6, 7 }, // Albanian/Latin/Macedonia { 6, 7, 257, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 14,9 , 14,9 , 113,6 , 10,17 , 37,5 , 8,10 , 310,28 , 338,58 , 396,15 , 411,28 , 338,58 , 396,15 , 7,11 , 7,10 , 54,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 252,21 , 19,5 , 24,7 , 51,5 , 82,6 , 2, 1, 1, 6, 7 }, // Albanian/Latin/Kosovo { 7, 14, 69, 46, 44, 59, 37, 48, 45, 43, 101, 171, 187, 8249, 8250, 23,6 , 23,6 , 29,9 , 38,8 , 119,10 , 63,17 , 18,7 , 25,12 , 439,27 , 466,28 , 494,14 , 439,27 , 466,28 , 494,14 , 18,3 , 17,4 , 58,3 , 61,23 , 22,23 , {69,84,66}, 15,2 , 273,34 , 4,4 , 13,6 , 88,4 , 92,5 , 2, 1, 7, 6, 7 }, // Amharic/Ethiopic/Ethiopia - { 8, 1, 64, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {69,71,80}, 17,5 , 307,81 , 19,5 , 4,0 , 97,7 , 104,3 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/Egypt - { 8, 1, 3, 44, 46, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {68,90,68}, 22,5 , 388,102 , 4,4 , 13,6 , 97,7 , 107,7 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/Algeria - { 8, 1, 17, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {66,72,68}, 27,5 , 490,91 , 19,5 , 4,0 , 97,7 , 114,7 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Bahrain - { 8, 1, 42, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {88,65,70}, 32,4 , 581,112 , 19,5 , 4,0 , 97,7 , 121,4 , 0, 0, 1, 6, 7 }, // Arabic/Arabic/Chad - { 8, 1, 48, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 37,5 , 8,10 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {75,77,70}, 36,2 , 693,105 , 19,5 , 4,0 , 97,7 , 125,9 , 0, 0, 1, 6, 7 }, // Arabic/Arabic/Comoros - { 8, 1, 59, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {68,74,70}, 38,3 , 798,84 , 19,5 , 4,0 , 97,7 , 134,6 , 0, 0, 6, 6, 7 }, // Arabic/Arabic/Djibouti - { 8, 1, 67, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {69,82,78}, 41,3 , 882,91 , 19,5 , 4,0 , 97,7 , 140,7 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Eritrea - { 8, 1, 103, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {73,81,68}, 44,5 , 973,84 , 19,5 , 4,0 , 97,7 , 147,6 , 0, 0, 6, 5, 6 }, // Arabic/Arabic/Iraq - { 8, 1, 105, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 55,4 , 59,9 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {73,76,83}, 49,1 , 1057,133 , 19,5 , 4,0 , 97,7 , 153,7 , 2, 1, 7, 5, 6 }, // Arabic/Arabic/Israel - { 8, 1, 109, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {74,79,68}, 50,5 , 1190,84 , 19,5 , 4,0 , 97,7 , 160,6 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Jordan - { 8, 1, 115, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {75,87,68}, 55,5 , 1274,84 , 19,5 , 4,0 , 97,7 , 166,6 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Kuwait - { 8, 1, 119, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {76,66,80}, 60,5 , 1358,84 , 19,5 , 4,0 , 97,7 , 172,5 , 0, 0, 1, 6, 7 }, // Arabic/Arabic/Lebanon - { 8, 1, 122, 44, 46, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {76,89,68}, 65,5 , 1442,88 , 4,4 , 13,6 , 97,7 , 177,5 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Libya - { 8, 1, 136, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {77,82,85}, 70,4 , 1530,112 , 19,5 , 4,0 , 97,7 , 182,9 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Mauritania - { 8, 1, 145, 44, 46, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 37,5 , 8,10 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {77,65,68}, 74,5 , 1642,87 , 4,4 , 13,6 , 97,7 , 191,6 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Morocco - { 8, 1, 162, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {79,77,82}, 79,5 , 1729,77 , 19,5 , 4,0 , 97,7 , 197,5 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Oman - { 8, 1, 165, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {73,76,83}, 49,1 , 1057,133 , 19,5 , 4,0 , 97,7 , 202,18 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Palestinian Territories - { 8, 1, 175, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {81,65,82}, 84,5 , 1806,70 , 19,5 , 4,0 , 97,7 , 220,3 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/Qatar - { 8, 1, 186, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {83,65,82}, 89,5 , 1876,77 , 19,5 , 4,0 , 97,7 , 223,24 , 2, 1, 7, 5, 6 }, // Arabic/Arabic/Saudi Arabia - { 8, 1, 194, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {83,79,83}, 94,1 , 1953,77 , 19,5 , 4,0 , 97,7 , 247,7 , 0, 0, 1, 6, 7 }, // Arabic/Arabic/Somalia - { 8, 1, 201, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {83,68,71}, 95,4 , 2030,91 , 19,5 , 4,0 , 97,7 , 254,7 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/Sudan - { 8, 1, 207, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {83,89,80}, 99,5 , 2121,77 , 19,5 , 4,0 , 97,7 , 261,5 , 0, 0, 6, 5, 6 }, // Arabic/Arabic/Syria - { 8, 1, 216, 44, 46, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {84,78,68}, 104,5 , 2198,95 , 4,4 , 13,6 , 97,7 , 266,4 , 3, 0, 1, 6, 7 }, // Arabic/Arabic/Tunisia - { 8, 1, 223, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {65,69,68}, 109,5 , 2293,91 , 19,5 , 4,0 , 97,7 , 270,24 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/United Arab Emirates - { 8, 1, 236, 46, 44, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {77,65,68}, 74,5 , 1642,87 , 4,4 , 13,6 , 97,7 , 294,15 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Western Sahara - { 8, 1, 237, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {89,69,82}, 114,5 , 2384,70 , 19,5 , 4,0 , 97,7 , 309,5 , 0, 0, 7, 5, 6 }, // Arabic/Arabic/Yemen - { 8, 1, 254, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {83,83,80}, 119,1 , 2454,132 , 19,5 , 4,0 , 97,7 , 314,12 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/South Sudan - { 8, 1, 260, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,47 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 19,5 , 4,0 , 326,22 , 348,6 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/World - { 9, 10, 11, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 52,7 , 52,7 , 156,8 , 164,20 , 37,5 , 8,10 , 574,28 , 602,62 , 664,14 , 574,28 , 602,62 , 664,14 , 0,2 , 0,2 , 135,6 , 141,17 , 22,23 , {65,77,68}, 120,1 , 2586,46 , 19,5 , 4,0 , 354,7 , 361,8 , 2, 0, 1, 6, 7 }, // Armenian/Armenian/Armenia - { 10, 11, 100, 46, 44, 59, 37, 2534, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 59,9 , 59,9 , 184,8 , 192,18 , 68,7 , 75,12 , 678,32 , 710,58 , 768,14 , 678,32 , 710,58 , 768,14 , 22,9 , 22,7 , 158,4 , 162,37 , 22,23 , {73,78,82}, 121,1 , 2632,43 , 8,5 , 4,0 , 369,7 , 376,4 , 2, 1, 7, 7, 7 }, // Assamese/Bengali/India - { 12, 7, 15, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 68,8 , 68,8 , 156,8 , 210,17 , 37,5 , 8,10 , 782,27 , 809,67 , 99,14 , 876,27 , 809,67 , 99,14 , 0,2 , 0,2 , 199,4 , 5,17 , 22,23 , {65,90,78}, 122,1 , 2675,58 , 19,5 , 4,0 , 380,10 , 390,10 , 2, 1, 1, 6, 7 }, // Azerbaijani/Latin/Azerbaijan + { 8, 1, 64, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {69,71,80}, 17,5 , 307,81 , 19,5 , 4,0 , 97,7 , 104,3 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/Egypt + { 8, 1, 3, 44, 46, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {68,90,68}, 22,5 , 388,102 , 4,4 , 13,6 , 97,7 , 107,7 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/Algeria + { 8, 1, 17, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {66,72,68}, 27,5 , 490,91 , 19,5 , 4,0 , 97,7 , 114,7 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Bahrain + { 8, 1, 42, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {88,65,70}, 32,4 , 581,112 , 19,5 , 4,0 , 97,7 , 121,4 , 0, 0, 1, 6, 7 }, // Arabic/Arabic/Chad + { 8, 1, 48, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 37,5 , 8,10 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {75,77,70}, 36,2 , 693,105 , 19,5 , 4,0 , 97,7 , 125,9 , 0, 0, 1, 6, 7 }, // Arabic/Arabic/Comoros + { 8, 1, 59, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {68,74,70}, 38,3 , 798,84 , 19,5 , 4,0 , 97,7 , 134,6 , 0, 0, 6, 6, 7 }, // Arabic/Arabic/Djibouti + { 8, 1, 67, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {69,82,78}, 41,3 , 882,91 , 19,5 , 4,0 , 97,7 , 140,7 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Eritrea + { 8, 1, 103, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {73,81,68}, 44,5 , 973,84 , 19,5 , 4,0 , 97,7 , 147,6 , 0, 0, 6, 5, 6 }, // Arabic/Arabic/Iraq + { 8, 1, 105, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 55,4 , 59,9 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {73,76,83}, 49,1 , 1057,133 , 19,5 , 4,0 , 97,7 , 153,7 , 2, 1, 7, 5, 6 }, // Arabic/Arabic/Israel + { 8, 1, 109, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {74,79,68}, 50,5 , 1190,84 , 19,5 , 4,0 , 97,7 , 160,6 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Jordan + { 8, 1, 115, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {75,87,68}, 55,5 , 1274,84 , 19,5 , 4,0 , 97,7 , 166,6 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Kuwait + { 8, 1, 119, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {76,66,80}, 60,5 , 1358,84 , 19,5 , 4,0 , 97,7 , 172,5 , 0, 0, 1, 6, 7 }, // Arabic/Arabic/Lebanon + { 8, 1, 122, 44, 46, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {76,89,68}, 65,5 , 1442,88 , 4,4 , 13,6 , 97,7 , 177,5 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Libya + { 8, 1, 136, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {77,82,85}, 70,4 , 1530,112 , 19,5 , 4,0 , 97,7 , 182,9 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Mauritania + { 8, 1, 145, 44, 46, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 37,5 , 8,10 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {77,65,68}, 74,5 , 1642,87 , 4,4 , 13,6 , 97,7 , 191,6 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Morocco + { 8, 1, 162, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {79,77,82}, 79,5 , 1729,77 , 19,5 , 4,0 , 97,7 , 197,5 , 3, 0, 6, 5, 6 }, // Arabic/Arabic/Oman + { 8, 1, 165, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {73,76,83}, 49,1 , 1057,133 , 19,5 , 4,0 , 97,7 , 202,18 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Palestinian Territories + { 8, 1, 175, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {81,65,82}, 84,5 , 1806,70 , 19,5 , 4,0 , 97,7 , 220,3 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/Qatar + { 8, 1, 186, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {83,65,82}, 89,5 , 1876,77 , 19,5 , 4,0 , 97,7 , 223,24 , 2, 1, 7, 5, 6 }, // Arabic/Arabic/Saudi Arabia + { 8, 1, 194, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {83,79,83}, 94,1 , 1953,77 , 19,5 , 4,0 , 97,7 , 247,7 , 0, 0, 1, 6, 7 }, // Arabic/Arabic/Somalia + { 8, 1, 201, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {83,68,71}, 95,4 , 2030,91 , 19,5 , 4,0 , 97,7 , 254,7 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/Sudan + { 8, 1, 207, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {83,89,80}, 99,5 , 2121,77 , 19,5 , 4,0 , 97,7 , 261,5 , 0, 0, 6, 5, 6 }, // Arabic/Arabic/Syria + { 8, 1, 216, 44, 46, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {84,78,68}, 104,5 , 2198,95 , 4,4 , 13,6 , 97,7 , 266,4 , 3, 0, 1, 6, 7 }, // Arabic/Arabic/Tunisia + { 8, 1, 223, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {65,69,68}, 109,5 , 2293,91 , 19,5 , 4,0 , 97,7 , 270,24 , 2, 1, 6, 5, 6 }, // Arabic/Arabic/United Arab Emirates + { 8, 1, 236, 46, 44, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {77,65,68}, 74,5 , 1642,87 , 4,4 , 13,6 , 97,7 , 294,15 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/Western Sahara + { 8, 1, 237, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {89,69,82}, 114,5 , 2384,70 , 19,5 , 4,0 , 97,7 , 309,5 , 0, 0, 7, 5, 6 }, // Arabic/Arabic/Yemen + { 8, 1, 254, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {83,83,80}, 119,1 , 2454,132 , 19,5 , 4,0 , 97,7 , 314,12 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/South Sudan + { 8, 1, 260, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8221, 8220, 8217, 8216, 46,6 , 46,6 , 46,6 , 46,6 , 129,10 , 139,17 , 18,7 , 25,12 , 508,52 , 508,52 , 560,14 , 508,52 , 508,52 , 560,14 , 21,1 , 21,1 , 84,4 , 88,35 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 19,5 , 4,0 , 326,22 , 348,6 , 2, 1, 1, 6, 7 }, // Arabic/Arabic/World + { 9, 10, 11, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 52,7 , 52,7 , 156,8 , 164,20 , 37,5 , 8,10 , 574,28 , 602,62 , 664,14 , 574,28 , 602,62 , 664,14 , 0,2 , 0,2 , 123,6 , 129,17 , 22,23 , {65,77,68}, 120,1 , 2586,46 , 19,5 , 4,0 , 354,7 , 361,8 , 2, 0, 1, 6, 7 }, // Armenian/Armenian/Armenia + { 10, 11, 100, 46, 44, 59, 37, 2534, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 59,9 , 59,9 , 184,8 , 192,18 , 68,7 , 75,12 , 678,32 , 710,58 , 768,14 , 678,32 , 710,58 , 768,14 , 22,9 , 22,7 , 146,4 , 150,37 , 22,23 , {73,78,82}, 121,1 , 2632,43 , 8,5 , 4,0 , 369,7 , 376,4 , 2, 1, 7, 7, 7 }, // Assamese/Bengali/India + { 12, 7, 15, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 68,8 , 68,8 , 156,8 , 210,17 , 37,5 , 8,10 , 782,27 , 809,67 , 99,14 , 876,27 , 809,67 , 99,14 , 0,2 , 0,2 , 187,4 , 5,17 , 22,23 , {65,90,78}, 122,1 , 2675,58 , 19,5 , 4,0 , 380,10 , 390,10 , 2, 1, 1, 6, 7 }, // Azerbaijani/Latin/Azerbaijan { 12, 1, 102, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,82,82}, 0,0 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 6, 5, 5 }, // Azerbaijani/Arabic/Iran { 12, 2, 15, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 0,6 , 0,6 , 156,8 , 210,17 , 37,5 , 8,10 , 903,27 , 930,67 , 99,14 , 903,27 , 930,67 , 99,14 , 31,2 , 29,2 , 45,4 , 5,17 , 22,23 , {65,90,78}, 122,1 , 2733,12 , 19,5 , 4,0 , 400,10 , 410,10 , 2, 1, 1, 6, 7 }, // Azerbaijani/Cyrillic/Azerbaijan { 13, 2, 178, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {82,85,66}, 123,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Bashkir/Cyrillic/Russia - { 14, 7, 197, 44, 46, 59, 37, 48, 8722, 43, 101, 8220, 8221, 8220, 8221, 0,6 , 0,6 , 76,9 , 76,9 , 227,6 , 233,36 , 37,5 , 87,12 , 997,28 , 1025,68 , 1093,14 , 997,28 , 1025,68 , 1093,14 , 0,2 , 0,2 , 203,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 2745,20 , 19,5 , 24,7 , 420,7 , 427,8 , 2, 1, 1, 6, 7 }, // Basque/Latin/Spain - { 15, 11, 18, 46, 44, 59, 37, 2534, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 85,9 , 85,9 , 269,6 , 192,18 , 18,7 , 25,12 , 1107,37 , 1144,58 , 1202,18 , 1107,37 , 1144,58 , 1202,18 , 0,2 , 0,2 , 158,4 , 5,17 , 22,23 , {66,68,84}, 124,1 , 2765,49 , 0,4 , 31,6 , 435,5 , 440,8 , 2, 1, 7, 6, 7 }, // Bengali/Bengali/Bangladesh - { 15, 11, 100, 46, 44, 59, 37, 2534, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 85,9 , 85,9 , 269,6 , 192,18 , 18,7 , 25,12 , 1107,37 , 1144,58 , 1202,18 , 1107,37 , 1144,58 , 1202,18 , 0,2 , 0,2 , 158,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 2814,43 , 0,4 , 31,6 , 435,5 , 448,4 , 2, 1, 7, 7, 7 }, // Bengali/Bengali/India + { 14, 7, 197, 44, 46, 59, 37, 48, 8722, 43, 101, 8220, 8221, 8220, 8221, 0,6 , 0,6 , 76,9 , 76,9 , 227,6 , 233,36 , 37,5 , 87,12 , 997,28 , 1025,68 , 1093,14 , 997,28 , 1025,68 , 1093,14 , 0,2 , 0,2 , 191,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 2745,20 , 19,5 , 24,7 , 420,7 , 427,8 , 2, 1, 1, 6, 7 }, // Basque/Latin/Spain + { 15, 11, 18, 46, 44, 59, 37, 2534, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 85,9 , 85,9 , 269,6 , 192,18 , 18,7 , 25,12 , 1107,37 , 1144,58 , 1202,18 , 1107,37 , 1144,58 , 1202,18 , 0,2 , 0,2 , 146,4 , 5,17 , 22,23 , {66,68,84}, 124,1 , 2765,49 , 0,4 , 31,6 , 435,5 , 440,8 , 2, 1, 7, 6, 7 }, // Bengali/Bengali/Bangladesh + { 15, 11, 100, 46, 44, 59, 37, 2534, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 85,9 , 85,9 , 269,6 , 192,18 , 18,7 , 25,12 , 1107,37 , 1144,58 , 1202,18 , 1107,37 , 1144,58 , 1202,18 , 0,2 , 0,2 , 146,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 2814,43 , 0,4 , 31,6 , 435,5 , 448,4 , 2, 1, 7, 7, 7 }, // Bengali/Bengali/India { 16, 31, 25, 46, 44, 59, 37, 3872, 45, 43, 101, 8220, 8221, 8216, 8217, 94,9 , 94,9 , 94,9 , 94,9 , 53,10 , 275,30 , 99,22 , 121,27 , 1220,34 , 1254,79 , 1333,27 , 1220,34 , 1254,79 , 1333,27 , 33,5 , 31,6 , 45,4 , 5,17 , 22,23 , {66,84,78}, 125,3 , 2857,15 , 4,4 , 4,0 , 452,6 , 458,5 , 2, 1, 7, 6, 7 }, // Dzongkha/Tibetan/Bhutan - { 19, 7, 74, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 103,8 , 103,8 , 119,10 , 97,16 , 37,5 , 8,10 , 1360,33 , 1393,43 , 1436,18 , 1360,33 , 1393,43 , 1436,18 , 38,4 , 37,4 , 210,7 , 217,17 , 234,23 , {69,85,82}, 14,1 , 2872,36 , 19,5 , 4,0 , 463,9 , 472,5 , 2, 1, 1, 6, 7 }, // Breton/Latin/France - { 20, 2, 33, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 305,12 , 317,22 , 148,9 , 157,14 , 1454,21 , 1475,55 , 1530,14 , 1454,21 , 1475,55 , 1530,14 , 42,6 , 41,6 , 257,7 , 5,17 , 22,23 , {66,71,78}, 128,3 , 2908,47 , 19,5 , 24,7 , 477,9 , 486,8 , 2, 1, 1, 6, 7 }, // Bulgarian/Cyrillic/Bulgaria - { 21, 25, 147, 46, 44, 4170, 37, 4160, 45, 43, 101, 8220, 8221, 8216, 8217, 118,6 , 118,6 , 124,10 , 124,10 , 339,8 , 347,18 , 171,6 , 177,10 , 1544,54 , 1544,54 , 1598,14 , 1544,54 , 1544,54 , 1598,14 , 48,5 , 47,3 , 264,5 , 5,17 , 22,23 , {77,77,75}, 131,1 , 2955,29 , 8,5 , 4,0 , 494,6 , 494,6 , 0, 0, 7, 6, 7 }, // Burmese/Myanmar/Myanmar - { 22, 2, 20, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 134,7 , 134,7 , 365,7 , 317,22 , 37,5 , 187,11 , 1612,21 , 1633,56 , 1689,14 , 1612,21 , 1633,56 , 1689,14 , 0,2 , 0,2 , 269,5 , 274,17 , 22,23 , {66,89,78}, 0,2 , 2984,89 , 19,5 , 4,0 , 500,10 , 510,8 , 2, 0, 1, 6, 7 }, // Belarusian/Cyrillic/Belarus - { 23, 20, 36, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 141,9 , 150,9 , 269,6 , 97,16 , 18,7 , 25,12 , 1703,40 , 1743,46 , 1789,14 , 1703,40 , 1803,47 , 1789,14 , 0,2 , 0,2 , 291,2 , 5,17 , 22,23 , {75,72,82}, 132,1 , 3073,29 , 0,4 , 31,6 , 518,5 , 523,7 , 2, 1, 7, 6, 7 }, // Khmer/Khmer/Cambodia + { 19, 7, 74, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 103,8 , 103,8 , 119,10 , 97,16 , 37,5 , 8,10 , 1360,33 , 1393,43 , 1436,18 , 1360,33 , 1393,43 , 1436,18 , 38,4 , 37,4 , 198,7 , 205,17 , 222,23 , {69,85,82}, 14,1 , 2872,36 , 19,5 , 4,0 , 463,9 , 472,5 , 2, 1, 1, 6, 7 }, // Breton/Latin/France + { 20, 2, 33, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 305,12 , 317,22 , 148,9 , 157,14 , 1454,21 , 1475,55 , 1530,14 , 1454,21 , 1475,55 , 1530,14 , 42,6 , 41,6 , 245,7 , 5,17 , 22,23 , {66,71,78}, 128,3 , 2908,47 , 19,5 , 24,7 , 477,9 , 486,8 , 2, 1, 1, 6, 7 }, // Bulgarian/Cyrillic/Bulgaria + { 21, 25, 147, 46, 44, 4170, 37, 4160, 45, 43, 101, 8220, 8221, 8216, 8217, 118,6 , 118,6 , 124,10 , 124,10 , 339,8 , 347,18 , 171,6 , 177,10 , 1544,54 , 1544,54 , 1598,14 , 1544,54 , 1544,54 , 1598,14 , 48,5 , 47,3 , 252,5 , 5,17 , 22,23 , {77,77,75}, 131,1 , 2955,29 , 8,5 , 4,0 , 494,6 , 494,6 , 0, 0, 7, 6, 7 }, // Burmese/Myanmar/Myanmar + { 22, 2, 20, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 134,7 , 134,7 , 365,7 , 317,22 , 37,5 , 187,11 , 1612,21 , 1633,56 , 1689,14 , 1612,21 , 1633,56 , 1689,14 , 0,2 , 0,2 , 257,5 , 262,17 , 22,23 , {66,89,78}, 0,2 , 2984,89 , 19,5 , 4,0 , 500,10 , 510,8 , 2, 0, 1, 6, 7 }, // Belarusian/Cyrillic/Belarus + { 23, 20, 36, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 141,9 , 150,9 , 269,6 , 97,16 , 18,7 , 25,12 , 1703,40 , 1743,46 , 1789,14 , 1703,40 , 1803,47 , 1789,14 , 0,2 , 0,2 , 279,2 , 5,17 , 22,23 , {75,72,82}, 132,1 , 3073,29 , 0,4 , 31,6 , 518,5 , 523,7 , 2, 1, 7, 6, 7 }, // Khmer/Khmer/Cambodia { 24, 7, 197, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 159,7 , 159,7 , 269,6 , 372,22 , 55,4 , 198,11 , 1850,28 , 1878,60 , 1938,21 , 1850,28 , 1878,60 , 1938,21 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 530,6 , 536,7 , 2, 1, 1, 6, 7 }, // Catalan/Latin/Spain { 24, 7, 5, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 159,7 , 159,7 , 269,6 , 372,22 , 55,4 , 198,11 , 1850,28 , 1878,60 , 1938,21 , 1850,28 , 1878,60 , 1938,21 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 530,6 , 543,7 , 2, 1, 1, 6, 7 }, // Catalan/Latin/Andorra { 24, 7, 74, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 159,7 , 159,7 , 269,6 , 372,22 , 55,4 , 198,11 , 1850,28 , 1878,60 , 1938,21 , 1850,28 , 1878,60 , 1938,21 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 530,6 , 550,6 , 2, 1, 1, 6, 7 }, // Catalan/Latin/France { 24, 7, 106, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 159,7 , 159,7 , 269,6 , 372,22 , 55,4 , 198,11 , 1850,28 , 1878,60 , 1938,21 , 1850,28 , 1878,60 , 1938,21 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 530,6 , 556,6 , 2, 1, 1, 6, 7 }, // Catalan/Latin/Italy - { 25, 5, 44, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 171,5 , 171,5 , 394,8 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 293,2 , 5,17 , 22,23 , {67,78,89}, 133,1 , 3122,13 , 4,4 , 13,6 , 562,4 , 566,2 , 2, 1, 7, 6, 7 }, // Chinese/Simplified Han/China - { 25, 5, 97, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 171,5 , 171,5 , 269,6 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 293,2 , 5,17 , 22,23 , {72,75,68}, 134,3 , 3135,11 , 4,4 , 13,6 , 562,4 , 568,9 , 2, 1, 7, 6, 7 }, // Chinese/Simplified Han/Hong Kong - { 25, 5, 126, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 171,5 , 171,5 , 269,6 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 293,2 , 5,17 , 22,23 , {77,79,80}, 137,4 , 3146,13 , 4,4 , 13,6 , 562,4 , 577,9 , 2, 1, 7, 6, 7 }, // Chinese/Simplified Han/Macau - { 25, 5, 190, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 171,5 , 171,5 , 27,8 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 293,2 , 5,17 , 22,23 , {83,71,68}, 6,1 , 3159,15 , 4,4 , 13,6 , 562,4 , 586,3 , 2, 1, 7, 6, 7 }, // Chinese/Simplified Han/Singapore - { 25, 6, 97, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 176,5 , 176,5 , 415,8 , 402,13 , 209,6 , 226,13 , 2022,21 , 1980,28 , 2008,14 , 2022,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 295,3 , 5,17 , 22,23 , {72,75,68}, 134,3 , 3135,11 , 4,4 , 13,6 , 589,4 , 593,9 , 2, 1, 7, 6, 7 }, // Chinese/Traditional Han/Hong Kong - { 25, 6, 126, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 176,5 , 176,5 , 415,8 , 402,13 , 209,6 , 226,13 , 2022,21 , 1980,28 , 2008,14 , 2022,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 295,3 , 5,17 , 22,23 , {77,79,80}, 137,4 , 3174,13 , 4,4 , 13,6 , 589,4 , 602,9 , 2, 1, 7, 6, 7 }, // Chinese/Traditional Han/Macau + { 25, 5, 44, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 171,5 , 171,5 , 394,8 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 281,2 , 5,17 , 22,23 , {67,78,89}, 133,1 , 3122,13 , 4,4 , 13,6 , 562,4 , 566,2 , 2, 1, 7, 6, 7 }, // Chinese/Simplified Han/China + { 25, 5, 97, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 171,5 , 171,5 , 269,6 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 281,2 , 5,17 , 22,23 , {72,75,68}, 134,3 , 3135,11 , 4,4 , 13,6 , 562,4 , 568,9 , 2, 1, 7, 6, 7 }, // Chinese/Simplified Han/Hong Kong + { 25, 5, 126, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 171,5 , 171,5 , 269,6 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 281,2 , 5,17 , 22,23 , {77,79,80}, 137,4 , 3146,13 , 4,4 , 13,6 , 562,4 , 577,9 , 2, 1, 7, 6, 7 }, // Chinese/Simplified Han/Macau + { 25, 5, 190, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 171,5 , 171,5 , 27,8 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 281,2 , 5,17 , 22,23 , {83,71,68}, 6,1 , 3159,15 , 4,4 , 13,6 , 562,4 , 586,3 , 2, 1, 7, 6, 7 }, // Chinese/Simplified Han/Singapore + { 25, 6, 97, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 176,5 , 176,5 , 415,8 , 402,13 , 209,6 , 226,13 , 2022,21 , 1980,28 , 2008,14 , 2022,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 283,3 , 5,17 , 22,23 , {72,75,68}, 134,3 , 3135,11 , 4,4 , 13,6 , 589,4 , 593,9 , 2, 1, 7, 6, 7 }, // Chinese/Traditional Han/Hong Kong + { 25, 6, 126, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 176,5 , 176,5 , 415,8 , 402,13 , 209,6 , 226,13 , 2022,21 , 1980,28 , 2008,14 , 2022,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 283,3 , 5,17 , 22,23 , {77,79,80}, 137,4 , 3174,13 , 4,4 , 13,6 , 589,4 , 602,9 , 2, 1, 7, 6, 7 }, // Chinese/Traditional Han/Macau { 25, 6, 208, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 171,5 , 171,5 , 394,8 , 423,14 , 209,6 , 226,13 , 2022,21 , 1980,28 , 2008,14 , 2022,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 45,4 , 5,17 , 22,23 , {84,87,68}, 6,1 , 3187,13 , 4,4 , 13,6 , 589,4 , 611,2 , 2, 0, 7, 6, 7 }, // Chinese/Traditional Han/Taiwan { 26, 7, 74, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Corsican/Latin/France - { 27, 7, 54, 44, 46, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 437,13 , 450,19 , 37,5 , 87,12 , 2043,28 , 2071,58 , 2129,14 , 2043,28 , 2071,58 , 2143,14 , 0,2 , 0,2 , 298,7 , 5,17 , 22,23 , {72,82,75}, 141,3 , 3200,60 , 19,5 , 4,0 , 613,8 , 621,8 , 2, 1, 1, 6, 7 }, // Croatian/Latin/Croatia - { 27, 7, 27, 44, 46, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 469,9 , 450,19 , 37,5 , 87,12 , 2043,28 , 2071,58 , 2143,14 , 2043,28 , 2071,58 , 2143,14 , 0,2 , 0,2 , 298,7 , 5,17 , 22,23 , {66,65,77}, 144,2 , 3260,85 , 19,5 , 4,0 , 613,8 , 629,19 , 2, 1, 1, 6, 7 }, // Croatian/Latin/Bosnia And Herzegowina - { 28, 7, 57, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 181,7 , 181,7 , 156,8 , 478,17 , 55,4 , 59,9 , 2157,21 , 2178,49 , 2227,14 , 2157,21 , 2178,49 , 2227,14 , 60,4 , 57,4 , 305,5 , 5,17 , 22,23 , {67,90,75}, 146,2 , 3345,68 , 19,5 , 4,0 , 648,7 , 655,5 , 2, 0, 1, 6, 7 }, // Czech/Latin/Czech Republic + { 27, 7, 54, 44, 46, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 437,13 , 450,19 , 37,5 , 87,12 , 2043,28 , 2071,58 , 2129,14 , 2043,28 , 2071,58 , 2143,14 , 0,2 , 0,2 , 286,7 , 5,17 , 22,23 , {72,82,75}, 141,3 , 3200,60 , 19,5 , 4,0 , 613,8 , 621,8 , 2, 1, 1, 6, 7 }, // Croatian/Latin/Croatia + { 27, 7, 27, 44, 46, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 469,9 , 450,19 , 37,5 , 87,12 , 2043,28 , 2071,58 , 2143,14 , 2043,28 , 2071,58 , 2143,14 , 0,2 , 0,2 , 286,7 , 5,17 , 22,23 , {66,65,77}, 144,2 , 3260,85 , 19,5 , 4,0 , 613,8 , 629,19 , 2, 1, 1, 6, 7 }, // Croatian/Latin/Bosnia And Herzegowina + { 28, 7, 57, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 181,7 , 181,7 , 156,8 , 478,17 , 55,4 , 59,9 , 2157,21 , 2178,49 , 2227,14 , 2157,21 , 2178,49 , 2227,14 , 60,4 , 57,4 , 293,5 , 5,17 , 22,23 , {67,90,75}, 146,2 , 3345,68 , 19,5 , 4,0 , 648,7 , 655,5 , 2, 0, 1, 6, 7 }, // Czech/Latin/Czech Republic { 29, 7, 58, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 495,10 , 505,23 , 239,5 , 244,10 , 2241,28 , 2269,51 , 2320,14 , 2334,35 , 2269,51 , 2320,14 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {68,75,75}, 148,3 , 3413,42 , 19,5 , 4,0 , 660,5 , 665,7 , 2, 0, 1, 6, 7 }, // Danish/Latin/Denmark { 29, 7, 86, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 495,10 , 505,23 , 239,5 , 244,10 , 2241,28 , 2269,51 , 2320,14 , 2334,35 , 2269,51 , 2320,14 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {68,75,75}, 148,3 , 3413,42 , 19,5 , 4,0 , 660,5 , 672,8 , 2, 0, 1, 6, 7 }, // Danish/Latin/Greenland { 30, 7, 151, 44, 46, 59, 37, 48, 45, 43, 101, 8216, 8217, 8216, 8217, 0,6 , 0,6 , 6,8 , 6,8 , 528,10 , 97,16 , 37,5 , 8,10 , 2369,21 , 2390,59 , 2449,14 , 2369,21 , 2390,59 , 2449,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3455,19 , 8,5 , 37,7 , 680,10 , 690,9 , 2, 1, 1, 6, 7 }, // Dutch/Latin/Netherlands @@ -1461,265 +1458,265 @@ static const QLocaleData locale_data[] = { { 31, 7, 256, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 206,9 , 206,9 , 119,10 , 10,17 , 37,5 , 8,10 , 0,28 , 28,57 , 85,14 , 0,28 , 28,57 , 85,14 , 68,2 , 65,2 , 0,5 , 5,17 , 22,23 , {65,78,71}, 155,4 , 6999,95 , 4,4 , 13,6 , 785,7 , 1867,12 , 2, 1, 1, 6, 7 }, // English/Latin/Sint Maarten { 31, 7, 260, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 206,9 , 206,9 , 119,10 , 10,17 , 18,7 , 25,12 , 0,28 , 28,57 , 85,14 , 0,28 , 28,57 , 85,14 , 68,2 , 65,2 , 0,5 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 4,4 , 13,6 , 785,7 , 1879,5 , 2, 1, 1, 6, 7 }, // English/Latin/World { 31, 7, 261, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 206,9 , 206,9 , 119,10 , 10,17 , 37,5 , 8,10 , 0,28 , 28,57 , 85,14 , 0,28 , 28,57 , 85,14 , 68,2 , 65,2 , 0,5 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 19,5 , 4,0 , 785,7 , 1884,6 , 2, 1, 1, 6, 7 }, // English/Latin/Europe - { 32, 7, 260, 44, 160, 59, 37, 48, 8722, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 215,9 , 215,9 , 588,8 , 596,26 , 37,5 , 267,25 , 2523,21 , 2544,51 , 2595,14 , 2523,21 , 2544,51 , 2595,14 , 70,3 , 67,3 , 310,6 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 8,5 , 4,0 , 1890,9 , 1899,5 , 2, 1, 1, 6, 7 }, // Esperanto/Latin/World - { 33, 7, 68, 44, 160, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 224,8 , 224,8 , 156,8 , 622,18 , 37,5 , 8,10 , 2609,14 , 2623,63 , 2609,14 , 2609,14 , 2623,63 , 2609,14 , 0,2 , 0,2 , 316,6 , 5,17 , 22,23 , {69,85,82}, 14,1 , 7094,20 , 19,5 , 24,7 , 1904,5 , 1909,5 , 2, 1, 1, 6, 7 }, // Estonian/Latin/Estonia - { 34, 7, 71, 44, 46, 59, 37, 48, 8722, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 156,8 , 622,18 , 37,5 , 8,10 , 2686,28 , 2714,74 , 2788,14 , 2802,35 , 2714,74 , 2788,14 , 0,2 , 0,2 , 322,3 , 5,17 , 22,23 , {68,75,75}, 190,2 , 7114,43 , 19,5 , 24,7 , 1914,8 , 1922,7 , 2, 0, 1, 6, 7 }, // Faroese/Latin/Faroe Islands - { 34, 7, 58, 44, 46, 59, 37, 48, 8722, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 156,8 , 622,18 , 37,5 , 8,10 , 2686,28 , 2714,74 , 2788,14 , 2802,35 , 2714,74 , 2788,14 , 0,2 , 0,2 , 322,3 , 5,17 , 22,23 , {68,75,75}, 148,3 , 7114,43 , 19,5 , 24,7 , 1914,8 , 665,7 , 2, 0, 1, 6, 7 }, // Faroese/Latin/Denmark - { 36, 7, 73, 44, 160, 59, 37, 48, 8722, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 224,8 , 224,8 , 640,8 , 478,17 , 254,4 , 258,9 , 2837,21 , 2858,67 , 2925,14 , 2837,21 , 2939,81 , 2925,14 , 73,3 , 70,3 , 325,5 , 330,17 , 347,23 , {69,85,82}, 14,1 , 7157,20 , 19,5 , 4,0 , 1929,5 , 1934,5 , 2, 1, 1, 6, 7 }, // Finnish/Latin/Finland - { 37, 7, 74, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 1947,6 , 2, 1, 1, 6, 7 }, // French/Latin/France - { 37, 7, 3, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {68,90,68}, 205,2 , 7177,51 , 19,5 , 24,7 , 1939,8 , 1953,7 , 2, 1, 6, 5, 6 }, // French/Latin/Algeria - { 37, 7, 21, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 571,7 , 97,16 , 37,5 , 292,23 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 1960,8 , 2, 1, 1, 6, 7 }, // French/Latin/Belgium - { 37, 7, 23, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,79,70}, 207,3 , 7228,59 , 19,5 , 24,7 , 1939,8 , 1968,5 , 0, 0, 1, 6, 7 }, // French/Latin/Benin - { 37, 7, 34, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,79,70}, 207,3 , 7228,59 , 19,5 , 24,7 , 1939,8 , 1973,12 , 0, 0, 1, 6, 7 }, // French/Latin/Burkina Faso - { 37, 7, 35, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {66,73,70}, 163,3 , 7287,53 , 19,5 , 24,7 , 1939,8 , 938,7 , 0, 0, 1, 6, 7 }, // French/Latin/Burundi - { 37, 7, 37, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 76,5 , 73,4 , 370,6 , 217,17 , 234,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 1985,8 , 0, 0, 1, 6, 7 }, // French/Latin/Cameroon - { 37, 7, 38, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8221, 8220, 0,6 , 0,6 , 232,8 , 232,8 , 53,10 , 97,16 , 315,9 , 324,24 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 64,4 , 61,4 , 370,6 , 217,17 , 234,23 , {67,65,68}, 210,4 , 7396,54 , 19,5 , 24,7 , 1993,17 , 969,6 , 2, 0, 7, 6, 7 }, // French/Latin/Canada - { 37, 7, 41, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2010,25 , 0, 0, 1, 6, 7 }, // French/Latin/Central African Republic - { 37, 7, 42, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2035,5 , 0, 0, 1, 6, 7 }, // French/Latin/Chad - { 37, 7, 48, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {75,77,70}, 36,2 , 7450,51 , 19,5 , 24,7 , 1939,8 , 2040,7 , 0, 0, 1, 6, 7 }, // French/Latin/Comoros - { 37, 7, 49, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {67,68,70}, 214,2 , 7501,53 , 19,5 , 24,7 , 1939,8 , 2047,14 , 2, 1, 1, 6, 7 }, // French/Latin/Congo Kinshasa - { 37, 7, 50, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2061,17 , 0, 0, 1, 6, 7 }, // French/Latin/Congo Brazzaville - { 37, 7, 53, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,79,70}, 207,3 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2078,13 , 0, 0, 1, 6, 7 }, // French/Latin/Ivory Coast - { 37, 7, 59, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {68,74,70}, 38,3 , 7554,57 , 19,5 , 24,7 , 1939,8 , 2091,8 , 0, 0, 6, 6, 7 }, // French/Latin/Djibouti - { 37, 7, 66, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2099,18 , 0, 0, 1, 6, 7 }, // French/Latin/Equatorial Guinea - { 37, 7, 76, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2117,16 , 2, 1, 1, 6, 7 }, // French/Latin/French Guiana - { 37, 7, 77, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,80,70}, 216,4 , 7611,35 , 19,5 , 24,7 , 1939,8 , 2133,19 , 0, 0, 1, 6, 7 }, // French/Latin/French Polynesia - { 37, 7, 79, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2152,5 , 0, 0, 1, 6, 7 }, // French/Latin/Gabon - { 37, 7, 88, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2157,10 , 2, 1, 1, 6, 7 }, // French/Latin/Guadeloupe - { 37, 7, 91, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {71,78,70}, 220,2 , 7646,48 , 19,5 , 24,7 , 1939,8 , 2167,6 , 0, 0, 1, 6, 7 }, // French/Latin/Guinea - { 37, 7, 94, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {72,84,71}, 222,1 , 7694,57 , 19,5 , 24,7 , 1939,8 , 2173,5 , 2, 1, 1, 6, 7 }, // French/Latin/Haiti - { 37, 7, 125, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2178,10 , 2, 1, 1, 6, 7 }, // French/Latin/Luxembourg - { 37, 7, 128, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {77,71,65}, 170,2 , 7751,54 , 19,5 , 24,7 , 1939,8 , 1233,10 , 0, 0, 1, 6, 7 }, // French/Latin/Madagascar - { 37, 7, 132, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,79,70}, 207,3 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2188,4 , 0, 0, 1, 6, 7 }, // French/Latin/Mali - { 37, 7, 135, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2192,10 , 2, 1, 1, 6, 7 }, // French/Latin/Martinique - { 37, 7, 136, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {77,82,85}, 223,2 , 7805,66 , 19,5 , 24,7 , 1939,8 , 2202,10 , 2, 1, 1, 6, 7 }, // French/Latin/Mauritania - { 37, 7, 137, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {77,85,82}, 176,2 , 7871,63 , 19,5 , 24,7 , 1939,8 , 2212,7 , 2, 0, 1, 6, 7 }, // French/Latin/Mauritius - { 37, 7, 138, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2219,7 , 2, 1, 1, 6, 7 }, // French/Latin/Mayotte - { 37, 7, 142, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2226,6 , 2, 1, 1, 6, 7 }, // French/Latin/Monaco - { 37, 7, 145, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 64,4 , 61,4 , 370,6 , 217,17 , 234,23 , {77,65,68}, 225,3 , 7934,54 , 19,5 , 24,7 , 1939,8 , 2232,5 , 2, 1, 1, 6, 7 }, // French/Latin/Morocco - { 37, 7, 153, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,80,70}, 216,4 , 7611,35 , 19,5 , 24,7 , 1939,8 , 2237,18 , 0, 0, 1, 6, 7 }, // French/Latin/New Caledonia - { 37, 7, 156, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,79,70}, 207,3 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2255,5 , 0, 0, 1, 6, 7 }, // French/Latin/Niger - { 37, 7, 176, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2260,10 , 2, 1, 1, 6, 7 }, // French/Latin/Reunion - { 37, 7, 179, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {82,87,70}, 180,2 , 7988,50 , 19,5 , 24,7 , 1939,8 , 1457,6 , 0, 0, 1, 6, 7 }, // French/Latin/Rwanda - { 37, 7, 187, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,79,70}, 207,3 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2270,7 , 0, 0, 1, 6, 7 }, // French/Latin/Senegal - { 37, 7, 188, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {83,67,82}, 185,2 , 8038,71 , 19,5 , 24,7 , 1939,8 , 1518,10 , 2, 1, 1, 6, 7 }, // French/Latin/Seychelles - { 37, 7, 200, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2277,24 , 2, 1, 1, 6, 7 }, // French/Latin/Saint Pierre And Miquelon - { 37, 7, 206, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 232,8 , 232,8 , 156,8 , 10,17 , 37,5 , 348,14 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {67,72,70}, 228,3 , 8109,45 , 19,5 , 24,7 , 2301,15 , 2316,6 , 2, 0, 1, 6, 7 }, // French/Latin/Switzerland - { 37, 7, 207, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {83,89,80}, 231,2 , 8154,51 , 19,5 , 24,7 , 1939,8 , 2322,5 , 0, 0, 6, 5, 6 }, // French/Latin/Syria - { 37, 7, 212, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,79,70}, 207,3 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2327,4 , 0, 0, 1, 6, 7 }, // French/Latin/Togo - { 37, 7, 216, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {84,78,68}, 233,2 , 8205,51 , 19,5 , 24,7 , 1939,8 , 2331,7 , 3, 0, 1, 6, 7 }, // French/Latin/Tunisia - { 37, 7, 229, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {86,85,86}, 203,2 , 8256,51 , 19,5 , 24,7 , 1939,8 , 1765,7 , 0, 0, 1, 6, 7 }, // French/Latin/Vanuatu - { 37, 7, 235, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {88,80,70}, 216,4 , 7611,35 , 19,5 , 24,7 , 1939,8 , 2338,16 , 0, 0, 1, 6, 7 }, // French/Latin/Wallis And Futuna Islands - { 37, 7, 244, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2354,16 , 2, 1, 1, 6, 7 }, // French/Latin/Saint Barthelemy - { 37, 7, 245, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 370,6 , 217,17 , 234,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2370,12 , 2, 1, 1, 6, 7 }, // French/Latin/Saint Martin + { 32, 7, 260, 44, 160, 59, 37, 48, 8722, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 215,9 , 215,9 , 588,8 , 596,26 , 37,5 , 267,25 , 2523,21 , 2544,51 , 2595,14 , 2523,21 , 2544,51 , 2595,14 , 70,3 , 67,3 , 298,6 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 8,5 , 4,0 , 1890,9 , 1899,5 , 2, 1, 1, 6, 7 }, // Esperanto/Latin/World + { 33, 7, 68, 44, 160, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 224,8 , 224,8 , 156,8 , 622,18 , 37,5 , 8,10 , 2609,14 , 2623,63 , 2609,14 , 2609,14 , 2623,63 , 2609,14 , 0,2 , 0,2 , 304,6 , 5,17 , 22,23 , {69,85,82}, 14,1 , 7094,20 , 19,5 , 24,7 , 1904,5 , 1909,5 , 2, 1, 1, 6, 7 }, // Estonian/Latin/Estonia + { 34, 7, 71, 44, 46, 59, 37, 48, 8722, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 156,8 , 622,18 , 37,5 , 8,10 , 2686,28 , 2714,74 , 2788,14 , 2802,35 , 2714,74 , 2788,14 , 0,2 , 0,2 , 310,3 , 5,17 , 22,23 , {68,75,75}, 190,2 , 7114,43 , 19,5 , 24,7 , 1914,8 , 1922,7 , 2, 0, 1, 6, 7 }, // Faroese/Latin/Faroe Islands + { 34, 7, 58, 44, 46, 59, 37, 48, 8722, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 156,8 , 622,18 , 37,5 , 8,10 , 2686,28 , 2714,74 , 2788,14 , 2802,35 , 2714,74 , 2788,14 , 0,2 , 0,2 , 310,3 , 5,17 , 22,23 , {68,75,75}, 148,3 , 7114,43 , 19,5 , 24,7 , 1914,8 , 665,7 , 2, 0, 1, 6, 7 }, // Faroese/Latin/Denmark + { 36, 7, 73, 44, 160, 59, 37, 48, 8722, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 224,8 , 224,8 , 640,8 , 478,17 , 254,4 , 258,9 , 2837,21 , 2858,67 , 2925,14 , 2837,21 , 2939,81 , 2925,14 , 73,3 , 70,3 , 313,5 , 318,17 , 335,23 , {69,85,82}, 14,1 , 7157,20 , 19,5 , 4,0 , 1929,5 , 1934,5 , 2, 1, 1, 6, 7 }, // Finnish/Latin/Finland + { 37, 7, 74, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 1947,6 , 2, 1, 1, 6, 7 }, // French/Latin/France + { 37, 7, 3, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {68,90,68}, 205,2 , 7177,51 , 19,5 , 24,7 , 1939,8 , 1953,7 , 2, 1, 6, 5, 6 }, // French/Latin/Algeria + { 37, 7, 21, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 571,7 , 97,16 , 37,5 , 292,23 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 1960,8 , 2, 1, 1, 6, 7 }, // French/Latin/Belgium + { 37, 7, 23, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,79,70}, 207,5 , 7228,59 , 19,5 , 24,7 , 1939,8 , 1968,5 , 0, 0, 1, 6, 7 }, // French/Latin/Benin + { 37, 7, 34, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,79,70}, 207,5 , 7228,59 , 19,5 , 24,7 , 1939,8 , 1973,12 , 0, 0, 1, 6, 7 }, // French/Latin/Burkina Faso + { 37, 7, 35, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {66,73,70}, 163,3 , 7287,53 , 19,5 , 24,7 , 1939,8 , 938,7 , 0, 0, 1, 6, 7 }, // French/Latin/Burundi + { 37, 7, 37, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 76,5 , 73,4 , 358,6 , 205,17 , 222,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 1985,8 , 0, 0, 1, 6, 7 }, // French/Latin/Cameroon + { 37, 7, 38, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8221, 8220, 0,6 , 0,6 , 232,8 , 232,8 , 53,10 , 97,16 , 315,9 , 324,24 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 64,4 , 61,4 , 358,6 , 205,17 , 222,23 , {67,65,68}, 212,4 , 7396,54 , 19,5 , 24,7 , 1993,17 , 969,6 , 2, 0, 7, 6, 7 }, // French/Latin/Canada + { 37, 7, 41, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2010,25 , 0, 0, 1, 6, 7 }, // French/Latin/Central African Republic + { 37, 7, 42, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2035,5 , 0, 0, 1, 6, 7 }, // French/Latin/Chad + { 37, 7, 48, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {75,77,70}, 36,2 , 7450,51 , 19,5 , 24,7 , 1939,8 , 2040,7 , 0, 0, 1, 6, 7 }, // French/Latin/Comoros + { 37, 7, 49, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {67,68,70}, 216,2 , 7501,53 , 19,5 , 24,7 , 1939,8 , 2047,14 , 2, 1, 1, 6, 7 }, // French/Latin/Congo Kinshasa + { 37, 7, 50, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2061,17 , 0, 0, 1, 6, 7 }, // French/Latin/Congo Brazzaville + { 37, 7, 53, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,79,70}, 207,5 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2078,13 , 0, 0, 1, 6, 7 }, // French/Latin/Ivory Coast + { 37, 7, 59, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {68,74,70}, 38,3 , 7554,57 , 19,5 , 24,7 , 1939,8 , 2091,8 , 0, 0, 6, 6, 7 }, // French/Latin/Djibouti + { 37, 7, 66, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2099,18 , 0, 0, 1, 6, 7 }, // French/Latin/Equatorial Guinea + { 37, 7, 76, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2117,16 , 2, 1, 1, 6, 7 }, // French/Latin/French Guiana + { 37, 7, 77, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,80,70}, 218,4 , 7611,35 , 19,5 , 24,7 , 1939,8 , 2133,19 , 0, 0, 1, 6, 7 }, // French/Latin/French Polynesia + { 37, 7, 79, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,65,70}, 32,4 , 7340,56 , 19,5 , 24,7 , 1939,8 , 2152,5 , 0, 0, 1, 6, 7 }, // French/Latin/Gabon + { 37, 7, 88, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2157,10 , 2, 1, 1, 6, 7 }, // French/Latin/Guadeloupe + { 37, 7, 91, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {71,78,70}, 222,2 , 7646,48 , 19,5 , 24,7 , 1939,8 , 2167,6 , 0, 0, 1, 6, 7 }, // French/Latin/Guinea + { 37, 7, 94, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {72,84,71}, 224,1 , 7694,57 , 19,5 , 24,7 , 1939,8 , 2173,5 , 2, 1, 1, 6, 7 }, // French/Latin/Haiti + { 37, 7, 125, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2178,10 , 2, 1, 1, 6, 7 }, // French/Latin/Luxembourg + { 37, 7, 128, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {77,71,65}, 170,2 , 7751,54 , 19,5 , 24,7 , 1939,8 , 1233,10 , 0, 0, 1, 6, 7 }, // French/Latin/Madagascar + { 37, 7, 132, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,79,70}, 207,5 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2188,4 , 0, 0, 1, 6, 7 }, // French/Latin/Mali + { 37, 7, 135, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2192,10 , 2, 1, 1, 6, 7 }, // French/Latin/Martinique + { 37, 7, 136, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {77,82,85}, 225,2 , 7805,66 , 19,5 , 24,7 , 1939,8 , 2202,10 , 2, 1, 1, 6, 7 }, // French/Latin/Mauritania + { 37, 7, 137, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {77,85,82}, 176,2 , 7871,63 , 19,5 , 24,7 , 1939,8 , 2212,7 , 2, 0, 1, 6, 7 }, // French/Latin/Mauritius + { 37, 7, 138, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2219,7 , 2, 1, 1, 6, 7 }, // French/Latin/Mayotte + { 37, 7, 142, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2226,6 , 2, 1, 1, 6, 7 }, // French/Latin/Monaco + { 37, 7, 145, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 64,4 , 61,4 , 358,6 , 205,17 , 222,23 , {77,65,68}, 227,3 , 7934,54 , 19,5 , 24,7 , 1939,8 , 2232,5 , 2, 1, 1, 6, 7 }, // French/Latin/Morocco + { 37, 7, 153, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,80,70}, 218,4 , 7611,35 , 19,5 , 24,7 , 1939,8 , 2237,18 , 0, 0, 1, 6, 7 }, // French/Latin/New Caledonia + { 37, 7, 156, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,79,70}, 207,5 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2255,5 , 0, 0, 1, 6, 7 }, // French/Latin/Niger + { 37, 7, 176, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2260,10 , 2, 1, 1, 6, 7 }, // French/Latin/Reunion + { 37, 7, 179, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {82,87,70}, 180,2 , 7988,50 , 19,5 , 24,7 , 1939,8 , 1457,6 , 0, 0, 1, 6, 7 }, // French/Latin/Rwanda + { 37, 7, 187, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,79,70}, 207,5 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2270,7 , 0, 0, 1, 6, 7 }, // French/Latin/Senegal + { 37, 7, 188, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {83,67,82}, 185,2 , 8038,71 , 19,5 , 24,7 , 1939,8 , 1518,10 , 2, 1, 1, 6, 7 }, // French/Latin/Seychelles + { 37, 7, 200, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2277,24 , 2, 1, 1, 6, 7 }, // French/Latin/Saint Pierre And Miquelon + { 37, 7, 206, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 232,8 , 232,8 , 156,8 , 10,17 , 37,5 , 348,14 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {67,72,70}, 230,3 , 8109,45 , 19,5 , 24,7 , 2301,15 , 2316,6 , 2, 0, 1, 6, 7 }, // French/Latin/Switzerland + { 37, 7, 207, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {83,89,80}, 233,2 , 8154,51 , 19,5 , 24,7 , 1939,8 , 2322,5 , 0, 0, 6, 5, 6 }, // French/Latin/Syria + { 37, 7, 212, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,79,70}, 207,5 , 7228,59 , 19,5 , 24,7 , 1939,8 , 2327,4 , 0, 0, 1, 6, 7 }, // French/Latin/Togo + { 37, 7, 216, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {84,78,68}, 235,2 , 8205,51 , 19,5 , 24,7 , 1939,8 , 2331,7 , 3, 0, 1, 6, 7 }, // French/Latin/Tunisia + { 37, 7, 229, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 18,7 , 25,12 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {86,85,86}, 203,2 , 8256,51 , 19,5 , 24,7 , 1939,8 , 1765,7 , 0, 0, 1, 6, 7 }, // French/Latin/Vanuatu + { 37, 7, 235, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {88,80,70}, 218,4 , 7611,35 , 19,5 , 24,7 , 1939,8 , 2338,16 , 0, 0, 1, 6, 7 }, // French/Latin/Wallis And Futuna Islands + { 37, 7, 244, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2354,16 , 2, 1, 1, 6, 7 }, // French/Latin/Saint Barthelemy + { 37, 7, 245, 44, 8239, 59, 37, 48, 45, 43, 101, 171, 187, 171, 187, 0,6 , 0,6 , 232,8 , 232,8 , 119,10 , 97,16 , 37,5 , 8,10 , 3020,35 , 3055,52 , 3107,14 , 3020,35 , 3055,52 , 3107,14 , 0,2 , 0,2 , 358,6 , 205,17 , 222,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 1939,8 , 2370,12 , 2, 1, 1, 6, 7 }, // French/Latin/Saint Martin { 38, 7, 151, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 6,8 , 6,8 , 339,8 , 97,16 , 37,5 , 8,10 , 3121,21 , 3142,54 , 85,14 , 3121,21 , 3142,54 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3455,19 , 8,5 , 37,7 , 2382,5 , 2387,8 , 2, 1, 1, 6, 7 }, // Western Frisian/Latin/Netherlands - { 39, 7, 224, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 240,10 , 240,10 , 119,10 , 648,21 , 37,5 , 8,10 , 3196,28 , 3224,69 , 3293,14 , 3196,28 , 3224,69 , 3293,14 , 81,1 , 77,1 , 376,6 , 5,17 , 22,23 , {71,66,80}, 119,1 , 8307,86 , 4,4 , 13,6 , 2395,8 , 2403,22 , 2, 1, 1, 6, 7 }, // Gaelic/Latin/United Kingdom + { 39, 7, 224, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 240,10 , 240,10 , 119,10 , 648,21 , 37,5 , 8,10 , 3196,28 , 3224,69 , 3293,14 , 3196,28 , 3224,69 , 3293,14 , 81,1 , 77,1 , 364,6 , 5,17 , 22,23 , {71,66,80}, 119,1 , 8307,86 , 4,4 , 13,6 , 2395,8 , 2403,22 , 2, 1, 1, 6, 7 }, // Gaelic/Latin/United Kingdom { 40, 7, 197, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 3307,35 , 3342,49 , 3391,14 , 3405,35 , 3440,49 , 3489,21 , 64,4 , 61,4 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 4,0 , 2425,6 , 2431,6 , 2, 1, 1, 6, 7 }, // Galician/Latin/Spain - { 41, 15, 81, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 171, 187, 0,6 , 0,6 , 257,8 , 257,8 , 156,8 , 696,19 , 37,5 , 8,10 , 3510,28 , 3538,62 , 3600,14 , 3510,28 , 3538,62 , 3600,14 , 0,2 , 0,2 , 382,5 , 387,37 , 22,23 , {71,69,76}, 235,1 , 8393,43 , 19,5 , 4,0 , 2437,7 , 2444,10 , 2, 1, 1, 6, 7 }, // Georgian/Georgian/Georgia - { 42, 7, 82, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 424,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2454,7 , 2461,11 , 2, 1, 1, 6, 7 }, // German/Latin/Germany - { 42, 7, 14, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 424,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2472,24 , 2496,10 , 2, 1, 1, 6, 7 }, // German/Latin/Austria - { 42, 7, 21, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 424,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2454,7 , 2506,7 , 2, 1, 1, 6, 7 }, // German/Latin/Belgium - { 42, 7, 106, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 424,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2454,7 , 2513,7 , 2, 1, 1, 6, 7 }, // German/Latin/Italy - { 42, 7, 123, 46, 8217, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 424,5 , 5,17 , 22,23 , {67,72,70}, 228,3 , 8455,58 , 19,5 , 4,0 , 2454,7 , 2520,13 , 2, 0, 1, 6, 7 }, // German/Latin/Liechtenstein - { 42, 7, 125, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 424,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2454,7 , 2533,9 , 2, 1, 1, 6, 7 }, // German/Latin/Luxembourg - { 42, 7, 206, 46, 8217, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 424,5 , 5,17 , 22,23 , {67,72,70}, 228,3 , 8455,58 , 19,5 , 4,0 , 2542,21 , 2563,7 , 2, 0, 1, 6, 7 }, // German/Latin/Switzerland + { 41, 15, 81, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 171, 187, 0,6 , 0,6 , 257,8 , 257,8 , 156,8 , 696,19 , 37,5 , 8,10 , 3510,28 , 3538,62 , 3600,14 , 3510,28 , 3538,62 , 3600,14 , 0,2 , 0,2 , 370,5 , 375,29 , 22,23 , {71,69,76}, 237,1 , 8393,43 , 19,5 , 4,0 , 2437,7 , 2444,10 , 2, 1, 1, 6, 7 }, // Georgian/Georgian/Georgia + { 42, 7, 82, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 404,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2454,7 , 2461,11 , 2, 1, 1, 6, 7 }, // German/Latin/Germany + { 42, 7, 14, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 404,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2472,24 , 2496,10 , 2, 1, 1, 6, 7 }, // German/Latin/Austria + { 42, 7, 21, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 404,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2454,7 , 2506,7 , 2, 1, 1, 6, 7 }, // German/Latin/Belgium + { 42, 7, 106, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 404,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2454,7 , 2513,7 , 2, 1, 1, 6, 7 }, // German/Latin/Italy + { 42, 7, 123, 46, 8217, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 404,5 , 5,17 , 22,23 , {67,72,70}, 230,3 , 8455,58 , 19,5 , 4,0 , 2454,7 , 2520,13 , 2, 0, 1, 6, 7 }, // German/Latin/Liechtenstein + { 42, 7, 125, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 404,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 2454,7 , 2533,9 , 2, 1, 1, 6, 7 }, // German/Latin/Luxembourg + { 42, 7, 206, 46, 8217, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 3614,21 , 3635,60 , 3695,14 , 3709,28 , 3635,60 , 3695,14 , 0,2 , 0,2 , 404,5 , 5,17 , 22,23 , {67,72,70}, 230,3 , 8455,58 , 19,5 , 4,0 , 2542,21 , 2563,7 , 2, 0, 1, 6, 7 }, // German/Latin/Switzerland { 43, 16, 85, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 274,9 , 274,9 , 269,6 , 10,17 , 18,7 , 25,12 , 3737,28 , 3765,55 , 3820,14 , 3737,28 , 3765,55 , 3820,14 , 82,4 , 78,4 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8513,19 , 19,5 , 4,0 , 2570,8 , 2578,6 , 2, 1, 1, 6, 7 }, // Greek/Greek/Greece { 43, 16, 56, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 274,9 , 274,9 , 269,6 , 10,17 , 18,7 , 25,12 , 3737,28 , 3765,55 , 3820,14 , 3737,28 , 3765,55 , 3820,14 , 82,4 , 78,4 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8513,19 , 19,5 , 4,0 , 2570,8 , 2584,6 , 2, 1, 1, 6, 7 }, // Greek/Greek/Cyprus { 44, 7, 86, 44, 46, 59, 37, 48, 8722, 43, 101, 187, 171, 8250, 8249, 0,6 , 0,6 , 283,11 , 283,11 , 53,10 , 80,17 , 239,5 , 244,10 , 3834,28 , 3862,98 , 3960,14 , 3834,28 , 3862,98 , 3960,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {68,75,75}, 148,3 , 8532,62 , 4,4 , 49,5 , 2590,11 , 2601,16 , 2, 0, 1, 6, 7 }, // Greenlandic/Latin/Greenland - { 45, 7, 168, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {80,89,71}, 236,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 7, 6, 7 }, // Guarani/Latin/Paraguay - { 46, 17, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 294,9 , 294,9 , 269,6 , 192,18 , 362,8 , 370,13 , 3974,32 , 4006,53 , 4059,19 , 3974,32 , 4006,53 , 4059,19 , 0,2 , 0,2 , 429,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 8594,46 , 4,4 , 13,6 , 2617,7 , 2624,4 , 2, 1, 7, 7, 7 }, // Gujarati/Gujarati/India - { 47, 7, 157, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 303,9 , 312,8 , 269,6 , 715,17 , 37,5 , 8,10 , 4078,28 , 4106,52 , 4158,14 , 4078,28 , 4106,52 , 4158,14 , 86,6 , 82,5 , 0,5 , 433,41 , 474,47 , {78,71,78}, 178,1 , 8640,52 , 8,5 , 4,0 , 2628,5 , 2633,8 , 2, 1, 1, 6, 7 }, // Hausa/Latin/Nigeria + { 45, 7, 168, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {80,89,71}, 238,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 7, 6, 7 }, // Guarani/Latin/Paraguay + { 46, 17, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 294,9 , 294,9 , 269,6 , 192,18 , 362,8 , 370,13 , 3974,32 , 4006,53 , 4059,19 , 3974,32 , 4006,53 , 4059,19 , 0,2 , 0,2 , 409,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 8594,46 , 4,4 , 13,6 , 2617,7 , 2624,4 , 2, 1, 7, 7, 7 }, // Gujarati/Gujarati/India + { 47, 7, 157, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 303,9 , 312,8 , 269,6 , 715,17 , 37,5 , 8,10 , 4078,28 , 4106,52 , 4158,14 , 4078,28 , 4106,52 , 4158,14 , 86,6 , 82,5 , 0,5 , 413,41 , 454,47 , {78,71,78}, 178,1 , 8640,52 , 8,5 , 4,0 , 2628,5 , 2633,8 , 2, 1, 1, 6, 7 }, // Hausa/Latin/Nigeria { 47, 1, 157, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {78,71,78}, 178,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Hausa/Arabic/Nigeria - { 47, 7, 83, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 303,9 , 312,8 , 269,6 , 715,17 , 18,7 , 25,12 , 4078,28 , 4106,52 , 4158,14 , 4078,28 , 4106,52 , 4158,14 , 86,6 , 82,5 , 0,5 , 433,41 , 474,47 , {71,72,83}, 167,3 , 8692,46 , 8,5 , 4,0 , 2628,5 , 2641,4 , 2, 1, 1, 6, 7 }, // Hausa/Latin/Ghana - { 47, 7, 156, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 303,9 , 312,8 , 269,6 , 715,17 , 37,5 , 8,10 , 4078,28 , 4106,52 , 4158,14 , 4078,28 , 4106,52 , 4158,14 , 86,6 , 82,5 , 0,5 , 433,41 , 474,47 , {88,79,70}, 207,3 , 8738,36 , 8,5 , 4,0 , 2628,5 , 2645,5 , 0, 0, 1, 6, 7 }, // Hausa/Latin/Niger - { 48, 18, 105, 46, 44, 59, 37, 48, 45, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 320,6 , 320,6 , 640,8 , 732,18 , 55,4 , 59,9 , 4172,46 , 4218,65 , 4283,21 , 4172,46 , 4218,65 , 4283,21 , 92,6 , 87,5 , 521,4 , 5,17 , 22,23 , {73,76,83}, 49,1 , 8774,54 , 19,5 , 4,0 , 2650,5 , 2655,5 , 2, 1, 7, 5, 6 }, // Hebrew/Hebrew/Israel - { 49, 13, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 326,9 , 335,8 , 269,6 , 10,17 , 18,7 , 25,12 , 4304,32 , 4336,53 , 4389,19 , 4304,32 , 4336,53 , 4389,19 , 68,2 , 65,2 , 525,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 8828,42 , 4,4 , 4,0 , 2660,6 , 2666,4 , 2, 1, 7, 7, 7 }, // Hindi/Devanagari/India + { 47, 7, 83, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 303,9 , 312,8 , 269,6 , 715,17 , 18,7 , 25,12 , 4078,28 , 4106,52 , 4158,14 , 4078,28 , 4106,52 , 4158,14 , 86,6 , 82,5 , 0,5 , 413,41 , 454,47 , {71,72,83}, 167,3 , 8692,46 , 8,5 , 4,0 , 2628,5 , 2641,4 , 2, 1, 1, 6, 7 }, // Hausa/Latin/Ghana + { 47, 7, 156, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 303,9 , 312,8 , 269,6 , 715,17 , 37,5 , 8,10 , 4078,28 , 4106,52 , 4158,14 , 4078,28 , 4106,52 , 4158,14 , 86,6 , 82,5 , 0,5 , 413,41 , 454,47 , {88,79,70}, 207,5 , 8738,36 , 8,5 , 4,0 , 2628,5 , 2645,5 , 0, 0, 1, 6, 7 }, // Hausa/Latin/Niger + { 48, 18, 105, 46, 44, 59, 37, 48, 45, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 320,6 , 320,6 , 640,8 , 732,18 , 55,4 , 59,9 , 4172,46 , 4218,65 , 4283,21 , 4172,46 , 4218,65 , 4283,21 , 92,6 , 87,5 , 501,4 , 5,17 , 22,23 , {73,76,83}, 49,1 , 8774,54 , 19,5 , 4,0 , 2650,5 , 2655,5 , 2, 1, 7, 5, 6 }, // Hebrew/Hebrew/Israel + { 49, 13, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 326,9 , 335,8 , 269,6 , 10,17 , 18,7 , 25,12 , 4304,32 , 4336,53 , 4389,19 , 4304,32 , 4336,53 , 4389,19 , 68,2 , 65,2 , 505,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 8828,42 , 4,4 , 4,0 , 2660,6 , 2666,4 , 2, 1, 7, 7, 7 }, // Hindi/Devanagari/India { 49, 7, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 7, 7 }, // Hindi/Latin/India - { 50, 7, 98, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 187, 171, 0,6 , 0,6 , 343,8 , 343,8 , 750,13 , 763,19 , 55,4 , 59,9 , 4408,19 , 4427,52 , 4479,17 , 4408,19 , 4427,52 , 4479,17 , 98,3 , 92,3 , 529,4 , 5,17 , 22,23 , {72,85,70}, 237,2 , 8870,46 , 19,5 , 4,0 , 2670,6 , 2676,12 , 2, 0, 1, 6, 7 }, // Hungarian/Latin/Hungary - { 51, 7, 99, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 188,8 , 188,8 , 640,8 , 622,18 , 37,5 , 8,10 , 4496,35 , 4531,81 , 4612,14 , 4496,35 , 4531,81 , 4612,14 , 101,4 , 95,4 , 533,4 , 5,17 , 22,23 , {73,83,75}, 239,3 , 8916,49 , 19,5 , 4,0 , 2688,8 , 2696,6 , 0, 0, 1, 6, 7 }, // Icelandic/Latin/Iceland - { 52, 7, 101, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 351,10 , 361,9 , 27,8 , 553,18 , 239,5 , 244,10 , 4626,28 , 4654,43 , 4697,14 , 4626,28 , 4654,43 , 4697,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,68,82}, 242,2 , 8965,39 , 4,4 , 4,0 , 2702,9 , 2702,9 , 2, 0, 7, 6, 7 }, // Indonesian/Latin/Indonesia + { 50, 7, 98, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 187, 171, 0,6 , 0,6 , 343,8 , 343,8 , 750,13 , 763,19 , 55,4 , 59,9 , 4408,19 , 4427,52 , 4479,17 , 4408,19 , 4427,52 , 4479,17 , 98,3 , 92,3 , 509,4 , 5,17 , 22,23 , {72,85,70}, 239,2 , 8870,46 , 19,5 , 4,0 , 2670,6 , 2676,12 , 2, 0, 1, 6, 7 }, // Hungarian/Latin/Hungary + { 51, 7, 99, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 188,8 , 188,8 , 640,8 , 622,18 , 37,5 , 8,10 , 4496,35 , 4531,81 , 4612,14 , 4496,35 , 4531,81 , 4612,14 , 101,4 , 95,4 , 513,4 , 5,17 , 22,23 , {73,83,75}, 241,3 , 8916,49 , 19,5 , 4,0 , 2688,8 , 2696,6 , 0, 0, 1, 6, 7 }, // Icelandic/Latin/Iceland + { 52, 7, 101, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 351,10 , 361,9 , 27,8 , 553,18 , 239,5 , 244,10 , 4626,28 , 4654,43 , 4697,14 , 4626,28 , 4654,43 , 4697,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,68,82}, 244,2 , 8965,39 , 4,4 , 4,0 , 2702,9 , 2702,9 , 2, 0, 7, 6, 7 }, // Indonesian/Latin/Indonesia { 53, 7, 260, 44, 46, 59, 37, 48, 45, 43, 101, 8216, 8217, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 528,10 , 782,26 , 37,5 , 8,10 , 4711,28 , 4739,57 , 4796,14 , 4711,28 , 4739,57 , 4796,14 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 8,5 , 37,7 , 2711,11 , 2722,5 , 2, 1, 1, 6, 7 }, // Interlingua/Latin/World - { 55, 44, 38, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,65,68}, 244,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 7, 6, 7 }, // Inuktitut/Canadian Aboriginal/Canada - { 55, 7, 38, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,65,68}, 244,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 7, 6, 7 }, // Inuktitut/Latin/Canada - { 57, 7, 104, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 240,10 , 240,10 , 119,10 , 97,16 , 37,5 , 8,10 , 4810,37 , 4847,75 , 4922,14 , 4810,37 , 4847,75 , 4922,14 , 105,4 , 99,4 , 537,6 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9004,31 , 4,4 , 13,6 , 2727,7 , 2734,4 , 2, 1, 1, 6, 7 }, // Irish/Latin/Ireland - { 57, 7, 224, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 240,10 , 240,10 , 119,10 , 97,16 , 37,5 , 8,10 , 4810,37 , 4847,75 , 4922,14 , 4810,37 , 4847,75 , 4922,14 , 105,4 , 99,4 , 537,6 , 5,17 , 22,23 , {71,66,80}, 119,1 , 9035,95 , 4,4 , 13,6 , 2727,7 , 2738,19 , 2, 1, 1, 6, 7 }, // Irish/Latin/United Kingdom + { 55, 44, 38, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,65,68}, 246,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 7, 6, 7 }, // Inuktitut/Canadian Aboriginal/Canada + { 55, 7, 38, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,65,68}, 246,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 7, 6, 7 }, // Inuktitut/Latin/Canada + { 57, 7, 104, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 240,10 , 240,10 , 119,10 , 97,16 , 37,5 , 8,10 , 4810,37 , 4847,75 , 4922,14 , 4810,37 , 4847,75 , 4922,14 , 105,4 , 99,4 , 517,6 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9004,31 , 4,4 , 13,6 , 2727,7 , 2734,4 , 2, 1, 1, 6, 7 }, // Irish/Latin/Ireland + { 57, 7, 224, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 240,10 , 240,10 , 119,10 , 97,16 , 37,5 , 8,10 , 4810,37 , 4847,75 , 4922,14 , 4810,37 , 4847,75 , 4922,14 , 105,4 , 99,4 , 517,6 , 5,17 , 22,23 , {71,66,80}, 119,1 , 9035,95 , 4,4 , 13,6 , 2727,7 , 2738,19 , 2, 1, 1, 6, 7 }, // Irish/Latin/United Kingdom { 58, 7, 106, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 97,16 , 37,5 , 8,10 , 4936,28 , 4964,57 , 5021,14 , 4936,28 , 4964,57 , 5021,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9130,19 , 19,5 , 4,0 , 2757,8 , 2765,6 , 2, 1, 1, 6, 7 }, // Italian/Latin/Italy { 58, 7, 184, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 97,16 , 37,5 , 8,10 , 4936,28 , 4964,57 , 5021,14 , 4936,28 , 4964,57 , 5021,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9130,19 , 19,5 , 4,0 , 2757,8 , 2771,10 , 2, 1, 1, 6, 7 }, // Italian/Latin/San Marino { 58, 7, 206, 46, 8217, 59, 37, 48, 45, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 250,7 , 250,7 , 156,8 , 10,17 , 37,5 , 8,10 , 4936,28 , 4964,57 , 5021,14 , 4936,28 , 4964,57 , 5021,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,72,70}, 0,0 , 9149,53 , 19,5 , 4,0 , 2757,8 , 2781,8 , 2, 0, 1, 6, 7 }, // Italian/Latin/Switzerland { 58, 7, 230, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 97,16 , 37,5 , 8,10 , 4936,28 , 4964,57 , 5021,14 , 4936,28 , 4964,57 , 5021,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9130,19 , 19,5 , 4,0 , 2757,8 , 2789,18 , 2, 1, 1, 6, 7 }, // Italian/Latin/Vatican City State - { 59, 19, 108, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 166,5 , 166,5 , 578,10 , 402,13 , 55,4 , 383,10 , 5035,14 , 5049,28 , 5035,14 , 5035,14 , 5049,28 , 5035,14 , 109,2 , 103,2 , 543,3 , 546,17 , 22,23 , {74,80,89}, 247,1 , 9202,11 , 4,4 , 13,6 , 2807,3 , 2810,2 , 0, 0, 7, 6, 7 }, // Japanese/Japanese/Japan - { 60, 7, 101, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 370,10 , 380,9 , 528,10 , 10,17 , 37,5 , 8,10 , 5077,29 , 5106,41 , 5147,14 , 5077,29 , 5106,41 , 5147,14 , 111,4 , 105,5 , 563,4 , 5,17 , 22,23 , {73,68,82}, 242,2 , 8965,39 , 8,5 , 4,0 , 2812,4 , 2816,9 , 2, 0, 7, 6, 7 }, // Javanese/Latin/Indonesia - { 61, 21, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 389,12 , 401,11 , 269,6 , 35,18 , 362,8 , 370,13 , 5161,33 , 5194,54 , 5248,20 , 5161,33 , 5194,54 , 5248,20 , 115,9 , 110,7 , 567,8 , 575,35 , 22,23 , {73,78,82}, 121,1 , 9213,49 , 4,4 , 13,6 , 2825,5 , 2830,4 , 2, 1, 7, 7, 7 }, // Kannada/Kannada/India + { 59, 19, 108, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 166,5 , 166,5 , 578,10 , 402,13 , 55,4 , 383,10 , 5035,14 , 5049,28 , 5035,14 , 5035,14 , 5049,28 , 5035,14 , 109,2 , 103,2 , 523,3 , 526,17 , 22,23 , {74,80,89}, 249,1 , 9202,11 , 4,4 , 13,6 , 2807,3 , 2810,2 , 0, 0, 7, 6, 7 }, // Japanese/Japanese/Japan + { 60, 7, 101, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 370,10 , 380,9 , 528,10 , 10,17 , 37,5 , 8,10 , 5077,29 , 5106,41 , 5147,14 , 5077,29 , 5106,41 , 5147,14 , 111,4 , 105,5 , 543,4 , 5,17 , 22,23 , {73,68,82}, 244,2 , 8965,39 , 8,5 , 4,0 , 2812,4 , 2816,9 , 2, 0, 7, 6, 7 }, // Javanese/Latin/Indonesia + { 61, 21, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 389,12 , 401,11 , 269,6 , 35,18 , 362,8 , 370,13 , 5161,33 , 5194,54 , 5248,20 , 5161,33 , 5194,54 , 5248,20 , 115,9 , 110,7 , 547,8 , 555,35 , 22,23 , {73,78,82}, 121,1 , 9213,49 , 4,4 , 13,6 , 2825,5 , 2830,4 , 2, 1, 7, 7, 7 }, // Kannada/Kannada/India { 62, 1, 100, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 547,6 , 35,18 , 18,7 , 25,12 , 5268,50 , 5318,52 , 5370,14 , 5268,50 , 5318,52 , 5370,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 9262,23 , 8,5 , 4,0 , 2834,5 , 2839,9 , 2, 1, 7, 7, 7 }, // Kashmiri/Arabic/India { 62, 13, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 7, 7 }, // Kashmiri/Devanagari/India - { 63, 2, 110, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 412,10 , 156,8 , 808,22 , 37,5 , 8,10 , 5384,21 , 5405,56 , 5461,14 , 5384,21 , 5405,56 , 5461,14 , 0,2 , 0,2 , 610,4 , 614,17 , 631,23 , {75,90,84}, 248,1 , 9285,58 , 19,5 , 4,0 , 2848,10 , 2858,9 , 2, 1, 1, 6, 7 }, // Kazakh/Cyrillic/Kazakhstan + { 63, 2, 110, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 412,10 , 156,8 , 808,22 , 37,5 , 8,10 , 5384,21 , 5405,56 , 5461,14 , 5384,21 , 5405,56 , 5461,14 , 0,2 , 0,2 , 590,4 , 594,17 , 611,23 , {75,90,84}, 250,1 , 9285,58 , 19,5 , 4,0 , 2848,10 , 2858,9 , 2, 1, 1, 6, 7 }, // Kazakh/Cyrillic/Kazakhstan { 64, 7, 179, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 5475,35 , 5510,84 , 85,14 , 5475,35 , 5510,84 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {82,87,70}, 180,2 , 0,7 , 8,5 , 4,0 , 2867,11 , 2878,8 , 0, 0, 1, 6, 7 }, // Kinyarwanda/Latin/Rwanda - { 65, 2, 116, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 422,10 , 422,10 , 269,6 , 830,23 , 37,5 , 8,10 , 5594,38 , 5632,57 , 5689,14 , 5594,38 , 5632,57 , 5689,14 , 124,5 , 117,14 , 610,4 , 654,18 , 22,23 , {75,71,83}, 249,3 , 9343,52 , 19,5 , 4,0 , 2886,8 , 2894,10 , 2, 1, 1, 6, 7 }, // Kirghiz/Cyrillic/Kyrgyzstan - { 66, 22, 114, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 432,7 , 432,7 , 853,9 , 862,16 , 393,7 , 400,13 , 5703,14 , 5717,28 , 5703,14 , 5703,14 , 5717,28 , 5703,14 , 129,2 , 131,2 , 672,3 , 5,17 , 22,23 , {75,82,87}, 252,1 , 9395,19 , 4,4 , 13,6 , 2904,3 , 2907,4 , 0, 0, 7, 6, 7 }, // Korean/Korean/South Korea - { 66, 22, 113, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 432,7 , 432,7 , 853,9 , 862,16 , 393,7 , 400,13 , 5703,14 , 5717,28 , 5703,14 , 5703,14 , 5717,28 , 5703,14 , 129,2 , 131,2 , 672,3 , 5,17 , 22,23 , {75,80,87}, 253,3 , 9414,39 , 4,4 , 13,6 , 2904,3 , 2911,11 , 0, 0, 1, 6, 7 }, // Korean/Korean/North Korea - { 67, 7, 217, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 439,7 , 439,7 , 53,10 , 63,17 , 37,5 , 8,10 , 5745,20 , 5765,42 , 5807,14 , 5745,20 , 5765,42 , 5807,14 , 131,2 , 133,2 , 45,4 , 5,17 , 22,23 , {84,82,89}, 256,1 , 0,7 , 19,5 , 24,7 , 2922,5 , 2927,7 , 2, 1, 1, 6, 7 }, // Kurdish/Latin/Turkey + { 65, 2, 116, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 422,10 , 422,10 , 269,6 , 830,23 , 37,5 , 8,10 , 5594,38 , 5632,57 , 5689,14 , 5594,38 , 5632,57 , 5689,14 , 124,5 , 117,14 , 590,4 , 634,18 , 22,23 , {75,71,83}, 251,3 , 9343,52 , 19,5 , 4,0 , 2886,8 , 2894,10 , 2, 1, 1, 6, 7 }, // Kirghiz/Cyrillic/Kyrgyzstan + { 66, 22, 114, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 432,7 , 432,7 , 853,9 , 862,16 , 393,7 , 400,13 , 5703,14 , 5717,28 , 5703,14 , 5703,14 , 5717,28 , 5703,14 , 129,2 , 131,2 , 652,3 , 5,17 , 22,23 , {75,82,87}, 254,1 , 9395,19 , 4,4 , 13,6 , 2904,3 , 2907,4 , 0, 0, 7, 6, 7 }, // Korean/Korean/South Korea + { 66, 22, 113, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 432,7 , 432,7 , 853,9 , 862,16 , 393,7 , 400,13 , 5703,14 , 5717,28 , 5703,14 , 5703,14 , 5717,28 , 5703,14 , 129,2 , 131,2 , 652,3 , 5,17 , 22,23 , {75,80,87}, 255,3 , 9414,39 , 4,4 , 13,6 , 2904,3 , 2911,11 , 0, 0, 1, 6, 7 }, // Korean/Korean/North Korea + { 67, 7, 217, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 439,7 , 439,7 , 53,10 , 63,17 , 37,5 , 8,10 , 5745,20 , 5765,42 , 5807,14 , 5745,20 , 5765,42 , 5807,14 , 131,2 , 133,2 , 45,4 , 5,17 , 22,23 , {84,82,89}, 258,1 , 0,7 , 19,5 , 24,7 , 2922,5 , 2927,7 , 2, 1, 1, 6, 7 }, // Kurdish/Latin/Turkey { 68, 7, 35, 44, 46, 59, 37, 48, 45, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 5821,34 , 5855,89 , 85,14 , 5821,34 , 5855,89 , 85,14 , 133,5 , 135,5 , 45,4 , 5,17 , 22,23 , {66,73,70}, 163,3 , 9453,27 , 0,4 , 4,0 , 2934,8 , 2942,8 , 0, 0, 1, 6, 7 }, // Rundi/Latin/Burundi - { 69, 23, 117, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 446,9 , 415,8 , 878,19 , 55,4 , 413,24 , 5944,36 , 5980,57 , 6037,17 , 5944,36 , 5980,57 , 6037,17 , 138,8 , 140,8 , 45,4 , 5,17 , 22,23 , {76,65,75}, 257,1 , 9480,21 , 4,4 , 44,5 , 2950,3 , 2950,3 , 0, 0, 7, 6, 7 }, // Lao/Lao/Laos + { 69, 23, 117, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 446,9 , 415,8 , 878,19 , 55,4 , 413,24 , 5944,36 , 5980,57 , 6037,17 , 5944,36 , 5980,57 , 6037,17 , 138,8 , 140,8 , 45,4 , 5,17 , 22,23 , {76,65,75}, 259,1 , 9480,21 , 4,4 , 44,5 , 2950,3 , 2950,3 , 0, 0, 7, 6, 7 }, // Lao/Lao/Laos { 70, 7, 230, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Latin/Latin/Vatican City State - { 71, 7, 118, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 455,8 , 455,8 , 156,8 , 897,26 , 37,5 , 8,10 , 6054,51 , 6105,72 , 6177,14 , 6191,51 , 6242,72 , 6177,14 , 146,14 , 148,11 , 675,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9501,23 , 19,5 , 4,0 , 2953,8 , 2961,7 , 2, 1, 1, 6, 7 }, // Latvian/Latin/Latvia - { 72, 7, 49, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 463,9 , 463,9 , 415,8 , 97,16 , 37,5 , 8,10 , 6314,28 , 6342,100 , 6442,14 , 6314,28 , 6342,100 , 6442,14 , 160,8 , 159,6 , 45,4 , 5,17 , 22,23 , {67,68,70}, 214,2 , 9524,23 , 19,5 , 4,0 , 2968,7 , 2975,30 , 2, 1, 1, 6, 7 }, // Lingala/Latin/Congo Kinshasa - { 72, 7, 6, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 463,9 , 463,9 , 415,8 , 97,16 , 37,5 , 8,10 , 6314,28 , 6342,100 , 6442,14 , 6314,28 , 6342,100 , 6442,14 , 160,8 , 159,6 , 45,4 , 5,17 , 22,23 , {65,79,65}, 258,2 , 9547,23 , 19,5 , 4,0 , 2968,7 , 3005,6 , 2, 1, 1, 6, 7 }, // Lingala/Latin/Angola + { 71, 7, 118, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 455,8 , 455,8 , 156,8 , 897,26 , 37,5 , 8,10 , 6054,51 , 6105,72 , 6177,14 , 6191,51 , 6242,72 , 6177,14 , 146,14 , 148,11 , 655,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9501,23 , 19,5 , 4,0 , 2953,8 , 2961,7 , 2, 1, 1, 6, 7 }, // Latvian/Latin/Latvia + { 72, 7, 49, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 463,9 , 463,9 , 415,8 , 97,16 , 37,5 , 8,10 , 6314,28 , 6342,100 , 6442,14 , 6314,28 , 6342,100 , 6442,14 , 160,8 , 159,6 , 45,4 , 5,17 , 22,23 , {67,68,70}, 216,2 , 9524,23 , 19,5 , 4,0 , 2968,7 , 2975,30 , 2, 1, 1, 6, 7 }, // Lingala/Latin/Congo Kinshasa + { 72, 7, 6, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 463,9 , 463,9 , 415,8 , 97,16 , 37,5 , 8,10 , 6314,28 , 6342,100 , 6442,14 , 6314,28 , 6342,100 , 6442,14 , 160,8 , 159,6 , 45,4 , 5,17 , 22,23 , {65,79,65}, 260,2 , 9547,23 , 19,5 , 4,0 , 2968,7 , 3005,6 , 2, 1, 1, 6, 7 }, // Lingala/Latin/Angola { 72, 7, 41, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 463,9 , 463,9 , 415,8 , 97,16 , 37,5 , 8,10 , 6314,28 , 6342,100 , 6442,14 , 6314,28 , 6342,100 , 6442,14 , 160,8 , 159,6 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 9570,23 , 19,5 , 4,0 , 2968,7 , 3011,26 , 0, 0, 1, 6, 7 }, // Lingala/Latin/Central African Republic { 72, 7, 50, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 463,9 , 463,9 , 415,8 , 97,16 , 37,5 , 8,10 , 6314,28 , 6342,100 , 6442,14 , 6314,28 , 6342,100 , 6442,14 , 160,8 , 159,6 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 9570,23 , 19,5 , 4,0 , 2968,7 , 3037,5 , 0, 0, 1, 6, 7 }, // Lingala/Latin/Congo Brazzaville - { 73, 7, 124, 44, 160, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8222, 8220, 0,6 , 0,6 , 472,8 , 472,8 , 53,10 , 923,27 , 37,5 , 8,10 , 6456,21 , 6477,89 , 6566,14 , 6456,21 , 6477,89 , 6566,14 , 168,9 , 165,6 , 680,6 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9593,30 , 19,5 , 4,0 , 3042,8 , 3050,7 , 2, 1, 1, 6, 7 }, // Lithuanian/Latin/Lithuania - { 74, 2, 127, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 113,6 , 10,17 , 37,5 , 8,10 , 6580,35 , 6615,54 , 1530,14 , 6669,34 , 6615,54 , 1530,14 , 177,10 , 171,8 , 686,5 , 5,17 , 22,23 , {77,75,68}, 260,4 , 9623,56 , 19,5 , 4,0 , 3057,10 , 3067,18 , 2, 1, 1, 6, 7 }, // Macedonian/Cyrillic/Macedonia + { 73, 7, 124, 44, 160, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8222, 8220, 0,6 , 0,6 , 472,8 , 472,8 , 53,10 , 923,27 , 37,5 , 8,10 , 6456,21 , 6477,89 , 6566,14 , 6456,21 , 6477,89 , 6566,14 , 168,9 , 165,6 , 660,6 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9593,30 , 19,5 , 4,0 , 3042,8 , 3050,7 , 2, 1, 1, 6, 7 }, // Lithuanian/Latin/Lithuania + { 74, 2, 127, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 113,6 , 10,17 , 37,5 , 8,10 , 6580,35 , 6615,54 , 1530,14 , 6669,34 , 6615,54 , 1530,14 , 177,10 , 171,8 , 666,5 , 5,17 , 22,23 , {77,75,68}, 262,4 , 9623,56 , 19,5 , 4,0 , 3057,10 , 3067,18 , 2, 1, 1, 6, 7 }, // Macedonian/Cyrillic/Macedonia { 75, 7, 128, 46, 44, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 97,16 , 37,5 , 8,10 , 6703,34 , 6737,60 , 6797,14 , 6703,34 , 6737,60 , 6797,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {77,71,65}, 170,2 , 9679,13 , 4,4 , 4,0 , 3085,8 , 3093,12 , 0, 0, 1, 6, 7 }, // Malagasy/Latin/Madagascar - { 76, 7, 130, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 361,9 , 361,9 , 571,7 , 10,17 , 18,7 , 25,12 , 6811,28 , 6839,43 , 6882,14 , 6811,28 , 6839,43 , 6882,14 , 187,2 , 179,3 , 691,4 , 5,17 , 22,23 , {77,89,82}, 174,2 , 9692,39 , 4,4 , 13,6 , 3105,6 , 1249,8 , 2, 1, 1, 6, 7 }, // Malay/Latin/Malaysia + { 76, 7, 130, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 361,9 , 361,9 , 571,7 , 10,17 , 18,7 , 25,12 , 6811,28 , 6839,43 , 6882,14 , 6811,28 , 6839,43 , 6882,14 , 187,2 , 179,3 , 671,4 , 5,17 , 22,23 , {77,89,82}, 174,2 , 9692,39 , 4,4 , 13,6 , 3105,6 , 1249,8 , 2, 1, 1, 6, 7 }, // Malay/Latin/Malaysia { 76, 1, 130, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {77,89,82}, 174,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Malay/Arabic/Malaysia - { 76, 7, 32, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 361,9 , 361,9 , 571,7 , 950,12 , 18,7 , 25,12 , 6811,28 , 6839,43 , 6882,14 , 6811,28 , 6839,43 , 6882,14 , 187,2 , 179,3 , 691,4 , 5,17 , 22,23 , {66,78,68}, 6,1 , 9731,31 , 4,4 , 13,6 , 3105,6 , 3111,6 , 2, 1, 1, 6, 7 }, // Malay/Latin/Brunei - { 76, 7, 101, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 361,9 , 361,9 , 27,8 , 553,18 , 239,5 , 244,10 , 6811,28 , 6839,43 , 6882,14 , 6811,28 , 6839,43 , 6882,14 , 187,2 , 179,3 , 691,4 , 5,17 , 22,23 , {73,68,82}, 242,2 , 8965,39 , 4,4 , 4,0 , 3105,6 , 2702,9 , 2, 0, 7, 6, 7 }, // Malay/Latin/Indonesia - { 76, 7, 190, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 361,9 , 361,9 , 571,7 , 10,17 , 18,7 , 25,12 , 6811,28 , 6839,43 , 6882,14 , 6811,28 , 6839,43 , 6882,14 , 187,2 , 179,3 , 691,4 , 5,17 , 22,23 , {83,71,68}, 6,1 , 9762,37 , 4,4 , 13,6 , 3105,6 , 3117,9 , 2, 1, 7, 6, 7 }, // Malay/Latin/Singapore - { 77, 24, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 480,13 , 493,12 , 269,6 , 962,18 , 18,7 , 25,12 , 6896,41 , 6937,77 , 7014,22 , 6896,41 , 7036,76 , 7112,21 , 0,2 , 0,2 , 695,6 , 701,27 , 22,23 , {73,78,82}, 121,1 , 9799,40 , 4,4 , 13,6 , 3126,6 , 3132,6 , 2, 1, 7, 7, 7 }, // Malayalam/Malayalam/India + { 76, 7, 32, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 361,9 , 361,9 , 571,7 , 950,12 , 18,7 , 25,12 , 6811,28 , 6839,43 , 6882,14 , 6811,28 , 6839,43 , 6882,14 , 187,2 , 179,3 , 671,4 , 5,17 , 22,23 , {66,78,68}, 6,1 , 9731,31 , 4,4 , 13,6 , 3105,6 , 3111,6 , 2, 1, 1, 6, 7 }, // Malay/Latin/Brunei + { 76, 7, 101, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 361,9 , 361,9 , 27,8 , 553,18 , 239,5 , 244,10 , 6811,28 , 6839,43 , 6882,14 , 6811,28 , 6839,43 , 6882,14 , 187,2 , 179,3 , 671,4 , 5,17 , 22,23 , {73,68,82}, 244,2 , 8965,39 , 4,4 , 4,0 , 3105,6 , 2702,9 , 2, 0, 7, 6, 7 }, // Malay/Latin/Indonesia + { 76, 7, 190, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 361,9 , 361,9 , 571,7 , 10,17 , 18,7 , 25,12 , 6811,28 , 6839,43 , 6882,14 , 6811,28 , 6839,43 , 6882,14 , 187,2 , 179,3 , 671,4 , 5,17 , 22,23 , {83,71,68}, 6,1 , 9762,37 , 4,4 , 13,6 , 3105,6 , 3117,9 , 2, 1, 7, 6, 7 }, // Malay/Latin/Singapore + { 77, 24, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 480,13 , 493,12 , 269,6 , 962,18 , 18,7 , 25,12 , 6896,41 , 6937,77 , 7014,22 , 6896,41 , 7036,76 , 7112,21 , 0,2 , 0,2 , 675,6 , 681,27 , 22,23 , {73,78,82}, 121,1 , 9799,40 , 4,4 , 13,6 , 3126,6 , 3132,6 , 2, 1, 7, 7, 7 }, // Malayalam/Malayalam/India { 78, 7, 133, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 505,8 , 513,7 , 119,10 , 980,23 , 37,5 , 8,10 , 7133,28 , 7161,63 , 7224,21 , 7133,28 , 7161,63 , 7245,20 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9839,27 , 4,4 , 4,0 , 3138,5 , 1257,5 , 2, 1, 7, 6, 7 }, // Maltese/Latin/Malta { 79, 7, 154, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 528,10 , 10,17 , 18,7 , 25,12 , 7265,27 , 7292,47 , 7339,14 , 7265,27 , 7292,47 , 7339,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {78,90,68}, 6,1 , 9866,37 , 8,5 , 4,0 , 3143,12 , 3155,8 , 2, 1, 1, 6, 7 }, // Maori/Latin/New Zealand - { 80, 13, 100, 46, 44, 59, 37, 2406, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 520,9 , 520,9 , 269,6 , 192,18 , 18,7 , 25,12 , 7353,32 , 7385,53 , 4389,19 , 7353,32 , 7385,53 , 4389,19 , 0,2 , 0,2 , 525,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 9903,43 , 4,4 , 13,6 , 3163,5 , 2666,4 , 2, 1, 7, 7, 7 }, // Marathi/Devanagari/India - { 82, 2, 143, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 1003,10 , 1013,35 , 37,5 , 87,12 , 7438,21 , 7459,43 , 7438,21 , 7438,21 , 7502,43 , 7438,21 , 189,4 , 182,4 , 610,4 , 728,17 , 22,23 , {77,78,84}, 264,1 , 9946,46 , 8,5 , 4,0 , 3168,6 , 3174,6 , 2, 0, 1, 6, 7 }, // Mongolian/Cyrillic/Mongolia - { 82, 8, 44, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,78,89}, 265,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Mongolian/Mongolian/China - { 84, 13, 150, 46, 44, 59, 37, 2406, 45, 43, 101, 8220, 8221, 8216, 8217, 529,5 , 0,6 , 534,7 , 534,7 , 227,6 , 63,17 , 37,5 , 8,10 , 7545,33 , 7578,54 , 7632,18 , 7545,33 , 7578,54 , 7632,18 , 193,9 , 186,7 , 525,4 , 745,19 , 22,23 , {78,80,82}, 268,4 , 9992,49 , 8,5 , 4,0 , 3180,6 , 3186,5 , 2, 1, 7, 6, 7 }, // Nepali/Devanagari/Nepal - { 84, 13, 100, 46, 44, 59, 37, 2406, 45, 43, 101, 8220, 8221, 8216, 8217, 529,5 , 0,6 , 534,7 , 534,7 , 227,6 , 63,17 , 18,7 , 25,12 , 7545,33 , 7578,54 , 7632,18 , 7545,33 , 7578,54 , 7632,18 , 193,9 , 186,7 , 525,4 , 745,19 , 22,23 , {73,78,82}, 121,1 , 10041,49 , 8,5 , 4,0 , 3180,6 , 2666,4 , 2, 1, 7, 7, 7 }, // Nepali/Devanagari/India + { 80, 13, 100, 46, 44, 59, 37, 2406, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 520,9 , 520,9 , 269,6 , 192,18 , 18,7 , 25,12 , 7353,32 , 7385,53 , 4389,19 , 7353,32 , 7385,53 , 4389,19 , 0,2 , 0,2 , 505,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 9903,43 , 4,4 , 13,6 , 3163,5 , 2666,4 , 2, 1, 7, 7, 7 }, // Marathi/Devanagari/India + { 82, 2, 143, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 1003,10 , 1013,35 , 37,5 , 87,12 , 7438,21 , 7459,43 , 7438,21 , 7438,21 , 7502,43 , 7438,21 , 189,4 , 182,4 , 590,4 , 708,17 , 22,23 , {77,78,84}, 266,1 , 9946,46 , 8,5 , 4,0 , 3168,6 , 3174,6 , 2, 0, 1, 6, 7 }, // Mongolian/Cyrillic/Mongolia + { 82, 8, 44, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,78,89}, 267,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Mongolian/Mongolian/China + { 84, 13, 150, 46, 44, 59, 37, 2406, 45, 43, 101, 8220, 8221, 8216, 8217, 529,5 , 0,6 , 534,7 , 534,7 , 227,6 , 63,17 , 37,5 , 8,10 , 7545,33 , 7578,54 , 7632,18 , 7545,33 , 7578,54 , 7632,18 , 193,9 , 186,7 , 505,4 , 725,19 , 22,23 , {78,80,82}, 270,4 , 9992,49 , 8,5 , 4,0 , 3180,6 , 3186,5 , 2, 1, 7, 6, 7 }, // Nepali/Devanagari/Nepal + { 84, 13, 100, 46, 44, 59, 37, 2406, 45, 43, 101, 8220, 8221, 8216, 8217, 529,5 , 0,6 , 534,7 , 534,7 , 227,6 , 63,17 , 18,7 , 25,12 , 7545,33 , 7578,54 , 7632,18 , 7545,33 , 7578,54 , 7632,18 , 193,9 , 186,7 , 505,4 , 725,19 , 22,23 , {73,78,82}, 121,1 , 10041,49 , 8,5 , 4,0 , 3180,6 , 2666,4 , 2, 1, 7, 7, 7 }, // Nepali/Devanagari/India { 85, 7, 161, 44, 160, 59, 37, 48, 8722, 43, 101, 171, 187, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 495,10 , 478,17 , 37,5 , 8,10 , 2334,35 , 2269,51 , 2320,14 , 2334,35 , 2269,51 , 2320,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {78,79,75}, 190,2 , 10090,44 , 8,5 , 4,0 , 3191,12 , 3203,5 , 2, 0, 1, 6, 7 }, // Norwegian Bokmal/Latin/Norway { 85, 7, 203, 44, 160, 59, 37, 48, 8722, 43, 101, 171, 187, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 495,10 , 478,17 , 37,5 , 8,10 , 2334,35 , 2269,51 , 2320,14 , 2334,35 , 2269,51 , 2320,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {78,79,75}, 190,2 , 10090,44 , 8,5 , 4,0 , 3191,12 , 3208,21 , 2, 0, 1, 6, 7 }, // Norwegian Bokmal/Latin/Svalbard And Jan Mayen Islands { 86, 7, 74, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Occitan/Latin/France - { 87, 26, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 541,8 , 549,7 , 547,6 , 35,18 , 18,7 , 25,12 , 7650,33 , 7683,54 , 7737,18 , 7650,33 , 7683,54 , 7737,18 , 0,2 , 0,2 , 764,5 , 5,17 , 22,23 , {73,78,82}, 121,1 , 10134,43 , 4,4 , 13,6 , 3229,5 , 3234,4 , 2, 1, 7, 7, 7 }, // Oriya/Oriya/India - { 88, 1, 1, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 556,6 , 556,6 , 562,9 , 571,8 , 394,8 , 1048,20 , 55,4 , 198,11 , 7755,39 , 7755,39 , 85,14 , 7755,39 , 7755,39 , 85,14 , 202,4 , 193,4 , 769,5 , 5,17 , 22,23 , {65,70,78}, 272,1 , 10177,25 , 4,4 , 13,6 , 3238,4 , 3242,9 , 0, 0, 6, 4, 5 }, // Pashto/Arabic/Afghanistan - { 88, 1, 163, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 556,6 , 556,6 , 562,9 , 571,8 , 394,8 , 1048,20 , 18,7 , 25,12 , 7755,39 , 7755,39 , 85,14 , 7755,39 , 7755,39 , 85,14 , 202,4 , 193,4 , 769,5 , 5,17 , 22,23 , {80,75,82}, 176,2 , 10202,52 , 4,4 , 13,6 , 3238,4 , 3251,7 , 2, 0, 7, 6, 7 }, // Pashto/Arabic/Pakistan - { 89, 1, 102, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 171, 187, 8249, 8250, 579,7 , 579,7 , 586,8 , 594,7 , 394,8 , 97,16 , 55,4 , 198,11 , 7794,49 , 7794,49 , 7843,14 , 7794,49 , 7794,49 , 7843,14 , 206,9 , 197,8 , 774,4 , 778,42 , 22,23 , {73,82,82}, 273,4 , 10254,37 , 54,6 , 60,8 , 3258,5 , 3263,5 , 0, 0, 6, 5, 5 }, // Persian/Arabic/Iran - { 89, 1, 1, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 171, 187, 8249, 8250, 579,7 , 579,7 , 586,8 , 594,7 , 394,8 , 97,16 , 55,4 , 198,11 , 7794,49 , 7794,49 , 7843,14 , 7794,49 , 7794,49 , 7843,14 , 206,9 , 197,8 , 774,4 , 778,42 , 22,23 , {65,70,78}, 272,1 , 10291,55 , 8,5 , 60,8 , 3268,3 , 3242,9 , 0, 0, 6, 4, 5 }, // Persian/Arabic/Afghanistan - { 90, 7, 172, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 171, 187, 0,6 , 0,6 , 159,7 , 159,7 , 495,10 , 10,17 , 37,5 , 8,10 , 7857,34 , 7891,59 , 7950,14 , 7857,34 , 7891,59 , 7964,14 , 0,2 , 0,2 , 305,5 , 5,17 , 22,23 , {80,76,78}, 277,2 , 10346,77 , 19,5 , 24,7 , 3271,6 , 3277,6 , 2, 1, 1, 6, 7 }, // Polish/Latin/Poland - { 91, 7, 30, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 250,7 , 250,7 , 119,10 , 669,27 , 37,5 , 8,10 , 7978,35 , 8013,79 , 8092,14 , 7978,35 , 8013,79 , 8092,14 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {66,82,76}, 279,2 , 10423,54 , 8,5 , 4,0 , 3283,9 , 3292,6 , 2, 1, 7, 6, 7 }, // Portuguese/Latin/Brazil - { 91, 7, 6, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {65,79,65}, 258,2 , 10477,54 , 19,5 , 24,7 , 3283,9 , 3298,6 , 2, 1, 1, 6, 7 }, // Portuguese/Latin/Angola - { 91, 7, 39, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {67,86,69}, 281,1 , 10531,69 , 19,5 , 24,7 , 3283,9 , 3304,10 , 2, 1, 1, 6, 7 }, // Portuguese/Latin/Cape Verde + { 87, 26, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 541,8 , 549,7 , 547,6 , 35,18 , 18,7 , 25,12 , 7650,33 , 7683,54 , 7737,18 , 7650,33 , 7683,54 , 7737,18 , 0,2 , 0,2 , 744,5 , 5,17 , 22,23 , {73,78,82}, 121,1 , 10134,43 , 4,4 , 13,6 , 3229,5 , 3234,4 , 2, 1, 7, 7, 7 }, // Oriya/Oriya/India + { 88, 1, 1, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 556,6 , 556,6 , 562,9 , 571,8 , 394,8 , 1048,20 , 55,4 , 198,11 , 7755,39 , 7755,39 , 85,14 , 7755,39 , 7755,39 , 85,14 , 202,4 , 193,4 , 749,5 , 5,17 , 22,23 , {65,70,78}, 274,1 , 10177,25 , 4,4 , 13,6 , 3238,4 , 3242,9 , 0, 0, 6, 4, 5 }, // Pashto/Arabic/Afghanistan + { 88, 1, 163, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 556,6 , 556,6 , 562,9 , 571,8 , 394,8 , 1048,20 , 18,7 , 25,12 , 7755,39 , 7755,39 , 85,14 , 7755,39 , 7755,39 , 85,14 , 202,4 , 193,4 , 749,5 , 5,17 , 22,23 , {80,75,82}, 176,2 , 10202,52 , 4,4 , 13,6 , 3238,4 , 3251,7 , 2, 0, 7, 6, 7 }, // Pashto/Arabic/Pakistan + { 89, 1, 102, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 171, 187, 8249, 8250, 579,7 , 579,7 , 586,8 , 594,7 , 394,8 , 97,16 , 55,4 , 198,11 , 7794,49 , 7794,49 , 7843,14 , 7794,49 , 7794,49 , 7843,14 , 206,9 , 197,8 , 754,4 , 5,17 , 22,23 , {73,82,82}, 275,4 , 10254,37 , 54,6 , 60,8 , 3258,5 , 3263,5 , 0, 0, 6, 5, 5 }, // Persian/Arabic/Iran + { 89, 1, 1, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 171, 187, 8249, 8250, 579,7 , 579,7 , 586,8 , 594,7 , 394,8 , 97,16 , 55,4 , 198,11 , 7794,49 , 7794,49 , 7843,14 , 7794,49 , 7794,49 , 7843,14 , 206,9 , 197,8 , 754,4 , 5,17 , 22,23 , {65,70,78}, 274,1 , 10291,55 , 8,5 , 60,8 , 3268,3 , 3242,9 , 0, 0, 6, 4, 5 }, // Persian/Arabic/Afghanistan + { 90, 7, 172, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 171, 187, 0,6 , 0,6 , 159,7 , 159,7 , 495,10 , 10,17 , 37,5 , 8,10 , 7857,34 , 7891,59 , 7950,14 , 7857,34 , 7891,59 , 7964,14 , 0,2 , 0,2 , 293,5 , 5,17 , 22,23 , {80,76,78}, 279,2 , 10346,77 , 19,5 , 24,7 , 3271,6 , 3277,6 , 2, 1, 1, 6, 7 }, // Polish/Latin/Poland + { 91, 7, 30, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 250,7 , 250,7 , 119,10 , 669,27 , 37,5 , 8,10 , 7978,35 , 8013,79 , 8092,14 , 7978,35 , 8013,79 , 8092,14 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {66,82,76}, 281,2 , 10423,54 , 8,5 , 4,0 , 3283,9 , 3292,6 , 2, 1, 7, 6, 7 }, // Portuguese/Latin/Brazil + { 91, 7, 6, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {65,79,65}, 260,2 , 10477,54 , 19,5 , 24,7 , 3283,9 , 3298,6 , 2, 1, 1, 6, 7 }, // Portuguese/Latin/Angola + { 91, 7, 39, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {67,86,69}, 283,1 , 10531,69 , 19,5 , 24,7 , 3283,9 , 3304,10 , 2, 1, 1, 6, 7 }, // Portuguese/Latin/Cape Verde { 91, 7, 62, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {85,83,68}, 159,3 , 10600,81 , 19,5 , 24,7 , 3283,9 , 3314,11 , 2, 1, 1, 6, 7 }, // Portuguese/Latin/East Timor { 91, 7, 66, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {88,65,70}, 32,4 , 10681,59 , 19,5 , 24,7 , 3283,9 , 3325,16 , 0, 0, 1, 6, 7 }, // Portuguese/Latin/Equatorial Guinea - { 91, 7, 92, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {88,79,70}, 207,3 , 10740,62 , 19,5 , 24,7 , 3283,9 , 3341,12 , 0, 0, 1, 6, 7 }, // Portuguese/Latin/Guinea Bissau + { 91, 7, 92, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {88,79,70}, 207,5 , 10740,62 , 19,5 , 24,7 , 3283,9 , 3341,12 , 0, 0, 1, 6, 7 }, // Portuguese/Latin/Guinea Bissau { 91, 7, 125, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 3283,9 , 3353,10 , 2, 1, 1, 6, 7 }, // Portuguese/Latin/Luxembourg { 91, 7, 126, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 18,7 , 25,12 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {77,79,80}, 137,4 , 10802,54 , 19,5 , 24,7 , 3283,9 , 3363,19 , 2, 1, 7, 6, 7 }, // Portuguese/Latin/Macau - { 91, 7, 146, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {77,90,78}, 282,3 , 10856,66 , 19,5 , 24,7 , 3283,9 , 3382,10 , 2, 1, 7, 6, 7 }, // Portuguese/Latin/Mozambique + { 91, 7, 146, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {77,90,78}, 284,3 , 10856,66 , 19,5 , 24,7 , 3283,9 , 3382,10 , 2, 1, 7, 6, 7 }, // Portuguese/Latin/Mozambique { 91, 7, 173, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 24,7 , 3392,17 , 3409,8 , 2, 1, 7, 6, 7 }, // Portuguese/Latin/Portugal - { 91, 7, 185, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {83,84,78}, 285,2 , 10922,92 , 19,5 , 24,7 , 3283,9 , 3417,19 , 2, 1, 1, 6, 7 }, // Portuguese/Latin/Sao Tome And Principe - { 91, 7, 206, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {67,72,70}, 228,3 , 11014,45 , 19,5 , 24,7 , 3283,9 , 3436,5 , 2, 0, 1, 6, 7 }, // Portuguese/Latin/Switzerland - { 92, 4, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 601,9 , 601,9 , 269,6 , 10,17 , 18,7 , 25,12 , 8155,36 , 8191,57 , 8248,23 , 8155,36 , 8191,57 , 8248,23 , 223,6 , 213,6 , 820,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 11059,39 , 8,5 , 4,0 , 3441,6 , 3447,4 , 2, 1, 7, 7, 7 }, // Punjabi/Gurmukhi/India - { 92, 1, 163, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 553,18 , 18,7 , 25,12 , 8271,37 , 8271,37 , 85,14 , 8271,37 , 8271,37 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {80,75,82}, 287,1 , 11098,13 , 8,5 , 4,0 , 3451,6 , 3251,7 , 2, 0, 7, 6, 7 }, // Punjabi/Arabic/Pakistan - { 93, 7, 169, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 192,18 , 37,5 , 8,10 , 8308,28 , 8336,53 , 8389,14 , 8308,28 , 8336,53 , 8389,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {80,69,78}, 288,2 , 11111,29 , 8,5 , 4,0 , 3457,8 , 3465,4 , 2, 1, 7, 6, 7 }, // Quechua/Latin/Peru - { 93, 7, 26, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 192,18 , 37,5 , 8,10 , 8308,28 , 8336,53 , 8389,14 , 8308,28 , 8336,53 , 8389,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {66,79,66}, 290,2 , 11140,25 , 8,5 , 4,0 , 3457,8 , 3469,7 , 2, 1, 1, 6, 7 }, // Quechua/Latin/Bolivia + { 91, 7, 185, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {83,84,78}, 287,2 , 10922,92 , 19,5 , 24,7 , 3283,9 , 3417,19 , 2, 1, 1, 6, 7 }, // Portuguese/Latin/Sao Tome And Principe + { 91, 7, 206, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 669,27 , 37,5 , 8,10 , 8106,49 , 8013,79 , 8092,14 , 8106,49 , 8013,79 , 8092,14 , 215,8 , 205,8 , 0,5 , 5,17 , 22,23 , {67,72,70}, 230,3 , 11014,45 , 19,5 , 24,7 , 3283,9 , 3436,5 , 2, 0, 1, 6, 7 }, // Portuguese/Latin/Switzerland + { 92, 4, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 601,9 , 601,9 , 269,6 , 10,17 , 18,7 , 25,12 , 8155,36 , 8191,57 , 8248,23 , 8155,36 , 8191,57 , 8248,23 , 223,6 , 213,6 , 758,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 11059,39 , 8,5 , 4,0 , 3441,6 , 3447,4 , 2, 1, 7, 7, 7 }, // Punjabi/Gurmukhi/India + { 92, 1, 163, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 553,18 , 18,7 , 25,12 , 8271,37 , 8271,37 , 85,14 , 8271,37 , 8271,37 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {80,75,82}, 289,1 , 11098,13 , 8,5 , 4,0 , 3451,6 , 3251,7 , 2, 0, 7, 6, 7 }, // Punjabi/Arabic/Pakistan + { 93, 7, 169, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 192,18 , 37,5 , 8,10 , 8308,28 , 8336,53 , 8389,14 , 8308,28 , 8336,53 , 8389,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {80,69,78}, 290,2 , 11111,29 , 8,5 , 4,0 , 3457,8 , 3465,4 , 2, 1, 7, 6, 7 }, // Quechua/Latin/Peru + { 93, 7, 26, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 192,18 , 37,5 , 8,10 , 8308,28 , 8336,53 , 8389,14 , 8308,28 , 8336,53 , 8389,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {66,79,66}, 292,2 , 11140,25 , 8,5 , 4,0 , 3457,8 , 3469,7 , 2, 1, 1, 6, 7 }, // Quechua/Latin/Bolivia { 93, 7, 63, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 192,18 , 37,5 , 8,10 , 8308,28 , 8336,53 , 8389,14 , 8308,28 , 8336,53 , 8389,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {85,83,68}, 6,1 , 11165,37 , 8,5 , 4,0 , 3457,8 , 3476,7 , 2, 1, 1, 6, 7 }, // Quechua/Latin/Ecuador - { 94, 7, 206, 46, 8217, 59, 37, 48, 8722, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 250,7 , 250,7 , 339,8 , 1068,23 , 37,5 , 8,10 , 8403,23 , 8426,56 , 8482,14 , 8403,23 , 8426,56 , 8482,14 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {67,72,70}, 228,3 , 11202,48 , 19,5 , 4,0 , 3483,9 , 3492,6 , 2, 0, 1, 6, 7 }, // Romansh/Latin/Switzerland - { 95, 7, 177, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8221, 171, 187, 0,6 , 0,6 , 610,8 , 610,8 , 495,10 , 10,17 , 37,5 , 8,10 , 8496,34 , 8530,48 , 3107,14 , 8496,34 , 8530,48 , 3107,14 , 64,4 , 61,4 , 824,4 , 5,17 , 22,23 , {82,79,78}, 292,3 , 11250,57 , 19,5 , 24,7 , 3498,6 , 3504,7 , 2, 1, 1, 6, 7 }, // Romanian/Latin/Romania - { 95, 7, 141, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8221, 171, 187, 0,6 , 0,6 , 610,8 , 610,8 , 495,10 , 10,17 , 37,5 , 8,10 , 8578,28 , 8530,48 , 8606,16 , 8578,28 , 8530,48 , 8606,16 , 64,4 , 61,4 , 824,4 , 5,17 , 22,23 , {77,68,76}, 295,1 , 11307,69 , 19,5 , 24,7 , 3498,6 , 3511,17 , 2, 1, 1, 6, 7 }, // Romanian/Latin/Moldova - { 96, 2, 178, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 269,5 , 728,17 , 22,23 , {82,85,66}, 123,1 , 11376,89 , 19,5 , 4,0 , 3528,7 , 3535,6 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Russia - { 96, 2, 20, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 269,5 , 728,17 , 22,23 , {66,89,78}, 0,2 , 11465,94 , 19,5 , 4,0 , 3528,7 , 510,8 , 2, 0, 1, 6, 7 }, // Russian/Cyrillic/Belarus - { 96, 2, 110, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 269,5 , 728,17 , 22,23 , {75,90,84}, 248,1 , 11559,83 , 19,5 , 4,0 , 3528,7 , 3541,9 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Kazakhstan - { 96, 2, 116, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 269,5 , 728,17 , 22,23 , {75,71,83}, 249,3 , 11642,82 , 19,5 , 4,0 , 3528,7 , 3550,8 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Kyrgyzstan - { 96, 2, 141, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 269,5 , 728,17 , 22,23 , {77,68,76}, 295,1 , 11724,79 , 19,5 , 4,0 , 3528,7 , 3558,7 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Moldova - { 96, 2, 222, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 269,5 , 728,17 , 22,23 , {85,65,72}, 296,1 , 11803,92 , 19,5 , 4,0 , 3528,7 , 3565,7 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Ukraine + { 94, 7, 206, 46, 8217, 59, 37, 48, 8722, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 250,7 , 250,7 , 339,8 , 1068,23 , 37,5 , 8,10 , 8403,23 , 8426,56 , 8482,14 , 8403,23 , 8426,56 , 8482,14 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {67,72,70}, 230,3 , 11202,48 , 19,5 , 4,0 , 3483,9 , 3492,6 , 2, 0, 1, 6, 7 }, // Romansh/Latin/Switzerland + { 95, 7, 177, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8221, 171, 187, 0,6 , 0,6 , 610,8 , 610,8 , 495,10 , 10,17 , 37,5 , 8,10 , 8496,34 , 8530,48 , 3107,14 , 8496,34 , 8530,48 , 3107,14 , 64,4 , 61,4 , 762,4 , 5,17 , 22,23 , {82,79,78}, 294,3 , 11250,57 , 19,5 , 24,7 , 3498,6 , 3504,7 , 2, 1, 1, 6, 7 }, // Romanian/Latin/Romania + { 95, 7, 141, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8221, 171, 187, 0,6 , 0,6 , 610,8 , 610,8 , 495,10 , 10,17 , 37,5 , 8,10 , 8578,28 , 8530,48 , 8606,16 , 8578,28 , 8530,48 , 8606,16 , 64,4 , 61,4 , 762,4 , 5,17 , 22,23 , {77,68,76}, 297,1 , 11307,69 , 19,5 , 24,7 , 3498,6 , 3511,17 , 2, 1, 1, 6, 7 }, // Romanian/Latin/Moldova + { 96, 2, 178, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 257,5 , 708,17 , 22,23 , {82,85,66}, 123,1 , 11376,89 , 19,5 , 4,0 , 3528,7 , 3535,6 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Russia + { 96, 2, 20, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 257,5 , 708,17 , 22,23 , {66,89,78}, 0,2 , 11465,94 , 19,5 , 4,0 , 3528,7 , 510,8 , 2, 0, 1, 6, 7 }, // Russian/Cyrillic/Belarus + { 96, 2, 110, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 257,5 , 708,17 , 22,23 , {75,90,84}, 250,1 , 11559,83 , 19,5 , 4,0 , 3528,7 , 3541,9 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Kazakhstan + { 96, 2, 116, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 257,5 , 708,17 , 22,23 , {75,71,83}, 251,3 , 11642,82 , 19,5 , 4,0 , 3528,7 , 3550,8 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Kyrgyzstan + { 96, 2, 141, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 257,5 , 708,17 , 22,23 , {77,68,76}, 297,1 , 11724,79 , 19,5 , 4,0 , 3528,7 , 3558,7 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Moldova + { 96, 2, 222, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 111,7 , 111,7 , 495,10 , 317,22 , 37,5 , 8,10 , 8622,21 , 8643,62 , 8705,14 , 8622,21 , 8643,62 , 8622,21 , 0,2 , 0,2 , 257,5 , 708,17 , 22,23 , {85,65,72}, 298,1 , 11803,92 , 19,5 , 4,0 , 3528,7 , 3565,7 , 2, 1, 1, 6, 7 }, // Russian/Cyrillic/Ukraine { 98, 7, 41, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 8719,28 , 8747,66 , 8813,14 , 8719,28 , 8747,66 , 8813,14 , 229,2 , 219,2 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 11895,25 , 4,4 , 44,5 , 3572,5 , 3577,22 , 0, 0, 1, 6, 7 }, // Sango/Latin/Central African Republic { 99, 13, 100, 46, 44, 59, 37, 2406, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 618,10 , 628,9 , 269,6 , 10,17 , 18,7 , 25,12 , 4304,32 , 8827,67 , 4389,19 , 4304,32 , 8827,67 , 4389,19 , 193,9 , 186,7 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 11920,37 , 8,5 , 4,0 , 3599,12 , 3611,5 , 2, 1, 7, 7, 7 }, // Sanskrit/Devanagari/India - { 100, 2, 243, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8894,28 , 8922,52 , 8974,14 , 8894,28 , 8922,52 , 8974,14 , 231,9 , 221,8 , 828,7 , 5,17 , 22,23 , {82,83,68}, 297,3 , 11957,58 , 19,5 , 24,7 , 3616,6 , 3622,6 , 0, 0, 1, 6, 7 }, // Serbian/Cyrillic/Serbia - { 100, 7, 27, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 2043,28 , 2071,58 , 2129,14 , 8988,28 , 2071,58 , 2129,14 , 240,11 , 229,8 , 298,7 , 5,17 , 22,23 , {66,65,77}, 144,2 , 12015,170 , 19,5 , 24,7 , 3628,6 , 629,19 , 2, 1, 1, 6, 7 }, // Serbian/Latin/Bosnia And Herzegowina - { 100, 7, 242, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8988,28 , 9016,57 , 2129,14 , 8988,28 , 9016,57 , 2129,14 , 240,11 , 229,8 , 298,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12185,23 , 19,5 , 24,7 , 3628,6 , 3634,9 , 2, 1, 1, 6, 7 }, // Serbian/Latin/Montenegro - { 100, 7, 243, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8988,28 , 9073,54 , 2129,14 , 8988,28 , 9073,54 , 2129,14 , 251,9 , 229,8 , 298,7 , 5,17 , 22,23 , {82,83,68}, 297,3 , 12208,58 , 19,5 , 24,7 , 3628,6 , 3643,6 , 0, 0, 1, 6, 7 }, // Serbian/Latin/Serbia - { 100, 2, 27, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 9127,28 , 9155,56 , 8974,14 , 8894,28 , 9155,56 , 8974,14 , 260,11 , 221,8 , 828,7 , 5,17 , 22,23 , {66,65,77}, 300,2 , 12266,170 , 19,5 , 24,7 , 3616,6 , 3649,19 , 2, 1, 1, 6, 7 }, // Serbian/Cyrillic/Bosnia And Herzegowina - { 100, 2, 242, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8894,28 , 9211,55 , 8974,14 , 8894,28 , 9211,55 , 8974,14 , 260,11 , 221,8 , 828,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12436,23 , 19,5 , 24,7 , 3616,6 , 3668,9 , 2, 1, 1, 6, 7 }, // Serbian/Cyrillic/Montenegro - { 100, 2, 257, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8894,28 , 8922,52 , 8974,14 , 8894,28 , 8922,52 , 8974,14 , 231,9 , 221,8 , 828,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12436,23 , 19,5 , 24,7 , 3616,6 , 3677,6 , 2, 1, 1, 6, 7 }, // Serbian/Cyrillic/Kosovo - { 100, 7, 257, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8988,28 , 9073,54 , 2129,14 , 8988,28 , 9073,54 , 2129,14 , 251,9 , 229,8 , 298,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12185,23 , 19,5 , 24,7 , 3628,6 , 3683,6 , 2, 1, 1, 6, 7 }, // Serbian/Latin/Kosovo - { 101, 2, 81, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 637,9 , 637,9 , 156,8 , 1118,23 , 37,5 , 8,10 , 9266,28 , 9294,61 , 9355,14 , 9369,28 , 9397,61 , 9355,14 , 271,15 , 237,15 , 45,4 , 5,17 , 22,23 , {71,69,76}, 235,1 , 12459,17 , 8,5 , 4,0 , 3689,4 , 3693,11 , 2, 1, 1, 6, 7 }, // Ossetic/Cyrillic/Georgia + { 100, 2, 243, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8894,28 , 8922,52 , 8974,14 , 8894,28 , 8922,52 , 8974,14 , 231,9 , 221,8 , 766,7 , 5,17 , 22,23 , {82,83,68}, 299,3 , 11957,58 , 19,5 , 24,7 , 3616,6 , 3622,6 , 0, 0, 1, 6, 7 }, // Serbian/Cyrillic/Serbia + { 100, 7, 27, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 2043,28 , 2071,58 , 2129,14 , 8988,28 , 2071,58 , 2129,14 , 240,11 , 229,8 , 286,7 , 5,17 , 22,23 , {66,65,77}, 144,2 , 12015,170 , 19,5 , 24,7 , 3628,6 , 629,19 , 2, 1, 1, 6, 7 }, // Serbian/Latin/Bosnia And Herzegowina + { 100, 7, 242, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8988,28 , 9016,57 , 2129,14 , 8988,28 , 9016,57 , 2129,14 , 240,11 , 229,8 , 286,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12185,23 , 19,5 , 24,7 , 3628,6 , 3634,9 , 2, 1, 1, 6, 7 }, // Serbian/Latin/Montenegro + { 100, 7, 243, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8988,28 , 9073,54 , 2129,14 , 8988,28 , 9073,54 , 2129,14 , 251,9 , 229,8 , 286,7 , 5,17 , 22,23 , {82,83,68}, 299,3 , 12208,58 , 19,5 , 24,7 , 3628,6 , 3643,6 , 0, 0, 1, 6, 7 }, // Serbian/Latin/Serbia + { 100, 2, 27, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 9127,28 , 9155,56 , 8974,14 , 8894,28 , 9155,56 , 8974,14 , 260,11 , 221,8 , 766,7 , 5,17 , 22,23 , {66,65,77}, 302,2 , 12266,170 , 19,5 , 24,7 , 3616,6 , 3649,19 , 2, 1, 1, 6, 7 }, // Serbian/Cyrillic/Bosnia And Herzegowina + { 100, 2, 242, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8894,28 , 9211,55 , 8974,14 , 8894,28 , 9211,55 , 8974,14 , 260,11 , 221,8 , 766,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12436,23 , 19,5 , 24,7 , 3616,6 , 3668,9 , 2, 1, 1, 6, 7 }, // Serbian/Cyrillic/Montenegro + { 100, 2, 257, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8894,28 , 8922,52 , 8974,14 , 8894,28 , 8922,52 , 8974,14 , 231,9 , 221,8 , 766,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12436,23 , 19,5 , 24,7 , 3616,6 , 3677,6 , 2, 1, 1, 6, 7 }, // Serbian/Cyrillic/Kosovo + { 100, 7, 257, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8216, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 8988,28 , 9073,54 , 2129,14 , 8988,28 , 9073,54 , 2129,14 , 251,9 , 229,8 , 286,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12185,23 , 19,5 , 24,7 , 3628,6 , 3683,6 , 2, 1, 1, 6, 7 }, // Serbian/Latin/Kosovo + { 101, 2, 81, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 637,9 , 637,9 , 156,8 , 1118,23 , 37,5 , 8,10 , 9266,28 , 9294,61 , 9355,14 , 9369,28 , 9397,61 , 9355,14 , 271,15 , 237,15 , 45,4 , 5,17 , 22,23 , {71,69,76}, 237,1 , 12459,17 , 8,5 , 4,0 , 3689,4 , 3693,11 , 2, 1, 1, 6, 7 }, // Ossetic/Cyrillic/Georgia { 101, 2, 178, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 637,9 , 637,9 , 156,8 , 1118,23 , 37,5 , 8,10 , 9266,28 , 9294,61 , 9355,14 , 9369,28 , 9397,61 , 9355,14 , 271,15 , 237,15 , 45,4 , 5,17 , 22,23 , {82,85,66}, 123,1 , 12476,17 , 8,5 , 4,0 , 3689,4 , 3704,6 , 2, 1, 1, 6, 7 }, // Ossetic/Cyrillic/Russia { 102, 7, 195, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {90,65,82}, 5,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Southern Sotho/Latin/South Africa { 103, 7, 195, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {90,65,82}, 5,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Tswana/Latin/South Africa { 104, 7, 240, 46, 44, 59, 37, 48, 45, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 9458,28 , 9486,55 , 9541,14 , 9458,28 , 9486,55 , 9541,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,83,68}, 159,3 , 12493,22 , 4,4 , 13,6 , 3710,8 , 1819,8 , 2, 1, 7, 6, 7 }, // Shona/Latin/Zimbabwe - { 105, 1, 163, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 646,8 , 654,7 , 53,10 , 63,17 , 18,7 , 25,12 , 9555,35 , 9555,35 , 9590,31 , 9555,35 , 9555,35 , 9590,31 , 286,11 , 252,11 , 835,6 , 841,25 , 22,23 , {80,75,82}, 176,2 , 12515,43 , 19,5 , 4,0 , 3718,4 , 3722,7 , 2, 0, 7, 6, 7 }, // Sindhi/Arabic/Pakistan + { 105, 1, 163, 1643, 1644, 1563, 37, 1632, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 646,8 , 654,7 , 53,10 , 63,17 , 18,7 , 25,12 , 9555,35 , 9555,35 , 9590,31 , 9555,35 , 9555,35 , 9590,31 , 286,11 , 252,11 , 773,6 , 779,25 , 22,23 , {80,75,82}, 176,2 , 12515,43 , 19,5 , 4,0 , 3718,4 , 3722,7 , 2, 0, 7, 6, 7 }, // Sindhi/Arabic/Pakistan { 105, 13, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 269,6 , 10,17 , 393,7 , 437,12 , 9621,25 , 9646,27 , 9673,20 , 9693,28 , 9721,41 , 9762,19 , 297,16 , 263,13 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 12558,24 , 8,5 , 4,0 , 3729,6 , 2666,4 , 2, 1, 7, 7, 7 }, // Sindhi/Devanagari/India - { 106, 32, 198, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 661,9 , 670,8 , 53,10 , 63,17 , 239,5 , 244,10 , 9781,39 , 9820,62 , 9882,19 , 9781,39 , 9820,62 , 9882,19 , 313,5 , 276,4 , 866,5 , 871,42 , 22,23 , {76,75,82}, 302,3 , 12582,58 , 4,4 , 13,6 , 3735,5 , 3740,11 , 2, 1, 1, 6, 7 }, // Sinhala/Sinhala/Sri Lanka + { 106, 32, 198, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 661,9 , 670,8 , 53,10 , 63,17 , 239,5 , 244,10 , 9781,39 , 9820,62 , 9882,19 , 9781,39 , 9820,62 , 9882,19 , 313,5 , 276,4 , 804,5 , 809,42 , 22,23 , {76,75,82}, 304,3 , 12582,58 , 4,4 , 13,6 , 3735,5 , 3740,11 , 2, 1, 1, 6, 7 }, // Sinhala/Sinhala/Sri Lanka { 107, 7, 195, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {90,65,82}, 5,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Swati/Latin/South Africa - { 108, 7, 191, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 181,7 , 678,7 , 1141,10 , 478,17 , 55,4 , 59,9 , 9901,21 , 9922,52 , 9974,14 , 9901,21 , 9922,52 , 9974,14 , 0,2 , 0,2 , 305,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12640,26 , 19,5 , 24,7 , 3751,10 , 3761,9 , 2, 1, 1, 6, 7 }, // Slovak/Latin/Slovakia + { 108, 7, 191, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 181,7 , 678,7 , 1141,10 , 478,17 , 55,4 , 59,9 , 9901,21 , 9922,52 , 9974,14 , 9901,21 , 9922,52 , 9974,14 , 0,2 , 0,2 , 293,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12640,26 , 19,5 , 24,7 , 3751,10 , 3761,9 , 2, 1, 1, 6, 7 }, // Slovak/Latin/Slovakia { 109, 7, 192, 44, 46, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 685,8 , 685,8 , 1151,9 , 1160,19 , 37,5 , 8,10 , 9988,35 , 10023,52 , 10075,14 , 9988,35 , 10023,52 , 10075,14 , 60,4 , 280,4 , 54,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 12666,28 , 19,5 , 24,7 , 3770,11 , 3781,9 , 2, 1, 1, 6, 7 }, // Slovenian/Latin/Slovenia - { 110, 7, 194, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 693,9 , 693,9 , 27,8 , 1179,19 , 18,7 , 25,12 , 10089,32 , 10121,47 , 10168,15 , 10089,32 , 10121,47 , 10168,15 , 318,2 , 284,2 , 913,6 , 919,17 , 22,23 , {83,79,83}, 94,1 , 12694,27 , 4,4 , 13,6 , 3790,8 , 3798,10 , 0, 0, 1, 6, 7 }, // Somali/Latin/Somalia - { 110, 7, 59, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 693,9 , 693,9 , 27,8 , 1179,19 , 18,7 , 25,12 , 10089,32 , 10121,47 , 10168,15 , 10089,32 , 10121,47 , 10168,15 , 318,2 , 284,2 , 913,6 , 919,17 , 22,23 , {68,74,70}, 38,3 , 12721,50 , 4,4 , 13,6 , 3790,8 , 3808,7 , 0, 0, 6, 6, 7 }, // Somali/Latin/Djibouti - { 110, 7, 69, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 693,9 , 693,9 , 27,8 , 1179,19 , 18,7 , 25,12 , 10089,32 , 10121,47 , 10168,15 , 10089,32 , 10121,47 , 10168,15 , 318,2 , 284,2 , 913,6 , 919,17 , 22,23 , {69,84,66}, 0,2 , 12771,52 , 4,4 , 13,6 , 3790,8 , 3815,8 , 2, 1, 7, 6, 7 }, // Somali/Latin/Ethiopia - { 110, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 693,9 , 693,9 , 27,8 , 1179,19 , 37,5 , 8,10 , 10089,32 , 10121,47 , 10168,15 , 10089,32 , 10121,47 , 10168,15 , 318,2 , 284,2 , 913,6 , 919,17 , 22,23 , {75,69,83}, 2,3 , 12823,52 , 4,4 , 13,6 , 3790,8 , 1191,5 , 2, 1, 7, 6, 7 }, // Somali/Latin/Kenya + { 110, 7, 194, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 693,9 , 693,9 , 27,8 , 1179,19 , 18,7 , 25,12 , 10089,32 , 10121,47 , 10168,15 , 10089,32 , 10121,47 , 10168,15 , 318,2 , 284,2 , 851,6 , 857,17 , 22,23 , {83,79,83}, 94,1 , 12694,27 , 4,4 , 13,6 , 3790,8 , 3798,10 , 0, 0, 1, 6, 7 }, // Somali/Latin/Somalia + { 110, 7, 59, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 693,9 , 693,9 , 27,8 , 1179,19 , 18,7 , 25,12 , 10089,32 , 10121,47 , 10168,15 , 10089,32 , 10121,47 , 10168,15 , 318,2 , 284,2 , 851,6 , 857,17 , 22,23 , {68,74,70}, 38,3 , 12721,50 , 4,4 , 13,6 , 3790,8 , 3808,7 , 0, 0, 6, 6, 7 }, // Somali/Latin/Djibouti + { 110, 7, 69, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 693,9 , 693,9 , 27,8 , 1179,19 , 18,7 , 25,12 , 10089,32 , 10121,47 , 10168,15 , 10089,32 , 10121,47 , 10168,15 , 318,2 , 284,2 , 851,6 , 857,17 , 22,23 , {69,84,66}, 0,2 , 12771,52 , 4,4 , 13,6 , 3790,8 , 3815,8 , 2, 1, 7, 6, 7 }, // Somali/Latin/Ethiopia + { 110, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 693,9 , 693,9 , 27,8 , 1179,19 , 37,5 , 8,10 , 10089,32 , 10121,47 , 10168,15 , 10089,32 , 10121,47 , 10168,15 , 318,2 , 284,2 , 851,6 , 857,17 , 22,23 , {75,69,83}, 2,3 , 12823,52 , 4,4 , 13,6 , 3790,8 , 1191,5 , 2, 1, 7, 6, 7 }, // Somali/Latin/Kenya { 111, 7, 197, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 55,4 , 198,11 , 10183,28 , 10211,53 , 8389,14 , 10183,28 , 10211,53 , 8389,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 4,0 , 3823,17 , 2431,6 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Spain { 111, 7, 10, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 3107,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {65,82,83}, 6,1 , 12875,51 , 8,5 , 37,7 , 3840,7 , 3847,9 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Argentina { 111, 7, 22, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {66,90,68}, 6,1 , 12926,52 , 4,4 , 4,0 , 3840,7 , 3856,6 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Belize - { 111, 7, 26, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {66,79,66}, 290,2 , 12978,35 , 4,4 , 4,0 , 3840,7 , 3469,7 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Bolivia - { 111, 7, 30, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {66,82,76}, 279,2 , 13013,52 , 4,4 , 4,0 , 3840,7 , 3292,6 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Brazil + { 111, 7, 26, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {66,79,66}, 292,2 , 12978,35 , 4,4 , 4,0 , 3840,7 , 3469,7 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Bolivia + { 111, 7, 30, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {66,82,76}, 281,2 , 13013,52 , 4,4 , 4,0 , 3840,7 , 3292,6 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Brazil { 111, 7, 43, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 339,8 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {67,76,80}, 6,1 , 13065,45 , 4,4 , 4,0 , 3840,7 , 3862,5 , 0, 0, 1, 6, 7 }, // Spanish/Latin/Chile { 111, 7, 47, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 571,7 , 669,27 , 18,7 , 25,12 , 10264,35 , 10211,53 , 4796,14 , 10183,28 , 10211,53 , 3107,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {67,79,80}, 6,1 , 13110,54 , 4,4 , 4,0 , 3840,7 , 3867,8 , 2, 0, 7, 6, 7 }, // Spanish/Latin/Colombia - { 111, 7, 52, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {67,82,67}, 305,1 , 13164,67 , 4,4 , 4,0 , 3840,7 , 3875,10 , 2, 0, 1, 6, 7 }, // Spanish/Latin/Costa Rica + { 111, 7, 52, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {67,82,67}, 307,1 , 13164,67 , 4,4 , 4,0 , 3840,7 , 3875,10 , 2, 0, 1, 6, 7 }, // Spanish/Latin/Costa Rica { 111, 7, 55, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {67,85,80}, 6,1 , 13231,42 , 4,4 , 4,0 , 3840,7 , 3885,4 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Cuba - { 111, 7, 61, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 18,7 , 25,12 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 3107,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {68,79,80}, 306,3 , 13273,54 , 4,4 , 13,6 , 3840,7 , 3889,20 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Dominican Republic + { 111, 7, 61, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 18,7 , 25,12 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 3107,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {68,79,80}, 308,3 , 13273,54 , 4,4 , 13,6 , 3840,7 , 3889,20 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Dominican Republic { 111, 7, 63, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {85,83,68}, 6,1 , 13327,70 , 4,4 , 4,0 , 3840,7 , 3476,7 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Ecuador { 111, 7, 65, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {85,83,68}, 6,1 , 13327,70 , 4,4 , 4,0 , 3840,7 , 3909,11 , 2, 1, 7, 6, 7 }, // Spanish/Latin/El Salvador { 111, 7, 66, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 55,4 , 198,11 , 10183,28 , 10211,53 , 8389,14 , 10183,28 , 10211,53 , 8389,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {88,65,70}, 32,4 , 13397,92 , 19,5 , 4,0 , 3840,7 , 3920,17 , 0, 0, 1, 6, 7 }, // Spanish/Latin/Equatorial Guinea - { 111, 7, 90, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 571,7 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {71,84,81}, 309,1 , 13489,30 , 4,4 , 4,0 , 3840,7 , 3937,9 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Guatemala - { 111, 7, 96, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 1198,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {72,78,76}, 295,1 , 13519,60 , 4,4 , 4,0 , 3840,7 , 3946,8 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Honduras + { 111, 7, 90, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 571,7 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {71,84,81}, 311,1 , 13489,30 , 4,4 , 4,0 , 3840,7 , 3937,9 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Guatemala + { 111, 7, 96, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 1198,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {72,78,76}, 297,1 , 13519,60 , 4,4 , 4,0 , 3840,7 , 3946,8 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Honduras { 111, 7, 139, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 27,8 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 3107,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {77,88,78}, 6,1 , 13579,48 , 4,4 , 4,0 , 3954,17 , 3971,6 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Mexico - { 111, 7, 155, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {78,73,79}, 310,2 , 13627,69 , 4,4 , 4,0 , 3840,7 , 3977,9 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Nicaragua - { 111, 7, 166, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 1225,8 , 669,27 , 18,7 , 25,12 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {80,65,66}, 312,3 , 13696,54 , 4,4 , 4,0 , 3840,7 , 3986,6 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Panama - { 111, 7, 168, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {80,89,71}, 315,3 , 13750,61 , 4,4 , 4,0 , 3840,7 , 3992,8 , 0, 0, 7, 6, 7 }, // Spanish/Latin/Paraguay - { 111, 7, 169, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 571,7 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {80,69,78}, 288,2 , 13811,43 , 4,4 , 4,0 , 3840,7 , 3465,4 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Peru + { 111, 7, 155, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {78,73,79}, 312,2 , 13627,69 , 4,4 , 4,0 , 3840,7 , 3977,9 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Nicaragua + { 111, 7, 166, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 1225,8 , 669,27 , 18,7 , 25,12 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {80,65,66}, 314,3 , 13696,54 , 4,4 , 4,0 , 3840,7 , 3986,6 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Panama + { 111, 7, 168, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {80,89,71}, 317,3 , 13750,61 , 4,4 , 4,0 , 3840,7 , 3992,8 , 0, 0, 7, 6, 7 }, // Spanish/Latin/Paraguay + { 111, 7, 169, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 571,7 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {80,69,78}, 290,2 , 13811,43 , 4,4 , 4,0 , 3840,7 , 3465,4 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Peru { 111, 7, 170, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 18,7 , 25,12 , 10183,28 , 10211,53 , 8389,14 , 10183,28 , 10211,53 , 8389,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {80,72,80}, 179,1 , 13854,48 , 19,5 , 4,0 , 3840,7 , 4000,9 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Philippines { 111, 7, 174, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 1225,8 , 669,27 , 18,7 , 25,12 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {85,83,68}, 6,1 , 13327,70 , 4,4 , 4,0 , 3840,7 , 1446,11 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Puerto Rico { 111, 7, 225, 46, 44, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 702,7 , 702,7 , 415,8 , 669,27 , 18,7 , 25,12 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 3107,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {85,83,68}, 6,1 , 13327,70 , 4,4 , 4,0 , 3840,7 , 4009,14 , 2, 1, 7, 6, 7 }, // Spanish/Latin/United States { 111, 7, 227, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {85,89,85}, 6,1 , 13902,48 , 8,5 , 37,7 , 3840,7 , 4023,7 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Uruguay - { 111, 7, 231, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 18,7 , 25,12 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {86,69,83}, 318,4 , 13950,58 , 4,4 , 4,0 , 3840,7 , 4030,9 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Venezuela + { 111, 7, 231, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 18,7 , 25,12 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {86,69,83}, 320,4 , 13950,58 , 4,4 , 4,0 , 3840,7 , 4030,9 , 2, 1, 7, 6, 7 }, // Spanish/Latin/Venezuela { 111, 7, 238, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 55,4 , 198,11 , 10183,28 , 10211,53 , 8389,14 , 10183,28 , 10211,53 , 8389,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 4,0 , 3840,7 , 4039,8 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Canary Islands { 111, 7, 246, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 37,5 , 8,10 , 10264,35 , 10211,53 , 3107,14 , 10183,28 , 10211,53 , 4796,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 4,4 , 4,0 , 4047,23 , 4070,13 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Latin America { 111, 7, 250, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 702,7 , 702,7 , 269,6 , 669,27 , 55,4 , 198,11 , 10183,28 , 10211,53 , 8389,14 , 10183,28 , 10211,53 , 8389,14 , 53,5 , 50,5 , 0,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 19,5 , 4,0 , 3840,7 , 4083,15 , 2, 1, 1, 6, 7 }, // Spanish/Latin/Ceuta And Melilla - { 112, 7, 101, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 709,13 , 722,12 , 269,6 , 10,17 , 254,4 , 258,9 , 10299,28 , 10327,44 , 4697,14 , 10299,28 , 10327,44 , 4697,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,68,82}, 242,2 , 14008,37 , 4,4 , 4,0 , 4098,10 , 0,0 , 2, 0, 7, 6, 7 }, // Sundanese/Latin/Indonesia - { 113, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 734,8 , 734,8 , 119,10 , 10,17 , 37,5 , 8,10 , 10371,60 , 10371,60 , 85,14 , 10371,60 , 10371,60 , 85,14 , 0,2 , 0,2 , 675,5 , 936,51 , 22,23 , {84,90,83}, 192,3 , 14045,67 , 8,5 , 4,0 , 4108,9 , 1624,8 , 2, 0, 1, 6, 7 }, // Swahili/Latin/Tanzania - { 113, 7, 49, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 734,8 , 734,8 , 119,10 , 10,17 , 37,5 , 8,10 , 10371,60 , 10371,60 , 85,14 , 10371,60 , 10371,60 , 85,14 , 0,2 , 0,2 , 675,5 , 936,51 , 22,23 , {67,68,70}, 214,2 , 14112,55 , 8,5 , 4,0 , 4108,9 , 4117,32 , 2, 1, 1, 6, 7 }, // Swahili/Latin/Congo Kinshasa - { 113, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 734,8 , 734,8 , 119,10 , 10,17 , 37,5 , 8,10 , 10371,60 , 10371,60 , 85,14 , 10371,60 , 10371,60 , 85,14 , 0,2 , 0,2 , 675,5 , 936,51 , 22,23 , {75,69,83}, 2,3 , 14167,58 , 8,5 , 4,0 , 4108,9 , 1191,5 , 2, 1, 7, 6, 7 }, // Swahili/Latin/Kenya - { 113, 7, 221, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 734,8 , 734,8 , 119,10 , 10,17 , 37,5 , 8,10 , 10371,60 , 10371,60 , 85,14 , 10371,60 , 10371,60 , 85,14 , 0,2 , 0,2 , 675,5 , 936,51 , 22,23 , {85,71,88}, 197,3 , 14225,61 , 8,5 , 4,0 , 4108,9 , 1689,6 , 0, 0, 1, 7, 7 }, // Swahili/Latin/Uganda + { 112, 7, 101, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 709,13 , 722,12 , 269,6 , 10,17 , 254,4 , 258,9 , 10299,28 , 10327,44 , 4697,14 , 10299,28 , 10327,44 , 4697,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,68,82}, 244,2 , 14008,37 , 4,4 , 4,0 , 4098,10 , 0,0 , 2, 0, 7, 6, 7 }, // Sundanese/Latin/Indonesia + { 113, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 734,8 , 734,8 , 119,10 , 10,17 , 37,5 , 8,10 , 10371,60 , 10371,60 , 85,14 , 10371,60 , 10371,60 , 85,14 , 0,2 , 0,2 , 655,5 , 874,51 , 22,23 , {84,90,83}, 192,3 , 14045,67 , 8,5 , 4,0 , 4108,9 , 1624,8 , 2, 0, 1, 6, 7 }, // Swahili/Latin/Tanzania + { 113, 7, 49, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 734,8 , 734,8 , 119,10 , 10,17 , 37,5 , 8,10 , 10371,60 , 10371,60 , 85,14 , 10371,60 , 10371,60 , 85,14 , 0,2 , 0,2 , 655,5 , 874,51 , 22,23 , {67,68,70}, 216,2 , 14112,55 , 8,5 , 4,0 , 4108,9 , 4117,32 , 2, 1, 1, 6, 7 }, // Swahili/Latin/Congo Kinshasa + { 113, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 734,8 , 734,8 , 119,10 , 10,17 , 37,5 , 8,10 , 10371,60 , 10371,60 , 85,14 , 10371,60 , 10371,60 , 85,14 , 0,2 , 0,2 , 655,5 , 874,51 , 22,23 , {75,69,83}, 2,3 , 14167,58 , 8,5 , 4,0 , 4108,9 , 1191,5 , 2, 1, 7, 6, 7 }, // Swahili/Latin/Kenya + { 113, 7, 221, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 734,8 , 734,8 , 119,10 , 10,17 , 37,5 , 8,10 , 10371,60 , 10371,60 , 85,14 , 10371,60 , 10371,60 , 85,14 , 0,2 , 0,2 , 655,5 , 874,51 , 22,23 , {85,71,88}, 197,3 , 14225,61 , 8,5 , 4,0 , 4108,9 , 1689,6 , 0, 0, 1, 7, 7 }, // Swahili/Latin/Uganda { 114, 7, 205, 44, 160, 59, 37, 48, 8722, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 742,9 , 742,9 , 53,10 , 97,16 , 37,5 , 8,10 , 10431,29 , 10460,50 , 2320,14 , 10431,29 , 10460,50 , 2320,14 , 320,2 , 286,2 , 45,4 , 5,17 , 22,23 , {83,69,75}, 190,2 , 14286,45 , 19,5 , 4,0 , 4149,7 , 4156,7 , 2, 0, 1, 6, 7 }, // Swedish/Latin/Sweden { 114, 7, 73, 44, 160, 59, 37, 48, 8722, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 742,9 , 742,9 , 53,10 , 97,16 , 37,5 , 8,10 , 10431,29 , 10460,50 , 2320,14 , 10431,29 , 10460,50 , 2320,14 , 320,2 , 286,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9130,19 , 19,5 , 4,0 , 4149,7 , 1088,7 , 2, 1, 1, 6, 7 }, // Swedish/Latin/Finland { 114, 7, 248, 44, 160, 59, 37, 48, 8722, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 742,9 , 742,9 , 53,10 , 97,16 , 37,5 , 8,10 , 10431,29 , 10460,50 , 2320,14 , 10431,29 , 10460,50 , 2320,14 , 320,2 , 286,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 9130,19 , 19,5 , 4,0 , 4149,7 , 4163,5 , 2, 1, 1, 6, 7 }, // Swedish/Latin/Aland Islands { 115, 7, 106, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Sardinian/Latin/Italy - { 116, 2, 209, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 27,8 , 553,18 , 37,5 , 8,10 , 10510,28 , 10538,55 , 10593,14 , 10510,28 , 10538,55 , 10593,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {84,74,83}, 322,4 , 14331,19 , 19,5 , 4,0 , 4168,6 , 4174,10 , 2, 1, 1, 6, 7 }, // Tajik/Cyrillic/Tajikistan - { 117, 27, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 751,13 , 751,13 , 269,6 , 192,18 , 393,7 , 437,12 , 10607,39 , 10646,49 , 10695,20 , 10607,39 , 10646,49 , 10695,20 , 322,8 , 288,8 , 987,7 , 5,17 , 22,23 , {73,78,82}, 121,1 , 14350,49 , 4,4 , 13,6 , 4184,5 , 4189,7 , 2, 1, 7, 7, 7 }, // Tamil/Tamil/India - { 117, 27, 130, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 751,13 , 751,13 , 269,6 , 192,18 , 393,7 , 437,12 , 10607,39 , 10646,49 , 10695,20 , 10607,39 , 10646,49 , 10695,20 , 322,8 , 288,8 , 987,7 , 5,17 , 22,23 , {77,89,82}, 174,2 , 14399,61 , 4,4 , 13,6 , 4184,5 , 4196,7 , 2, 1, 1, 6, 7 }, // Tamil/Tamil/Malaysia - { 117, 27, 190, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 751,13 , 751,13 , 269,6 , 192,18 , 393,7 , 437,12 , 10607,39 , 10646,49 , 10695,20 , 10607,39 , 10646,49 , 10695,20 , 322,8 , 288,8 , 987,7 , 5,17 , 22,23 , {83,71,68}, 6,1 , 14460,61 , 4,4 , 13,6 , 4184,5 , 4203,11 , 2, 1, 7, 6, 7 }, // Tamil/Tamil/Singapore - { 117, 27, 198, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 751,13 , 751,13 , 269,6 , 192,18 , 37,5 , 8,10 , 10607,39 , 10646,49 , 10695,20 , 10607,39 , 10646,49 , 10695,20 , 322,8 , 288,8 , 987,7 , 5,17 , 22,23 , {76,75,82}, 326,3 , 14521,49 , 4,4 , 13,6 , 4184,5 , 4214,6 , 2, 1, 1, 6, 7 }, // Tamil/Tamil/Sri Lanka + { 116, 2, 209, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 27,8 , 553,18 , 37,5 , 8,10 , 10510,28 , 10538,55 , 10593,14 , 10510,28 , 10538,55 , 10593,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {84,74,83}, 324,4 , 14331,19 , 19,5 , 4,0 , 4168,6 , 4174,10 , 2, 1, 1, 6, 7 }, // Tajik/Cyrillic/Tajikistan + { 117, 27, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 751,13 , 751,13 , 269,6 , 192,18 , 393,7 , 437,12 , 10607,39 , 10646,49 , 10695,20 , 10607,39 , 10646,49 , 10695,20 , 322,8 , 288,8 , 925,7 , 5,17 , 22,23 , {73,78,82}, 121,1 , 14350,49 , 4,4 , 13,6 , 4184,5 , 4189,7 , 2, 1, 7, 7, 7 }, // Tamil/Tamil/India + { 117, 27, 130, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 751,13 , 751,13 , 269,6 , 192,18 , 393,7 , 437,12 , 10607,39 , 10646,49 , 10695,20 , 10607,39 , 10646,49 , 10695,20 , 322,8 , 288,8 , 925,7 , 5,17 , 22,23 , {77,89,82}, 174,2 , 14399,61 , 4,4 , 13,6 , 4184,5 , 4196,7 , 2, 1, 1, 6, 7 }, // Tamil/Tamil/Malaysia + { 117, 27, 190, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 751,13 , 751,13 , 269,6 , 192,18 , 393,7 , 437,12 , 10607,39 , 10646,49 , 10695,20 , 10607,39 , 10646,49 , 10695,20 , 322,8 , 288,8 , 925,7 , 5,17 , 22,23 , {83,71,68}, 6,1 , 14460,61 , 4,4 , 13,6 , 4184,5 , 4203,11 , 2, 1, 7, 6, 7 }, // Tamil/Tamil/Singapore + { 117, 27, 198, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 751,13 , 751,13 , 269,6 , 192,18 , 37,5 , 8,10 , 10607,39 , 10646,49 , 10695,20 , 10607,39 , 10646,49 , 10695,20 , 322,8 , 288,8 , 925,7 , 5,17 , 22,23 , {76,75,82}, 328,3 , 14521,49 , 4,4 , 13,6 , 4184,5 , 4214,6 , 2, 1, 1, 6, 7 }, // Tamil/Tamil/Sri Lanka { 118, 2, 178, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 764,9 , 764,9 , 495,10 , 1233,23 , 55,4 , 59,9 , 10715,36 , 10751,56 , 10807,14 , 10715,36 , 10751,56 , 10807,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {82,85,66}, 123,1 , 14570,21 , 19,5 , 4,0 , 4220,5 , 3535,6 , 2, 1, 1, 6, 7 }, // Tatar/Cyrillic/Russia - { 119, 28, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 773,11 , 773,11 , 339,8 , 1256,18 , 18,7 , 25,12 , 10821,32 , 10853,60 , 10913,18 , 10821,32 , 10853,60 , 10913,18 , 0,2 , 0,2 , 994,7 , 1001,29 , 22,23 , {73,78,82}, 121,1 , 14591,26 , 4,4 , 13,6 , 4225,6 , 4231,8 , 2, 1, 7, 7, 7 }, // Telugu/Telugu/India - { 120, 30, 211, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 784,5 , 784,5 , 789,8 , 797,7 , 269,6 , 1274,19 , 37,5 , 449,28 , 10931,23 , 10954,68 , 11022,16 , 10931,23 , 10954,68 , 11022,16 , 330,10 , 296,10 , 1030,4 , 5,17 , 22,23 , {84,72,66}, 329,1 , 14617,16 , 4,4 , 13,6 , 4239,3 , 4239,3 , 2, 1, 7, 6, 7 }, // Thai/Thai/Thailand + { 119, 28, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 773,11 , 773,11 , 339,8 , 1256,18 , 18,7 , 25,12 , 10821,32 , 10853,60 , 10913,18 , 10821,32 , 10853,60 , 10913,18 , 0,2 , 0,2 , 932,7 , 939,29 , 22,23 , {73,78,82}, 121,1 , 14591,26 , 4,4 , 13,6 , 4225,6 , 4231,8 , 2, 1, 7, 7, 7 }, // Telugu/Telugu/India + { 120, 30, 211, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 784,5 , 784,5 , 789,8 , 797,7 , 269,6 , 1274,19 , 37,5 , 449,28 , 10931,23 , 10954,68 , 11022,16 , 10931,23 , 10954,68 , 11022,16 , 330,10 , 296,10 , 968,4 , 5,17 , 22,23 , {84,72,66}, 331,1 , 14617,16 , 4,4 , 13,6 , 4239,3 , 4239,3 , 2, 1, 7, 6, 7 }, // Thai/Thai/Thailand { 121, 31, 44, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 1293,23 , 18,7 , 25,12 , 11038,51 , 11089,79 , 11168,27 , 11038,51 , 11089,79 , 11168,27 , 340,7 , 306,8 , 45,4 , 5,17 , 22,23 , {67,78,89}, 133,1 , 14633,13 , 8,5 , 4,0 , 4242,8 , 4250,6 , 2, 1, 7, 6, 7 }, // Tibetan/Tibetan/China { 121, 31, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 1293,23 , 18,7 , 25,12 , 11038,51 , 11089,79 , 11168,27 , 11038,51 , 11089,79 , 11168,27 , 340,7 , 306,8 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 14646,19 , 8,5 , 4,0 , 4242,8 , 4256,7 , 2, 1, 7, 7, 7 }, // Tibetan/Tibetan/India { 122, 14, 69, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 27,8 , 1316,23 , 18,7 , 25,12 , 11195,21 , 11216,29 , 11245,14 , 11195,21 , 11216,29 , 11259,14 , 347,12 , 314,12 , 45,4 , 5,17 , 22,23 , {69,84,66}, 0,2 , 14665,16 , 4,4 , 4,0 , 4263,3 , 92,5 , 2, 1, 7, 6, 7 }, // Tigrinya/Ethiopic/Ethiopia { 122, 14, 67, 46, 44, 59, 37, 48, 45, 43, 101, 8216, 8217, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 27,8 , 1316,23 , 18,7 , 25,12 , 11195,21 , 11216,29 , 11259,14 , 11195,21 , 11216,29 , 11259,14 , 347,12 , 314,12 , 45,4 , 5,17 , 22,23 , {69,82,78}, 41,3 , 0,7 , 4,4 , 4,0 , 4263,3 , 4266,4 , 2, 1, 1, 6, 7 }, // Tigrinya/Ethiopic/Eritrea - { 123, 7, 214, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 804,8 , 804,8 , 804,8 , 804,8 , 269,6 , 97,16 , 18,7 , 25,12 , 11273,29 , 11302,60 , 11362,14 , 11273,29 , 11302,60 , 11362,14 , 359,10 , 326,6 , 1034,5 , 1039,59 , 1098,65 , {84,79,80}, 195,2 , 14681,41 , 8,5 , 4,0 , 4270,13 , 1639,5 , 2, 1, 1, 6, 7 }, // Tongan/Latin/Tonga + { 123, 7, 214, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 804,8 , 804,8 , 804,8 , 804,8 , 269,6 , 97,16 , 18,7 , 25,12 , 11273,29 , 11302,60 , 11362,14 , 11273,29 , 11302,60 , 11362,14 , 359,10 , 326,6 , 972,5 , 977,59 , 1036,65 , {84,79,80}, 195,2 , 14681,41 , 8,5 , 4,0 , 4270,13 , 1639,5 , 2, 1, 1, 6, 7 }, // Tongan/Latin/Tonga { 124, 7, 195, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {90,65,82}, 5,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Tsonga/Latin/South Africa - { 125, 7, 217, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 812,8 , 812,8 , 1339,9 , 1348,16 , 37,5 , 8,10 , 11376,28 , 11404,54 , 11458,14 , 11376,28 , 11404,54 , 11458,14 , 369,2 , 332,2 , 199,4 , 5,17 , 22,23 , {84,82,89}, 256,1 , 14722,40 , 4,4 , 13,6 , 4283,6 , 4289,7 , 2, 1, 1, 6, 7 }, // Turkish/Latin/Turkey - { 125, 7, 56, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 812,8 , 812,8 , 1339,9 , 1348,16 , 18,7 , 25,12 , 11376,28 , 11404,54 , 11458,14 , 11376,28 , 11404,54 , 11458,14 , 369,2 , 332,2 , 199,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 4,4 , 13,6 , 4283,6 , 4296,6 , 2, 1, 1, 6, 7 }, // Turkish/Latin/Cyprus - { 126, 7, 218, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8220, 8221, 0,6 , 0,6 , 820,8 , 820,8 , 495,10 , 1348,16 , 37,5 , 8,10 , 11472,28 , 11500,54 , 11554,14 , 11568,28 , 11596,54 , 11554,14 , 371,13 , 334,14 , 1163,4 , 5,17 , 22,23 , {84,77,84}, 330,3 , 14762,49 , 19,5 , 4,0 , 4302,12 , 4314,12 , 2, 1, 1, 6, 7 }, // Turkmen/Latin/Turkmenistan - { 128, 1, 44, 46, 44, 59, 37, 48, 45, 43, 101, 187, 171, 8250, 8249, 0,6 , 0,6 , 196,10 , 206,9 , 53,10 , 1364,17 , 18,7 , 25,12 , 11650,21 , 11671,55 , 11726,14 , 11650,21 , 11671,55 , 11726,14 , 384,12 , 348,12 , 45,4 , 5,17 , 22,23 , {67,78,89}, 247,1 , 14811,40 , 4,4 , 13,6 , 4326,8 , 4334,5 , 2, 1, 7, 6, 7 }, // Uighur/Arabic/China - { 129, 2, 222, 44, 160, 59, 37, 48, 45, 43, 1077, 171, 187, 8222, 8220, 0,6 , 0,6 , 134,7 , 134,7 , 156,8 , 1381,22 , 37,5 , 8,10 , 1454,21 , 11740,56 , 11796,14 , 1454,21 , 11740,56 , 11796,14 , 396,2 , 360,2 , 1167,5 , 728,17 , 22,23 , {85,65,72}, 296,1 , 14851,95 , 19,5 , 4,0 , 4339,10 , 4349,7 , 2, 1, 1, 6, 7 }, // Ukrainian/Cyrillic/Ukraine - { 130, 1, 163, 46, 44, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 556,6 , 556,6 , 828,10 , 838,9 , 269,6 , 1403,18 , 18,7 , 25,12 , 11810,36 , 11810,36 , 85,14 , 11810,36 , 11810,36 , 85,14 , 0,2 , 0,2 , 1172,4 , 1176,20 , 22,23 , {80,75,82}, 176,2 , 14946,49 , 4,4 , 13,6 , 4356,4 , 3251,7 , 2, 0, 7, 6, 7 }, // Urdu/Arabic/Pakistan - { 130, 1, 100, 1643, 1644, 59, 37, 1776, 45, 43, 101, 8221, 8220, 8217, 8216, 556,6 , 556,6 , 828,10 , 838,9 , 269,6 , 1403,18 , 18,7 , 25,12 , 11810,36 , 11810,36 , 85,14 , 11810,36 , 11810,36 , 85,14 , 0,2 , 0,2 , 1172,4 , 1176,20 , 22,23 , {73,78,82}, 121,1 , 14995,42 , 4,4 , 13,6 , 4356,4 , 4360,5 , 2, 1, 7, 7, 7 }, // Urdu/Arabic/India - { 131, 7, 228, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8217, 8216, 0,6 , 0,6 , 847,8 , 847,8 , 27,8 , 1421,18 , 37,5 , 198,11 , 11846,32 , 11878,61 , 11939,14 , 11846,32 , 11878,61 , 11939,14 , 398,2 , 362,2 , 199,4 , 5,17 , 22,23 , {85,90,83}, 333,4 , 15037,58 , 19,5 , 4,0 , 4365,6 , 4371,11 , 2, 0, 1, 6, 7 }, // Uzbek/Latin/Uzbekistan - { 131, 1, 1, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 394,8 , 1439,33 , 55,4 , 198,11 , 11953,21 , 7794,49 , 85,14 , 11953,21 , 7794,49 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {65,70,78}, 272,1 , 15095,13 , 19,5 , 4,0 , 4382,6 , 3242,9 , 0, 0, 6, 4, 5 }, // Uzbek/Arabic/Afghanistan - { 131, 2, 228, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 27,8 , 696,19 , 37,5 , 87,12 , 11974,28 , 12002,53 , 12055,14 , 11974,28 , 12002,53 , 12055,14 , 400,2 , 364,2 , 45,4 , 5,17 , 22,23 , {85,90,83}, 337,3 , 15108,49 , 19,5 , 4,0 , 4388,7 , 4395,10 , 2, 0, 1, 6, 7 }, // Uzbek/Cyrillic/Uzbekistan - { 132, 7, 232, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 855,8 , 855,8 , 119,10 , 192,18 , 37,5 , 8,10 , 12069,33 , 12102,55 , 12157,21 , 12069,33 , 12102,55 , 12157,21 , 402,2 , 366,2 , 45,4 , 5,17 , 22,23 , {86,78,68}, 340,1 , 15157,33 , 19,5 , 4,0 , 4405,10 , 4415,8 , 0, 0, 1, 6, 7 }, // Vietnamese/Latin/Vietnam + { 125, 7, 217, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 812,8 , 812,8 , 1339,9 , 1348,16 , 37,5 , 8,10 , 11376,28 , 11404,54 , 11458,14 , 11376,28 , 11404,54 , 11458,14 , 369,2 , 332,2 , 187,4 , 5,17 , 22,23 , {84,82,89}, 258,1 , 14722,40 , 4,4 , 13,6 , 4283,6 , 4289,7 , 2, 1, 1, 6, 7 }, // Turkish/Latin/Turkey + { 125, 7, 56, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 812,8 , 812,8 , 1339,9 , 1348,16 , 18,7 , 25,12 , 11376,28 , 11404,54 , 11458,14 , 11376,28 , 11404,54 , 11458,14 , 369,2 , 332,2 , 187,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 4,4 , 13,6 , 4283,6 , 4296,6 , 2, 1, 1, 6, 7 }, // Turkish/Latin/Cyprus + { 126, 7, 218, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8220, 8221, 0,6 , 0,6 , 820,8 , 820,8 , 495,10 , 1348,16 , 37,5 , 8,10 , 11472,28 , 11500,54 , 11554,14 , 11568,28 , 11596,54 , 11554,14 , 371,13 , 334,14 , 1101,4 , 5,17 , 22,23 , {84,77,84}, 332,3 , 14762,49 , 19,5 , 4,0 , 4302,12 , 4314,12 , 2, 1, 1, 6, 7 }, // Turkmen/Latin/Turkmenistan + { 128, 1, 44, 46, 44, 59, 37, 48, 45, 43, 101, 187, 171, 8250, 8249, 0,6 , 0,6 , 196,10 , 206,9 , 53,10 , 1364,17 , 18,7 , 25,12 , 11650,21 , 11671,55 , 11726,14 , 11650,21 , 11671,55 , 11726,14 , 384,12 , 348,12 , 45,4 , 5,17 , 22,23 , {67,78,89}, 249,1 , 14811,40 , 4,4 , 13,6 , 4326,8 , 4334,5 , 2, 1, 7, 6, 7 }, // Uighur/Arabic/China + { 129, 2, 222, 44, 160, 59, 37, 48, 45, 43, 1077, 171, 187, 8222, 8220, 0,6 , 0,6 , 134,7 , 134,7 , 156,8 , 1381,22 , 37,5 , 8,10 , 1454,21 , 11740,56 , 11796,14 , 1454,21 , 11740,56 , 11796,14 , 396,2 , 360,2 , 1105,5 , 708,17 , 22,23 , {85,65,72}, 298,1 , 14851,95 , 19,5 , 4,0 , 4339,10 , 4349,7 , 2, 1, 1, 6, 7 }, // Ukrainian/Cyrillic/Ukraine + { 130, 1, 163, 46, 44, 59, 37, 48, 45, 43, 101, 8221, 8220, 8217, 8216, 556,6 , 556,6 , 828,10 , 838,9 , 269,6 , 1403,18 , 18,7 , 25,12 , 11810,36 , 11810,36 , 85,14 , 11810,36 , 11810,36 , 85,14 , 0,2 , 0,2 , 1110,4 , 1114,20 , 22,23 , {80,75,82}, 176,2 , 14946,49 , 4,4 , 13,6 , 4356,4 , 3251,7 , 2, 0, 7, 6, 7 }, // Urdu/Arabic/Pakistan + { 130, 1, 100, 1643, 1644, 59, 37, 1776, 45, 43, 101, 8221, 8220, 8217, 8216, 556,6 , 556,6 , 828,10 , 838,9 , 269,6 , 1403,18 , 18,7 , 25,12 , 11810,36 , 11810,36 , 85,14 , 11810,36 , 11810,36 , 85,14 , 0,2 , 0,2 , 1110,4 , 1114,20 , 22,23 , {73,78,82}, 121,1 , 14995,42 , 4,4 , 13,6 , 4356,4 , 4360,5 , 2, 1, 7, 7, 7 }, // Urdu/Arabic/India + { 131, 7, 228, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8217, 8216, 0,6 , 0,6 , 847,8 , 847,8 , 27,8 , 1421,18 , 37,5 , 198,11 , 11846,32 , 11878,61 , 11939,14 , 11846,32 , 11878,61 , 11939,14 , 398,2 , 362,2 , 187,4 , 5,17 , 22,23 , {85,90,83}, 335,4 , 15037,58 , 19,5 , 4,0 , 4365,6 , 4371,11 , 2, 0, 1, 6, 7 }, // Uzbek/Latin/Uzbekistan + { 131, 1, 1, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 394,8 , 1439,33 , 55,4 , 198,11 , 11953,21 , 7794,49 , 85,14 , 11953,21 , 7794,49 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {65,70,78}, 274,1 , 15095,13 , 19,5 , 4,0 , 4382,6 , 3242,9 , 0, 0, 6, 4, 5 }, // Uzbek/Arabic/Afghanistan + { 131, 2, 228, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 27,8 , 696,19 , 37,5 , 87,12 , 11974,28 , 12002,53 , 12055,14 , 11974,28 , 12002,53 , 12055,14 , 400,2 , 364,2 , 45,4 , 5,17 , 22,23 , {85,90,83}, 339,3 , 15108,49 , 19,5 , 4,0 , 4388,7 , 4395,10 , 2, 0, 1, 6, 7 }, // Uzbek/Cyrillic/Uzbekistan + { 132, 7, 232, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 855,8 , 855,8 , 119,10 , 192,18 , 37,5 , 8,10 , 12069,33 , 12102,55 , 12157,21 , 12069,33 , 12102,55 , 12157,21 , 402,2 , 366,2 , 45,4 , 5,17 , 22,23 , {86,78,68}, 342,1 , 15157,33 , 19,5 , 4,0 , 4405,10 , 4415,8 , 0, 0, 1, 6, 7 }, // Vietnamese/Latin/Vietnam { 133, 7, 260, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Volapuk/Latin/World - { 134, 7, 224, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 863,11 , 874,10 , 27,8 , 10,17 , 37,5 , 8,10 , 12178,29 , 12207,77 , 12284,15 , 12299,30 , 12207,77 , 12284,15 , 404,2 , 368,2 , 1196,7 , 5,17 , 22,23 , {71,66,80}, 119,1 , 15190,91 , 4,4 , 13,6 , 4423,7 , 4430,16 , 2, 1, 1, 6, 7 }, // Welsh/Latin/United Kingdom - { 135, 7, 187, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 528,10 , 1472,17 , 37,5 , 8,10 , 12329,28 , 12357,50 , 12329,28 , 12329,28 , 12357,50 , 12329,28 , 406,3 , 370,3 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 15281,65 , 8,5 , 4,0 , 4446,5 , 4451,8 , 0, 0, 1, 6, 7 }, // Wolof/Latin/Senegal + { 134, 7, 224, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 863,11 , 874,10 , 27,8 , 10,17 , 37,5 , 8,10 , 12178,29 , 12207,77 , 12284,15 , 12299,30 , 12207,77 , 12284,15 , 404,2 , 368,2 , 1134,7 , 5,17 , 22,23 , {71,66,80}, 119,1 , 15190,91 , 4,4 , 13,6 , 4423,7 , 4430,16 , 2, 1, 1, 6, 7 }, // Welsh/Latin/United Kingdom + { 135, 7, 187, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 528,10 , 1472,17 , 37,5 , 8,10 , 12329,28 , 12357,50 , 12329,28 , 12329,28 , 12357,50 , 12329,28 , 406,3 , 370,3 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 15281,65 , 8,5 , 4,0 , 4446,5 , 4451,8 , 0, 0, 1, 6, 7 }, // Wolof/Latin/Senegal { 136, 7, 195, 46, 160, 59, 37, 48, 45, 43, 101, 8216, 8217, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 12407,28 , 12435,61 , 85,14 , 12407,28 , 12435,61 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {90,65,82}, 5,1 , 15346,79 , 4,4 , 4,0 , 4459,8 , 4467,15 , 2, 1, 7, 6, 7 }, // Xhosa/Latin/South Africa { 137, 18, 260, 46, 44, 59, 37, 48, 45, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 884,9 , 884,9 , 27,8 , 1489,19 , 37,5 , 8,10 , 12496,54 , 12496,54 , 85,14 , 12496,54 , 12496,54 , 85,14 , 409,11 , 373,10 , 45,4 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 8,5 , 4,0 , 4482,6 , 4488,5 , 2, 1, 1, 6, 7 }, // Yiddish/Hebrew/World - { 138, 7, 157, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 1508,16 , 477,3 , 8,10 , 12550,33 , 12583,44 , 12627,14 , 12550,33 , 12641,69 , 12627,14 , 420,5 , 383,5 , 1203,11 , 1214,37 , 22,23 , {78,71,78}, 178,1 , 15425,35 , 4,4 , 13,6 , 4493,10 , 4503,8 , 2, 1, 1, 6, 7 }, // Yoruba/Latin/Nigeria - { 138, 7, 23, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 1508,16 , 477,3 , 8,10 , 12710,33 , 12743,44 , 12787,14 , 12710,33 , 12801,69 , 12787,14 , 425,5 , 388,5 , 1251,11 , 1214,37 , 22,23 , {88,79,70}, 207,3 , 15460,64 , 4,4 , 13,6 , 4493,10 , 4511,6 , 0, 0, 1, 6, 7 }, // Yoruba/Latin/Benin + { 138, 7, 157, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 1508,16 , 477,3 , 8,10 , 12550,33 , 12583,44 , 12627,14 , 12550,33 , 12641,69 , 12627,14 , 420,5 , 383,5 , 1141,11 , 1152,37 , 22,23 , {78,71,78}, 178,1 , 15425,35 , 4,4 , 13,6 , 4493,10 , 4503,8 , 2, 1, 1, 6, 7 }, // Yoruba/Latin/Nigeria + { 138, 7, 23, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 1508,16 , 477,3 , 8,10 , 12710,33 , 12743,44 , 12787,14 , 12710,33 , 12801,69 , 12787,14 , 425,5 , 388,5 , 1189,11 , 1152,37 , 22,23 , {88,79,70}, 207,5 , 15460,64 , 4,4 , 13,6 , 4493,10 , 4511,6 , 0, 0, 1, 6, 7 }, // Yoruba/Latin/Benin { 140, 7, 195, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 893,9 , 902,8 , 547,6 , 35,18 , 37,5 , 8,10 , 12870,28 , 12898,74 , 12972,14 , 12870,28 , 12898,74 , 12972,14 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {90,65,82}, 5,1 , 15524,67 , 4,4 , 13,6 , 4517,7 , 4524,17 , 2, 1, 7, 6, 7 }, // Zulu/Latin/South Africa { 141, 7, 161, 44, 160, 59, 37, 48, 8722, 43, 101, 171, 187, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 495,10 , 478,17 , 37,5 , 480,16 , 12986,28 , 13014,51 , 2320,14 , 13065,28 , 13014,51 , 2320,14 , 430,9 , 393,11 , 45,4 , 5,17 , 22,23 , {78,79,75}, 190,2 , 10090,44 , 19,5 , 4,0 , 4541,13 , 4554,5 , 2, 0, 1, 6, 7 }, // Norwegian Nynorsk/Latin/Norway - { 142, 7, 27, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8221, 8216, 8217, 0,6 , 0,6 , 159,7 , 159,7 , 1524,11 , 450,19 , 37,5 , 8,10 , 2043,28 , 2071,58 , 2129,14 , 2043,28 , 2071,58 , 2143,14 , 439,10 , 404,7 , 298,7 , 5,17 , 22,23 , {66,65,77}, 144,2 , 12015,170 , 19,5 , 4,0 , 4559,8 , 629,19 , 2, 1, 1, 6, 7 }, // Bosnian/Latin/Bosnia And Herzegowina - { 142, 2, 27, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 9127,28 , 9155,56 , 8974,14 , 9127,28 , 9155,56 , 8974,14 , 260,11 , 411,13 , 45,4 , 5,17 , 22,23 , {66,65,77}, 300,2 , 15591,152 , 19,5 , 4,0 , 4567,8 , 3649,19 , 2, 1, 1, 6, 7 }, // Bosnian/Cyrillic/Bosnia And Herzegowina + { 142, 7, 27, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8221, 8216, 8217, 0,6 , 0,6 , 159,7 , 159,7 , 1524,11 , 450,19 , 37,5 , 8,10 , 2043,28 , 2071,58 , 2129,14 , 2043,28 , 2071,58 , 2143,14 , 439,10 , 404,7 , 286,7 , 5,17 , 22,23 , {66,65,77}, 144,2 , 12015,170 , 19,5 , 4,0 , 4559,8 , 629,19 , 2, 1, 1, 6, 7 }, // Bosnian/Latin/Bosnia And Herzegowina + { 142, 2, 27, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 111,7 , 111,7 , 1091,7 , 1098,20 , 37,5 , 8,10 , 9127,28 , 9155,56 , 8974,14 , 9127,28 , 9155,56 , 8974,14 , 260,11 , 411,13 , 45,4 , 5,17 , 22,23 , {66,65,77}, 302,2 , 15591,152 , 19,5 , 4,0 , 4567,8 , 3649,19 , 2, 1, 1, 6, 7 }, // Bosnian/Cyrillic/Bosnia And Herzegowina { 143, 29, 131, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {77,86,82}, 0,0 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 5, 6, 7 }, // Divehi/Thaana/Maldives { 144, 7, 251, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 27,8 , 80,17 , 37,5 , 8,10 , 13093,30 , 13123,57 , 85,14 , 13093,30 , 13123,57 , 85,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {71,66,80}, 119,1 , 0,7 , 4,4 , 4,0 , 4575,5 , 4580,12 , 2, 1, 1, 6, 7 }, // Manx/Latin/Isle Of Man { 145, 7, 224, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 97,16 , 37,5 , 8,10 , 13180,28 , 13208,61 , 85,14 , 13180,28 , 13208,61 , 85,14 , 64,4 , 61,4 , 45,4 , 5,17 , 22,23 , {71,66,80}, 119,1 , 0,7 , 4,4 , 4,0 , 4592,8 , 4600,14 , 2, 1, 1, 6, 7 }, // Cornish/Latin/United Kingdom { 146, 7, 83, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 1535,8 , 1543,18 , 18,7 , 25,12 , 13269,28 , 13297,49 , 13346,14 , 13269,28 , 13297,49 , 13346,14 , 449,2 , 424,2 , 45,4 , 5,17 , 22,23 , {71,72,83}, 167,3 , 15743,17 , 4,4 , 4,0 , 4614,4 , 4618,5 , 2, 1, 1, 6, 7 }, // Akan/Latin/Ghana - { 147, 13, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 1561,6 , 97,16 , 18,7 , 25,12 , 13360,51 , 13360,51 , 13411,19 , 13360,51 , 13360,51 , 13430,20 , 0,2 , 0,2 , 1262,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 15760,19 , 4,4 , 13,6 , 4623,6 , 2666,4 , 2, 1, 7, 7, 7 }, // Konkani/Devanagari/India + { 147, 13, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 1561,6 , 97,16 , 18,7 , 25,12 , 13360,51 , 13360,51 , 13411,19 , 13360,51 , 13360,51 , 13430,20 , 0,2 , 0,2 , 1200,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 15760,19 , 4,4 , 13,6 , 4623,6 , 2666,4 , 2, 1, 7, 7, 7 }, // Konkani/Devanagari/India { 148, 7, 83, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {71,72,83}, 167,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Ga/Latin/Ghana { 149, 7, 157, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 910,9 , 734,8 , 269,6 , 10,17 , 37,5 , 8,10 , 13450,29 , 13479,54 , 85,14 , 13450,29 , 13479,54 , 85,14 , 451,7 , 426,7 , 45,4 , 5,17 , 22,23 , {78,71,78}, 178,1 , 15779,12 , 4,4 , 13,6 , 4629,4 , 4633,8 , 2, 1, 1, 6, 7 }, // Igbo/Latin/Nigeria { 150, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 13533,28 , 13561,74 , 13635,14 , 13533,28 , 13561,74 , 13635,14 , 458,9 , 433,7 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 15791,23 , 4,4 , 13,6 , 4641,7 , 1191,5 , 2, 1, 7, 6, 7 }, // Kamba/Latin/Kenya @@ -1733,15 +1730,15 @@ static const QLocaleData locale_data[] = { { 159, 7, 106, 44, 46, 59, 37, 48, 45, 43, 101, 8216, 8217, 8220, 8221, 0,6 , 0,6 , 250,7 , 250,7 , 27,8 , 1567,27 , 37,5 , 8,10 , 13649,28 , 13677,50 , 3107,14 , 13649,28 , 13677,50 , 3107,14 , 467,2 , 440,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3102,20 , 8,5 , 4,0 , 4648,6 , 4654,6 , 2, 1, 1, 6, 7 }, // Friulian/Latin/Italy { 160, 7, 195, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {90,65,82}, 5,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Venda/Latin/South Africa { 161, 7, 83, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 919,11 , 930,10 , 547,6 , 1594,23 , 496,12 , 508,17 , 13727,28 , 13755,44 , 13799,14 , 13727,28 , 13755,44 , 13799,14 , 469,3 , 442,5 , 45,4 , 5,17 , 22,23 , {71,72,83}, 167,3 , 15814,37 , 4,4 , 13,6 , 4660,6 , 4666,12 , 2, 1, 1, 6, 7 }, // Ewe/Latin/Ghana - { 161, 7, 212, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 919,11 , 930,10 , 547,6 , 1594,23 , 37,5 , 8,10 , 13727,28 , 13755,44 , 13799,14 , 13727,28 , 13755,44 , 13799,14 , 469,3 , 442,5 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 15851,106 , 4,4 , 13,6 , 4660,6 , 4678,11 , 0, 0, 1, 6, 7 }, // Ewe/Latin/Togo + { 161, 7, 212, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 919,11 , 930,10 , 547,6 , 1594,23 , 37,5 , 8,10 , 13727,28 , 13755,44 , 13799,14 , 13727,28 , 13755,44 , 13799,14 , 469,3 , 442,5 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 15851,106 , 4,4 , 13,6 , 4660,6 , 4678,11 , 0, 0, 1, 6, 7 }, // Ewe/Latin/Togo { 162, 14, 69, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,84,66}, 0,0 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Walamo/Ethiopic/Ethiopia { 163, 7, 225, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 269,6 , 10,17 , 18,7 , 25,12 , 13813,21 , 13834,57 , 85,14 , 13813,21 , 13834,57 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,83,68}, 6,1 , 0,7 , 4,4 , 13,6 , 4689,14 , 4703,19 , 2, 1, 7, 6, 7 }, // Hawaiian/Latin/United States { 164, 7, 157, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {78,71,78}, 178,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Tyap/Latin/Nigeria { 165, 7, 129, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {77,87,75}, 0,0 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Nyanja/Latin/Malawi { 166, 7, 170, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 940,9 , 949,8 , 547,6 , 35,18 , 18,7 , 25,12 , 13891,28 , 13919,55 , 13891,28 , 13891,28 , 13919,55 , 13891,28 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {80,72,80}, 179,1 , 15957,58 , 4,4 , 13,6 , 4722,8 , 4730,9 , 2, 1, 7, 6, 7 }, // Filipino/Latin/Philippines - { 167, 7, 206, 46, 8217, 59, 37, 48, 8722, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 13974,28 , 14002,63 , 3695,14 , 13974,28 , 14002,63 , 3695,14 , 472,12 , 447,11 , 45,4 , 5,17 , 22,23 , {67,72,70}, 228,3 , 16015,55 , 19,5 , 4,0 , 4739,16 , 4755,7 , 2, 0, 1, 6, 7 }, // Swiss German/Latin/Switzerland + { 167, 7, 206, 46, 8217, 59, 37, 48, 8722, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 13974,28 , 14002,63 , 3695,14 , 13974,28 , 14002,63 , 3695,14 , 472,12 , 447,11 , 45,4 , 5,17 , 22,23 , {67,72,70}, 230,3 , 16015,55 , 19,5 , 4,0 , 4739,16 , 4755,7 , 2, 0, 1, 6, 7 }, // Swiss German/Latin/Switzerland { 167, 7, 74, 46, 8217, 59, 37, 48, 8722, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 13974,28 , 14002,63 , 3695,14 , 13974,28 , 14002,63 , 3695,14 , 472,12 , 447,11 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 4739,16 , 4762,10 , 2, 1, 1, 6, 7 }, // Swiss German/Latin/France - { 167, 7, 123, 46, 8217, 59, 37, 48, 8722, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 13974,28 , 14002,63 , 3695,14 , 13974,28 , 14002,63 , 3695,14 , 472,12 , 447,11 , 45,4 , 5,17 , 22,23 , {67,72,70}, 228,3 , 16015,55 , 19,5 , 4,0 , 4739,16 , 4772,13 , 2, 0, 1, 6, 7 }, // Swiss German/Latin/Liechtenstein + { 167, 7, 123, 46, 8217, 59, 37, 48, 8722, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 265,9 , 265,9 , 156,8 , 622,18 , 37,5 , 8,10 , 13974,28 , 14002,63 , 3695,14 , 13974,28 , 14002,63 , 3695,14 , 472,12 , 447,11 , 45,4 , 5,17 , 22,23 , {67,72,70}, 230,3 , 16015,55 , 19,5 , 4,0 , 4739,16 , 4772,13 , 2, 0, 1, 6, 7 }, // Swiss German/Latin/Liechtenstein { 168, 34, 44, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 18,7 , 25,12 , 14065,21 , 14086,28 , 14114,14 , 14065,21 , 14086,28 , 14114,14 , 484,2 , 458,2 , 45,4 , 5,17 , 22,23 , {67,78,89}, 133,1 , 0,7 , 8,5 , 4,0 , 4785,3 , 4788,2 , 2, 1, 7, 6, 7 }, // Sichuan Yi/Yi/China { 169, 7, 121, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {76,82,68}, 6,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Kpelle/Latin/Liberia { 170, 7, 82, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 455,8 , 455,8 , 365,7 , 1617,23 , 525,10 , 535,19 , 14128,28 , 14156,65 , 3695,14 , 14128,28 , 14156,65 , 3695,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 16070,15 , 19,5 , 4,0 , 4790,14 , 4804,11 , 2, 1, 1, 6, 7 }, // Low German/Latin/Germany @@ -1751,42 +1748,42 @@ static const QLocaleData locale_data[] = { { 173, 7, 161, 44, 160, 59, 37, 48, 8722, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 224,8 , 224,8 , 53,10 , 63,17 , 37,5 , 8,10 , 14221,33 , 14254,75 , 14329,14 , 14221,33 , 14254,75 , 14329,14 , 486,11 , 460,13 , 45,4 , 5,17 , 22,23 , {78,79,75}, 190,2 , 16085,63 , 19,5 , 4,0 , 4827,15 , 4842,5 , 2, 0, 1, 6, 7 }, // Northern Sami/Latin/Norway { 173, 7, 73, 44, 160, 59, 37, 48, 8722, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 224,8 , 224,8 , 495,10 , 97,16 , 37,5 , 8,10 , 14343,21 , 14364,70 , 14434,14 , 14343,21 , 14364,70 , 14434,14 , 497,2 , 473,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 16148,23 , 19,5 , 4,0 , 4827,15 , 4847,6 , 2, 1, 1, 6, 7 }, // Northern Sami/Latin/Finland { 173, 7, 205, 44, 160, 59, 37, 48, 8722, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 224,8 , 224,8 , 53,10 , 63,17 , 37,5 , 8,10 , 14221,33 , 14254,75 , 14329,14 , 14221,33 , 14254,75 , 14329,14 , 486,11 , 460,13 , 45,4 , 5,17 , 22,23 , {83,69,75}, 190,2 , 16171,63 , 19,5 , 4,0 , 4827,15 , 4853,6 , 2, 0, 1, 6, 7 }, // Northern Sami/Latin/Sweden - { 174, 7, 208, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {84,87,68}, 341,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 7, 6, 7 }, // Taroko/Latin/Taiwan + { 174, 7, 208, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {84,87,68}, 343,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 7, 6, 7 }, // Taroko/Latin/Taiwan { 175, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 14448,28 , 14476,62 , 14538,14 , 14448,28 , 14476,62 , 14538,14 , 499,6 , 475,3 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 16234,24 , 4,4 , 13,6 , 4859,8 , 1191,5 , 2, 1, 7, 6, 7 }, // Gusii/Latin/Kenya { 176, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 14552,28 , 14580,105 , 14685,14 , 14552,28 , 14580,105 , 14685,14 , 505,10 , 478,10 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 16234,24 , 4,4 , 13,6 , 4867,7 , 1191,5 , 2, 1, 7, 6, 7 }, // Taita/Latin/Kenya - { 177, 7, 187, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 16258,26 , 19,5 , 4,0 , 4874,6 , 4451,8 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Senegal - { 177, 7, 34, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 16258,26 , 19,5 , 4,0 , 4874,6 , 4880,14 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Burkina Faso + { 177, 7, 187, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 16258,26 , 19,5 , 4,0 , 4874,6 , 4451,8 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Senegal + { 177, 7, 34, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 16258,26 , 19,5 , 4,0 , 4874,6 , 4880,14 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Burkina Faso { 177, 7, 37, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 16284,25 , 19,5 , 4,0 , 4874,6 , 4894,8 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Cameroon { 177, 7, 80, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 18,7 , 25,12 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {71,77,68}, 166,1 , 16309,20 , 19,5 , 4,0 , 4874,6 , 4902,6 , 2, 1, 1, 6, 7 }, // Fulah/Latin/Gambia { 177, 7, 83, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 18,7 , 25,12 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {71,72,83}, 167,3 , 0,7 , 19,5 , 4,0 , 4874,6 , 4908,5 , 2, 1, 1, 6, 7 }, // Fulah/Latin/Ghana - { 177, 7, 91, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {71,78,70}, 220,2 , 0,7 , 19,5 , 4,0 , 4874,6 , 4913,4 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Guinea - { 177, 7, 92, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 16258,26 , 19,5 , 4,0 , 4874,6 , 4917,12 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Guinea Bissau + { 177, 7, 91, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {71,78,70}, 222,2 , 0,7 , 19,5 , 4,0 , 4874,6 , 4913,4 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Guinea + { 177, 7, 92, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 16258,26 , 19,5 , 4,0 , 4874,6 , 4917,12 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Guinea Bissau { 177, 7, 121, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 18,7 , 25,12 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {76,82,68}, 6,1 , 16329,23 , 19,5 , 4,0 , 4874,6 , 4929,9 , 2, 1, 1, 6, 7 }, // Fulah/Latin/Liberia - { 177, 7, 136, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 18,7 , 25,12 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {77,82,85}, 223,2 , 16352,22 , 19,5 , 4,0 , 4874,6 , 4938,8 , 2, 1, 1, 6, 7 }, // Fulah/Latin/Mauritania - { 177, 7, 156, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 16258,26 , 19,5 , 4,0 , 4874,6 , 4946,6 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Niger + { 177, 7, 136, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 18,7 , 25,12 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {77,82,85}, 225,2 , 16352,22 , 19,5 , 4,0 , 4874,6 , 4938,8 , 2, 1, 1, 6, 7 }, // Fulah/Latin/Mauritania + { 177, 7, 156, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 16258,26 , 19,5 , 4,0 , 4874,6 , 4946,6 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Niger { 177, 7, 157, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {78,71,78}, 178,1 , 16374,23 , 19,5 , 4,0 , 4874,6 , 4952,9 , 2, 1, 1, 6, 7 }, // Fulah/Latin/Nigeria { 177, 7, 189, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 18,7 , 25,12 , 14699,28 , 14727,59 , 14786,14 , 14699,28 , 14727,59 , 14786,14 , 515,6 , 488,7 , 45,4 , 5,17 , 22,23 , {83,76,76}, 187,2 , 16397,25 , 19,5 , 4,0 , 4874,6 , 4961,11 , 0, 0, 1, 6, 7 }, // Fulah/Latin/Sierra Leone { 178, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 14800,28 , 14828,63 , 14891,14 , 14800,28 , 14828,63 , 14891,14 , 521,6 , 495,8 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 16422,23 , 4,4 , 13,6 , 4972,6 , 1191,5 , 2, 1, 7, 6, 7 }, // Kikuyu/Latin/Kenya { 179, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 14905,28 , 14933,105 , 15038,14 , 14905,28 , 14933,105 , 15038,14 , 527,7 , 503,5 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 16445,25 , 4,4 , 13,6 , 4978,8 , 1191,5 , 2, 1, 7, 6, 7 }, // Samburu/Latin/Kenya - { 180, 7, 146, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 669,27 , 37,5 , 8,10 , 15052,28 , 15080,55 , 15135,14 , 15052,28 , 15080,55 , 15135,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {77,90,78}, 282,3 , 16470,28 , 0,4 , 4,0 , 4986,4 , 3382,10 , 2, 1, 7, 6, 7 }, // Sena/Latin/Mozambique + { 180, 7, 146, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 669,27 , 37,5 , 8,10 , 15052,28 , 15080,55 , 15135,14 , 15052,28 , 15080,55 , 15135,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {77,90,78}, 284,3 , 16470,28 , 0,4 , 4,0 , 4986,4 , 3382,10 , 2, 1, 7, 6, 7 }, // Sena/Latin/Mozambique { 181, 7, 240, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 15149,28 , 15177,50 , 15227,14 , 15149,28 , 15177,50 , 15227,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,83,68}, 159,3 , 16498,24 , 4,4 , 13,6 , 4990,10 , 1819,8 , 2, 1, 7, 6, 7 }, // North Ndebele/Latin/Zimbabwe { 182, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 15241,29 , 15270,65 , 15335,14 , 15241,29 , 15270,65 , 15335,14 , 534,8 , 508,7 , 45,4 , 5,17 , 22,23 , {84,90,83}, 192,3 , 16522,25 , 4,4 , 4,0 , 5000,9 , 1624,8 , 2, 0, 1, 6, 7 }, // Rombo/Latin/Tanzania { 183, 9, 145, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 15349,30 , 15379,47 , 85,14 , 15349,30 , 15379,47 , 85,14 , 542,6 , 515,8 , 45,4 , 5,17 , 22,23 , {77,65,68}, 0,0 , 16547,21 , 0,4 , 4,0 , 5009,7 , 5016,6 , 2, 1, 1, 6, 7 }, // Tachelhit/Tifinagh/Morocco { 183, 7, 145, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 15426,30 , 15456,48 , 85,14 , 15426,30 , 15456,48 , 85,14 , 548,6 , 523,8 , 45,4 , 5,17 , 22,23 , {77,65,68}, 0,0 , 16568,21 , 0,4 , 4,0 , 5022,10 , 5032,6 , 2, 1, 1, 6, 7 }, // Tachelhit/Latin/Morocco - { 184, 7, 3, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 957,8 , 965,7 , 415,8 , 97,16 , 18,7 , 25,12 , 15504,28 , 15532,34 , 15566,14 , 15580,30 , 15610,51 , 15661,14 , 554,7 , 531,9 , 1266,7 , 1273,21 , 22,23 , {68,90,68}, 205,2 , 16589,57 , 0,4 , 4,0 , 5038,9 , 5047,8 , 2, 1, 6, 5, 6 }, // Kabyle/Latin/Algeria + { 184, 7, 3, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 957,8 , 965,7 , 415,8 , 97,16 , 18,7 , 25,12 , 15504,28 , 15532,34 , 15566,14 , 15580,30 , 15610,51 , 15661,14 , 554,7 , 531,9 , 1204,7 , 1211,21 , 22,23 , {68,90,68}, 205,2 , 16589,57 , 0,4 , 4,0 , 5038,9 , 5047,8 , 2, 1, 6, 5, 6 }, // Kabyle/Latin/Algeria { 185, 7, 221, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 15675,28 , 15703,74 , 15777,14 , 15675,28 , 15703,74 , 15777,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,71,88}, 197,3 , 16646,26 , 4,4 , 4,0 , 5055,10 , 1689,6 , 0, 0, 1, 7, 7 }, // Nyankole/Latin/Uganda { 186, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 15791,28 , 15819,82 , 15901,14 , 15791,28 , 15819,82 , 15901,14 , 561,7 , 540,7 , 45,4 , 5,17 , 22,23 , {84,90,83}, 192,3 , 16672,29 , 0,4 , 4,0 , 5065,6 , 5071,10 , 2, 0, 1, 6, 7 }, // Bena/Latin/Tanzania { 187, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 15915,28 , 15943,62 , 16005,14 , 15915,28 , 15943,62 , 16005,14 , 568,5 , 547,9 , 45,4 , 5,17 , 22,23 , {84,90,83}, 192,3 , 16701,27 , 4,4 , 4,0 , 5081,8 , 1624,8 , 2, 0, 1, 6, 7 }, // Vunjo/Latin/Tanzania - { 188, 7, 132, 46, 44, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 16019,28 , 16047,44 , 16091,14 , 16019,28 , 16047,44 , 16091,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 16728,24 , 4,4 , 13,6 , 5089,9 , 2188,4 , 0, 0, 1, 6, 7 }, // Bambara/Latin/Mali - { 188, 75, 132, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 1, 6, 7 }, // Bambara/Nko/Mali + { 188, 7, 132, 46, 44, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 16019,28 , 16047,44 , 16091,14 , 16019,28 , 16047,44 , 16091,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 16728,24 , 4,4 , 13,6 , 5089,9 , 2188,4 , 0, 0, 1, 6, 7 }, // Bambara/Latin/Mali + { 188, 75, 132, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 1, 6, 7 }, // Bambara/Nko/Mali { 189, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 16105,28 , 16133,64 , 16197,14 , 16105,28 , 16133,64 , 16197,14 , 573,2 , 556,2 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 16234,24 , 4,4 , 13,6 , 5098,6 , 1191,5 , 2, 1, 7, 6, 7 }, // Embu/Latin/Kenya - { 190, 12, 225, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 972,9 , 981,8 , 547,6 , 35,18 , 18,7 , 25,12 , 16211,28 , 16239,49 , 16288,14 , 16211,28 , 16239,49 , 16288,14 , 575,3 , 558,6 , 1294,6 , 5,17 , 22,23 , {85,83,68}, 6,1 , 16752,25 , 4,4 , 13,6 , 5104,3 , 5107,15 , 2, 1, 7, 6, 7 }, // Cherokee/Cherokee/United States + { 190, 12, 225, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 972,9 , 981,8 , 547,6 , 35,18 , 18,7 , 25,12 , 16211,28 , 16239,49 , 16288,14 , 16211,28 , 16239,49 , 16288,14 , 575,3 , 558,6 , 1232,6 , 5,17 , 22,23 , {85,83,68}, 6,1 , 16752,25 , 4,4 , 13,6 , 5104,3 , 5107,15 , 2, 1, 7, 6, 7 }, // Cherokee/Cherokee/United States { 191, 7, 137, 46, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 16302,27 , 16329,48 , 16377,14 , 16302,27 , 16329,48 , 16377,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {77,85,82}, 176,2 , 16777,21 , 8,5 , 4,0 , 5122,14 , 5136,5 , 2, 0, 1, 6, 7 }, // Morisyen/Latin/Mauritius { 192, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 16391,28 , 16419,133 , 15335,14 , 16391,28 , 16419,133 , 15335,14 , 578,4 , 564,5 , 45,4 , 5,17 , 22,23 , {84,90,83}, 192,3 , 16701,27 , 4,4 , 13,6 , 5141,10 , 1624,8 , 2, 0, 1, 6, 7 }, // Makonde/Latin/Tanzania { 193, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8221, 8221, 8217, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 16552,36 , 16588,63 , 16651,14 , 16552,36 , 16588,63 , 16651,14 , 582,3 , 569,3 , 45,4 , 5,17 , 22,23 , {84,90,83}, 192,3 , 16798,29 , 8,5 , 4,0 , 5151,8 , 5159,9 , 2, 0, 1, 6, 7 }, // Langi/Latin/Tanzania { 194, 7, 221, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 16665,28 , 16693,66 , 16759,14 , 16665,28 , 16693,66 , 16759,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,71,88}, 197,3 , 16827,26 , 0,4 , 4,0 , 5168,7 , 5175,7 , 0, 0, 1, 7, 7 }, // Ganda/Latin/Uganda { 195, 7, 239, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 18,7 , 25,12 , 16773,80 , 16773,80 , 85,14 , 16773,80 , 16773,80 , 85,14 , 585,8 , 572,7 , 45,4 , 5,17 , 22,23 , {90,77,87}, 131,1 , 0,7 , 4,4 , 13,6 , 5182,9 , 1813,6 , 2, 1, 1, 6, 7 }, // Bemba/Latin/Zambia - { 196, 7, 39, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 159,7 , 159,7 , 119,10 , 1640,27 , 37,5 , 8,10 , 16853,28 , 16881,73 , 16954,14 , 16853,28 , 16881,73 , 16954,14 , 68,2 , 65,2 , 45,4 , 5,17 , 22,23 , {67,86,69}, 281,1 , 16853,43 , 19,5 , 24,7 , 5191,12 , 5203,10 , 2, 1, 1, 6, 7 }, // Kabuverdianu/Latin/Cape Verde + { 196, 7, 39, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 159,7 , 159,7 , 119,10 , 1640,27 , 37,5 , 8,10 , 16853,28 , 16881,73 , 16954,14 , 16853,28 , 16881,73 , 16954,14 , 68,2 , 65,2 , 45,4 , 5,17 , 22,23 , {67,86,69}, 283,1 , 16853,43 , 19,5 , 24,7 , 5191,12 , 5203,10 , 2, 1, 1, 6, 7 }, // Kabuverdianu/Latin/Cape Verde { 197, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 16968,28 , 16996,51 , 17047,14 , 16968,28 , 16996,51 , 17047,14 , 593,2 , 579,2 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 16234,24 , 4,4 , 13,6 , 5213,6 , 1191,5 , 2, 1, 7, 6, 7 }, // Meru/Latin/Kenya { 198, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 17061,28 , 17089,53 , 17142,14 , 17061,28 , 17089,53 , 17142,14 , 595,6 , 581,10 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 16896,26 , 4,4 , 13,6 , 5219,8 , 5227,12 , 2, 1, 7, 6, 7 }, // Kalenjin/Latin/Kenya { 199, 7, 148, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 18,7 , 25,12 , 17156,23 , 17179,92 , 17271,14 , 17156,23 , 17179,92 , 17271,14 , 601,7 , 591,5 , 45,4 , 5,17 , 22,23 , {78,65,68}, 6,1 , 16922,22 , 4,4 , 4,0 , 5239,13 , 5252,8 , 2, 1, 1, 6, 7 }, // Nama/Latin/Namibia @@ -1800,35 +1797,35 @@ static const QLocaleData locale_data[] = { { 206, 7, 221, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 17681,28 , 17709,69 , 17778,14 , 17681,28 , 17709,69 , 17778,14 , 648,9 , 632,6 , 45,4 , 5,17 , 22,23 , {85,71,88}, 197,3 , 17059,28 , 4,4 , 13,6 , 5325,6 , 1689,6 , 0, 0, 1, 7, 7 }, // Teso/Latin/Uganda { 206, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 17681,28 , 17709,69 , 17778,14 , 17681,28 , 17709,69 , 17778,14 , 648,9 , 632,6 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 17087,27 , 4,4 , 13,6 , 5325,6 , 5331,5 , 2, 1, 7, 6, 7 }, // Teso/Latin/Kenya { 207, 7, 67, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,82,78}, 0,0 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Saho/Latin/Eritrea - { 208, 7, 132, 46, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 17792,28 , 17820,53 , 17873,14 , 17792,28 , 17820,53 , 17873,14 , 657,6 , 638,6 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 17114,23 , 0,4 , 4,0 , 5336,11 , 5347,5 , 0, 0, 1, 6, 7 }, // Koyra Chiini/Latin/Mali + { 208, 7, 132, 46, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 17792,28 , 17820,53 , 17873,14 , 17792,28 , 17820,53 , 17873,14 , 657,6 , 638,6 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 17114,23 , 0,4 , 4,0 , 5336,11 , 5347,5 , 0, 0, 1, 6, 7 }, // Koyra Chiini/Latin/Mali { 209, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 15915,28 , 15943,62 , 16005,14 , 15915,28 , 15943,62 , 16005,14 , 568,5 , 547,9 , 45,4 , 5,17 , 22,23 , {84,90,83}, 192,3 , 16701,27 , 0,4 , 4,0 , 5352,6 , 1624,8 , 2, 0, 1, 6, 7 }, // Rwa/Latin/Tanzania { 210, 7, 111, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 17887,28 , 17915,69 , 17984,14 , 17887,28 , 17915,69 , 17984,14 , 663,2 , 644,2 , 45,4 , 5,17 , 22,23 , {75,69,83}, 2,3 , 17137,23 , 0,4 , 4,0 , 5358,6 , 1191,5 , 2, 1, 7, 6, 7 }, // Luo/Latin/Kenya { 211, 7, 221, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 15675,28 , 15703,74 , 15777,14 , 15675,28 , 15703,74 , 15777,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,71,88}, 197,3 , 16646,26 , 4,4 , 4,0 , 5364,6 , 1689,6 , 0, 0, 1, 7, 7 }, // Chiga/Latin/Uganda { 212, 7, 145, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 17998,28 , 18026,48 , 18074,14 , 17998,28 , 18026,48 , 18074,14 , 665,9 , 646,10 , 45,4 , 5,17 , 22,23 , {77,65,68}, 0,0 , 17160,22 , 19,5 , 4,0 , 5370,17 , 5387,6 , 2, 1, 1, 6, 7 }, // Central Morocco Tamazight/Latin/Morocco - { 213, 7, 132, 46, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18088,28 , 18116,54 , 17873,14 , 18088,28 , 18116,54 , 17873,14 , 657,6 , 638,6 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 17114,23 , 0,4 , 4,0 , 5393,15 , 5347,5 , 0, 0, 1, 6, 7 }, // Koyraboro Senni/Latin/Mali + { 213, 7, 132, 46, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18088,28 , 18116,54 , 17873,14 , 18088,28 , 18116,54 , 17873,14 , 657,6 , 638,6 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 17114,23 , 0,4 , 4,0 , 5393,15 , 5347,5 , 0, 0, 1, 6, 7 }, // Koyraboro Senni/Latin/Mali { 214, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 18170,28 , 18198,63 , 18261,14 , 18170,28 , 18198,63 , 18261,14 , 674,5 , 656,8 , 45,4 , 5,17 , 22,23 , {84,90,83}, 192,3 , 17182,27 , 0,4 , 4,0 , 5408,9 , 1624,8 , 2, 0, 1, 6, 7 }, // Shambala/Latin/Tanzania { 215, 13, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 547,6 , 35,18 , 18,7 , 25,12 , 18275,33 , 18308,54 , 18362,19 , 18275,33 , 18308,54 , 18362,19 , 679,3 , 664,6 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 17209,10 , 8,5 , 4,0 , 5417,4 , 2666,4 , 2, 1, 7, 7, 7 }, // Bodo/Devanagari/India { 218, 2, 178, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 18381,25 , 18406,45 , 18451,17 , 18381,25 , 18406,45 , 18381,25 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {82,85,66}, 123,1 , 17219,43 , 19,5 , 4,0 , 5421,7 , 5428,5 , 2, 1, 1, 6, 7 }, // Chechen/Cyrillic/Russia { 219, 2, 178, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {82,85,66}, 123,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Church/Cyrillic/Russia { 220, 2, 178, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {82,85,66}, 123,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Chuvash/Cyrillic/Russia - { 230, 7, 49, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18468,28 , 18496,50 , 18546,14 , 18468,28 , 18496,50 , 18546,14 , 682,5 , 670,6 , 45,4 , 5,17 , 22,23 , {67,68,70}, 214,2 , 17262,24 , 0,4 , 4,0 , 5433,8 , 5441,16 , 2, 1, 1, 6, 7 }, // Luba Katanga/Latin/Congo Kinshasa - { 231, 7, 125, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 989,10 , 989,10 , 156,8 , 622,18 , 37,5 , 8,10 , 18560,28 , 18588,65 , 3695,14 , 18653,35 , 18588,65 , 3695,14 , 687,5 , 676,8 , 424,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 5457,14 , 5471,10 , 2, 1, 1, 6, 7 }, // Luxembourgish/Latin/Luxembourg + { 230, 7, 49, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18468,28 , 18496,50 , 18546,14 , 18468,28 , 18496,50 , 18546,14 , 682,5 , 670,6 , 45,4 , 5,17 , 22,23 , {67,68,70}, 216,2 , 17262,24 , 0,4 , 4,0 , 5433,8 , 5441,16 , 2, 1, 1, 6, 7 }, // Luba Katanga/Latin/Congo Kinshasa + { 231, 7, 125, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 989,10 , 989,10 , 156,8 , 622,18 , 37,5 , 8,10 , 18560,28 , 18588,65 , 3695,14 , 18653,35 , 18588,65 , 3695,14 , 687,5 , 676,8 , 404,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 8436,19 , 19,5 , 4,0 , 5457,14 , 5471,10 , 2, 1, 1, 6, 7 }, // Luxembourgish/Latin/Luxembourg { 232, 7, 225, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,83,68}, 159,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Navaho/Latin/United States { 236, 7, 21, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Walloon/Latin/Belgium { 237, 7, 37, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 8218, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18688,28 , 18716,72 , 18788,14 , 18688,28 , 18716,72 , 18788,14 , 692,3 , 684,3 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 17286,21 , 0,4 , 4,0 , 5481,5 , 5486,7 , 0, 0, 1, 6, 7 }, // Aghem/Latin/Cameroon { 238, 7, 37, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18802,28 , 18830,70 , 18900,14 , 18802,28 , 18830,70 , 18900,14 , 695,10 , 687,9 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 17307,22 , 19,5 , 4,0 , 5493,5 , 5498,8 , 0, 0, 1, 6, 7 }, // Basaa/Latin/Cameroon - { 239, 7, 156, 46, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18088,28 , 18914,53 , 18967,14 , 18088,28 , 18914,53 , 18967,14 , 705,8 , 696,10 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 17114,23 , 0,4 , 4,0 , 5506,10 , 5516,5 , 0, 0, 1, 6, 7 }, // Zarma/Latin/Niger + { 239, 7, 156, 46, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18088,28 , 18914,53 , 18967,14 , 18088,28 , 18914,53 , 18967,14 , 705,8 , 696,10 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 17114,23 , 0,4 , 4,0 , 5506,10 , 5516,5 , 0, 0, 1, 6, 7 }, // Zarma/Latin/Niger { 240, 7, 37, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18981,28 , 19009,45 , 19054,14 , 18981,28 , 19009,45 , 19054,14 , 713,5 , 706,6 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 0,7 , 19,5 , 4,0 , 5521,5 , 1985,8 , 0, 0, 1, 6, 7 }, // Duala/Latin/Cameroon - { 241, 7, 187, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 19068,28 , 19096,50 , 19146,14 , 19068,28 , 19096,50 , 19146,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 17329,23 , 19,5 , 4,0 , 5526,5 , 5531,7 , 0, 0, 1, 6, 7 }, // Jola Fonyi/Latin/Senegal + { 241, 7, 187, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 19068,28 , 19096,50 , 19146,14 , 19068,28 , 19096,50 , 19146,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 17329,23 , 19,5 , 4,0 , 5526,5 , 5531,7 , 0, 0, 1, 6, 7 }, // Jola Fonyi/Latin/Senegal { 242, 7, 37, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 19160,30 , 19190,85 , 19275,14 , 19160,30 , 19190,85 , 19275,14 , 718,7 , 712,9 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 17352,23 , 19,5 , 4,0 , 5538,6 , 5544,7 , 0, 0, 1, 6, 7 }, // Ewondo/Latin/Cameroon { 243, 7, 37, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 19289,29 , 19318,45 , 19363,14 , 19289,29 , 19318,45 , 19363,14 , 725,6 , 721,7 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 17375,11 , 19,5 , 4,0 , 5551,5 , 5556,7 , 0, 0, 1, 6, 7 }, // Bafia/Latin/Cameroon - { 244, 7, 146, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 19377,28 , 19405,59 , 19464,14 , 19377,28 , 19405,59 , 19464,14 , 731,8 , 728,10 , 45,4 , 5,17 , 22,23 , {77,90,78}, 282,3 , 0,7 , 8,5 , 4,0 , 5563,5 , 5568,10 , 2, 1, 7, 6, 7 }, // Makhuwa Meetto/Latin/Mozambique + { 244, 7, 146, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 19377,28 , 19405,59 , 19464,14 , 19377,28 , 19405,59 , 19464,14 , 731,8 , 728,10 , 45,4 , 5,17 , 22,23 , {77,90,78}, 284,3 , 0,7 , 8,5 , 4,0 , 5563,5 , 5568,10 , 2, 1, 7, 6, 7 }, // Makhuwa Meetto/Latin/Mozambique { 245, 7, 37, 44, 46, 59, 37, 48, 45, 43, 101, 171, 187, 8220, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 19478,28 , 19506,74 , 19580,14 , 19478,28 , 19506,74 , 19580,14 , 739,5 , 738,5 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 17386,17 , 4,4 , 13,6 , 5578,6 , 5584,7 , 0, 0, 1, 6, 7 }, // Mundang/Latin/Cameroon { 246, 7, 37, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8221, 171, 187, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 19594,30 , 19624,89 , 19713,14 , 19594,30 , 19624,89 , 19713,14 , 744,4 , 743,4 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 17403,20 , 19,5 , 4,0 , 5591,6 , 5597,7 , 0, 0, 1, 6, 7 }, // Kwasio/Latin/Cameroon { 247, 7, 254, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 538,9 , 97,16 , 18,7 , 554,12 , 19727,38 , 19765,79 , 19844,14 , 19727,38 , 19765,79 , 19844,14 , 748,2 , 747,2 , 45,4 , 5,17 , 22,23 , {83,83,80}, 119,1 , 0,7 , 4,4 , 13,6 , 5604,9 , 0,0 , 2, 1, 1, 6, 7 }, // Nuer/Latin/South Sudan - { 248, 2, 178, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 999,11 , 999,11 , 227,6 , 1690,30 , 37,5 , 8,10 , 19858,21 , 19879,71 , 19950,14 , 19858,21 , 19879,71 , 19950,14 , 750,2 , 749,2 , 1300,5 , 1305,17 , 22,23 , {82,85,66}, 123,1 , 17423,47 , 19,5 , 4,0 , 5613,9 , 5622,9 , 2, 1, 1, 6, 7 }, // Sakha/Cyrillic/Russia + { 248, 2, 178, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8220, 0,6 , 0,6 , 999,11 , 999,11 , 227,6 , 1690,30 , 37,5 , 8,10 , 19858,21 , 19879,71 , 19950,14 , 19858,21 , 19879,71 , 19950,14 , 750,2 , 749,2 , 1238,5 , 1243,17 , 22,23 , {82,85,66}, 123,1 , 17423,47 , 19,5 , 4,0 , 5613,9 , 5622,9 , 2, 1, 1, 6, 7 }, // Sakha/Cyrillic/Russia { 249, 7, 210, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 37,5 , 8,10 , 19964,28 , 19992,60 , 20052,14 , 19964,28 , 19992,60 , 20052,14 , 752,9 , 751,9 , 45,4 , 5,17 , 22,23 , {84,90,83}, 192,3 , 17470,25 , 0,4 , 4,0 , 5631,9 , 5640,9 , 2, 0, 1, 6, 7 }, // Sangu/Latin/Tanzania - { 251, 7, 156, 46, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18088,28 , 18116,54 , 17873,14 , 18088,28 , 18116,54 , 17873,14 , 705,8 , 696,10 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,3 , 17114,23 , 0,4 , 4,0 , 5649,13 , 5516,5 , 0, 0, 1, 6, 7 }, // Tasawaq/Latin/Niger + { 251, 7, 156, 46, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 18088,28 , 18116,54 , 17873,14 , 18088,28 , 18116,54 , 17873,14 , 705,8 , 696,10 , 45,4 , 5,17 , 22,23 , {88,79,70}, 207,5 , 17114,23 , 0,4 , 4,0 , 5649,13 , 5516,5 , 0, 0, 1, 6, 7 }, // Tasawaq/Latin/Niger { 252, 35, 121, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 18,7 , 25,12 , 20066,30 , 20066,30 , 85,14 , 20066,30 , 20066,30 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {76,82,68}, 6,1 , 17495,15 , 4,4 , 13,6 , 5662,2 , 5664,4 , 2, 1, 1, 6, 7 }, // Vai/Vai/Liberia { 252, 7, 121, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 119,10 , 10,17 , 18,7 , 25,12 , 20096,48 , 20096,48 , 85,14 , 20096,48 , 20096,48 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {76,82,68}, 6,1 , 17510,20 , 4,4 , 13,6 , 5668,3 , 5671,8 , 2, 1, 1, 6, 7 }, // Vai/Latin/Liberia { 253, 7, 206, 44, 8217, 59, 37, 48, 45, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 265,9 , 265,9 , 53,10 , 622,18 , 37,5 , 8,10 , 20144,28 , 20172,53 , 20225,14 , 20144,28 , 20172,53 , 20225,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,72,70}, 0,0 , 0,7 , 8,5 , 4,0 , 5679,6 , 5685,6 , 2, 0, 1, 6, 7 }, // Walser/Latin/Switzerland @@ -1844,7 +1841,7 @@ static const QLocaleData locale_data[] = { { 290, 72, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 7, 7 }, // Manipuri/Meitei Mayek/India { 304, 78, 100, 46, 44, 59, 37, 7248, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 269,6 , 10,17 , 18,7 , 25,12 , 21060,26 , 21086,42 , 21128,14 , 21060,26 , 21086,42 , 21128,14 , 806,5 , 814,5 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 17658,71 , 8,5 , 4,0 , 5792,7 , 5799,6 , 2, 1, 7, 7, 7 }, // Santali/Ol Chiki/India { 304, 13, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 7, 7 }, // Santali/Devanagari/India - { 309, 100, 232, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {86,78,68}, 340,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 1, 6, 7 }, // Tai Dam/Tai Viet/Vietnam + { 309, 100, 232, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {86,78,68}, 342,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 1, 6, 7 }, // Tai Dam/Tai Viet/Vietnam { 312, 7, 37, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 1, 6, 7 }, // Akoose/Latin/Cameroon { 313, 7, 225, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 547,6 , 35,18 , 18,7 , 25,12 , 21142,87 , 21142,87 , 85,14 , 21142,87 , 21142,87 , 21229,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,83,68}, 6,1 , 0,7 , 8,5 , 4,0 , 5805,12 , 5817,22 , 2, 1, 7, 6, 7 }, // Lakota/Latin/United States { 314, 9, 145, 44, 160, 59, 37, 48, 45, 43, 101, 171, 187, 8222, 8221, 0,6 , 0,6 , 0,6 , 0,6 , 415,8 , 97,16 , 37,5 , 8,10 , 15349,30 , 21243,48 , 85,14 , 15349,30 , 21243,48 , 85,14 , 542,6 , 515,8 , 45,4 , 5,17 , 22,23 , {77,65,68}, 0,0 , 16547,21 , 0,4 , 4,0 , 5839,8 , 5016,6 , 2, 1, 1, 6, 7 }, // Standard Moroccan Tamazight/Tifinagh/Morocco @@ -1852,35 +1849,35 @@ static const QLocaleData locale_data[] = { { 316, 1, 103, 1643, 1644, 1563, 1642, 1632, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 18,7 , 25,12 , 21291,58 , 21291,58 , 21349,14 , 21291,58 , 21291,58 , 21349,14 , 811,3 , 819,3 , 45,4 , 5,17 , 22,23 , {73,81,68}, 44,5 , 17729,20 , 19,5 , 4,0 , 5847,14 , 5861,5 , 0, 0, 6, 5, 6 }, // Central Kurdish/Arabic/Iraq { 316, 1, 102, 1643, 1644, 1563, 1642, 1632, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 21291,58 , 21291,58 , 21349,14 , 21291,58 , 21291,58 , 21349,14 , 811,3 , 819,3 , 45,4 , 5,17 , 22,23 , {73,82,82}, 0,0 , 17749,19 , 19,5 , 4,0 , 5847,14 , 5866,5 , 0, 0, 6, 5, 5 }, // Central Kurdish/Arabic/Iran { 317, 7, 82, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 181,7 , 181,7 , 113,6 , 622,18 , 55,4 , 59,9 , 21363,28 , 21391,53 , 21444,14 , 21363,28 , 21391,53 , 21444,14 , 814,9 , 822,10 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 17768,27 , 19,5 , 4,0 , 5871,14 , 5885,6 , 2, 1, 1, 6, 7 }, // Lower Sorbian/Latin/Germany - { 318, 7, 82, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 181,7 , 181,7 , 113,6 , 622,18 , 566,12 , 59,9 , 21458,28 , 21486,53 , 21539,14 , 21458,28 , 21486,53 , 21539,14 , 814,9 , 832,9 , 1322,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 17795,29 , 19,5 , 4,0 , 5891,15 , 5906,6 , 2, 1, 1, 6, 7 }, // Upper Sorbian/Latin/Germany + { 318, 7, 82, 44, 46, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 181,7 , 181,7 , 113,6 , 622,18 , 566,12 , 59,9 , 21458,28 , 21486,53 , 21539,14 , 21458,28 , 21486,53 , 21539,14 , 814,9 , 832,9 , 1260,5 , 5,17 , 22,23 , {69,85,82}, 14,1 , 17795,29 , 19,5 , 4,0 , 5891,15 , 5906,6 , 2, 1, 1, 6, 7 }, // Upper Sorbian/Latin/Germany { 319, 7, 37, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {88,65,70}, 32,4 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 1, 6, 7 }, // Kenyang/Latin/Cameroon - { 320, 7, 38, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,65,68}, 244,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 7, 6, 7 }, // Mohawk/Latin/Canada - { 321, 75, 91, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {71,78,70}, 220,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 1, 6, 7 }, // Nko/Nko/Guinea + { 320, 7, 38, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {67,65,68}, 246,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 7, 6, 7 }, // Mohawk/Latin/Canada + { 321, 75, 91, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {71,78,70}, 222,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 1, 6, 7 }, // Nko/Nko/Guinea { 322, 7, 260, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Prussian/Latin/World - { 323, 7, 90, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {71,84,81}, 309,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Kiche/Latin/Guatemala + { 323, 7, 90, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {71,84,81}, 311,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Kiche/Latin/Guatemala { 324, 7, 205, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {83,69,75}, 190,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 1, 6, 7 }, // Southern Sami/Latin/Sweden { 325, 7, 205, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {83,69,75}, 190,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 1, 6, 7 }, // Lule Sami/Latin/Sweden { 326, 7, 73, 44, 160, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 640,8 , 1798,18 , 254,4 , 258,9 , 21553,28 , 21581,70 , 85,14 , 21553,28 , 21651,73 , 21724,14 , 823,3 , 841,3 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 17824,11 , 19,5 , 4,0 , 5912,11 , 5923,5 , 2, 1, 1, 6, 7 }, // Inari Sami/Latin/Finland { 327, 7, 73, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Skolt Sami/Latin/Finland - { 328, 7, 13, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {65,85,68}, 344,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Warlpiri/Latin/Australia + { 328, 7, 13, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {65,85,68}, 346,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Warlpiri/Latin/Australia { 339, 13, 100, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 326,9 , 335,8 , 269,6 , 10,17 , 18,7 , 25,12 , 4304,32 , 4336,53 , 4389,19 , 4304,32 , 4336,53 , 4389,19 , 68,2 , 65,2 , 45,4 , 5,17 , 22,23 , {73,78,82}, 121,1 , 17835,31 , 8,5 , 4,0 , 5928,6 , 2666,4 , 2, 1, 7, 7, 7 }, // Maithili/Devanagari/India - { 346, 1, 102, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 774,4 , 1327,39 , 22,23 , {73,82,82}, 346,3 , 17866,27 , 8,5 , 4,0 , 5934,7 , 3263,5 , 0, 0, 6, 5, 5 }, // Mazanderani/Arabic/Iran + { 346, 1, 102, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 171, 187, 8249, 8250, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 754,4 , 1265,39 , 22,23 , {73,82,82}, 348,3 , 17866,27 , 8,5 , 4,0 , 5934,7 , 3263,5 , 0, 0, 6, 5, 5 }, // Mazanderani/Arabic/Iran { 349, 1, 102, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,82,82}, 0,0 , 0,7 , 8,5 , 4,0 , 5941,11 , 0,0 , 0, 0, 6, 5, 5 }, // Northern Luri/Arabic/Iran { 349, 1, 103, 1643, 1644, 1563, 1642, 1776, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 18,7 , 25,12 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,81,68}, 44,5 , 0,7 , 8,5 , 4,0 , 5941,11 , 0,0 , 0, 0, 6, 5, 6 }, // Northern Luri/Arabic/Iraq { 357, 6, 97, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 1074,5 , 1074,5 , 394,8 , 423,14 , 209,6 , 226,13 , 1980,28 , 1980,28 , 2008,14 , 1980,28 , 1980,28 , 2008,14 , 58,2 , 55,2 , 45,4 , 5,17 , 22,23 , {72,75,68}, 134,3 , 17893,11 , 4,4 , 13,6 , 5952,2 , 5954,14 , 2, 1, 7, 6, 7 }, // Cantonese/Traditional Han/Hong Kong - { 357, 5, 44, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 1074,5 , 1074,5 , 394,8 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 45,4 , 5,17 , 22,23 , {67,78,89}, 247,1 , 3122,13 , 4,4 , 13,6 , 5968,2 , 5970,7 , 2, 1, 7, 6, 7 }, // Cantonese/Simplified Han/China + { 357, 5, 44, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 166,5 , 166,5 , 1074,5 , 1074,5 , 394,8 , 402,13 , 209,6 , 215,11 , 1959,21 , 1980,28 , 2008,14 , 1959,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 45,4 , 5,17 , 22,23 , {67,78,89}, 249,1 , 3122,13 , 4,4 , 13,6 , 5968,2 , 5970,7 , 2, 1, 7, 6, 7 }, // Cantonese/Simplified Han/China { 358, 138, 225, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,83,68}, 159,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Osage/Osage/United States { 360, 7, 260, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Ido/Latin/World { 361, 7, 260, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {0,0,0}, 0,0 , 2586,0 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Lojban/Latin/World { 362, 7, 106, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Sicilian/Latin/Italy { 363, 1, 102, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {73,82,82}, 0,0 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 0, 0, 6, 5, 5 }, // Southern Kurdish/Arabic/Iran { 364, 1, 163, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {80,75,82}, 176,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 0, 7, 6, 7 }, // Western Balochi/Arabic/Pakistan - { 365, 7, 170, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 1079,9 , 1088,8 , 547,6 , 35,18 , 18,7 , 25,12 , 21738,28 , 21766,56 , 21822,14 , 21738,28 , 21766,56 , 21822,14 , 0,2 , 0,2 , 1366,8 , 5,17 , 22,23 , {80,72,80}, 179,1 , 17904,56 , 4,4 , 13,6 , 5977,8 , 4730,9 , 2, 1, 7, 6, 7 }, // Cebuano/Latin/Philippines + { 365, 7, 170, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 1079,9 , 1088,8 , 547,6 , 35,18 , 18,7 , 25,12 , 21738,28 , 21766,56 , 21822,14 , 21738,28 , 21766,56 , 21822,14 , 0,2 , 0,2 , 1304,8 , 5,17 , 22,23 , {80,72,80}, 179,1 , 17904,56 , 4,4 , 13,6 , 5977,8 , 4730,9 , 2, 1, 7, 6, 7 }, // Cebuano/Latin/Philippines { 366, 2, 178, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {82,85,66}, 123,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Erzya/Cyrillic/Russia { 367, 7, 225, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,83,68}, 159,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Chickasaw/Latin/United States { 368, 7, 225, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {85,83,68}, 159,3 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 7, 6, 7 }, // Muscogee/Latin/United States - { 369, 7, 172, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {80,76,78}, 277,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Silesian/Latin/Poland - { 370, 7, 157, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 1096,9 , 1105,8 , 119,10 , 10,17 , 37,5 , 8,10 , 21836,33 , 21869,52 , 85,14 , 21836,33 , 21869,52 , 85,14 , 826,9 , 844,8 , 1374,8 , 5,17 , 22,23 , {78,71,78}, 178,1 , 17960,50 , 4,4 , 4,0 , 5985,14 , 5999,8 , 2, 1, 1, 6, 7 }, // Nigerian Pidgin/Latin/Nigeria + { 369, 7, 172, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {80,76,78}, 279,2 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Silesian/Latin/Poland + { 370, 7, 157, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 1096,9 , 1105,8 , 119,10 , 10,17 , 37,5 , 8,10 , 21836,33 , 21869,52 , 85,14 , 21836,33 , 21869,52 , 85,14 , 826,9 , 844,8 , 1312,8 , 5,17 , 22,23 , {78,71,78}, 178,1 , 17960,50 , 4,4 , 4,0 , 5985,14 , 5999,8 , 2, 1, 1, 6, 7 }, // Nigerian Pidgin/Latin/Nigeria { 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 }; @@ -3174,23 +3171,22 @@ static const ushort 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, 0x62, 0x79, 0x74, 0x65, 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, 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, 0x431, 0x430, 0x439, 0x442, 0x44b, 0x41a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, -0x413, 0x411, 0x3b, 0x422, 0x411, 0x3b, 0x41f, 0x411, 0x3b, 0x45, 0x42, 0x1794, 0x17c3, 0x5b57, 0x8282, 0x4f4d, 0x5143, 0x7d44, 0x62, 0x61, -0x6a, 0x74, 0x6f, 0x76, 0x69, 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, 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, +0x1263, 0x3b, 0x45, 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, 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, 0x431, 0x430, 0x439, +0x442, 0x44b, 0x41a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x413, 0x411, 0x3b, 0x422, 0x411, 0x3b, 0x41f, 0x411, 0x3b, 0x45, 0x42, 0x1794, +0x17c3, 0x5b57, 0x8282, 0x4f4d, 0x5143, 0x7d44, 0x62, 0x61, 0x6a, 0x74, 0x6f, 0x76, 0x69, 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, 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, @@ -3208,38 +3204,35 @@ static const ushort byte_unit_data[] = { 0xd4d, 0xd15, 0xd46, 0xd2c, 0xd3f, 0x3b, 0xd0e, 0xd02, 0xd2c, 0xd3f, 0x3b, 0xd1c, 0xd3f, 0xd2c, 0xd3f, 0x3b, 0xd1f, 0xd3f, 0xd2c, 0xd3f, 0x3b, 0xd2a, 0xd3f, 0xd2c, 0xd3f, 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, 0xb2c, 0xb3e, 0xb07, 0xb1f, 0xb4d, 0x628, 0x627, 0x64a, 0x67c, 0x633, 0x628, 0x627, 0x6cc, 0x62a, 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, 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, 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, 0x92c, 0x93e, 0x92f, 0x91f, 0x61, 0x1e6d, 0x61, 0x6d, 0x1e0d, 0x61, 0x6e, 0x6b, 0x41, 0x1e6c, 0x3b, 0x4d, 0x41, 0x1e6c, -0x3b, 0x47, 0x41, 0x1e6c, 0x3b, 0x54, 0x41, 0x1e6c, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x13d7, 0x13d3, 0x13cd, 0x13a6, 0x13b5, 0x13a9, -0x431, 0x430, 0x430, 0x439, 0x442, 0x43a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, -0x45, 0x42, 0x62, 0x79, 0x74, 0x65, 0x79, 0x6a9, 0x6cc, 0x644, 0x648, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x645, 0x6af, 0x627, 0x628, -0x627, 0x6cc, 0x62a, 0x3b, 0x6af, 0x6cc, 0x6af, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x62a, 0x631, 0x627, 0x628, 0x627, 0x6cc, 0x62a, -0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x6d, 0x67, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x42, 0x61, 0x69, 0x74, 0x2d, 0x64, -0x1eb9, 0x6d +0x93e, 0x3b, 0x45, 0x42, 0xb2c, 0xb3e, 0xb07, 0xb1f, 0xb4d, 0x628, 0x627, 0x64a, 0x67c, 0x633, 0x628, 0x627, 0x6cc, 0x62a, 0xa2c, 0xa3e, +0xa07, 0xa1f, 0x62, 0x79, 0x21b, 0x69, 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, 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, +0x92c, 0x93e, 0x92f, 0x91f, 0x61, 0x1e6d, 0x61, 0x6d, 0x1e0d, 0x61, 0x6e, 0x6b, 0x41, 0x1e6c, 0x3b, 0x4d, 0x41, 0x1e6c, 0x3b, 0x47, +0x41, 0x1e6c, 0x3b, 0x54, 0x41, 0x1e6c, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, 0x13d7, 0x13d3, 0x13cd, 0x13a6, 0x13b5, 0x13a9, 0x431, 0x430, +0x430, 0x439, 0x442, 0x43a, 0x411, 0x3b, 0x41c, 0x411, 0x3b, 0x47, 0x42, 0x3b, 0x54, 0x42, 0x3b, 0x50, 0x42, 0x3b, 0x45, 0x42, +0x62, 0x79, 0x74, 0x65, 0x79, 0x6a9, 0x6cc, 0x644, 0x648, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x645, 0x6af, 0x627, 0x628, 0x627, 0x6cc, +0x62a, 0x3b, 0x6af, 0x6cc, 0x6af, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x62a, 0x631, 0x627, 0x628, 0x627, 0x6cc, 0x62a, 0x3b, 0x50, +0x42, 0x3b, 0x45, 0x42, 0x6d, 0x67, 0x61, 0x20, 0x62, 0x79, 0x74, 0x65, 0x42, 0x61, 0x69, 0x74, 0x2d, 0x64, 0x1eb9, 0x6d }; static const ushort am_data[] = { @@ -3344,14 +3337,14 @@ static const ushort currency_symbol_data[] = { 0x24, 0x48, 0x52, 0x4b, 0x4b, 0x4d, 0x4b, 0x10d, 0x6b, 0x72, 0x2e, 0x41, 0x66, 0x6c, 0x2e, 0x4e, 0x41, 0x66, 0x2e, 0x55, 0x53, 0x24, 0x50, 0x46, 0x42, 0x75, 0x44, 0x47, 0x48, 0x20b5, 0x41, 0x72, 0x4d, 0x4b, 0x52, 0x4d, 0x52, 0x73, 0x20a6, 0x20b1, 0x52, 0x46, 0x57, 0x53, 0x24, 0x53, 0x52, 0x4c, 0x65, 0x45, 0x6b, 0x72, 0x54, 0x53, 0x68, 0x54, 0x24, 0x55, 0x53, 0x68, -0x41, 0x45, 0x44, 0x56, 0x54, 0x44, 0x41, 0x43, 0x46, 0x41, 0x24, 0xa0, 0x43, 0x41, 0x46, 0x43, 0x46, 0x43, 0x46, 0x50, -0x46, 0x47, 0x47, 0x55, 0x4d, 0x4d, 0x41, 0x44, 0x43, 0x48, 0x46, 0x4c, 0x53, 0x44, 0x54, 0x20be, 0x20b2, 0x46, 0x74, 0x49, -0x53, 0x4b, 0x52, 0x70, 0x43, 0x41, 0x24, 0xffe5, 0x20b8, 0x441, 0x43e, 0x43c, 0x20a9, 0x4b, 0x50, 0x57, 0x20ba, 0x20ad, 0x4b, 0x7a, -0x434, 0x435, 0x43d, 0x2e, 0x20ae, 0x43, 0x4e, 0xa5, 0x928, 0x947, 0x930, 0x942, 0x60b, 0x631, 0x6cc, 0x627, 0x644, 0x7a, 0x142, 0x52, -0x24, 0x200b, 0x4d, 0x54, 0x6e, 0x44, 0x62, 0x631, 0x53, 0x2f, 0x42, 0x73, 0x52, 0x4f, 0x4e, 0x4c, 0x20b4, 0x52, 0x53, 0x44, -0x41a, 0x41c, 0xdbb, 0xdd4, 0x2e, 0x20a1, 0x52, 0x44, 0x24, 0x51, 0x43, 0x24, 0x42, 0x2f, 0x2e, 0x47, 0x73, 0x2e, 0x42, 0x73, -0x2e, 0x53, 0x441, 0x43e, 0x43c, 0x2e, 0x52, 0x73, 0x2e, 0xe3f, 0x54, 0x4d, 0x54, 0x73, 0x6f, 0x2bb, 0x6d, 0x441, 0x45e, 0x43c, -0x20ab, 0x4e, 0x54, 0x24, 0x41, 0x24, 0x49, 0x52, 0x52 +0x41, 0x45, 0x44, 0x56, 0x54, 0x44, 0x41, 0x46, 0x202f, 0x43, 0x46, 0x41, 0x24, 0xa0, 0x43, 0x41, 0x46, 0x43, 0x46, 0x43, +0x46, 0x50, 0x46, 0x47, 0x47, 0x55, 0x4d, 0x4d, 0x41, 0x44, 0x43, 0x48, 0x46, 0x4c, 0x53, 0x44, 0x54, 0x20be, 0x20b2, 0x46, +0x74, 0x49, 0x53, 0x4b, 0x52, 0x70, 0x43, 0x41, 0x24, 0xffe5, 0x20b8, 0x441, 0x43e, 0x43c, 0x20a9, 0x4b, 0x50, 0x57, 0x20ba, 0x20ad, +0x4b, 0x7a, 0x434, 0x435, 0x43d, 0x2e, 0x20ae, 0x43, 0x4e, 0xa5, 0x928, 0x947, 0x930, 0x942, 0x60b, 0x631, 0x6cc, 0x627, 0x644, 0x7a, +0x142, 0x52, 0x24, 0x200b, 0x4d, 0x54, 0x6e, 0x44, 0x62, 0x631, 0x53, 0x2f, 0x42, 0x73, 0x52, 0x4f, 0x4e, 0x4c, 0x20b4, 0x52, +0x53, 0x44, 0x41a, 0x41c, 0xdbb, 0xdd4, 0x2e, 0x20a1, 0x52, 0x44, 0x24, 0x51, 0x43, 0x24, 0x42, 0x2f, 0x2e, 0x47, 0x73, 0x2e, +0x42, 0x73, 0x2e, 0x53, 0x441, 0x43e, 0x43c, 0x2e, 0x52, 0x73, 0x2e, 0xe3f, 0x54, 0x4d, 0x54, 0x73, 0x6f, 0x2bb, 0x6d, 0x441, +0x45e, 0x43c, 0x20ab, 0x4e, 0x54, 0x24, 0x41, 0x24, 0x49, 0x52, 0x52 }; static const ushort currency_display_name_data[] = { @@ -4359,7 +4352,7 @@ static const ushort endonyms_data[] = { 0x69, 0x72, 0x67, 0x69, 0x6e, 0x20, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x5a, 0x61, 0x6d, 0x62, 0x69, 0x61, 0x5a, 0x69, 0x6d, 0x62, 0x61, 0x62, 0x77, 0x65, 0x44, 0x69, 0x65, 0x67, 0x6f, 0x20, 0x47, 0x61, 0x72, 0x63, 0x69, 0x61, 0x49, 0x73, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4d, 0x61, 0x6e, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x53, 0x6f, 0x75, 0x74, -0x68, 0x20, 0x53, 0x75, 0x64, 0x61, 0x6e, 0x53, 0x69, 0x6e, 0x74, 0x20, 0x4d, 0x61, 0x61, 0x72, 0x74, 0x65, 0x6e, 0x57, +0x68, 0x20, 0x53, 0x75, 0x64, 0x61, 0x6e, 0x53, 0x69, 0x6e, 0x74, 0x20, 0x4d, 0x61, 0x61, 0x72, 0x74, 0x65, 0x6e, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x45, 0x75, 0x72, 0x6f, 0x70, 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, 0x66, 0xf8, 0x72, 0x6f, 0x79, 0x73, 0x6b, 0x74, 0x46, 0xf8, 0x72, 0x6f, 0x79, 0x61, 0x72, 0x73, 0x75, 0x6f, 0x6d, 0x69, 0x53, 0x75, 0x6f, 0x6d, 0x69, 0x66, diff --git a/src/corelib/time/qhijricalendar_data_p.h b/src/corelib/time/qhijricalendar_data_p.h index a6edc58314..aafb3b6a10 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-11-09 from the - Common Locale Data Repository v38 + This part of the file was generated on 2021-04-26 from the + Common Locale Data Repository v39 http://www.unicode.org/cldr/ @@ -505,7 +505,7 @@ static const QCalendarLocale locale_data[] = { { 138, 7, 157,{ 0,79 },{ 79,107 },{ 215,27 },{ 0,79 },{ 79,107 },{ 215,27 }}, // Yoruba/Latin/Nigeria { 138, 7, 23,{ 0,79 },{ 79,107 },{ 215,27 },{ 0,79 },{ 79,107 },{ 215,27 }}, // Yoruba/Latin/Benin { 140, 7, 195,{ 0,79 },{ 79,107 },{ 215,27 },{ 0,79 },{ 79,107 },{ 215,27 }}, // Zulu/Latin/South Africa - { 141, 7, 161,{ 0,79 },{ 79,107 },{ 215,27 },{ 0,79 },{ 79,107 },{ 215,27 }}, // Norwegian Nynorsk/Latin/Norway + { 141, 7, 161,{ 5041,79 },{ 5120,107 },{ 215,27 },{ 5227,79 },{ 5120,107 },{ 215,27 }}, // Norwegian Nynorsk/Latin/Norway { 142, 7, 27,{ 10423,75 },{ 10498,100 },{ 215,27 },{ 10423,75 },{ 10498,100 },{ 215,27 }}, // Bosnian/Latin/Bosnia And Herzegowina { 142, 2, 27,{ 6638,70 },{ 6708,91 },{ 215,27 },{ 6638,70 },{ 6799,98 },{ 215,27 }}, // Bosnian/Cyrillic/Bosnia And Herzegowina { 143, 29, 131,{ 0,79 },{ 79,107 },{ 215,27 },{ 0,79 },{ 79,107 },{ 215,27 }}, // Divehi/Thaana/Maldives diff --git a/src/corelib/time/qjalalicalendar_data_p.h b/src/corelib/time/qjalalicalendar_data_p.h index 15b34755c6..e59bfc82c3 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-11-09 from the - Common Locale Data Repository v38 + This part of the file was generated on 2021-04-26 from the + Common Locale Data Repository v39 http://www.unicode.org/cldr/ @@ -505,7 +505,7 @@ static const QCalendarLocale locale_data[] = { { 138, 7, 157,{ 48,84 },{ 48,84 },{ 185,27 },{ 48,84 },{ 48,84 },{ 185,27 }}, // Yoruba/Latin/Nigeria { 138, 7, 23,{ 48,84 },{ 48,84 },{ 185,27 },{ 48,84 },{ 48,84 },{ 185,27 }}, // Yoruba/Latin/Benin { 140, 7, 195,{ 48,84 },{ 48,84 },{ 185,27 },{ 48,84 },{ 48,84 },{ 185,27 }}, // Zulu/Latin/South Africa - { 141, 7, 161,{ 48,84 },{ 48,84 },{ 185,27 },{ 48,84 },{ 48,84 },{ 185,27 }}, // Norwegian Nynorsk/Latin/Norway + { 141, 7, 161,{ 682,84 },{ 682,84 },{ 185,27 },{ 682,84 },{ 682,84 },{ 185,27 }}, // Norwegian Nynorsk/Latin/Norway { 142, 7, 27,{ 48,84 },{ 48,84 },{ 185,27 },{ 48,84 },{ 48,84 },{ 185,27 }}, // Bosnian/Latin/Bosnia And Herzegowina { 142, 2, 27,{ 3275,81 },{ 3275,81 },{ 185,27 },{ 3275,81 },{ 3275,81 },{ 185,27 }}, // Bosnian/Cyrillic/Bosnia And Herzegowina { 143, 29, 131,{ 48,84 },{ 48,84 },{ 185,27 },{ 48,84 },{ 48,84 },{ 185,27 }}, // Divehi/Thaana/Maldives diff --git a/src/corelib/time/qromancalendar_data_p.h b/src/corelib/time/qromancalendar_data_p.h index 459493ffba..d283169b5b 100644 --- a/src/corelib/time/qromancalendar_data_p.h +++ b/src/corelib/time/qromancalendar_data_p.h @@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE // GENERATED PART STARTS HERE /* - This part of the file was generated on 2020-11-09 from the + This part of the file was generated on 2021-04-26 from the Common Locale Data Repository v38 http://www.unicode.org/cldr/ diff --git a/src/corelib/time/qtimezoneprivate_data_p.h b/src/corelib/time/qtimezoneprivate_data_p.h index abf9076638..7d3577b5df 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 2021-01-27 from the - Common Locale Data Repository v38.1 file supplemental/windowsZones.xml + This part of the file was generated on 2021-04-26 from the + Common Locale Data Repository v39 file supplemental/windowsZones.xml http://www.unicode.org/cldr/ @@ -215,283 +215,284 @@ static const QZoneData zoneDataTable[] = { { 36, 194, 2061 }, // E. Africa Standard Time / Somalia { 36, 210, 2078 }, // E. Africa Standard Time / Tanzania { 36, 221, 2099 }, // E. Africa Standard Time / Uganda - { 36, 254, 2114 }, // E. Africa Standard Time / South Sudan - { 37, 13, 2126 }, // E. Australia Standard Time / Australia - { 38, 141, 2164 }, // E. Europe Standard Time / Moldova - { 39, 30, 2180 }, // E. South America Standard Time / Brazil - { 40, 43, 2198 }, // Easter Island Standard Time / Chile - { 41, 0, 2213 }, // Eastern Standard Time / AnyCountry - { 41, 16, 2221 }, // Eastern Standard Time / Bahamas - { 41, 38, 2236 }, // Eastern Standard Time / Canada - { 41, 225, 2341 }, // Eastern Standard Time / United States - { 42, 139, 2498 }, // Eastern Standard Time (Mexico) / Mexico - { 43, 64, 2513 }, // Egypt Standard Time / Egypt - { 44, 178, 2526 }, // Ekaterinburg Standard Time / Russia - { 45, 72, 2545 }, // Fiji Standard Time / Fiji - { 46, 33, 2558 }, // FLE Standard Time / Bulgaria - { 46, 68, 2571 }, // FLE Standard Time / Estonia - { 46, 73, 2586 }, // FLE Standard Time / Finland - { 46, 118, 2602 }, // FLE Standard Time / Latvia - { 46, 124, 2614 }, // FLE Standard Time / Lithuania - { 46, 222, 2629 }, // FLE Standard Time / Ukraine - { 46, 248, 2675 }, // FLE Standard Time / Aland Islands - { 47, 81, 2692 }, // Georgian Standard Time / Georgia - { 48, 71, 2705 }, // GMT Standard Time / Faroe Islands - { 48, 75, 2721 }, // GMT Standard Time / Guernsey - { 48, 104, 2737 }, // GMT Standard Time / Ireland - { 48, 173, 2751 }, // GMT Standard Time / Portugal - { 48, 197, 2782 }, // GMT Standard Time / Spain - { 48, 224, 2798 }, // GMT Standard Time / United Kingdom - { 48, 251, 2812 }, // GMT Standard Time / Isle Of Man - { 48, 252, 2831 }, // GMT Standard Time / Jersey - { 49, 86, 2845 }, // Greenland Standard Time / Greenland - { 50, 34, 2861 }, // Greenwich Standard Time / Burkina Faso - { 50, 53, 2880 }, // Greenwich Standard Time / Ivory Coast - { 50, 80, 2895 }, // Greenwich Standard Time / Gambia - { 50, 83, 2909 }, // Greenwich Standard Time / Ghana - { 50, 91, 2922 }, // Greenwich Standard Time / Guinea - { 50, 92, 2937 }, // Greenwich Standard Time / Guinea Bissau - { 50, 99, 2951 }, // Greenwich Standard Time / Iceland - { 50, 121, 2970 }, // Greenwich Standard Time / Liberia - { 50, 132, 2986 }, // Greenwich Standard Time / Mali - { 50, 136, 3000 }, // Greenwich Standard Time / Mauritania - { 50, 187, 3018 }, // Greenwich Standard Time / Senegal - { 50, 189, 3031 }, // Greenwich Standard Time / Sierra Leone - { 50, 199, 3047 }, // Greenwich Standard Time / Saint Helena - { 50, 212, 3066 }, // Greenwich Standard Time / Togo - { 51, 56, 3078 }, // GTB Standard Time / Cyprus - { 51, 85, 3106 }, // GTB Standard Time / Greece - { 51, 177, 3120 }, // GTB Standard Time / Romania - { 52, 94, 3137 }, // Haiti Standard Time / Haiti - { 53, 0, 3160 }, // Hawaiian Standard Time / AnyCountry - { 53, 51, 3171 }, // Hawaiian Standard Time / Cook Islands - { 53, 77, 3189 }, // Hawaiian Standard Time / French Polynesia - { 53, 225, 3204 }, // Hawaiian Standard Time / United States - { 53, 226, 3221 }, // Hawaiian Standard Time / United States Minor Outlying Islands - { 54, 100, 3238 }, // India Standard Time / India - { 55, 102, 3252 }, // Iran Standard Time / Iran - { 56, 105, 3264 }, // Israel Standard Time / Israel - { 57, 109, 3279 }, // Jordan Standard Time / Jordan - { 58, 178, 3290 }, // Kaliningrad Standard Time / Russia - { 59, 114, 3309 }, // Korea Standard Time / South Korea - { 60, 122, 3320 }, // Libya Standard Time / Libya - { 61, 0, 3335 }, // Line Islands Standard Time / AnyCountry - { 61, 112, 3346 }, // Line Islands Standard Time / Kiribati - { 62, 13, 3365 }, // Lord Howe Standard Time / Australia - { 63, 178, 3385 }, // Magadan Standard Time / Russia - { 64, 43, 3398 }, // Magallanes Standard Time / Chile - { 65, 77, 3419 }, // Marquesas Standard Time / French Polynesia - { 66, 137, 3437 }, // Mauritius Standard Time / Mauritius - { 66, 176, 3454 }, // Mauritius Standard Time / Reunion - { 66, 188, 3469 }, // Mauritius Standard Time / Seychelles - { 67, 119, 3481 }, // Middle East Standard Time / Lebanon - { 68, 227, 3493 }, // Montevideo Standard Time / Uruguay - { 69, 145, 3512 }, // Morocco Standard Time / Morocco - { 69, 236, 3530 }, // Morocco Standard Time / Western Sahara - { 70, 139, 3546 }, // Mountain Standard Time (Mexico) / Mexico - { 71, 0, 3581 }, // Mountain Standard Time / AnyCountry - { 71, 38, 3589 }, // Mountain Standard Time / Canada - { 71, 139, 3663 }, // Mountain Standard Time / Mexico - { 71, 225, 3679 }, // Mountain Standard Time / United States - { 72, 46, 3708 }, // Myanmar Standard Time / Cocos Islands - { 72, 147, 3721 }, // Myanmar Standard Time / Myanmar - { 73, 178, 3734 }, // N. Central Asia Standard Time / Russia - { 74, 148, 3751 }, // Namibia Standard Time / Namibia - { 75, 150, 3767 }, // Nepal Standard Time / Nepal - { 76, 8, 3781 }, // New Zealand Standard Time / Antarctica - { 76, 154, 3800 }, // New Zealand Standard Time / New Zealand - { 77, 38, 3817 }, // Newfoundland Standard Time / Canada - { 78, 159, 3834 }, // Norfolk Standard Time / Norfolk Island - { 79, 178, 3850 }, // North Asia East Standard Time / Russia - { 80, 178, 3863 }, // North Asia Standard Time / Russia - { 81, 113, 3898 }, // North Korea Standard Time / North Korea - { 82, 178, 3913 }, // Omsk Standard Time / Russia - { 83, 43, 3923 }, // Pacific SA Standard Time / Chile - { 84, 0, 3940 }, // Pacific Standard Time / AnyCountry - { 84, 38, 3948 }, // Pacific Standard Time / Canada - { 84, 225, 3966 }, // Pacific Standard Time / United States - { 85, 139, 3986 }, // Pacific Standard Time (Mexico) / Mexico - { 86, 163, 4023 }, // Pakistan Standard Time / Pakistan - { 87, 168, 4036 }, // Paraguay Standard Time / Paraguay - { 88, 110, 4053 }, // Qyzylorda Standard Time / Kazakhstan - { 89, 21, 4068 }, // Romance Standard Time / Belgium - { 89, 58, 4084 }, // Romance Standard Time / Denmark - { 89, 74, 4102 }, // Romance Standard Time / France - { 89, 197, 4115 }, // Romance Standard Time / Spain - { 90, 178, 4142 }, // Russia Time Zone 3 / Russia - { 91, 178, 4156 }, // Russia Time Zone 10 / Russia - { 92, 178, 4175 }, // Russia Time Zone 11 / Russia - { 93, 178, 4202 }, // Russian Standard Time / Russia - { 93, 222, 4229 }, // Russian Standard Time / Ukraine - { 94, 0, 4247 }, // SA Eastern Standard Time / AnyCountry - { 94, 8, 4257 }, // SA Eastern Standard Time / Antarctica - { 94, 30, 4294 }, // SA Eastern Standard Time / Brazil - { 94, 70, 4373 }, // SA Eastern Standard Time / Falkland Islands - { 94, 76, 4390 }, // SA Eastern Standard Time / French Guiana - { 94, 202, 4406 }, // SA Eastern Standard Time / Suriname - { 95, 0, 4425 }, // SA Pacific Standard Time / AnyCountry - { 95, 30, 4435 }, // SA Pacific Standard Time / Brazil - { 95, 38, 4471 }, // SA Pacific Standard Time / Canada - { 95, 40, 4493 }, // SA Pacific Standard Time / Cayman Islands - { 95, 47, 4508 }, // SA Pacific Standard Time / Colombia - { 95, 63, 4523 }, // SA Pacific Standard Time / Ecuador - { 95, 107, 4541 }, // SA Pacific Standard Time / Jamaica - { 95, 166, 4557 }, // SA Pacific Standard Time / Panama - { 95, 169, 4572 }, // SA Pacific Standard Time / Peru - { 96, 0, 4585 }, // SA Western Standard Time / AnyCountry - { 96, 7, 4595 }, // SA Western Standard Time / Anguilla - { 96, 9, 4612 }, // SA Western Standard Time / Antigua And Barbuda - { 96, 12, 4628 }, // SA Western Standard Time / Aruba - { 96, 19, 4642 }, // SA Western Standard Time / Barbados - { 96, 26, 4659 }, // SA Western Standard Time / Bolivia - { 96, 30, 4674 }, // SA Western Standard Time / Brazil - { 96, 38, 4727 }, // SA Western Standard Time / Canada - { 96, 60, 4748 }, // SA Western Standard Time / Dominica - { 96, 61, 4765 }, // SA Western Standard Time / Dominican Republic - { 96, 87, 4787 }, // SA Western Standard Time / Grenada - { 96, 88, 4803 }, // SA Western Standard Time / Guadeloupe - { 96, 93, 4822 }, // SA Western Standard Time / Guyana - { 96, 135, 4837 }, // SA Western Standard Time / Martinique - { 96, 144, 4856 }, // SA Western Standard Time / Montserrat - { 96, 152, 4875 }, // SA Western Standard Time / Cura Sao - { 96, 174, 4891 }, // SA Western Standard Time / Puerto Rico - { 96, 180, 4911 }, // SA Western Standard Time / Saint Kitts And Nevis - { 96, 181, 4928 }, // SA Western Standard Time / Saint Lucia - { 96, 182, 4945 }, // SA Western Standard Time / Saint Vincent And The Grenadines - { 96, 215, 4964 }, // SA Western Standard Time / Trinidad And Tobago - { 96, 233, 4986 }, // SA Western Standard Time / British Virgin Islands - { 96, 234, 5002 }, // SA Western Standard Time / United States Virgin Islands - { 96, 244, 5020 }, // SA Western Standard Time / Saint Barthelemy - { 96, 245, 5042 }, // SA Western Standard Time / Saint Martin - { 96, 255, 5058 }, // SA Western Standard Time / Bonaire - { 96, 256, 5077 }, // SA Western Standard Time / Sint Maarten - { 97, 200, 5099 }, // Saint Pierre Standard Time / Saint Pierre And Miquelon - { 98, 178, 5116 }, // Sakhalin Standard Time / Russia - { 99, 183, 5130 }, // Samoa Standard Time / Samoa - { 100, 185, 5143 }, // Sao Tome Standard Time / Sao Tome And Principe - { 101, 178, 5159 }, // Saratov Standard Time / Russia - { 102, 0, 5174 }, // SE Asia Standard Time / AnyCountry - { 102, 8, 5184 }, // SE Asia Standard Time / Antarctica - { 102, 36, 5201 }, // SE Asia Standard Time / Cambodia - { 102, 45, 5217 }, // SE Asia Standard Time / Christmas Island - { 102, 101, 5234 }, // SE Asia Standard Time / Indonesia - { 102, 117, 5262 }, // SE Asia Standard Time / Laos - { 102, 211, 5277 }, // SE Asia Standard Time / Thailand - { 102, 232, 5290 }, // SE Asia Standard Time / Vietnam - { 103, 0, 5302 }, // Singapore Standard Time / AnyCountry - { 103, 32, 5312 }, // Singapore Standard Time / Brunei - { 103, 101, 5324 }, // Singapore Standard Time / Indonesia - { 103, 130, 5338 }, // Singapore Standard Time / Malaysia - { 103, 170, 5369 }, // Singapore Standard Time / Philippines - { 103, 190, 5381 }, // Singapore Standard Time / Singapore - { 104, 0, 5396 }, // South Africa Standard Time / AnyCountry - { 104, 28, 5406 }, // South Africa Standard Time / Botswana - { 104, 35, 5422 }, // South Africa Standard Time / Burundi - { 104, 49, 5439 }, // South Africa Standard Time / Congo Kinshasa - { 104, 120, 5457 }, // South Africa Standard Time / Lesotho - { 104, 129, 5471 }, // South Africa Standard Time / Malawi - { 104, 146, 5487 }, // South Africa Standard Time / Mozambique - { 104, 179, 5501 }, // South Africa Standard Time / Rwanda - { 104, 195, 5515 }, // South Africa Standard Time / South Africa - { 104, 204, 5535 }, // South Africa Standard Time / Swaziland - { 104, 239, 5550 }, // South Africa Standard Time / Zambia - { 104, 240, 5564 }, // South Africa Standard Time / Zimbabwe - { 105, 198, 5578 }, // Sri Lanka Standard Time / Sri Lanka - { 106, 201, 5591 }, // Sudan Standard Time / Sudan - { 107, 207, 5607 }, // Syria Standard Time / Syria - { 108, 208, 5621 }, // Taipei Standard Time / Taiwan - { 109, 13, 5633 }, // Tasmania Standard Time / Australia - { 110, 30, 5688 }, // Tocantins Standard Time / Brazil - { 111, 0, 5706 }, // Tokyo Standard Time / AnyCountry - { 111, 62, 5716 }, // Tokyo Standard Time / East Timor - { 111, 101, 5726 }, // Tokyo Standard Time / Indonesia - { 111, 108, 5740 }, // Tokyo Standard Time / Japan - { 111, 164, 5751 }, // Tokyo Standard Time / Palau - { 112, 178, 5765 }, // Tomsk Standard Time / Russia - { 113, 214, 5776 }, // Tonga Standard Time / Tonga - { 114, 178, 5794 }, // Transbaikal Standard Time / Russia - { 115, 217, 5805 }, // Turkey Standard Time / Turkey - { 116, 219, 5821 }, // Turks And Caicos Standard Time / Turks And Caicos Islands - { 117, 143, 5840 }, // Ulaanbaatar Standard Time / Mongolia - { 118, 225, 5873 }, // US Eastern Standard Time / United States - { 119, 0, 5940 }, // US Mountain Standard Time / AnyCountry - { 119, 139, 5950 }, // US Mountain Standard Time / Mexico - { 119, 225, 5969 }, // US Mountain Standard Time / United States - { 120, 0, 5985 }, // UTC-11 / AnyCountry - { 120, 4, 5996 }, // UTC-11 / American Samoa - { 120, 158, 6014 }, // UTC-11 / Niue - { 120, 226, 6027 }, // UTC-11 / United States Minor Outlying Islands - { 121, 0, 6042 }, // UTC-09 / AnyCountry - { 121, 77, 6052 }, // UTC-09 / French Polynesia - { 122, 0, 6068 }, // UTC-08 / AnyCountry - { 122, 171, 6078 }, // UTC-08 / Pitcairn - { 123, 0, 6095 }, // UTC-02 / AnyCountry - { 123, 30, 6105 }, // UTC-02 / Brazil - { 123, 196, 6121 }, // UTC-02 / South Georgia And The South Sandwich Islands - { 124, 0, 6144 }, // UTC / AnyCountry - { 124, 86, 6160 }, // UTC / Greenland - { 125, 0, 6181 }, // UTC+12 / AnyCountry - { 125, 112, 6192 }, // UTC+12 / Kiribati - { 125, 134, 6207 }, // UTC+12 / Marshall Islands - { 125, 149, 6240 }, // UTC+12 / Nauru - { 125, 220, 6254 }, // UTC+12 / Tuvalu - { 125, 226, 6271 }, // UTC+12 / United States Minor Outlying Islands - { 125, 235, 6284 }, // UTC+12 / Wallis And Futuna Islands - { 126, 0, 6299 }, // UTC+13 / AnyCountry - { 126, 112, 6310 }, // UTC+13 / Kiribati - { 126, 213, 6328 }, // UTC+13 / Tokelau - { 127, 231, 6344 }, // Venezuela Standard Time / Venezuela - { 128, 178, 6360 }, // Vladivostok Standard Time / Russia - { 129, 178, 6391 }, // Volgograd Standard Time / Russia - { 130, 13, 6408 }, // W. Australia Standard Time / Australia - { 131, 0, 6424 }, // W. Central Africa Standard Time / AnyCountry - { 131, 3, 6434 }, // W. Central Africa Standard Time / Algeria - { 131, 6, 6449 }, // W. Central Africa Standard Time / Angola - { 131, 23, 6463 }, // W. Central Africa Standard Time / Benin - { 131, 37, 6481 }, // W. Central Africa Standard Time / Cameroon - { 131, 41, 6495 }, // W. Central Africa Standard Time / Central African Republic - { 131, 42, 6509 }, // W. Central Africa Standard Time / Chad - { 131, 49, 6525 }, // W. Central Africa Standard Time / Congo Kinshasa - { 131, 50, 6541 }, // W. Central Africa Standard Time / Congo Brazzaville - { 131, 66, 6560 }, // W. Central Africa Standard Time / Equatorial Guinea - { 131, 79, 6574 }, // W. Central Africa Standard Time / Gabon - { 131, 156, 6592 }, // W. Central Africa Standard Time / Niger - { 131, 157, 6606 }, // W. Central Africa Standard Time / Nigeria - { 131, 216, 6619 }, // W. Central Africa Standard Time / Tunisia - { 132, 5, 6632 }, // W. Europe Standard Time / Andorra - { 132, 14, 6647 }, // W. Europe Standard Time / Austria - { 132, 82, 6661 }, // W. Europe Standard Time / Germany - { 132, 84, 6691 }, // W. Europe Standard Time / Gibraltar - { 132, 106, 6708 }, // W. Europe Standard Time / Italy - { 132, 123, 6720 }, // W. Europe Standard Time / Liechtenstein - { 132, 125, 6733 }, // W. Europe Standard Time / Luxembourg - { 132, 133, 6751 }, // W. Europe Standard Time / Malta - { 132, 142, 6764 }, // W. Europe Standard Time / Monaco - { 132, 151, 6778 }, // W. Europe Standard Time / Netherlands - { 132, 161, 6795 }, // W. Europe Standard Time / Norway - { 132, 184, 6807 }, // W. Europe Standard Time / San Marino - { 132, 203, 6825 }, // W. Europe Standard Time / Svalbard And Jan Mayen Islands - { 132, 205, 6845 }, // W. Europe Standard Time / Sweden - { 132, 206, 6862 }, // W. Europe Standard Time / Switzerland - { 132, 230, 6876 }, // W. Europe Standard Time / Vatican City State - { 133, 143, 6891 }, // W. Mongolia Standard Time / Mongolia - { 134, 0, 6901 }, // West Asia Standard Time / AnyCountry - { 134, 8, 6911 }, // West Asia Standard Time / Antarctica - { 134, 78, 6929 }, // West Asia Standard Time / French Southern Territories - { 134, 110, 6946 }, // West Asia Standard Time / Kazakhstan - { 134, 131, 6991 }, // West Asia Standard Time / Maldives - { 134, 209, 7007 }, // West Asia Standard Time / Tajikistan - { 134, 218, 7021 }, // West Asia Standard Time / Turkmenistan - { 134, 228, 7035 }, // West Asia Standard Time / Uzbekistan - { 135, 165, 7064 }, // West Bank Standard Time / Palestinian Territories - { 136, 0, 7086 }, // West Pacific Standard Time / AnyCountry - { 136, 8, 7097 }, // West Pacific Standard Time / Antarctica - { 136, 89, 7123 }, // West Pacific Standard Time / Guam - { 136, 140, 7136 }, // West Pacific Standard Time / Micronesia - { 136, 160, 7149 }, // West Pacific Standard Time / Northern Mariana Islands - { 136, 167, 7164 }, // West Pacific Standard Time / Papua New Guinea - { 137, 178, 7185 }, // Yakutsk Standard Time / Russia - { 138, 38, 7212 }, // Yukon Standard Time / Canada + { 37, 13, 2114 }, // E. Australia Standard Time / Australia + { 38, 141, 2152 }, // E. Europe Standard Time / Moldova + { 39, 30, 2168 }, // E. South America Standard Time / Brazil + { 40, 43, 2186 }, // Easter Island Standard Time / Chile + { 41, 0, 2201 }, // Eastern Standard Time / AnyCountry + { 41, 16, 2209 }, // Eastern Standard Time / Bahamas + { 41, 38, 2224 }, // Eastern Standard Time / Canada + { 41, 225, 2329 }, // Eastern Standard Time / United States + { 42, 139, 2486 }, // Eastern Standard Time (Mexico) / Mexico + { 43, 64, 2501 }, // Egypt Standard Time / Egypt + { 44, 178, 2514 }, // Ekaterinburg Standard Time / Russia + { 45, 72, 2533 }, // Fiji Standard Time / Fiji + { 46, 33, 2546 }, // FLE Standard Time / Bulgaria + { 46, 68, 2559 }, // FLE Standard Time / Estonia + { 46, 73, 2574 }, // FLE Standard Time / Finland + { 46, 118, 2590 }, // FLE Standard Time / Latvia + { 46, 124, 2602 }, // FLE Standard Time / Lithuania + { 46, 222, 2617 }, // FLE Standard Time / Ukraine + { 46, 248, 2663 }, // FLE Standard Time / Aland Islands + { 47, 81, 2680 }, // Georgian Standard Time / Georgia + { 48, 71, 2693 }, // GMT Standard Time / Faroe Islands + { 48, 75, 2709 }, // GMT Standard Time / Guernsey + { 48, 104, 2725 }, // GMT Standard Time / Ireland + { 48, 173, 2739 }, // GMT Standard Time / Portugal + { 48, 197, 2770 }, // GMT Standard Time / Spain + { 48, 224, 2786 }, // GMT Standard Time / United Kingdom + { 48, 251, 2800 }, // GMT Standard Time / Isle Of Man + { 48, 252, 2819 }, // GMT Standard Time / Jersey + { 49, 86, 2833 }, // Greenland Standard Time / Greenland + { 50, 34, 2849 }, // Greenwich Standard Time / Burkina Faso + { 50, 53, 2868 }, // Greenwich Standard Time / Ivory Coast + { 50, 80, 2883 }, // Greenwich Standard Time / Gambia + { 50, 83, 2897 }, // Greenwich Standard Time / Ghana + { 50, 86, 2910 }, // Greenwich Standard Time / Greenland + { 50, 91, 2931 }, // Greenwich Standard Time / Guinea + { 50, 92, 2946 }, // Greenwich Standard Time / Guinea Bissau + { 50, 99, 2960 }, // Greenwich Standard Time / Iceland + { 50, 121, 2979 }, // Greenwich Standard Time / Liberia + { 50, 132, 2995 }, // Greenwich Standard Time / Mali + { 50, 136, 3009 }, // Greenwich Standard Time / Mauritania + { 50, 187, 3027 }, // Greenwich Standard Time / Senegal + { 50, 189, 3040 }, // Greenwich Standard Time / Sierra Leone + { 50, 199, 3056 }, // Greenwich Standard Time / Saint Helena + { 50, 212, 3075 }, // Greenwich Standard Time / Togo + { 51, 56, 3087 }, // GTB Standard Time / Cyprus + { 51, 85, 3115 }, // GTB Standard Time / Greece + { 51, 177, 3129 }, // GTB Standard Time / Romania + { 52, 94, 3146 }, // Haiti Standard Time / Haiti + { 53, 0, 3169 }, // Hawaiian Standard Time / AnyCountry + { 53, 51, 3180 }, // Hawaiian Standard Time / Cook Islands + { 53, 77, 3198 }, // Hawaiian Standard Time / French Polynesia + { 53, 225, 3213 }, // Hawaiian Standard Time / United States + { 53, 226, 3230 }, // Hawaiian Standard Time / United States Minor Outlying Islands + { 54, 100, 3247 }, // India Standard Time / India + { 55, 102, 3261 }, // Iran Standard Time / Iran + { 56, 105, 3273 }, // Israel Standard Time / Israel + { 57, 109, 3288 }, // Jordan Standard Time / Jordan + { 58, 178, 3299 }, // Kaliningrad Standard Time / Russia + { 59, 114, 3318 }, // Korea Standard Time / South Korea + { 60, 122, 3329 }, // Libya Standard Time / Libya + { 61, 0, 3344 }, // Line Islands Standard Time / AnyCountry + { 61, 112, 3355 }, // Line Islands Standard Time / Kiribati + { 62, 13, 3374 }, // Lord Howe Standard Time / Australia + { 63, 178, 3394 }, // Magadan Standard Time / Russia + { 64, 43, 3407 }, // Magallanes Standard Time / Chile + { 65, 77, 3428 }, // Marquesas Standard Time / French Polynesia + { 66, 137, 3446 }, // Mauritius Standard Time / Mauritius + { 66, 176, 3463 }, // Mauritius Standard Time / Reunion + { 66, 188, 3478 }, // Mauritius Standard Time / Seychelles + { 67, 119, 3490 }, // Middle East Standard Time / Lebanon + { 68, 227, 3502 }, // Montevideo Standard Time / Uruguay + { 69, 145, 3521 }, // Morocco Standard Time / Morocco + { 69, 236, 3539 }, // Morocco Standard Time / Western Sahara + { 70, 139, 3555 }, // Mountain Standard Time (Mexico) / Mexico + { 71, 0, 3590 }, // Mountain Standard Time / AnyCountry + { 71, 38, 3598 }, // Mountain Standard Time / Canada + { 71, 139, 3672 }, // Mountain Standard Time / Mexico + { 71, 225, 3688 }, // Mountain Standard Time / United States + { 72, 46, 3717 }, // Myanmar Standard Time / Cocos Islands + { 72, 147, 3730 }, // Myanmar Standard Time / Myanmar + { 73, 178, 3743 }, // N. Central Asia Standard Time / Russia + { 74, 148, 3760 }, // Namibia Standard Time / Namibia + { 75, 150, 3776 }, // Nepal Standard Time / Nepal + { 76, 8, 3790 }, // New Zealand Standard Time / Antarctica + { 76, 154, 3809 }, // New Zealand Standard Time / New Zealand + { 77, 38, 3826 }, // Newfoundland Standard Time / Canada + { 78, 159, 3843 }, // Norfolk Standard Time / Norfolk Island + { 79, 178, 3859 }, // North Asia East Standard Time / Russia + { 80, 178, 3872 }, // North Asia Standard Time / Russia + { 81, 113, 3907 }, // North Korea Standard Time / North Korea + { 82, 178, 3922 }, // Omsk Standard Time / Russia + { 83, 43, 3932 }, // Pacific SA Standard Time / Chile + { 84, 0, 3949 }, // Pacific Standard Time / AnyCountry + { 84, 38, 3957 }, // Pacific Standard Time / Canada + { 84, 225, 3975 }, // Pacific Standard Time / United States + { 85, 139, 3995 }, // Pacific Standard Time (Mexico) / Mexico + { 86, 163, 4032 }, // Pakistan Standard Time / Pakistan + { 87, 168, 4045 }, // Paraguay Standard Time / Paraguay + { 88, 110, 4062 }, // Qyzylorda Standard Time / Kazakhstan + { 89, 21, 4077 }, // Romance Standard Time / Belgium + { 89, 58, 4093 }, // Romance Standard Time / Denmark + { 89, 74, 4111 }, // Romance Standard Time / France + { 89, 197, 4124 }, // Romance Standard Time / Spain + { 90, 178, 4151 }, // Russia Time Zone 3 / Russia + { 91, 178, 4165 }, // Russia Time Zone 10 / Russia + { 92, 178, 4184 }, // Russia Time Zone 11 / Russia + { 93, 178, 4211 }, // Russian Standard Time / Russia + { 93, 222, 4238 }, // Russian Standard Time / Ukraine + { 94, 0, 4256 }, // SA Eastern Standard Time / AnyCountry + { 94, 8, 4266 }, // SA Eastern Standard Time / Antarctica + { 94, 30, 4303 }, // SA Eastern Standard Time / Brazil + { 94, 70, 4382 }, // SA Eastern Standard Time / Falkland Islands + { 94, 76, 4399 }, // SA Eastern Standard Time / French Guiana + { 94, 202, 4415 }, // SA Eastern Standard Time / Suriname + { 95, 0, 4434 }, // SA Pacific Standard Time / AnyCountry + { 95, 30, 4444 }, // SA Pacific Standard Time / Brazil + { 95, 38, 4480 }, // SA Pacific Standard Time / Canada + { 95, 40, 4502 }, // SA Pacific Standard Time / Cayman Islands + { 95, 47, 4517 }, // SA Pacific Standard Time / Colombia + { 95, 63, 4532 }, // SA Pacific Standard Time / Ecuador + { 95, 107, 4550 }, // SA Pacific Standard Time / Jamaica + { 95, 166, 4566 }, // SA Pacific Standard Time / Panama + { 95, 169, 4581 }, // SA Pacific Standard Time / Peru + { 96, 0, 4594 }, // SA Western Standard Time / AnyCountry + { 96, 7, 4604 }, // SA Western Standard Time / Anguilla + { 96, 9, 4621 }, // SA Western Standard Time / Antigua And Barbuda + { 96, 12, 4637 }, // SA Western Standard Time / Aruba + { 96, 19, 4651 }, // SA Western Standard Time / Barbados + { 96, 26, 4668 }, // SA Western Standard Time / Bolivia + { 96, 30, 4683 }, // SA Western Standard Time / Brazil + { 96, 38, 4736 }, // SA Western Standard Time / Canada + { 96, 60, 4757 }, // SA Western Standard Time / Dominica + { 96, 61, 4774 }, // SA Western Standard Time / Dominican Republic + { 96, 87, 4796 }, // SA Western Standard Time / Grenada + { 96, 88, 4812 }, // SA Western Standard Time / Guadeloupe + { 96, 93, 4831 }, // SA Western Standard Time / Guyana + { 96, 135, 4846 }, // SA Western Standard Time / Martinique + { 96, 144, 4865 }, // SA Western Standard Time / Montserrat + { 96, 152, 4884 }, // SA Western Standard Time / Cura Sao + { 96, 174, 4900 }, // SA Western Standard Time / Puerto Rico + { 96, 180, 4920 }, // SA Western Standard Time / Saint Kitts And Nevis + { 96, 181, 4937 }, // SA Western Standard Time / Saint Lucia + { 96, 182, 4954 }, // SA Western Standard Time / Saint Vincent And The Grenadines + { 96, 215, 4973 }, // SA Western Standard Time / Trinidad And Tobago + { 96, 233, 4995 }, // SA Western Standard Time / British Virgin Islands + { 96, 234, 5011 }, // SA Western Standard Time / United States Virgin Islands + { 96, 244, 5029 }, // SA Western Standard Time / Saint Barthelemy + { 96, 245, 5051 }, // SA Western Standard Time / Saint Martin + { 96, 255, 5067 }, // SA Western Standard Time / Bonaire + { 96, 256, 5086 }, // SA Western Standard Time / Sint Maarten + { 97, 200, 5108 }, // Saint Pierre Standard Time / Saint Pierre And Miquelon + { 98, 178, 5125 }, // Sakhalin Standard Time / Russia + { 99, 183, 5139 }, // Samoa Standard Time / Samoa + { 100, 185, 5152 }, // Sao Tome Standard Time / Sao Tome And Principe + { 101, 178, 5168 }, // Saratov Standard Time / Russia + { 102, 0, 5183 }, // SE Asia Standard Time / AnyCountry + { 102, 8, 5193 }, // SE Asia Standard Time / Antarctica + { 102, 36, 5210 }, // SE Asia Standard Time / Cambodia + { 102, 45, 5226 }, // SE Asia Standard Time / Christmas Island + { 102, 101, 5243 }, // SE Asia Standard Time / Indonesia + { 102, 117, 5271 }, // SE Asia Standard Time / Laos + { 102, 211, 5286 }, // SE Asia Standard Time / Thailand + { 102, 232, 5299 }, // SE Asia Standard Time / Vietnam + { 103, 0, 5311 }, // Singapore Standard Time / AnyCountry + { 103, 32, 5321 }, // Singapore Standard Time / Brunei + { 103, 101, 5333 }, // Singapore Standard Time / Indonesia + { 103, 130, 5347 }, // Singapore Standard Time / Malaysia + { 103, 170, 5378 }, // Singapore Standard Time / Philippines + { 103, 190, 5390 }, // Singapore Standard Time / Singapore + { 104, 0, 5405 }, // South Africa Standard Time / AnyCountry + { 104, 28, 5415 }, // South Africa Standard Time / Botswana + { 104, 35, 5431 }, // South Africa Standard Time / Burundi + { 104, 49, 5448 }, // South Africa Standard Time / Congo Kinshasa + { 104, 120, 5466 }, // South Africa Standard Time / Lesotho + { 104, 129, 5480 }, // South Africa Standard Time / Malawi + { 104, 146, 5496 }, // South Africa Standard Time / Mozambique + { 104, 179, 5510 }, // South Africa Standard Time / Rwanda + { 104, 195, 5524 }, // South Africa Standard Time / South Africa + { 104, 204, 5544 }, // South Africa Standard Time / Swaziland + { 104, 239, 5559 }, // South Africa Standard Time / Zambia + { 104, 240, 5573 }, // South Africa Standard Time / Zimbabwe + { 104, 254, 5587 }, // South Africa Standard Time / South Sudan + { 105, 198, 5599 }, // Sri Lanka Standard Time / Sri Lanka + { 106, 201, 5612 }, // Sudan Standard Time / Sudan + { 107, 207, 5628 }, // Syria Standard Time / Syria + { 108, 208, 5642 }, // Taipei Standard Time / Taiwan + { 109, 13, 5654 }, // Tasmania Standard Time / Australia + { 110, 30, 5709 }, // Tocantins Standard Time / Brazil + { 111, 0, 5727 }, // Tokyo Standard Time / AnyCountry + { 111, 62, 5737 }, // Tokyo Standard Time / East Timor + { 111, 101, 5747 }, // Tokyo Standard Time / Indonesia + { 111, 108, 5761 }, // Tokyo Standard Time / Japan + { 111, 164, 5772 }, // Tokyo Standard Time / Palau + { 112, 178, 5786 }, // Tomsk Standard Time / Russia + { 113, 214, 5797 }, // Tonga Standard Time / Tonga + { 114, 178, 5815 }, // Transbaikal Standard Time / Russia + { 115, 217, 5826 }, // Turkey Standard Time / Turkey + { 116, 219, 5842 }, // Turks And Caicos Standard Time / Turks And Caicos Islands + { 117, 143, 5861 }, // Ulaanbaatar Standard Time / Mongolia + { 118, 225, 5894 }, // US Eastern Standard Time / United States + { 119, 0, 5961 }, // US Mountain Standard Time / AnyCountry + { 119, 38, 5971 }, // US Mountain Standard Time / Canada + { 119, 139, 6028 }, // US Mountain Standard Time / Mexico + { 119, 225, 6047 }, // US Mountain Standard Time / United States + { 120, 0, 6063 }, // UTC-11 / AnyCountry + { 120, 4, 6074 }, // UTC-11 / American Samoa + { 120, 158, 6092 }, // UTC-11 / Niue + { 120, 226, 6105 }, // UTC-11 / United States Minor Outlying Islands + { 121, 0, 6120 }, // UTC-09 / AnyCountry + { 121, 77, 6130 }, // UTC-09 / French Polynesia + { 122, 0, 6146 }, // UTC-08 / AnyCountry + { 122, 171, 6156 }, // UTC-08 / Pitcairn + { 123, 0, 6173 }, // UTC-02 / AnyCountry + { 123, 30, 6183 }, // UTC-02 / Brazil + { 123, 196, 6199 }, // UTC-02 / South Georgia And The South Sandwich Islands + { 124, 0, 6222 }, // UTC / AnyCountry + { 125, 0, 6238 }, // UTC+12 / AnyCountry + { 125, 112, 6249 }, // UTC+12 / Kiribati + { 125, 134, 6264 }, // UTC+12 / Marshall Islands + { 125, 149, 6297 }, // UTC+12 / Nauru + { 125, 220, 6311 }, // UTC+12 / Tuvalu + { 125, 226, 6328 }, // UTC+12 / United States Minor Outlying Islands + { 125, 235, 6341 }, // UTC+12 / Wallis And Futuna Islands + { 126, 0, 6356 }, // UTC+13 / AnyCountry + { 126, 112, 6367 }, // UTC+13 / Kiribati + { 126, 213, 6385 }, // UTC+13 / Tokelau + { 127, 231, 6401 }, // Venezuela Standard Time / Venezuela + { 128, 178, 6417 }, // Vladivostok Standard Time / Russia + { 129, 178, 6448 }, // Volgograd Standard Time / Russia + { 130, 13, 6465 }, // W. Australia Standard Time / Australia + { 131, 0, 6481 }, // W. Central Africa Standard Time / AnyCountry + { 131, 3, 6491 }, // W. Central Africa Standard Time / Algeria + { 131, 6, 6506 }, // W. Central Africa Standard Time / Angola + { 131, 23, 6520 }, // W. Central Africa Standard Time / Benin + { 131, 37, 6538 }, // W. Central Africa Standard Time / Cameroon + { 131, 41, 6552 }, // W. Central Africa Standard Time / Central African Republic + { 131, 42, 6566 }, // W. Central Africa Standard Time / Chad + { 131, 49, 6582 }, // W. Central Africa Standard Time / Congo Kinshasa + { 131, 50, 6598 }, // W. Central Africa Standard Time / Congo Brazzaville + { 131, 66, 6617 }, // W. Central Africa Standard Time / Equatorial Guinea + { 131, 79, 6631 }, // W. Central Africa Standard Time / Gabon + { 131, 156, 6649 }, // W. Central Africa Standard Time / Niger + { 131, 157, 6663 }, // W. Central Africa Standard Time / Nigeria + { 131, 216, 6676 }, // W. Central Africa Standard Time / Tunisia + { 132, 5, 6689 }, // W. Europe Standard Time / Andorra + { 132, 14, 6704 }, // W. Europe Standard Time / Austria + { 132, 82, 6718 }, // W. Europe Standard Time / Germany + { 132, 84, 6748 }, // W. Europe Standard Time / Gibraltar + { 132, 106, 6765 }, // W. Europe Standard Time / Italy + { 132, 123, 6777 }, // W. Europe Standard Time / Liechtenstein + { 132, 125, 6790 }, // W. Europe Standard Time / Luxembourg + { 132, 133, 6808 }, // W. Europe Standard Time / Malta + { 132, 142, 6821 }, // W. Europe Standard Time / Monaco + { 132, 151, 6835 }, // W. Europe Standard Time / Netherlands + { 132, 161, 6852 }, // W. Europe Standard Time / Norway + { 132, 184, 6864 }, // W. Europe Standard Time / San Marino + { 132, 203, 6882 }, // W. Europe Standard Time / Svalbard And Jan Mayen Islands + { 132, 205, 6902 }, // W. Europe Standard Time / Sweden + { 132, 206, 6919 }, // W. Europe Standard Time / Switzerland + { 132, 230, 6933 }, // W. Europe Standard Time / Vatican City State + { 133, 143, 6948 }, // W. Mongolia Standard Time / Mongolia + { 134, 0, 6958 }, // West Asia Standard Time / AnyCountry + { 134, 8, 6968 }, // West Asia Standard Time / Antarctica + { 134, 78, 6986 }, // West Asia Standard Time / French Southern Territories + { 134, 110, 7003 }, // West Asia Standard Time / Kazakhstan + { 134, 131, 7048 }, // West Asia Standard Time / Maldives + { 134, 209, 7064 }, // West Asia Standard Time / Tajikistan + { 134, 218, 7078 }, // West Asia Standard Time / Turkmenistan + { 134, 228, 7092 }, // West Asia Standard Time / Uzbekistan + { 135, 165, 7121 }, // West Bank Standard Time / Palestinian Territories + { 136, 0, 7143 }, // West Pacific Standard Time / AnyCountry + { 136, 8, 7154 }, // West Pacific Standard Time / Antarctica + { 136, 89, 7180 }, // West Pacific Standard Time / Guam + { 136, 140, 7193 }, // West Pacific Standard Time / Micronesia + { 136, 160, 7206 }, // West Pacific Standard Time / Northern Mariana Islands + { 136, 167, 7221 }, // West Pacific Standard Time / Papua New Guinea + { 137, 178, 7242 }, // Yakutsk Standard Time / Russia + { 138, 38, 7269 }, // Yukon Standard Time / Canada { 0, 0, 0 } // Trailing zeroes }; @@ -534,105 +535,105 @@ 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, 2798, 0 }, // GMT Standard Time - { 49, 1187, 2845,-10800 }, // Greenland Standard Time - { 50, 1211, 2951, 0 }, // Greenwich Standard Time - { 51, 1235, 3120, 7200 }, // GTB Standard Time - { 52, 1253, 3137,-18000 }, // Haiti Standard Time - { 53, 1273, 3204,-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, 2786, 0 }, // GMT Standard Time + { 49, 1187, 2833,-10800 }, // Greenland Standard Time + { 50, 1211, 2960, 0 }, // Greenwich Standard Time + { 51, 1235, 3129, 7200 }, // GTB Standard Time + { 52, 1253, 3146,-18000 }, // Haiti Standard Time + { 53, 1273, 3213,-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, 5515, 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, 5524, 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, 5740, 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, 5761, 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, 5969,-25200 }, // US Mountain Standard Time - { 120, 2847, 5985,-39600 }, // UTC-11 - { 121, 2854, 6042,-32400 }, // UTC-09 - { 122, 2861, 6068,-28800 }, // UTC-08 - { 123, 2868, 6095, -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, 6181, 43200 }, // UTC+12 - { 126, 2886, 6299, 46800 }, // UTC+13 - { 127, 2893, 6344,-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, 6391, 14400 }, // Volgograd Standard Time - { 130, 2967, 6408, 28800 }, // W. Australia Standard Time - { 131, 2994, 6606, 3600 }, // W. Central Africa Standard Time + { 129, 2943, 6448, 14400 }, // Volgograd Standard Time + { 130, 2967, 6465, 28800 }, // W. Australia Standard Time + { 131, 2994, 6663, 3600 }, // W. Central Africa Standard Time { 132, 3026, 7712, 3600 }, // W. Europe Standard Time - { 133, 3050, 6891, 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, 7164, 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 @@ -952,266 +953,266 @@ static const char ianaIdData[] = { 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, 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, 0x66, 0x72, 0x69, 0x63, 0x61, -0x2f, 0x4a, 0x75, 0x62, 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, 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, 0x45, 0x75, 0x72, 0x6f, 0x70, -0x65, 0x2f, 0x4d, 0x61, 0x72, 0x69, 0x65, 0x68, 0x61, 0x6d, 0x6e, 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, 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, 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, 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, 0x41, 0x62, 0x69, 0x64, 0x6a, 0x61, 0x6e, 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, 0x43, 0x6f, 0x6e, 0x61, 0x6b, 0x72, 0x79, 0x0, 0x41, 0x66, 0x72, -0x69, 0x63, 0x61, 0x2f, 0x42, 0x69, 0x73, 0x73, 0x61, 0x75, 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, 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, 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, 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, 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, 0x48, 0x6f, 0x6e, 0x6f, 0x6c, 0x75, 0x6c, 0x75, -0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4a, 0x6f, 0x68, 0x6e, 0x73, 0x74, 0x6f, 0x6e, 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, 0x42, 0x6c, 0x61, 0x6e, 0x63, -0x2d, 0x53, 0x61, 0x62, 0x6c, 0x6f, 0x6e, 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, 0x43, 0x75, 0x72, 0x61, 0x63, 0x61, 0x6f, 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, 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, 0x53, 0x74, 0x5f, 0x56, 0x69, 0x6e, 0x63, -0x65, 0x6e, 0x74, 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, 0x54, 0x6f, 0x72, 0x74, 0x6f, 0x6c, -0x61, 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, 0x53, 0x74, 0x5f, 0x42, 0x61, 0x72, 0x74, 0x68, 0x65, 0x6c, 0x65, 0x6d, -0x79, 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, 0x4b, 0x72, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x69, 0x6a, 0x6b, 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, 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, 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, 0x4d, 0x62, 0x61, 0x62, 0x61, 0x6e, 0x65, 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, 0x44, 0x69, 0x6c, 0x69, 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, 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, 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, 0x4b, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x73, 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, 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, 0x4e, -0x69, 0x61, 0x6d, 0x65, 0x79, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x61, 0x67, 0x6f, 0x73, 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, 0x43, +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, 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, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2f, 0x4d, 0x61, 0x72, 0x69, 0x65, 0x68, 0x61, 0x6d, 0x6e, 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, 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, +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, 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, 0x41, 0x62, 0x69, 0x64, 0x6a, +0x61, 0x6e, 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, 0x43, 0x6f, +0x6e, 0x61, 0x6b, 0x72, 0x79, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x42, 0x69, 0x73, 0x73, 0x61, 0x75, 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, 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, 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, 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, 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, 0x48, 0x6f, 0x6e, 0x6f, 0x6c, 0x75, 0x6c, 0x75, 0x0, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x2f, 0x4a, 0x6f, +0x68, 0x6e, 0x73, 0x74, 0x6f, 0x6e, 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, 0x42, 0x6c, 0x61, 0x6e, 0x63, 0x2d, 0x53, 0x61, 0x62, 0x6c, 0x6f, 0x6e, 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, 0x43, 0x75, 0x72, 0x61, 0x63, 0x61, 0x6f, 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, 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, 0x53, 0x74, 0x5f, 0x56, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x74, 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, 0x54, 0x6f, 0x72, 0x74, 0x6f, 0x6c, 0x61, 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, 0x53, 0x74, 0x5f, +0x42, 0x61, 0x72, 0x74, 0x68, 0x65, 0x6c, 0x65, 0x6d, 0x79, 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, 0x4b, 0x72, 0x61, 0x6c, 0x65, +0x6e, 0x64, 0x69, 0x6a, 0x6b, 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, 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, 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, 0x4d, 0x62, 0x61, 0x62, 0x61, 0x6e, 0x65, 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, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4a, 0x75, 0x62, 0x61, 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, 0x44, 0x69, 0x6c, 0x69, 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, 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, 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, +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, 0x4b, 0x69, 0x6e, 0x73, 0x68, 0x61, 0x73, 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, 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, 0x4e, 0x69, 0x61, 0x6d, +0x65, 0x79, 0x0, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x2f, 0x4c, 0x61, 0x67, 0x6f, 0x73, 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, @@ -1231,7 +1232,7 @@ 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, diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp index 6ff6995440..f924bd1560 100644 --- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp @@ -2630,6 +2630,8 @@ void tst_QLocale::currency() const QLocale es_CR(QLocale::Spanish, QLocale::CostaRica); QCOMPARE(es_CR.toCurrencyString(double(1565.25)), QString::fromUtf8("\xE2\x82\xA1" "1\xC2\xA0" "565,25")); + QCOMPARE(es_CR.toCurrencyString(double(12565.25)), + QString::fromUtf8("\xE2\x82\xA1" "12\xC2\xA0" "565,25")); const QLocale system = QLocale::system(); QVERIFY(system.toCurrencyString(1, QLatin1String("FOO")).contains(QLatin1String("FOO"))); -- cgit v1.2.3 From 76d3c7055bb1453de291d53e12ab4a015cd4997e Mon Sep 17 00:00:00 2001 From: Lars Schmertmann Date: Thu, 18 Feb 2021 08:45:43 +0100 Subject: [Android]: Fix exception when using Qt to create a service on Android Fixes: QTBUG-91194 Change-Id: Idd243c17bf82150fe2ea8b0100f8c432d75ef249 Reviewed-by: Rami Potinkara Reviewed-by: Assam Boudjelthia (cherry picked from commit 3466fc5b76a97eabc815a7406f01454e4ac0db4f) --- .../src/org/qtproject/qt5/android/bindings/QtService.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java index cdd6c1efea..67ced7524c 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java @@ -39,8 +39,11 @@ package org.qtproject.qt5.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.qt5.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(); + } } -- cgit v1.2.3 From 6bbba5576c9477c61721bc4fbb761752d98c23d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pekka=20Geh=C3=B6r?= Date: Thu, 25 Mar 2021 07:45:14 +0200 Subject: Android: Fix screen flicker issues When changing focus between TextInput fields there is a flicker of the QQuickWidget Fixes: QTBUG-66727 Change-Id: I9f31f43dee1bbbf213422978a35e752a8ceff56c Reviewed-by: Rami Potinkara --- .../src/org/qtproject/qt5/android/QtLayout.java | 30 +++++++++++++++++++--- .../src/org/qtproject/qt5/android/QtNative.java | 12 ++++++--- .../qtproject/qt5/android/QtServiceDelegate.java | 2 +- src/plugins/platforms/android/androidjnimain.cpp | 9 ++++--- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java index f22b8176c8..45b5c0b061 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java @@ -46,10 +46,13 @@ import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; +import android.graphics.Rect; public class QtLayout extends ViewGroup { private Runnable m_startApplicationRunnable; + private int m_bottomDisplayFrame = -1; + public QtLayout(Context context, Runnable startRunnable) { super(context); @@ -66,13 +69,30 @@ public class QtLayout extends ViewGroup super(context, attrs, defStyle); } - @Override - protected void onSizeChanged (int w, int h, int oldw, int oldh) + private void handleSizeChanged (int w, int h, int oldw, int oldh) { DisplayMetrics metrics = new DisplayMetrics(); ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics); - QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h, - metrics.xdpi, metrics.ydpi, metrics.scaledDensity, metrics.density); + + Rect r = new Rect(); + ((Activity) getContext()).getWindow().getDecorView().getWindowVisibleDisplayFrame(r); + + if (m_bottomDisplayFrame != r.bottom) { + m_bottomDisplayFrame = r.bottom; + QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h, + metrics.xdpi, + metrics.ydpi, + metrics.scaledDensity, + metrics.density, + ((metrics.heightPixels == h) || (metrics.heightPixels == h + r.top))); + } + } + + @Override + protected void onSizeChanged (int w, int h, int oldw, int oldh) + { + handleSizeChanged (w, h, oldw, oldh); + if (m_startApplicationRunnable != null) { m_startApplicationRunnable.run(); m_startApplicationRunnable = null; @@ -150,6 +170,8 @@ public class QtLayout extends ViewGroup } } + + handleSizeChanged (r, b, 0, 0); } // Override to allow type-checking of LayoutParams. diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index c1210ab5b6..b31ed3577e 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -612,7 +612,8 @@ public class QtNative m_displayMetricsXDpi, m_displayMetricsYDpi, m_displayMetricsScaledDensity, - m_displayMetricsDensity); + m_displayMetricsDensity, + true); } }); m_qtThread.post(new Runnable() { @@ -634,7 +635,8 @@ public class QtNative double XDpi, double YDpi, double scaledDensity, - double density) + double density, + boolean forceUpdate) { /* Fix buggy dpi report */ if (XDpi < android.util.DisplayMetrics.DENSITY_LOW) @@ -651,7 +653,8 @@ public class QtNative XDpi, YDpi, scaledDensity, - density); + density, + forceUpdate); } else { m_displayMetricsScreenWidthPixels = screenWidthPixels; m_displayMetricsScreenHeightPixels = screenHeightPixels; @@ -1354,7 +1357,8 @@ public class QtNative double XDpi, double YDpi, double scaledDensity, - double density); + double density, + boolean forceUpdate); public static native void handleOrientationChanged(int newRotation, int nativeOrientation); // screen methods diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java index 1da377c2ba..68e79c273f 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java @@ -115,7 +115,7 @@ public class QtServiceDelegate QtNative.setService(m_service, this); QtNative.setClassLoader(classLoader); - QtNative.setApplicationDisplayMetrics(10, 10, 10, 10, 120, 120, 1.0, 1.0); + QtNative.setApplicationDisplayMetrics(10, 10, 10, 10, 120, 120, 1.0, 1.0, false); if (loaderParams.containsKey(STATIC_INIT_CLASSES_KEY)) { for (String className: loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY)) { diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index 1578ec68b1..cf90eaacf0 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -644,11 +644,12 @@ static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/, jint widthPixels, jint heightPixels, jint desktopWidthPixels, jint desktopHeightPixels, jdouble xdpi, jdouble ydpi, - jdouble scaledDensity, jdouble density) + jdouble scaledDensity, jdouble density, bool forceUpdate) { // Android does not give us the correct screen size for immersive mode, but // the surface does have the right size + bool updateDesktopSize = m_desktopWidthPixels != desktopWidthPixels; widthPixels = qMax(widthPixels, desktopWidthPixels); heightPixels = qMax(heightPixels, desktopHeightPixels); @@ -669,7 +670,9 @@ static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/, m_androidPlatformIntegration->setDisplayMetrics(qRound(double(widthPixels) / xdpi * 25.4), qRound(double(heightPixels) / ydpi * 25.4)); m_androidPlatformIntegration->setScreenSize(widthPixels, heightPixels); - m_androidPlatformIntegration->setDesktopSize(desktopWidthPixels, desktopHeightPixels); + if (updateDesktopSize || forceUpdate) { + m_androidPlatformIntegration->setDesktopSize(desktopWidthPixels, desktopHeightPixels); + } } } @@ -795,7 +798,7 @@ static JNINativeMethod methods[] = { {"quitQtCoreApplication", "()V", (void *)quitQtCoreApplication}, {"terminateQt", "()V", (void *)terminateQt}, {"waitForServiceSetup", "()V", (void *)waitForServiceSetup}, - {"setDisplayMetrics", "(IIIIDDDD)V", (void *)setDisplayMetrics}, + {"setDisplayMetrics", "(IIIIDDDDZ)V", (void *)setDisplayMetrics}, {"setSurface", "(ILjava/lang/Object;II)V", (void *)setSurface}, {"updateWindow", "()V", (void *)updateWindow}, {"updateApplicationState", "(I)V", (void *)updateApplicationState}, -- cgit v1.2.3 From bfbba7a4e9d5a700c7d43680c59854961e1623cf Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 12 May 2021 10:13:07 +0200 Subject: Blacklist tst_qnetworkreply::ioHttpRedirectMultipartPost on Linux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Already blacklisted on the other linux versions, but is failing on SLES now in 5.15 Change-Id: I267908adf94ede51e5520aa2cb806b394fb0438e Reviewed-by: Tarja Sundqvist Reviewed-by: Mårten Nordheim (cherry picked from commit e381977b212d7f622771aa9e45565dde7698f776) --- tests/auto/network/access/qnetworkreply/BLACKLIST | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index 2bc1c85cba..581fe46e6c 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -32,8 +32,7 @@ windows-10 # QTBUG-66247 b2qt windows-10 msvc-2015 -ubuntu -rhel +linux [ioHttpRedirectPolicy] opensuse-leap b2qt -- cgit v1.2.3 From 5c4e8ff291fc654ec35006c8243b2072f800e043 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 5 May 2021 11:32:51 +0200 Subject: Fix rare integer overflow in text shaping With extreme painter scaling, linearAdvance may be too large to fit in an unsigned short. Fixes: QTBUG-91758 Change-Id: I7bbe6e77ec9bcef4aa5259da1d3000ed1a8eb27a Reviewed-by: Eskil Abrahamsen Blomfeldt (cherry picked from commit e2bdff3555f8c2a275c7bbcf964d939a5f489100) --- src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp index 9922fd6c7f..2e5b76f094 100644 --- a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp +++ b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp @@ -1051,7 +1051,8 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph, info.height = TRUNC(top - bottom); // If any of the metrics are too large to fit, don't cache them - if (areMetricsTooLarge(info)) + // Also, avoid integer overflow when linearAdvance is to large to fit in a signed short + if (areMetricsTooLarge(info) || info.linearAdvance > 0x7FFF) return nullptr; g = new Glyph; -- cgit v1.2.3 From 25defdbe93c6c5b43449caf58a8c4412a0263d2e Mon Sep 17 00:00:00 2001 From: Doris Verria Date: Tue, 4 May 2021 12:13:39 +0200 Subject: Don't draw focus frame if widget has style rules that affect border Skip drawing the focus ring if the widget has a custom styled border, custom focus ring, or any rule that affects the border. For QPushButton, if the style rule has a background set, the bevel will be drawn in the Windows style. Skip drawing the Mac focus frame in that case too. Fixes: QTBUG-93032 Change-Id: I7c4d4bf6f6ce7bbcd17cd620586c5efa44f2b8d6 Reviewed-by: Volker Hilsheimer (cherry picked from commit 05f7dd5ead5927ef7b3301380b81d7194d9e0593) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/styles/qstylesheetstyle.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index 00a4ba7ec8..5581a222b1 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -121,6 +121,9 @@ #if QT_CONFIG(toolbar) #include #endif +#if QT_CONFIG(pushbutton) +#include +#endif #include #include @@ -2928,6 +2931,12 @@ void QStyleSheetStyle::polish(QWidget *w) if (!rule.hasBackground() || rule.background()->isTransparent() || rule.hasBox() || (!rule.hasNativeBorder() && !rule.border()->isOpaque())) w->setAttribute(Qt::WA_OpaquePaintEvent, false); + if (rule.hasBox() || !rule.hasNativeBorder() +#if QT_CONFIG(pushbutton) + || (qobject_cast(w)) +#endif + ) + w->setAttribute(Qt::WA_MacShowFocusRect, false); } } -- cgit v1.2.3 From 60bdf6a5c63572caff371dc3c285679bdbca472a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 4 May 2021 14:35:39 +0200 Subject: QMdiArea: Fix top level window title when using DontMaximizeSubWindowOnActivation When trying to find the original window title, check for another maximized sub window and use its title. Protect the calls to setWindowTitle to prevent the original title from being cleared. Fixes: QTBUG-92240 Change-Id: I55175382ab261b4cf8b5528304adaaec4fbe2c31 Reviewed-by: Qt CI Bot Reviewed-by: Richard Moe Gustavsen (cherry picked from commit 8886462872db9cdab4d7683823fd24fb9f8920c4) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/widgets/qmdisubwindow.cpp | 31 ++++++++++++++-- src/widgets/widgets/qmdisubwindow_p.h | 1 + .../auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp | 43 +++++++++++++++++++++- 3 files changed, 70 insertions(+), 5 deletions(-) diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp index 89f2df5524..27b89ee212 100644 --- a/src/widgets/widgets/qmdisubwindow.cpp +++ b/src/widgets/widgets/qmdisubwindow.cpp @@ -259,11 +259,28 @@ static inline ControlElement *ptr(QWidget *widget) return nullptr; } +QString QMdiSubWindowPrivate::originalWindowTitleHelper() const +{ + Q_Q(const QMdiSubWindow); + // QTBUG-92240: When DontMaximizeSubWindowOnActivation is set and + // there is another subwindow maximized, use its original title. + if (auto *mdiArea = q->mdiArea()) { + const auto &subWindows = mdiArea->subWindowList(); + for (auto *subWindow : subWindows) { + if (subWindow != q && subWindow->isMaximized()) { + auto *subWindowD = static_cast(qt_widget_private(subWindow)); + if (!subWindowD->originalTitle.isNull()) + return subWindowD->originalTitle; + } + } + } + return q->window()->windowTitle(); +} + QString QMdiSubWindowPrivate::originalWindowTitle() { - Q_Q(QMdiSubWindow); if (originalTitle.isNull()) { - originalTitle = q->window()->windowTitle(); + originalTitle = originalWindowTitleHelper(); if (originalTitle.isNull()) originalTitle = QLatin1String(""); } @@ -278,11 +295,17 @@ void QMdiSubWindowPrivate::setNewWindowTitle() return; QString original = originalWindowTitle(); if (!original.isEmpty()) { - if (!original.contains(QMdiSubWindow::tr("- [%1]").arg(childTitle))) - q->window()->setWindowTitle(QMdiSubWindow::tr("%1 - [%2]").arg(original, childTitle)); + if (!original.contains(QMdiSubWindow::tr("- [%1]").arg(childTitle))) { + auto title = QMdiSubWindow::tr("%1 - [%2]").arg(original, childTitle); + ignoreWindowTitleChange = true; + q->window()->setWindowTitle(title); + ignoreWindowTitleChange = false; + } } else { + ignoreWindowTitleChange = true; q->window()->setWindowTitle(childTitle); + ignoreWindowTitleChange = false; } } diff --git a/src/widgets/widgets/qmdisubwindow_p.h b/src/widgets/widgets/qmdisubwindow_p.h index d39731ee8d..6b07e0f58e 100644 --- a/src/widgets/widgets/qmdisubwindow_p.h +++ b/src/widgets/widgets/qmdisubwindow_p.h @@ -286,6 +286,7 @@ public: #endif void updateInternalWindowTitle(); QString originalWindowTitle(); + QString originalWindowTitleHelper() const; void setNewWindowTitle(); inline int titleBarHeight() const diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp index e3b046e448..91bc638257 100644 --- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp +++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp @@ -1,4 +1,4 @@ -/**************************************************************************** +/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ @@ -282,6 +282,8 @@ private slots: void nativeSubWindows(); void task_209615(); void task_236750(); + void qtbug92240_title_data(); + void qtbug92240_title(); private: QMdiSubWindow *activeWindow; @@ -2749,6 +2751,45 @@ void tst_QMdiArea::task_236750() subWindow->showMinimized(); } +// QTBUG-92240: When subwindows are maximized, their title is supposed to +// appear on the main window. When DontMaximizeSubWindowOnActivation was set, +// titles of previously created maximized windows interfered, resulting in +// "QTBUG-92240 - [1] - [2]". +void tst_QMdiArea::qtbug92240_title_data() +{ + QTest::addColumn("dontMaximize"); + QTest::newRow("default") << false; + QTest::newRow("dontMaximize") << true; +} + +void tst_QMdiArea::qtbug92240_title() +{ + QFETCH(bool, dontMaximize); + +#ifdef Q_OS_MACOS + QSKIP("Not supported on macOS"); +#endif + + QMainWindow w; + const QString title = QStringLiteral("QTBUG-92240"); + w.setWindowTitle(title); + w.menuBar()->addMenu(QStringLiteral("File")); + w.show(); + + auto *mdiArea = new QMdiArea; + w.setCentralWidget(mdiArea); + if (dontMaximize) + mdiArea->setOption(QMdiArea::DontMaximizeSubWindowOnActivation); + auto *sw1 = mdiArea->addSubWindow(new QWidget); + sw1->setWindowTitle(QStringLiteral("1")); + sw1->showMaximized(); + QTRY_COMPARE(w.windowTitle(), QLatin1String("QTBUG-92240 - [1]")); + auto *sw2 = mdiArea->addSubWindow(new QWidget); + sw2->setWindowTitle(QStringLiteral("2")); + sw2->showMaximized(); + QTRY_COMPARE(w.windowTitle(), QLatin1String("QTBUG-92240 - [2]")); +} + QTEST_MAIN(tst_QMdiArea) #include "tst_qmdiarea.moc" -- cgit v1.2.3 From 6b56fe4965db0a1fd17abe2a8a20751bb14cc902 Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Thu, 10 Sep 2020 14:32:15 +0200 Subject: Blacklist tst_QTimeLine::interpolation on Windows in general Task-number: QTBUG-61037 Change-Id: Ie44c7355e2aefbbd16cef95f1a093302bd789e45 Reviewed-by: Richard Moe Gustavsen (cherry picked from commit d12a5da678718344905df3abfa39d10b48b3c0b4) Reviewed-by: Tarja Sundqvist --- tests/auto/corelib/tools/qtimeline/BLACKLIST | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/corelib/tools/qtimeline/BLACKLIST b/tests/auto/corelib/tools/qtimeline/BLACKLIST index 961147a3cf..8040a529ba 100644 --- a/tests/auto/corelib/tools/qtimeline/BLACKLIST +++ b/tests/auto/corelib/tools/qtimeline/BLACKLIST @@ -1,5 +1,5 @@ [interpolation] -windows-10 msvc-2015 +windows osx [frameRate] macos -- cgit v1.2.3 From 84a9676fb6e398fcccf4cf1fb911d232939a258b Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 6 May 2021 12:05:47 +0200 Subject: Avoid fast transform paint path on values it can't handle It has a problem with very small targets, and coordinates can't exceed the same bounds we have on dimensions. Fixes: QTBUG-93475 Change-Id: If5b3af324f4e525cee3dc448ba41fdd8a91cc880 Reviewed-by: Eirik Aavitsland (cherry picked from commit ddc5af9f17474129223c7bbac58b57bb3ed0ff74) Reviewed-by: Qt Cherry-pick Bot --- src/gui/painting/qpaintengine_raster.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 3e54235063..0bfcb175c9 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -2414,15 +2414,19 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe QRectF targetBounds = s->matrix.mapRect(r); bool exceedsPrecision = r.width() > 0x7fff || r.height() > 0x7fff + || targetBounds.left() < -0x7fff + || targetBounds.top() < -0x7fff + || targetBounds.right() > 0x7fff + || targetBounds.bottom() > 0x7fff || targetBounds.width() > 0x7fff || targetBounds.height() > 0x7fff || s->matrix.m11() >= 512 || s->matrix.m22() >= 512; - if (!exceedsPrecision && d->canUseFastImageBlending(d->rasterBuffer->compositionMode, img)) { if (s->matrix.type() > QTransform::TxScale) { SrcOverTransformFunc func = qTransformFunctions[d->rasterBuffer->format][img.format()]; - if (func && (!clip || clip->hasRectClip)) { + // The fast transform methods doesn't really work on small targets, see QTBUG-93475 + if (func && (!clip || clip->hasRectClip) && targetBounds.width() >= 16 && targetBounds.height() >= 16) { func(d->rasterBuffer->buffer(), d->rasterBuffer->bytesPerLine(), img.bits(), img.bytesPerLine(), r, sr, !clip ? d->deviceRect : clip->clipRect, s->matrix, s->intOpacity); -- cgit v1.2.3 From fd63d2ef370526f77ed24a5651e9b9c00eb02263 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 6 May 2021 13:47:06 +0200 Subject: Apply specialData font capitalization to non-rawFont text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We were not using the capitalization details from specialData in the regular path of QTextEngine::itemize() causing it to be ignored. Fixes: QTBUG-90840 Change-Id: I7bb71fad4009f6d0685905a946c36ac1d24d8d3c Reviewed-by: Mårten Nordheim Reviewed-by: Eskil Abrahamsen Blomfeldt (cherry picked from commit 5fa80f6cd792d0f7ead782037b9870796de05acb) Reviewed-by: Qt Cherry-pick Bot --- src/gui/text/qtextengine.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index faf269f7c2..b4e74838f7 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -2173,20 +2173,30 @@ void QTextEngine::itemize() const QTextDocumentPrivate::FragmentIterator end = p->find(block.position() + block.length() - 1); // -1 to omit the block separator char int format = it.value()->format; + int preeditPosition = s ? s->preeditPosition : INT_MAX; int prevPosition = 0; int position = prevPosition; while (1) { const QTextFragmentData * const frag = it.value(); if (it == end || format != frag->format) { - if (s && position >= s->preeditPosition) { + if (s && position >= preeditPosition) { position += s->preeditText.length(); - s = nullptr; + preeditPosition = INT_MAX; } Q_ASSERT(position <= length); QFont::Capitalization capitalization = formatCollection()->charFormat(format).hasProperty(QTextFormat::FontCapitalization) ? formatCollection()->charFormat(format).fontCapitalization() : formatCollection()->defaultFont().capitalization(); + if (s) { + for (const auto &range : qAsConst(s->formats)) { + if (range.start >= prevPosition && range.start < position && range.format.hasProperty(QTextFormat::FontCapitalization)) { + itemizer.generate(prevPosition, range.start - prevPosition, capitalization); + itemizer.generate(range.start, range.length, range.format.fontCapitalization()); + prevPosition = range.start + range.length; + } + } + } itemizer.generate(prevPosition, position - prevPosition, capitalization); if (it == end) { if (position < length) -- cgit v1.2.3 From 0d3717377b5bb622bbc84e0d3561e38f2c752366 Mon Sep 17 00:00:00 2001 From: Tarja Sundqvist Date: Thu, 20 May 2021 14:46:51 +0300 Subject: Bump version Change-Id: I55b8f7b7e9c8a4b96469089ee9c92cc57c503250 --- .qmake.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.qmake.conf b/.qmake.conf index a5e6327aef..ea61eead29 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -6,4 +6,4 @@ DEFINES += QT_NO_JAVA_STYLE_ITERATORS QT_SOURCE_TREE = $$PWD QT_BUILD_TREE = $$shadowed($$PWD) -MODULE_VERSION = 5.15.4 +MODULE_VERSION = 5.15.5 -- cgit v1.2.3 From bd9a3d0a906c04fa2d1e30e0332f60131bda82c7 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 12 May 2021 10:06:02 +0200 Subject: Blacklist tst_QWidget::multipleToplevelFocusCheck() on SLES 15 Task-number: QTBUG-64446 Change-Id: Ic1f7a1e7b89a9802e4d3103a6755d7df85b1fd81 Reviewed-by: Tarja Sundqvist Reviewed-by: Friedemann Kleint (cherry picked from commit 86bf3a4ddb4c6e131752eaac19e780b3207b6783) Reviewed-by: Allan Sandfeld Jensen --- tests/auto/widgets/kernel/qwidget/BLACKLIST | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST index 70ea8433a6..03922da1e1 100644 --- a/tests/auto/widgets/kernel/qwidget/BLACKLIST +++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST @@ -37,6 +37,7 @@ ubuntu-16.04 rhel-7.6 opensuse-leap ubuntu +sles-15 [windowState] # QTBUG-75270 winrt -- cgit v1.2.3 From 2c00e9473bbd50ad982c5827dd66c7b20682e942 Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Fri, 30 Apr 2021 10:39:12 +0200 Subject: Simplify bundled libjpeg build Move the config headers of the bundled libjpeg back into its source directory, where they originally live, to avoid having to trick with the include path to find them. The goal is unification across maintained Qt branches, making version updates simpler. Change-Id: I5b574446bbd264b0a1cb3efceb4c1cb7203cac7d Reviewed-by: Allan Sandfeld Jensen (cherry picked from commit 5df88b85c6e61409c5c759e78f32edaac7b2022f) --- src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh | 2 +- src/3rdparty/libjpeg/jconfigint.h | 17 ----------------- src/3rdparty/libjpeg/libjpeg.pro | 2 +- src/3rdparty/libjpeg/src/jconfigint.h | 17 +++++++++++++++++ 4 files changed, 19 insertions(+), 19 deletions(-) delete mode 100644 src/3rdparty/libjpeg/jconfigint.h create mode 100644 src/3rdparty/libjpeg/src/jconfigint.h diff --git a/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh b/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh index 9b7e1fff82..2153eca35a 100755 --- a/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh +++ b/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh @@ -165,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/jconfigint.h b/src/3rdparty/libjpeg/jconfigint.h deleted file mode 100644 index 40d7748e10..0000000000 --- a/src/3rdparty/libjpeg/jconfigint.h +++ /dev/null @@ -1,17 +0,0 @@ -// Definitions for building in Qt source, ref. src/jconfigint.h.in - -#include - -#define BUILD "" - -#define INLINE inline - -#define PACKAGE_NAME "libjpeg-turbo" - -#define VERSION "2.0.6" - -#if SIZE_MAX == 0xffffffff -#define SIZEOF_SIZE_T 4 -#elif SIZE_MAX == 0xffffffffffffffff -#define SIZEOF_SIZE_T 8 -#endif diff --git a/src/3rdparty/libjpeg/libjpeg.pro b/src/3rdparty/libjpeg/libjpeg.pro index 5c3563aae3..d478719af8 100644 --- a/src/3rdparty/libjpeg/libjpeg.pro +++ b/src/3rdparty/libjpeg/libjpeg.pro @@ -12,7 +12,7 @@ MODULE_EXT_HEADERS = $$PWD/src/jpeglib.h \ $$PWD/src/jconfig.h \ $$PWD/src/jmorecfg.h -INCLUDEPATH += $$PWD $$PWD/src +INCLUDEPATH += $$PWD/src load(qt_helper_lib) diff --git a/src/3rdparty/libjpeg/src/jconfigint.h b/src/3rdparty/libjpeg/src/jconfigint.h new file mode 100644 index 0000000000..40d7748e10 --- /dev/null +++ b/src/3rdparty/libjpeg/src/jconfigint.h @@ -0,0 +1,17 @@ +// Definitions for building in Qt source, ref. src/jconfigint.h.in + +#include + +#define BUILD "" + +#define INLINE inline + +#define PACKAGE_NAME "libjpeg-turbo" + +#define VERSION "2.0.6" + +#if SIZE_MAX == 0xffffffff +#define SIZEOF_SIZE_T 4 +#elif SIZE_MAX == 0xffffffffffffffff +#define SIZEOF_SIZE_T 8 +#endif -- cgit v1.2.3 From 68c016cf0925b700235c5780b50ed554428a2fdb Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Thu, 29 Apr 2021 13:46:15 +0200 Subject: QVnc: clip requested screen region to available screen image MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoid potential oob memory access. Fixes: QTBUG-91770 Change-Id: I34fff1cf8dec5275572a027288b0e8310359d9f8 Reviewed-by: Tor Arne Vestbø Reviewed-by: Allan Sandfeld Jensen (cherry picked from commit c494c1e8754ed13b409133196d9db00bf7e0f2b5) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/vnc/qvnc.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/vnc/qvnc.cpp b/src/plugins/platforms/vnc/qvnc.cpp index 4e7979d5c2..a6de472c8c 100644 --- a/src/plugins/platforms/vnc/qvnc.cpp +++ b/src/plugins/platforms/vnc/qvnc.cpp @@ -477,6 +477,9 @@ void QRfbRawEncoder::write() // server->screen()->geometry().height()); // } + const QImage screenImage = client->server()->screenImage(); + rgn &= screenImage.rect(); + const auto rectsInRegion = rgn.rectCount(); { @@ -492,8 +495,6 @@ void QRfbRawEncoder::write() if (rectsInRegion <= 0) return; - const QImage screenImage = client->server()->screenImage(); - for (const QRect &tileRect: rgn) { const QRfbRect rect(tileRect.x(), tileRect.y(), tileRect.width(), tileRect.height()); -- cgit v1.2.3 From c94bade354226fa9880bdfcc48bab8427b2808dd Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Tue, 13 Apr 2021 14:23:45 +0200 Subject: Avoid processing-intensive painting of high number of tiny dashes When stroking a dashed path, an unnecessary amount of processing would be spent if there is a huge number of dashes visible, e.g. because of scaling. Since the dashes are too small to be indivdually visible anyway, just replace with a semi-transparent solid line for such cases. Change-Id: I9e9f7861257ad5bce46a0cf113d1a9d7824911e6 Reviewed-by: Allan Sandfeld Jensen (cherry picked from commit f4d791b330d02777fcaf02938732892eb3167e9b) --- src/gui/painting/qpaintengineex.cpp | 44 +++++++++++++++++++----- tests/auto/other/lancelot/scripts/tinydashes.qps | 34 ++++++++++++++++++ 2 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 tests/auto/other/lancelot/scripts/tinydashes.qps diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp index 4bd2137b09..b9ae6ce3b2 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 (qt_pen_is_cosmetic(pen, state()->renderHints)) { + 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 QVector 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 (qt_pen_is_cosmetic(pen, state()->renderHints)){ - 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/tests/auto/other/lancelot/scripts/tinydashes.qps b/tests/auto/other/lancelot/scripts/tinydashes.qps new file mode 100644 index 0000000000..d41ced7f5f --- /dev/null +++ b/tests/auto/other/lancelot/scripts/tinydashes.qps @@ -0,0 +1,34 @@ +# Version: 1 +# CheckVsReference: 5% + +path_addEllipse mypath 20.0 20.0 200.0 200.0 + +save +setPen blue 20 SolidLine FlatCap +pen_setCosmetic true +pen_setDashPattern [ 0.0004 0.0004 ] +setBrush yellow + +drawPath mypath +translate 300 0 +setRenderHint Antialiasing true +drawPath mypath +restore + +path_addEllipse bigpath 200000.0 200000.0 2000000.0 2000000.0 + +setPen blue 20 DotLine FlatCap +setBrush yellow + +save +translate 0 300 +scale 0.0001 0.00011 +drawPath bigpath +restore + +save +translate 300 300 +setRenderHint Antialiasing true +scale 0.0001 0.00011 +drawPath bigpath +restore -- cgit v1.2.3 From f04eeaa310126042e1d3e2642270870fe8b1c0d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Wed, 19 May 2021 11:42:30 +0200 Subject: QSpdyProtocolHandler: don't rely on device being available The device is not necessarily available so don't assert on it. This is due to having the slot connected by QueuedConnection. Change-Id: Ic957d4d7d0c6e3fc580c056b9984df9ca728e363 Reviewed-by: Timur Pocheptsov --- src/network/access/qspdyprotocolhandler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/network/access/qspdyprotocolhandler.cpp b/src/network/access/qspdyprotocolhandler.cpp index 9c07651cbd..845ef65096 100644 --- a/src/network/access/qspdyprotocolhandler.cpp +++ b/src/network/access/qspdyprotocolhandler.cpp @@ -762,7 +762,8 @@ bool QSpdyProtocolHandler::uploadData(qint32 streamID) void QSpdyProtocolHandler::_q_uploadDataReadyRead() { QNonContiguousByteDevice *device = qobject_cast(sender()); - Q_ASSERT(device); + if (!device) + return; qint32 streamID = m_streamIDs.value(device); Q_ASSERT(streamID > 0); uploadData(streamID); -- cgit v1.2.3 From 4ec4a46d79729281266755ecbeda2e486157046f Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Fri, 30 Apr 2021 13:00:30 +0200 Subject: Update bundled libjpeg-turbo to version 2.1.0 [ChangeLog][Third-Party Code] libjpeg-turbo was updated to version 2.1.0 Change-Id: I82a58609120923c18f6031fec7d597138ec473ee Reviewed-by: Qt CI Bot Reviewed-by: Allan Sandfeld Jensen (cherry picked from commit 127f617387c00139dddbfc9438ab032e24559566) Reviewed-by: Qt Cherry-pick Bot --- src/3rdparty/libjpeg/LICENSE | 2 +- src/3rdparty/libjpeg/qt_attribution.json | 4 +- src/3rdparty/libjpeg/src/ChangeLog.md | 196 ++++++++++++++++ src/3rdparty/libjpeg/src/README.ijg | 15 +- src/3rdparty/libjpeg/src/README.md | 2 +- src/3rdparty/libjpeg/src/change.log | 31 ++- src/3rdparty/libjpeg/src/jccolext.c | 18 +- src/3rdparty/libjpeg/src/jccolor.c | 12 +- src/3rdparty/libjpeg/src/jcdctmgr.c | 37 ++- src/3rdparty/libjpeg/src/jchuff.c | 386 +++++++++++++++++-------------- src/3rdparty/libjpeg/src/jconfig.h | 4 +- src/3rdparty/libjpeg/src/jconfig.h.in | 5 - src/3rdparty/libjpeg/src/jconfigint.h | 2 +- src/3rdparty/libjpeg/src/jcphuff.c | 25 +- src/3rdparty/libjpeg/src/jcsample.c | 63 ++--- src/3rdparty/libjpeg/src/jdapistd.c | 10 +- src/3rdparty/libjpeg/src/jdarith.c | 15 +- src/3rdparty/libjpeg/src/jdcoefct.c | 290 ++++++++++++++++++----- src/3rdparty/libjpeg/src/jdcoefct.h | 3 +- src/3rdparty/libjpeg/src/jdcol565.c | 96 ++++---- src/3rdparty/libjpeg/src/jdcolext.c | 8 +- src/3rdparty/libjpeg/src/jdcolor.c | 14 +- src/3rdparty/libjpeg/src/jdhuff.c | 60 +++-- src/3rdparty/libjpeg/src/jdhuff.h | 13 +- src/3rdparty/libjpeg/src/jdmarker.c | 67 +++--- src/3rdparty/libjpeg/src/jdmaster.c | 15 +- src/3rdparty/libjpeg/src/jdmrg565.c | 68 +++--- src/3rdparty/libjpeg/src/jdmrgext.c | 34 +-- src/3rdparty/libjpeg/src/jdphuff.c | 48 ++-- src/3rdparty/libjpeg/src/jdsample.c | 38 +-- src/3rdparty/libjpeg/src/jerror.h | 13 ++ src/3rdparty/libjpeg/src/jidctint.c | 8 +- src/3rdparty/libjpeg/src/jmorecfg.h | 35 --- src/3rdparty/libjpeg/src/jpegint.h | 5 +- src/3rdparty/libjpeg/src/jquant1.c | 27 +-- src/3rdparty/libjpeg/src/jquant2.c | 46 ++-- src/3rdparty/libjpeg/src/jsimd.h | 6 + src/3rdparty/libjpeg/src/jsimd_none.c | 13 ++ src/3rdparty/libjpeg/src/jversion.h | 12 +- 39 files changed, 1079 insertions(+), 667 deletions(-) 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.
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/qt_attribution.json b/src/3rdparty/libjpeg/qt_attribution.json index a1dd9990c4..0940636da3 100644 --- a/src/3rdparty/libjpeg/qt_attribution.json +++ b/src/3rdparty/libjpeg/qt_attribution.json @@ -6,11 +6,11 @@ "Description": "The Independent JPEG Group's JPEG software", "Homepage": "http://libjpeg-turbo.virtualgl.org/", - "Version": "2.0.6", + "Version": "2.1.0", "License": "Independent JPEG Group License", "LicenseId": "IJG", "LicenseFile": "LICENSE", - "Copyright": "Copyright (C) 2009-2020 D. R. Commander + "Copyright": "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 diff --git a/src/3rdparty/libjpeg/src/ChangeLog.md b/src/3rdparty/libjpeg/src/ChangeLog.md index 7b5f875464..498b8f2729 100644 --- a/src/3rdparty/libjpeg/src/ChangeLog.md +++ b/src/3rdparty/libjpeg/src/ChangeLog.md @@ -1,3 +1,199 @@ +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 ===== diff --git a/src/3rdparty/libjpeg/src/README.ijg b/src/3rdparty/libjpeg/src/README.ijg index d681cf1273..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 ========== diff --git a/src/3rdparty/libjpeg/src/README.md b/src/3rdparty/libjpeg/src/README.md index 90a4a43ee1..01e391ea7c 100644 --- a/src/3rdparty/libjpeg/src/README.md +++ b/src/3rdparty/libjpeg/src/README.md @@ -3,7 +3,7 @@ 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 +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 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 db85ce114f..2bce767ebd 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. * @@ -42,15 +44,19 @@ * flags (this defines __thumb__). */ -/* NOTE: Both GCC and Clang define __GNUC__ */ -#if defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__)) +#if 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 +71,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 +140,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 +219,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 +314,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 +362,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 +472,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 +495,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 +548,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 +564,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 +606,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 +692,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 +733,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 +762,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 +773,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/jconfig.h b/src/3rdparty/libjpeg/src/jconfig.h index 74a74f754c..fa82022edc 100644 --- a/src/3rdparty/libjpeg/src/jconfig.h +++ b/src/3rdparty/libjpeg/src/jconfig.h @@ -2,9 +2,9 @@ #define JPEG_LIB_VERSION 80 -#define LIBJPEG_TURBO_VERSION 2.0.6 +#define LIBJPEG_TURBO_VERSION 2.1.0 -#define LIBJPEG_TURBO_VERSION_NUMBER 2000006 +#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/src/jconfigint.h b/src/3rdparty/libjpeg/src/jconfigint.h index 40d7748e10..cfcac904c5 100644 --- a/src/3rdparty/libjpeg/src/jconfigint.h +++ b/src/3rdparty/libjpeg/src/jconfigint.h @@ -8,7 +8,7 @@ #define PACKAGE_NAME "libjpeg-turbo" -#define VERSION "2.0.6" +#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 a8b94bed84..bd14fc27d5 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. * @@ -51,15 +52,19 @@ * flags (this defines __thumb__). */ -/* NOTE: Both GCC and Clang define __GNUC__ */ -#if defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__)) +#if 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 +174,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 +867,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 +924,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 +975,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 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/jdapistd.c b/src/3rdparty/libjpeg/src/jdapistd.c index 38bd1110d9..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, 2020, 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. @@ -319,6 +319,8 @@ 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, @@ -329,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) { @@ -532,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); } } 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 2ba6aa11e4..15e6cded62 100644 --- a/src/3rdparty/libjpeg/src/jdcoefct.c +++ b/src/3rdparty/libjpeg/src/jdcoefct.c @@ -5,7 +5,7 @@ * Copyright (C) 1994-1997, Thomas G. Lane. * libjpeg-turbo Modifications: * Copyright 2009 Pierre Ossman for Cendio AB - * Copyright (C) 2010, 2015-2016, D. R. Commander. + * 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,27 +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] + - cinfo->master->first_MCU_col[ci]; - 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] + - cinfo->master->first_MCU_col[ci]; + 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]; @@ -515,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)) @@ -541,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)) @@ -556,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)) @@ -571,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)) @@ -586,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)) @@ -599,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; @@ -655,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 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 d3ae40c7da..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; } } 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/jdmrg565.c b/src/3rdparty/libjpeg/src/jdmrg565.c index 53f1e16700..980a4e216e 100644 --- a/src/3rdparty/libjpeg/src/jdmrg565.c +++ b/src/3rdparty/libjpeg/src/jdmrg565.c @@ -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]; @@ -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)]; @@ -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]; @@ -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 c9a44d8219..9bf4f1a307 100644 --- a/src/3rdparty/libjpeg/src/jdmrgext.c +++ b/src/3rdparty/libjpeg/src/jdmrgext.c @@ -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]; @@ -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/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/jidctint.c b/src/3rdparty/libjpeg/src/jidctint.c index 50f385da33..bb08748019 100644 --- a/src/3rdparty/libjpeg/src/jidctint.c +++ b/src/3rdparty/libjpeg/src/jidctint.c @@ -3,7 +3,7 @@ * * 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, 2020, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg @@ -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 aa29f0f9f1..fb3a9cf411 100644 --- a/src/3rdparty/libjpeg/src/jmorecfg.h +++ b/src/3rdparty/libjpeg/src/jmorecfg.h @@ -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. */ 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/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 6570613bb9..44efb18cad 100644 --- a/src/3rdparty/libjpeg/src/jquant2.c +++ b/src/3rdparty/libjpeg/src/jquant2.c @@ -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 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 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 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 4462b94104..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. * @@ -37,9 +37,9 @@ */ #define JCOPYRIGHT \ - "Copyright (C) 2009-2020 D. R. Commander\n" \ + "Copyright (C) 2009-2021 D. R. Commander\n" \ "Copyright (C) 2015, 2020 Google, Inc.\n" \ - "Copyright (C) 2019 Arm Limited\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" \ @@ -48,7 +48,7 @@ "Copyright (C) 2009, 2012 Pierre Ossman for Cendio AB\n" \ "Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)\n" \ "Copyright (C) 1999-2006 MIYASAKA Masaru\n" \ - "Copyright (C) 1991-2017 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" -- cgit v1.2.3 From 29b41299aa7d36b0ce0decda6c9e3bc25bd236e2 Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Fri, 21 May 2021 16:49:45 +0200 Subject: Apply the Core compile definitions to the big resource targets Resource object library needs using the interface compile definitions of the Core library to apply correct QT_NAMESPACE to the generated code. Also this adds an explicit dependency to the Core library. Fixes: QTBUG-85702 Change-Id: Id37812d01373bf13a63aea13248bf689debfff0b Reviewed-by: Alexandru Croitor --- src/corelib/Qt5CoreMacros.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/corelib/Qt5CoreMacros.cmake b/src/corelib/Qt5CoreMacros.cmake index f5766f8775..d91873f1bc 100644 --- a/src/corelib/Qt5CoreMacros.cmake +++ b/src/corelib/Qt5CoreMacros.cmake @@ -400,6 +400,9 @@ function(qt5_add_big_resources outfiles) add_library(rcc_object_${outfilename} OBJECT ${tmpoutfile}) set_target_properties(rcc_object_${outfilename} PROPERTIES AUTOMOC OFF) set_target_properties(rcc_object_${outfilename} PROPERTIES AUTOUIC OFF) + + target_link_libraries(rcc_object_${outfilename} PUBLIC Qt5::Core) + add_dependencies(rcc_object_${outfilename} big_resources_${outfilename}) # The modification of TARGET_OBJECTS needs the following change in cmake # https://gitlab.kitware.com/cmake/cmake/commit/93c89bc75ceee599ba7c08b8fe1ac5104942054f -- cgit v1.2.3 From 05408a4e5fd1c411371983d75e361f23597cf4c7 Mon Sep 17 00:00:00 2001 From: Bartlomiej Moskal Date: Thu, 18 Feb 2021 13:34:34 +0100 Subject: Android: handle ImEnterKeyType flag Replace KEYCODE_ENTER to KEYCODE_TAB if IME_ACTION_NEXT or IME_ACTION_PREVIOUS flag is set. Before this change any of imKeyEntryType [1] was handled as default return key. After the fix, event is changed to Tab or Backtab (if any of mentioned flag is set) [1] https://doc.qt.io/qt-5/qt.html#EnterKeyType-enum Fixes: QTBUG-61652 Change-Id: Ia27aa308fdae75bc17d1e892d17048c5afa3e2cb Reviewed-by: Rami Potinkara Reviewed-by: Ville Voutilainen (cherry picked from commit e5686b35f07ea54f59e81d04a054bd832bee69b9) --- .../qtproject/qt5/android/QtActivityDelegate.java | 6 +++++- .../qtproject/qt5/android/QtInputConnection.java | 23 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 98dcd31685..4d3c30a807 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -357,8 +357,12 @@ public class QtActivityDelegate inputType |= android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS; } - if ((inputHints & ImhMultiLine) != 0) + if ((inputHints & ImhMultiLine) != 0) { inputType |= android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE; + // Clear imeOptions for Multi-Line Type + // User should be able to insert new line in such case + imeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_DONE; + } if ((inputHints & (ImhNoPredictiveText | ImhSensitiveData | ImhHiddenText)) != 0) inputType |= android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtInputConnection.java b/src/android/jar/src/org/qtproject/qt5/android/QtInputConnection.java index 76fa974e8d..b5f6af8701 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtInputConnection.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtInputConnection.java @@ -257,6 +257,29 @@ public class QtInputConnection extends BaseInputConnection // If the sendKeyEvent was invoked, it means that the button not related with composingText was used // In such case composing text (if it exists) should be finished immediately finishComposingText(); + if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && m_view != null) { + KeyEvent fakeEvent; + switch (m_view.m_imeOptions) { + case android.view.inputmethod.EditorInfo.IME_ACTION_NEXT: + fakeEvent = new KeyEvent(event.getDownTime(), + event.getEventTime(), + event.getAction(), + KeyEvent.KEYCODE_TAB, + event.getRepeatCount(), + event.getMetaState()); + return super.sendKeyEvent(fakeEvent); + case android.view.inputmethod.EditorInfo.IME_ACTION_PREVIOUS: + fakeEvent = new KeyEvent(event.getDownTime(), + event.getEventTime(), + event.getAction(), + KeyEvent.KEYCODE_TAB, + event.getRepeatCount(), + KeyEvent.META_SHIFT_ON); + return super.sendKeyEvent(fakeEvent); + default: + break; + } + } return super.sendKeyEvent(event); } -- cgit v1.2.3 From 9e4f23b2aae814d69db82621484da5d28229fb7f Mon Sep 17 00:00:00 2001 From: Bartlomiej Moskal Date: Thu, 18 Mar 2021 07:54:20 +0100 Subject: Android: fix wrong position of cursor hander in split screen Use activity window position to fix position of cursor hander. In case without splti sceen, position of activity window is equal (0, 0), so it does not have any effect. Fixes: QTBUG-91362 Change-Id: Icae9f19308112a78bdddf168abe81ffe7b6e4fae Reviewed-by: Rami Potinkara Reviewed-by: Ville Voutilainen (cherry picked from commit 547228bf86281733c09a0638c57a4384c664f66e) --- .../jar/src/org/qtproject/qt5/android/CursorHandle.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java b/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java index 38cc695c37..feb47c8f90 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java +++ b/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java @@ -159,11 +159,15 @@ public class CursorHandle implements ViewTreeObserver.OnPreDrawListener public void setPosition(final int x, final int y){ initOverlay(); - final int[] location = new int[2]; - m_layout.getLocationOnScreen(location); + final int[] layoutLocation = new int[2]; + m_layout.getLocationOnScreen(layoutLocation); + + // This value is used for handling split screen case + final int[] activityLocation = new int[2]; + m_activity.getWindow().getDecorView().getLocationOnScreen(activityLocation); - int x2 = x + location[0]; - int y2 = y + location[1] + m_yShift; + int x2 = x + layoutLocation[0] - activityLocation[0]; + int y2 = y + layoutLocation[1] + m_yShift - activityLocation[1]; if (m_id == QtNative.IdCursorHandle) { x2 -= m_popup.getWidth() / 2 ; -- cgit v1.2.3 From b934c1b467be8e56548de9b4b8a95f4bfea3913f Mon Sep 17 00:00:00 2001 From: Tarja Sundqvist Date: Fri, 21 May 2021 11:31:20 +0300 Subject: Extend blacklisting of tst_QWidget::focusProxyAndInputMethods Blacklisting covers also SLES. Task-number: QTBUG-46116 Change-Id: I3f6cff6c5ab30bdafb041628cd475676603ab6eb Reviewed-by: Friedemann Kleint --- tests/auto/widgets/kernel/qwidget/BLACKLIST | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST index 03922da1e1..ec38d565e4 100644 --- a/tests/auto/widgets/kernel/qwidget/BLACKLIST +++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST @@ -12,6 +12,7 @@ ubuntu-16.04 rhel-7.6 opensuse-leap ubuntu +sles [raise] opensuse-leap # QTBUG-68175 -- cgit v1.2.3 From 810efdd2694e580b03ed97c097ae26563e3f5b2e Mon Sep 17 00:00:00 2001 From: Tarja Sundqvist Date: Fri, 21 May 2021 12:51:11 +0300 Subject: Extend blacklisting of tst_QNetworkReply::ioHttpRedirectPolicy Blacklisting covers also SLES-15 and Linux Opensuse-15.1. Task-number: QTBUG-62583 Change-Id: I6aaa88d115160d27ef1de65f7c3232155eae872d Reviewed-by: Allan Sandfeld Jensen --- tests/auto/network/access/qnetworkreply/BLACKLIST | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index 581fe46e6c..52857010e2 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -38,6 +38,8 @@ opensuse-leap b2qt ubuntu windows-10 +sles-15 +opensuse-15.1 [putToFtp] windows-10 [putWithServerClosingConnectionImmediately] -- cgit v1.2.3 From 9e8f580d76e65632a999450fa8e0ab9a20285ff7 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Wed, 5 May 2021 12:08:22 +0200 Subject: Windows: Work-around misreporting of Script and Roman Two legacy bitmap fonts are misreported as TMPF_VECTOR on Windows: Roman and Script. This causes them to be marked as scalable, and the automatic fallback to NativeRendering in Qt Quick does not kick in - causing the text elements to look empty instead. To work around this, we exploit the peculiarity that the type of these two fonts is reported as "0" in the enumeration, which is not a valid value. No other fonts on the system is reported as type 0, so we simply detect this error case and mark the fonts as non-scalable, which is the safer choice. [ChangeLog][Windows] Fixed text in "Roman" and "Script" bitmap fonts not showing in Qt Quick applications. Fixes: QTBUG-85826 Change-Id: Id889f0dedb1d529e6dd64c6da9e17e303f4a9d04 Reviewed-by: Allan Sandfeld Jensen (cherry picked from commit a1e405ce11eb6760ccca13cf1b4e5d20fa3916e9) --- src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp index 6785578ee1..21f4f7d879 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp @@ -1038,7 +1038,9 @@ static bool addFontToDatabase(QString familyName, const QString foundryName; // No such concept. const bool fixed = !(textmetric->tmPitchAndFamily & TMPF_FIXED_PITCH); const bool ttf = (textmetric->tmPitchAndFamily & TMPF_TRUETYPE); - const bool scalable = textmetric->tmPitchAndFamily & (TMPF_VECTOR|TMPF_TRUETYPE); + const bool unreliableTextMetrics = type == 0; + const bool scalable = (textmetric->tmPitchAndFamily & (TMPF_VECTOR|TMPF_TRUETYPE)) + && !unreliableTextMetrics; const int size = scalable ? SMOOTH_SCALABLE : textmetric->tmHeight; const QFont::Style style = textmetric->tmItalic ? QFont::StyleItalic : QFont::StyleNormal; const bool antialias = false; -- cgit v1.2.3 From 4dccd73b405edca57ed265a94428fe8431322a04 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Thu, 6 May 2021 11:21:07 +0200 Subject: Windows: Add synthesized fonts also when there is a style name Since Windows can synthesize certain font traits for us, we used to register these in the font database so that we could match against them. But after change 469b13916983aff4625657eecbb7d2399cac901d, this in principle no longer happens, because we opt out whenever there is a style name (which there usually is, this could be e.g. "Regular" for a normal font). The result of this was that if we looked for a bold variant of a font, we would not find it. In cases where a multi-engine was used, the request for bold would still survive in the multi engine's fontDef, so we would still pick it up later and apply the synthesis. But when NoFontMerging was set, then we would override the weight in the fontDef with the one from the font database. Since the comment documents that the additional registrations are there to make sure all the variants that Windows can synthesize are available for matching, it does not make sense to skip them just because the font has a style name. So this is a partial revert of 469b13916983aff4625657eecbb7d2399cac901d. Note: This exposed an error in QFontDatabase::isSmoothlyScalable(). The style parameter here is not the "styleName" (as in sub-family), but actually predates that API. Instead it is the "style" as returned by QFontDatabase::styles(), which may be the style name, but it can also be the generated description of the style and weight. In the latter case, we would return false for fonts that are actually smoothly scalable, which is incorrect. This caused a failure in tst_QFontMetrics::metrics(). To remedy this, we add an additional condition, and also match the style if it matches the generated descripion of the style key. [ChangeLog][Windows] Fixed an issue where bold/italic would not be synthesized for fonts if QFont::NoFontMerging was set. Fixes: QTBUG-91398 Change-Id: Id2166a47ae2d386536cf6e5e27ff09165ae8a23a Reviewed-by: Allan Sandfeld Jensen (cherry picked from commit f385b8827a75688b8a2cbd51e8da8a602d7f9567) --- src/gui/text/qfontdatabase.cpp | 18 ++++++++++++------ .../fontdatabases/windows/qwindowsfontdatabase.cpp | 6 +++--- .../fontdatabases/windows/qwindowsfontdatabase_ft.cpp | 6 +++--- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 583e77fb1c..91037fbee4 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -1731,13 +1731,19 @@ bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &sty for (int j = 0; j < f->count; j++) { QtFontFoundry *foundry = f->foundries[j]; if (foundryName.isEmpty() || foundry->name.compare(foundryName, Qt::CaseInsensitive) == 0) { - for (int k = 0; k < foundry->count; k++) - if ((style.isEmpty() || - foundry->styles[k]->styleName == style || - foundry->styles[k]->key == styleKey) && foundry->styles[k]->smoothScalable) { - smoothScalable = true; + for (int k = 0; k < foundry->count; k++) { + QtFontStyle *fontStyle = foundry->styles[k]; + smoothScalable = + fontStyle->smoothScalable + && ((style.isEmpty() + || fontStyle->styleName == style + || fontStyle->key == styleKey) + || (fontStyle->styleName.isEmpty() + && style == styleStringHelper(fontStyle->key.weight, + QFont::Style(fontStyle->key.style)))); + if (smoothScalable) goto end; - } + } } } end: diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp index 21f4f7d879..a50f64f55b 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp @@ -1120,13 +1120,13 @@ static bool addFontToDatabase(QString familyName, style, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName)); // add fonts windows can generate for us: - if (weight <= QFont::DemiBold && styleName.isEmpty()) + if (weight <= QFont::DemiBold) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, style, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName)); - if (style != QFont::StyleItalic && styleName.isEmpty()) + if (style != QFont::StyleItalic) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, weight, QFont::StyleItalic, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName)); - if (weight <= QFont::DemiBold && style != QFont::StyleItalic && styleName.isEmpty()) + if (weight <= QFont::DemiBold && style != QFont::StyleItalic) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, QFont::StyleItalic, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName)); diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp index f6dcaef882..3e52c073b9 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp @@ -281,15 +281,15 @@ static bool addFontToDatabase(QString familyName, antialias, scalable, size, fixed, writingSystems, createFontFile(value, index)); // add fonts windows can generate for us: - if (weight <= QFont::DemiBold && styleName.isEmpty()) + if (weight <= QFont::DemiBold) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, style, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(value, index)); - if (style != QFont::StyleItalic && styleName.isEmpty()) + if (style != QFont::StyleItalic) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, weight, QFont::StyleItalic, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(value, index)); - if (weight <= QFont::DemiBold && style != QFont::StyleItalic && styleName.isEmpty()) + if (weight <= QFont::DemiBold && style != QFont::StyleItalic) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, QFont::StyleItalic, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(value, index)); -- cgit v1.2.3 From 6e97c60be7cebb0ff861d5b245e0fc2e64b35562 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Tue, 18 May 2021 08:43:52 +0200 Subject: Cherry-pick upstream patch for non-gcc/clang/msvc compilers Fix build w/ non-GCC-compatible Un*x/Arm compilers Fixes: QTBUG-93779 Pick-to: dev 6.1 6.0 5.15 5.12 Change-Id: Ib52e9ded6e2814c7998d6cd798e945da0f87f7a1 Reviewed-by: Eirik Aavitsland (cherry picked from commit 4341f6763b8a737ebc07bb78ead22bc05a1a515b) --- src/3rdparty/libjpeg/src/ChangeLog.md | 9 +++++++++ src/3rdparty/libjpeg/src/jchuff.c | 5 +++-- src/3rdparty/libjpeg/src/jcphuff.c | 5 +++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/3rdparty/libjpeg/src/ChangeLog.md b/src/3rdparty/libjpeg/src/ChangeLog.md index 498b8f2729..5ecbf3b510 100644 --- a/src/3rdparty/libjpeg/src/ChangeLog.md +++ b/src/3rdparty/libjpeg/src/ChangeLog.md @@ -1,3 +1,12 @@ +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 ===== diff --git a/src/3rdparty/libjpeg/src/jchuff.c b/src/3rdparty/libjpeg/src/jchuff.c index 2bce767ebd..8ff817b151 100644 --- a/src/3rdparty/libjpeg/src/jchuff.c +++ b/src/3rdparty/libjpeg/src/jchuff.c @@ -44,8 +44,9 @@ * flags (this defines __thumb__). */ -#if defined(__arm__) || defined(__aarch64__) || defined(_M_ARM) || \ - defined(_M_ARM64) +/* NOTE: Both GCC and Clang define __GNUC__ */ +#if (defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__))) || \ + defined(_M_ARM) || defined(_M_ARM64) #if !defined(__thumb__) || defined(__thumb2__) #define USE_CLZ_INTRINSIC #endif diff --git a/src/3rdparty/libjpeg/src/jcphuff.c b/src/3rdparty/libjpeg/src/jcphuff.c index bd14fc27d5..9bf96124b4 100644 --- a/src/3rdparty/libjpeg/src/jcphuff.c +++ b/src/3rdparty/libjpeg/src/jcphuff.c @@ -52,8 +52,9 @@ * flags (this defines __thumb__). */ -#if defined(__arm__) || defined(__aarch64__) || defined(_M_ARM) || \ - defined(_M_ARM64) +/* NOTE: Both GCC and Clang define __GNUC__ */ +#if (defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__))) || \ + defined(_M_ARM) || defined(_M_ARM64) #if !defined(__thumb__) || defined(__thumb2__) #define USE_CLZ_INTRINSIC #endif -- cgit v1.2.3 From b857b0ebe7333654d892c7660974307089fd3f5a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 21 May 2021 09:53:40 +0200 Subject: QTestlib: Fix formatting of pointers in QCOMPARE After 1ed8a7bff503aacf55f7f880ddaad461ea15e5e1, volatile needs to be specified for toString(), else it is not used by compare_ptr_helper(). Add an overload. Change-Id: I3c335f324df346233623272d1014c8360ca33160 Reviewed-by: Thiago Macieira (cherry picked from commit 6fff7bb2692ecda1cff8624f5eccc0a2528fb693) Reviewed-by: Qt Cherry-pick Bot --- src/testlib/qtestcase.cpp | 5 +++++ src/testlib/qtestcase.h | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 9bf202cca7..8e2f996b4e 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -2798,6 +2798,11 @@ char *QTest::toString(const char *str) /*! \internal */ +char *QTest::toString(const volatile void *p) // Use volatile to match compare_ptr_helper() +{ + return QTest::toString(const_cast(p)); +} + char *QTest::toString(const void *p) { char *msg = new char[128]; diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index 02c1267a60..b9d64a4309 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -283,7 +283,8 @@ namespace QTest Q_TESTLIB_EXPORT char *toPrettyCString(const char *unicode, int length); Q_TESTLIB_EXPORT char *toPrettyUnicode(QStringView string); Q_TESTLIB_EXPORT char *toString(const char *); - Q_TESTLIB_EXPORT char *toString(const void *); + Q_TESTLIB_EXPORT char *toString(const volatile void *); + Q_TESTLIB_EXPORT char *toString(const void *); // ### FIXME: Qt 7: Remove Q_TESTLIB_EXPORT void qInit(QObject *testObject, int argc = 0, char **argv = nullptr); Q_TESTLIB_EXPORT int qRun(); -- cgit v1.2.3 From a15c16f5c806c9a564b0af660ccb010940091d4b Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Wed, 19 May 2021 09:48:41 +0200 Subject: Fix memory leak when using small caps font MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The small caps version of a font is kept as a QFontPrivate* which is manually reference counted, but we neglected to actually delete it when the reference count went to 0. [ChangeLog][Fonts] Fixed a memory leak when initializing a small caps font. Fixes: QTBUG-93068 Change-Id: Icc7fb7a59bf523da84d2e6fa026940a7d1230525 Reviewed-by: Konstantin Ritt Reviewed-by: Robert Löhning (cherry picked from commit 11a40defff51dae2476e0da9f2b995a3a0f3bda8) Reviewed-by: Qt Cherry-pick Bot --- src/gui/text/qfont.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index e822854292..9ab0fa3141 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -220,8 +220,10 @@ QFontPrivate::~QFontPrivate() if (engineData && !engineData->ref.deref()) delete engineData; engineData = nullptr; - if (scFont && scFont != this) - scFont->ref.deref(); + if (scFont && scFont != this) { + if (!scFont->ref.deref()) + delete scFont; + } scFont = nullptr; } @@ -630,8 +632,10 @@ void QFont::detach() if (d->engineData && !d->engineData->ref.deref()) delete d->engineData; d->engineData = nullptr; - if (d->scFont && d->scFont != d.data()) - d->scFont->ref.deref(); + if (d->scFont && d->scFont != d.data()) { + if (!d->scFont->ref.deref()) + delete d->scFont; + } d->scFont = nullptr; return; } -- cgit v1.2.3 From 8319b54b9ff895002483d61559d754e83780cf56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tama=CC=81s=20Martinec?= Date: Tue, 4 May 2021 13:49:18 +0300 Subject: iOS: Keep undo/redo widgets enabled on the undo shortcut bar after undo Having two undo/redo operations on the rebuilt undo stack always enables the undo/redo widgets on the shorcut bar. This might be more desirable than the current behavior that only allows one undo from the shortcut bar. Fixes: QTBUG-63393 Change-Id: I2c99f27895def47b58534035461ceb7b4e5c3057 Reviewed-by: Richard Moe Gustavsen (cherry picked from commit 3b155973c494e847b821f0b5675a061f4e424a6c) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/ios/qiostextresponder.mm | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/ios/qiostextresponder.mm b/src/plugins/platforms/ios/qiostextresponder.mm index 4c841d9e08..09735c1a02 100644 --- a/src/plugins/platforms/ios/qiostextresponder.mm +++ b/src/plugins/platforms/ios/qiostextresponder.mm @@ -514,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]. @@ -530,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. }); } -- cgit v1.2.3 From 2db6c0967b9522a95fbfc7b648ef90eba9e73676 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 11 May 2021 13:22:57 +0200 Subject: cocoa: be more careful about rejecting frame strut events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The m_buttons property is meant to hold the currently pressed mouse buttons done on the contents part of a QNSView. But m_buttons can sometimes get out of sync with AppKit (NSEvent.pressedMouseButtons). One way this is shown to happen is if you do a mouse press on a native child widget (that is backed by it's own QNSView), and then convert the widget to a top-level window before the release. In that case, the underlying QNSView will be reparented from one NSWindow to another, which will result in the old NSWindow getting the mouseUp call instead of the new window. The result is that we don't update m_buttons for the reparented QNSView, which will instead be left as "pressed". As a result of m_buttons being stuck in a faulty state, we also refuse to send out QEvent::NonClientAreaMouseMove events to the top-level widget. This because QNSView thinks that it's already in a dragging state that started on the content part of the view (and not on the strut). As a result, it can sometimes be impossible to dock a QDockWidget back into a QMainWindow, since we basically don't send out any frame-drag events to Qt for the new dock window. We can reason that if you start a mouse press on the frame strut, you cannot at the same time have an active mouse press on the view contents. This patch will therefore remove the buttons that we know was pressed on the frame strut from m_buttons. This will at least (be one way to) clear the faulty pressed state, and will let us send mouse press/drag/release (and after that, move) frame strut events to Qt. Task-number: QTBUG-70137 Change-Id: If51e1fe57d2531b659d39de85658893dae6391e3 Reviewed-by: Tor Arne Vestbø (cherry picked from commit 78b6050d60ba97ffb66e79bcde6ea306108e41dd) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/cocoa/qnsview_mouse.mm | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/plugins/platforms/cocoa/qnsview_mouse.mm b/src/plugins/platforms/cocoa/qnsview_mouse.mm index 9d33b933b0..3c98bcb3b7 100644 --- a/src/plugins/platforms/cocoa/qnsview_mouse.mm +++ b/src/plugins/platforms/cocoa/qnsview_mouse.mm @@ -103,21 +103,14 @@ if (!m_platformWindow) return; - // get m_buttons in sync - // Don't send frme strut events if we are in the middle of a mouse drag. - if (m_buttons != Qt::NoButton) - return; - switch (theEvent.type) { case NSEventTypeLeftMouseDown: - case NSEventTypeLeftMouseDragged: m_frameStrutButtons |= Qt::LeftButton; break; case NSEventTypeLeftMouseUp: m_frameStrutButtons &= ~Qt::LeftButton; break; case NSEventTypeRightMouseDown: - case NSEventTypeRightMouseDragged: m_frameStrutButtons |= Qt::RightButton; break; case NSEventTypeRightMouseUp: @@ -132,6 +125,22 @@ break; } + // m_buttons can sometimes get out of sync with the button state in AppKit + // E.g if the QNSView where a drag starts is reparented to another window + // while the drag is ongoing, it will not get the corresponding mouseUp + // call. This will result in m_buttons to be stuck on Qt::LeftButton. + // Since we know which buttons was pressed/released directly on the frame + // strut, we can rectify m_buttons here so that we at least don't return early + // from the drag test underneath because of the faulty m_buttons state. + // FIXME: get m_buttons in sync with AppKit/NSEvent all over in QNSView. + m_buttons &= ~m_frameStrutButtons; + + if (m_buttons != Qt::NoButton) { + // Don't send frame strut events if we are in the middle of + // a mouse drag that didn't start on the frame strut. + return; + } + NSWindow *window = [self window]; NSPoint windowPoint = [theEvent locationInWindow]; -- cgit v1.2.3 From 0a1ac231f8ea33c5d3467fe5107255475ce606ce Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Fri, 7 May 2021 10:39:22 +0200 Subject: Add note about the risk of setting min-width/height in a style sheet Task-number: QTBUG-86677 Change-Id: I1e5e10ee79d80fee40d04afe439489d6ce16a43e Reviewed-by: Andy Shaw (cherry picked from commit 6fd480142bd253de095c1e4b79c119c9ed7d20a5) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc b/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc index 3319b032cc..8dc68117aa 100644 --- a/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc +++ b/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc @@ -2167,7 +2167,7 @@ subclasses, QAbstractSpinBox subclasses, QCheckBox, QComboBox, QFrame, QGroupBox, QLabel, QLineEdit, QMenu, QMenuBar, QPushButton, QRadioButton, QSizeGrip, QSpinBox, - QSplitter, QStatusBar, QTextEdit, and QToolTip. + QSplitter, QStatusBar, QTextEdit, QToolButton, and QToolTip. If this property is not specified, the minimum height is derived based on the widget's contents and the style. @@ -2179,6 +2179,9 @@ \snippet code/doc_src_stylesheet.qdoc 66 + \note Setting this property might allow widgets to shrink + smaller than the space required for the contents. + See also \l{#min-width-prop}{min-width}. \row @@ -2190,7 +2193,7 @@ subclasses, QAbstractSpinBox subclasses, QCheckBox, QComboBox, QFrame, QGroupBox, QLabel, QLineEdit, QMenu, QMenuBar, QPushButton, QRadioButton, QSizeGrip, QSpinBox, - QSplitter, QStatusBar, QTextEdit, and QToolTip. + QSplitter, QStatusBar, QTextEdit, QToolButton, and QToolTip. If this property is not specified, the minimum width is derived based on the widget's contents and the style. @@ -2202,6 +2205,9 @@ \snippet code/doc_src_stylesheet.qdoc 67 + \note Setting this property might allow widgets to shrink + smaller than the space required for the contents. + See also \l{#min-height-prop}{min-height}. \row -- cgit v1.2.3 From 3d5d5cbe71d9f556aac888353efe7c2b9b219b52 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Wed, 12 May 2021 11:21:07 +0200 Subject: QDockWidget, macOS: don't drag on native widgets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When using native dock widgets on macOS, it will currently fail if you try to drag on a dock widget inside QMainWindow to make it floating. The reason is that the drag will basically start as as drag inside one NSWindow (QMainWindow), but continue as a drag on another NSWindow (QDockWidget). And this is not handled well by AppKit, especially since the NSView where the drag was started is reparented into a new NSWindow (the floating QDockWidget) while the dragging is ongoing. And there seems to be no practical solution to how we can support this from the cocoa QPA plugin This patch will therefore change the logic in QDockWidget to simply make the dock widget floating if you drag on it, rather than actually starting a drag (but only for the described case). Fixes: QTBUG-70137 Change-Id: Ic309ee8f419b9c14894255205867bce11dc0c414 Reviewed-by: Volker Hilsheimer Reviewed-by: Tor Arne Vestbø (cherry picked from commit 3224c6d7d150164241c13ccf7d47377a39c0a6bb) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/widgets/qdockwidget.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index f295b62ff3..0feb3222f3 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -973,13 +973,27 @@ bool QDockWidgetPrivate::mouseMoveEvent(QMouseEvent *event) && mwlayout->pluggingWidget == nullptr && (event->pos() - state->pressPos).manhattanLength() > QApplication::startDragDistance()) { - startDrag(); - q->grabMouse(); - ret = true; + +#ifdef Q_OS_MACOS + if (windowHandle()) { + // When using native widgets on mac, we have not yet been successful in + // starting a drag on an NSView that belongs to one window (QMainWindow), + // but continue the drag on another (QDockWidget). This is what happens if + // we try to make this widget floating during a drag. So as a fall back + // solution, we simply make this widget floating instead, when we would + // otherwise start a drag. + q->setFloating(true); + } else +#endif + { + startDrag(); + q->grabMouse(); + ret = true; + } } } - if (state->dragging && !state->nca) { + if (state && state->dragging && !state->nca) { QMargins windowMargins = q->window()->windowHandle()->frameMargins(); QPoint windowMarginOffset = QPoint(windowMargins.left(), windowMargins.top()); QPoint pos = event->globalPos() - state->pressPos - windowMarginOffset; -- cgit v1.2.3 From 0e2776320cc39a95b914787d28a09c615f68b708 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 14 May 2021 11:14:31 +0200 Subject: Fix QStringView::mid() to behave as documented when passed -1 for length With 84b53a4514c the behaviour was documented to be the same as QString::mid(), however this did not account for when -1 is passed for the length when it should get the rest of the string. So this ensures this behavior is put in place. Fixes: QTBUG-93677 Change-Id: Id41e136d78a13ff369508e37e6c679c76c6ae399 Reviewed-by: Lars Knoll --- src/corelib/text/qstringview.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/corelib/text/qstringview.h b/src/corelib/text/qstringview.h index cbb2071f9d..e7d7ea1636 100644 --- a/src/corelib/text/qstringview.h +++ b/src/corelib/text/qstringview.h @@ -244,7 +244,8 @@ public: } Q_REQUIRED_RESULT Q_DECL_CONSTEXPR QStringView mid(qsizetype pos, qsizetype n) const { - return QStringView(m_data + qBound(qsizetype(0), pos, m_size), qBound(qsizetype(0), pos + n, m_size) - qBound(qsizetype(0), pos, m_size)); + return QStringView(m_data + qBound(qsizetype(0), pos, m_size), + n == -1 ? m_size - pos : qBound(qsizetype(0), pos + n, m_size) - qBound(qsizetype(0), pos, m_size)); } Q_REQUIRED_RESULT Q_DECL_CONSTEXPR QStringView left(qsizetype n) const { -- cgit v1.2.3 From 37f7f11f1ae2c6dc83b22fbd423708e5479f0303 Mon Sep 17 00:00:00 2001 From: Karsten Heimrich Date: Tue, 18 May 2021 23:14:25 +0200 Subject: Fix QUrl::fromLocalFile with long path prefix After commit 3966b571 the function was kinda broken already, though this got unnoticed since it was not covered by an the auto-test. This commit adds another test case with Windows native separators and removes the use of QDir::fromNativeSeparators. Instead use the original code from QDir::fromNativeSeparators to replace the backslashes. Change-Id: I190560d0e75cb8c177d63b142aa4be5b01498da2 Reviewed-by: Volker Hilsheimer (cherry picked from commit 06689a2d7a18882535819ed13ac7248c81330529) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/io/qurl.cpp | 22 ++++++++++++++++++++-- tests/auto/corelib/io/qurl/tst_qurl.cpp | 4 ++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 017ac61f2b..e3e22866bc 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" #if QT_CONFIG(topleveldomain) // ### Qt6: Remove section #include "qtldurl_p.h" @@ -3816,6 +3815,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 @@ -3854,7 +3872,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/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp index b3ae547d07..5687a63314 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl.cpp +++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp @@ -1334,6 +1334,10 @@ void tst_QUrl::fromLocalFile_data() << QString(QString("//somehost") + suffix).replace('/', '\\') << QString("file://somehost") + suffix << QString(suffix); + QTest::addRow("windows-backslash-extlen-%s", pathDescription) + << QString(QString("//?") + suffix).replace('/', '\\') + << QString("file:////%3F") + suffix + << QString("//?") + suffix; #endif QTest::addRow("windows-extlen-%s", pathDescription) << QString("//?") + suffix -- cgit v1.2.3 From 858a28140e4076d003055783d3e845ffb338b501 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Fri, 7 May 2021 17:14:30 +0200 Subject: Fix antialiasing of rotated non-smooth scaled images The fast-path can't antialias edges, and shouldn't be used when that is requested. Change-Id: I3a0ce120ab96a6f95d11c165d1f5b356dae009fe Reviewed-by: Eirik Aavitsland (cherry picked from commit ab216eaebf6d028367fddb93897bfb7ad694cc46) --- src/gui/painting/qpaintengine_raster.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 0bfcb175c9..902f8d911c 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -2426,7 +2426,8 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe if (s->matrix.type() > QTransform::TxScale) { SrcOverTransformFunc func = qTransformFunctions[d->rasterBuffer->format][img.format()]; // The fast transform methods doesn't really work on small targets, see QTBUG-93475 - if (func && (!clip || clip->hasRectClip) && targetBounds.width() >= 16 && targetBounds.height() >= 16) { + // And it can't antialias the edges + if (func && (!clip || clip->hasRectClip) && !s->flags.antialiased && targetBounds.width() >= 16 && targetBounds.height() >= 16) { func(d->rasterBuffer->buffer(), d->rasterBuffer->bytesPerLine(), img.bits(), img.bytesPerLine(), r, sr, !clip ? d->deviceRect : clip->clipRect, s->matrix, s->intOpacity); -- cgit v1.2.3 From 3c45ce4d0a6815bbf92d2d1158f540a9b028aee4 Mon Sep 17 00:00:00 2001 From: Tarja Sundqvist Date: Wed, 26 May 2021 15:07:43 +0300 Subject: Extend tst_QGL::graphicsViewClipping blacklisting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added SLES to the list. Change-Id: I5995d5a8ca012664f229b897122a64c94e5a8aeb Reviewed-by: Tor Arne Vestbø --- tests/auto/opengl/qgl/BLACKLIST | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/opengl/qgl/BLACKLIST b/tests/auto/opengl/qgl/BLACKLIST index ec75ea16eb..705d8f8926 100644 --- a/tests/auto/opengl/qgl/BLACKLIST +++ b/tests/auto/opengl/qgl/BLACKLIST @@ -5,4 +5,5 @@ opensuse-leap ubuntu-18.04 rhel-7.4 opensuse-42.3 +sles -- cgit v1.2.3 From a85766e97967fa249bc66e36504780ba72bea2a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Thu, 23 Apr 2020 15:32:32 +0200 Subject: Moc: parse trailing return type Fixes: QTBUG-71123 Change-Id: I1c3749f0892fddcc433c9afcb1d6d7c30c97c9d9 Reviewed-by: Fabian Kosmale (cherry picked from commit 12b8283f899ebcf401d974927314b9531334a56e) --- src/tools/moc/moc.cpp | 30 +++++++---- tests/auto/tools/moc/allmocs_baseline_in.json | 73 +++++++++++++++++++++++++++ tests/auto/tools/moc/cxx11-trailing-return.h | 68 +++++++++++++++++++++++++ tests/auto/tools/moc/moc.pro | 1 + tests/auto/tools/moc/tst_moc.cpp | 38 ++++++++++++++ 5 files changed, 201 insertions(+), 9 deletions(-) create mode 100644 tests/auto/tools/moc/cxx11-trailing-return.h diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 5f00591fbb..057b1c6324 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -219,6 +219,7 @@ Type Moc::parseType() case DOUBLE: case VOID: case BOOL: + case AUTO: type.name += lexem(); isVoid |= (lookup(0) == VOID); break; @@ -458,15 +459,6 @@ bool Moc::parseFunction(FunctionDef *def, bool inMacro) scopedFunctionName = tempType.isScoped; } - // we don't support references as return types, it's too dangerous - if (def->type.referenceType == Type::Reference) { - QByteArray rawName = def->type.rawName; - def->type = Type("void"); - def->type.rawName = rawName; - } - - def->normalizedType = normalizeType(def->type.name); - if (!test(RPAREN)) { parseFunctionArguments(def); next(RPAREN); @@ -489,6 +481,10 @@ bool Moc::parseFunction(FunctionDef *def, bool inMacro) next(LPAREN); until(RPAREN); } + + if (def->type.name == "auto" && test(ARROW)) + def->type = parseType(); // Parse trailing return-type + if (test(SEMIC)) ; else if ((def->inlineCode = test(LBRACE))) @@ -506,6 +502,22 @@ bool Moc::parseFunction(FunctionDef *def, bool inMacro) warning(msg.constData()); return false; } + + QList typeNameParts = normalizeType(def->type.name).split(' '); + if (typeNameParts.contains("auto")) { + // We expected a trailing return type but we haven't seen one + error("Function declared with auto as return type but missing trailing return type. " + "Return type deduction is not supported."); + } + + // we don't support references as return types, it's too dangerous + if (def->type.referenceType == Type::Reference) { + QByteArray rawName = def->type.rawName; + def->type = Type("void"); + def->type.rawName = rawName; + } + + def->normalizedType = normalizeType(def->type.name); return true; } diff --git a/tests/auto/tools/moc/allmocs_baseline_in.json b/tests/auto/tools/moc/allmocs_baseline_in.json index 6d17bebb5f..12a4a22a19 100644 --- a/tests/auto/tools/moc/allmocs_baseline_in.json +++ b/tests/auto/tools/moc/allmocs_baseline_in.json @@ -1533,6 +1533,79 @@ "inputFile": "cxx11-explicit-override-control.h", "outputRevision": 67 }, + { + "classes": [ + { + "className": "CXX11TrailingReturn", + "object": true, + "qualifiedClassName": "CXX11TrailingReturn", + "signals": [ + { + "access": "public", + "arguments": [ + { + "name": "i", + "type": "int" + } + ], + "name": "trailingSignalReturn", + "returnType": "void" + } + ], + "slots": [ + { + "access": "public", + "name": "fun", + "returnType": "void" + }, + { + "access": "public", + "arguments": [ + { + "name": "i", + "type": "int" + }, + { + "name": "b", + "type": "char" + } + ], + "name": "arguments", + "returnType": "int" + }, + { + "access": "public", + "arguments": [ + { + "name": "i", + "type": "int" + } + ], + "name": "inlineFunc", + "returnType": "int" + }, + { + "access": "public", + "name": "constRefReturn", + "returnType": "void" + }, + { + "access": "public", + "name": "constConstRefReturn", + "returnType": "void" + } + ], + "superClasses": [ + { + "access": "public", + "name": "QObject" + } + ] + } + ], + "inputFile": "cxx11-trailing-return.h", + "outputRevision": 67 + }, { "classes": [ { diff --git a/tests/auto/tools/moc/cxx11-trailing-return.h b/tests/auto/tools/moc/cxx11-trailing-return.h new file mode 100644 index 0000000000..26178ff68e --- /dev/null +++ b/tests/auto/tools/moc/cxx11-trailing-return.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CXX11_TRAILING_RETURN_H +#define CXX11_TRAILING_RETURN_H +#include + +class CXX11TrailingReturn : public QObject +{ + Q_OBJECT +public slots: + inline auto fun() -> void; + inline auto arguments(int i, char b) -> int; + inline auto inlineFunc(int i) -> int + { + return i + 1; + } + + inline auto constRefReturn() -> const CXX11TrailingReturn & + { + return {}; + } + + inline auto constConstRefReturn() const -> const CXX11TrailingReturn & + { + return {}; + } + +signals: + auto trailingSignalReturn(int i) -> void; +}; + +auto CXX11TrailingReturn::fun() -> void +{ + return; +} + +auto CXX11TrailingReturn::arguments(int i, char b) -> int +{ + return i + int(b); +} + +#endif // CXX11_TRAILING_RETURN_H diff --git a/tests/auto/tools/moc/moc.pro b/tests/auto/tools/moc/moc.pro index cafc7bc184..c324b3a8cd 100644 --- a/tests/auto/tools/moc/moc.pro +++ b/tests/auto/tools/moc/moc.pro @@ -19,6 +19,7 @@ HEADERS += using-namespaces.h no-keywords.h task87883.h c-comments.h backslash-n task234909.h task240368.h pure-virtual-signals.h cxx11-enums.h \ cxx11-final-classes.h \ cxx11-explicit-override-control.h \ + cxx11-trailing-return.h \ forward-declared-param.h \ parse-defines.h \ function-with-attributes.h \ diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 0f801fe902..c716aead21 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -62,6 +62,7 @@ #include "cxx11-enums.h" #include "cxx11-final-classes.h" #include "cxx11-explicit-override-control.h" +#include "cxx11-trailing-return.h" #include "parse-defines.h" #include "related-metaobjects-in-namespaces.h" @@ -687,6 +688,7 @@ private slots: void privateClass(); void cxx11Enums_data(); void cxx11Enums(); + void cxx11TrailingReturn(); void returnRefs(); void memberProperties_data(); void memberProperties(); @@ -2200,6 +2202,30 @@ void tst_Moc::warnings_data() << QString() << QString("standard input:2: Error: Plugin Metadata file \"does.not.exists\" does not exist. Declaration will be ignored"); + QTest::newRow("Auto-declared, missing trailing return") + << QByteArray("class X { \n public slots: \n auto fun() { return 1; } };") + << QStringList() + << 1 + << QString() + << QString("standard input:3: Error: Function declared with auto as return type but missing trailing return type. Return type deduction is not supported."); + + QTest::newRow("Auto-declared, volatile auto as trailing return type") + << QByteArray("class X { \n public slots: \n auto fun() -> volatile auto { return 1; } };") + << QStringList() + << 1 + << QString() + << QString("standard input:3: Error: Function declared with auto as return type but missing trailing return type. Return type deduction is not supported."); + + // We don't currently support the decltype keyword, so it's not the same error as above. + // The test is just here to make sure this keeps generating an error until return type deduction + // is supported. + QTest::newRow("Auto-declared, decltype in trailing return type") + << QByteArray("class X { \n public slots: \n auto fun() -> decltype(0+1) { return 1; } };") + << QStringList() + << 1 + << QString() + << QString("standard input:3: Parse error at \"decltype\""); + #ifdef Q_OS_LINUX // Limit to Linux because the error message is platform-dependent QTest::newRow("Q_PLUGIN_METADATA: unreadable file") << QByteArray("class X { \n Q_PLUGIN_METADATA(FILE \".\") \n };") @@ -2329,6 +2355,18 @@ void tst_Moc::cxx11Enums() QCOMPARE(meta->enumerator(idx).isScoped(), isScoped); } +void tst_Moc::cxx11TrailingReturn() +{ + CXX11TrailingReturn retClass; + const QMetaObject *mobj = retClass.metaObject(); + QVERIFY(mobj->indexOfSlot("fun()") != -1); + QVERIFY(mobj->indexOfSlot("arguments(int,char)") != -1); + QVERIFY(mobj->indexOfSlot("inlineFunc(int)") != -1); + QVERIFY(mobj->indexOfSlot("constRefReturn()") != -1); + QVERIFY(mobj->indexOfSlot("constConstRefReturn()") != -1); + QVERIFY(mobj->indexOfSignal("trailingSignalReturn(int)") != -1); +} + void tst_Moc::returnRefs() { TestClass tst; -- cgit v1.2.3 From 2e9cd7443f1a281b1dbc62c73060ff3c5889d300 Mon Sep 17 00:00:00 2001 From: Tarja Sundqvist Date: Wed, 26 May 2021 15:29:23 +0300 Subject: Blacklist tst_QGestureRecognizer::panGesture tst_QGestureRecognizer::pangesture blacklisted from the linux. Task-number: QTBUG-82339 Change-Id: Ib06b5ef73075e4dc5038e01ecbe5f36af802a1f8 Reviewed-by: Shawn Rutledge --- tests/auto/widgets/kernel/qgesturerecognizer/BLACKLIST | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tests/auto/widgets/kernel/qgesturerecognizer/BLACKLIST diff --git a/tests/auto/widgets/kernel/qgesturerecognizer/BLACKLIST b/tests/auto/widgets/kernel/qgesturerecognizer/BLACKLIST new file mode 100644 index 0000000000..f9104cc307 --- /dev/null +++ b/tests/auto/widgets/kernel/qgesturerecognizer/BLACKLIST @@ -0,0 +1,3 @@ +# See qtbase/src/testlib/qtestblacklist.cpp for format +[panGesture] +linux -- cgit v1.2.3 From 2d929d01162e0ca191e220b03c61ec7e215e75e1 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Mon, 3 May 2021 17:51:33 +0200 Subject: CMake: Fix automatic default linking of static svg plugins When a qmake project links to the static QSvg module, qmake will automatically link the svg plugins into the executable. This was not the case for CMake projects, due to an incorrect genex check of the QT_PLUGIN_EXTENDS property. Instead of checking against the CMAKE_MODULE_NAME value, we should check for the modules listed in the qmake PLUGIN_EXTENDS variable. Note that the CMake behavior is still off compared to the qmake one. In a qmake project, the svg plugins will only be linked if there's a QT += svg clause (find and link against svg module). If there's only a QT += gui, the svg plugins will not be linked in. In contrast, in CMake it's enough to only do find_package(Qt5Gui) without finding Svg, and that will already link in the svg plugins. This is somewhat incorrect, but shouldn't lead to any issues. Not linking at all was worse. Implementing this properly is much harder. A new bug report was filed to track that for Qt 6. Fixes: QTBUG-82037 Task-number: QTBUG-93501 Change-Id: I69715081839f9493329d12a88207daeab81218fc Reviewed-by: Joerg Bornemann --- mkspecs/features/create_cmake.prf | 9 ++++++++- mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in | 9 ++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf index 24ed125f12..64639f177d 100644 --- a/mkspecs/features/create_cmake.prf +++ b/mkspecs/features/create_cmake.prf @@ -170,6 +170,9 @@ qtConfig(debug_and_release) { } contains(CONFIG, plugin) { + CMAKE_PLUGIN_NAME = $$PLUGIN_CLASS_NAME + + plugin_genex_check = equals(PLUGIN_EXTENDS, -) { CMAKE_PLUGIN_EXTENDS = - } else { @@ -177,8 +180,13 @@ contains(CONFIG, plugin) { for (p, PLUGIN_EXTENDS) { m = $$cmakeModuleName($$p) list_plugin_extends += Qt::$$m + + # CMake introduced $ in 3.12 which is too new for Qt, so manually + # unroll each module check with an STREQUAL genex + plugin_genex_check += \"$,Qt::$${m}>,\" } CMAKE_PLUGIN_EXTENDS = $$join(list_plugin_extends, ";") + CMAKE_PLUGIN_EXTENDS_GENEX_CHECK = $$join(plugin_genex_check, "$$escape_expand(\\n) ") } PLUGIN_MODULE_NAME = @@ -207,7 +215,6 @@ contains(CONFIG, plugin) { CMAKE_MODULE_NAME = $$cmakeModuleName($$PLUGIN_MODULE_NAME) - CMAKE_PLUGIN_NAME = $$PLUGIN_CLASS_NAME CMAKE_PLUGIN_TYPE = $$PLUGIN_TYPE CMAKE_PLUGIN_TYPE_ESCAPED = $$replace(PLUGIN_TYPE, [-/], _) diff --git a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in index b550a52c60..2e23109167 100644 --- a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in +++ b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in @@ -86,15 +86,14 @@ string(CONCAT _plugin_genex \"${_user_specified_genex_versionless},\" # Add this plugin if all of the following are true: # 1) the list of explicitly included plugin types is empty - # 2) the QT_PLUGIN_EXTENDS property for the plugin is empty or equal to the current - # module name + # 2) the QT_PLUGIN_EXTENDS property for the plugin is empty or equal to one of the modules + # listed in the plugin's PLUGIN_EXTEND qmake variable # 3) the user hasn\'t explicitly excluded the plugin. + # TODO: Note that the current implementation of (2) is not entirely correct QTBUG-93501 \"$,\" \"$,Qt::$${CMAKE_MODULE_NAME}>,\" + $${CMAKE_PLUGIN_EXTENDS_GENEX_CHECK} \"$,>\" \">,\" \"$>,\" -- cgit v1.2.3 From 95694109e9ec8200239f9a9aae7a789fe565c5e9 Mon Sep 17 00:00:00 2001 From: Dongmei Wang Date: Fri, 9 Nov 2018 00:07:58 -0800 Subject: QFileSystemModel fails to locate a host from root's visible children In QFileSystemModel, in some cases the hostname in a UNC path is converted to lower case and stored in the root node's visibleChildren. When QFileSystemModel sets the UNC path as the root path, it tries to get the row number for the host, but it didn't convert the hostname to lower case before getting the row number, which resulted in the host not found in the root node's visible children. As a result, it returns -1, an invalid row number. Change the behavior to find the node for the host using the host name case-insensitive and then get the row number. Fixes: QTBUG-71701 Change-Id: Ib95c7b6d2bc22fd82f2789b7004b6fc82dfcb13b Reviewed-by: Edward Welbourne Reviewed-by: Qt CI Bot Reviewed-by: Alex Blasche (cherry picked from commit e253a30238ed1a93877780428c035d3b7a53e22a) Reviewed-by: Friedemann Kleint --- src/widgets/dialogs/qfilesystemmodel.cpp | 7 +++++-- .../dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp index 9ee2b94f15..d70b07f8ca 100644 --- a/src/widgets/dialogs/qfilesystemmodel.cpp +++ b/src/widgets/dialogs/qfilesystemmodel.cpp @@ -397,8 +397,11 @@ QFileSystemModelPrivate::QFileSystemNode *QFileSystemModelPrivate::node(const QS if (absolutePath.endsWith(QLatin1Char('/'))) trailingSeparator = QLatin1String("\\"); int r = 0; - QFileSystemModelPrivate::QFileSystemNode *rootNode = const_cast(&root); - if (!root.children.contains(host.toLower())) { + auto rootNode = const_cast(&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/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp index 2c0b3f2bcb..51bed6ddfe 100644 --- a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp +++ b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp @@ -226,6 +226,21 @@ void tst_QFileSystemModel::rootPath() QCOMPARE(rootChanged.count(), oldCount + 1); QCOMPARE(model->rootDirectory().absolutePath(), newdir.path()); } + +#ifdef Q_OS_WIN + // check case insensitive root node on windows, tests QTBUG-71701 + QModelIndex index = model->setRootPath(QString("\\\\localhost\\c$")); + QVERIFY(index.isValid()); + QCOMPARE(model->rootPath(), QString("//localhost/c$")); + + index = model->setRootPath(QString("\\\\localhost\\C$")); + QVERIFY(index.isValid()); + QCOMPARE(model->rootPath(), QString("//localhost/C$")); + + index = model->setRootPath(QString("\\\\LOCALHOST\\C$")); + QVERIFY(index.isValid()); + QCOMPARE(model->rootPath(), QString("//LOCALHOST/C$")); +#endif } void tst_QFileSystemModel::readOnly() -- cgit v1.2.3 From d90092683eae976736940bb18b175c8cf467a2b6 Mon Sep 17 00:00:00 2001 From: Piotr Srebrny Date: Wed, 28 Apr 2021 14:37:44 +0200 Subject: Do not remove non-widget items when removeWidget() called with nullptr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit child->widget() returns null if the layout item is not a widget. Thus, calling removeWidget(nullptr) will remove all non-widget items such as layouts or strechers. Change-Id: I772c1158d0f7e8e2850b6e571b0405a2896f09b8 Reviewed-by: Tor Arne Vestbø Reviewed-by: David Faure (cherry picked from commit 867c0b8d8a53974074b1fff5b132f3ae9f150066) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/kernel/qlayout.cpp | 5 +++++ tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp | 24 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp index b034a76bcf..7b79486ff3 100644 --- a/src/widgets/kernel/qlayout.cpp +++ b/src/widgets/kernel/qlayout.cpp @@ -1386,6 +1386,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/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp index c8fe1841c8..c38ddbf4dc 100644 --- a/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp +++ b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp @@ -69,6 +69,7 @@ private slots: void controlTypes2(); void adjustSizeShouldMakeSureLayoutIsActivated(); void testRetainSizeWhenHidden(); + void removeWidget(); }; tst_QLayout::tst_QLayout() @@ -381,5 +382,28 @@ void tst_QLayout::testRetainSizeWhenHidden() QCOMPARE(widget.sizeHint().height(), normalHeight); } +void tst_QLayout::removeWidget() +{ + QHBoxLayout layout; + QCOMPARE(layout.count(), 0); + QWidget w; + layout.addWidget(&w); + QCOMPARE(layout.count(), 1); + layout.removeWidget(&w); + QCOMPARE(layout.count(), 0); + + QPointer childLayout(new QHBoxLayout); + layout.addLayout(childLayout); + QCOMPARE(layout.count(), 1); + + layout.removeWidget(nullptr); + QCOMPARE(layout.count(), 1); + + layout.removeItem(childLayout); + QCOMPARE(layout.count(), 0); + + QVERIFY(!childLayout.isNull()); +} + QTEST_MAIN(tst_QLayout) #include "tst_qlayout.moc" -- cgit v1.2.3 From f83ededa19ec1ce059c5c96d94c4a29ae7d1273e Mon Sep 17 00:00:00 2001 From: Aleksei Nikiforov Date: Tue, 3 Sep 2019 13:07:25 +0300 Subject: Qt xcb: remove false detects of Qt::GroupSwitchModifier In some cases, if X11 is configured with CapsLock as keyboard language switch key, and CapsLock is toggled via Shift+CapsLock key combination, toggled CapsLock is falsely detected as Qt::GroupSwitchModifier for subsequent key events. This change fixes this false detect, but doesn't fix detection of Qt::GroupSwitchModifier which is likely still broken. Fixes: QTBUG-49771 Change-Id: I485e2d4f3c654707c62adaba367c1b8afb3fc36c Reviewed-by: Liang Qi (cherry picked from commit 25a7034d78aeb12726a1052d64c0aa3314a1f69d) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/xcb/qxcbkeyboard.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index b2ce353ae9..73b36172de 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; } -- cgit v1.2.3 From 54eac7e5ac9a32eef0434a7e8d94640b4e3ae16e Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 7 May 2021 13:34:13 +0200 Subject: SQLite: Update SQLite to v3.35.5 [ChangeLog][QtSQL][SQLite] Updated SQLite to v3.35.5 Change-Id: I7e1f5a4b6eb48d9f6105d7f08b35a2c62fc79660 Reviewed-by: Qt CI Bot Reviewed-by: Volker Hilsheimer (cherry picked from commit 75d8623752e67a39e2ee04e5233dc502e63a17f1) Reviewed-by: Qt Cherry-pick Bot --- src/3rdparty/sqlite/qt_attribution.json | 4 +- src/3rdparty/sqlite/sqlite3.c | 271 +++++++++++++++++++++----------- src/3rdparty/sqlite/sqlite3.h | 6 +- 3 files changed, 187 insertions(+), 94 deletions(-) diff --git a/src/3rdparty/sqlite/qt_attribution.json b/src/3rdparty/sqlite/qt_attribution.json index 1c1d9b7746..1d8f96ff03 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.35.2", - "DownloadLocation": "https://www.sqlite.org/2020/sqlite-amalgamation-3350200.zip", + "Version": "3.35.5", + "DownloadLocation": "https://www.sqlite.org/2020/sqlite-amalgamation-3350500.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 54f8277a71..df53e437ba 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.35.2. By combining all the individual C code files into this +** version 3.35.5. 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 @@ -1186,9 +1186,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.35.2" -#define SQLITE_VERSION_NUMBER 3035002 -#define SQLITE_SOURCE_ID "2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827" +#define SQLITE_VERSION "3.35.5" +#define SQLITE_VERSION_NUMBER 3035005 +#define SQLITE_SOURCE_ID "2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -19764,6 +19764,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int); SQLITE_PRIVATE void sqlite3ExprFunctionUsable(Parse*,Expr*,FuncDef*); SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*); +SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse*, Expr*); SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse*, Expr*); SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*); @@ -21071,6 +21072,7 @@ struct VdbeCursor { Bool isEphemeral:1; /* True for an ephemeral table */ Bool useRandomRowid:1; /* Generate new record numbers semi-randomly */ Bool isOrdered:1; /* True if the table is not BTREE_UNORDERED */ + Bool hasBeenDuped:1; /* This cursor was source or target of OP_OpenDup */ u16 seekHit; /* See the OP_SeekHit and OP_IfNoHope opcodes */ Btree *pBtx; /* Separate file holding temporary table */ i64 seqCount; /* Sequence counter */ @@ -40220,7 +40222,8 @@ static int unixBackupDir(const char *z, int *pJ){ int j = *pJ; int i; if( j<=0 ) return 0; - for(i=j-1; ALWAYS(i>0) && z[i-1]!='/'; i--){} + for(i=j-1; i>0 && z[i-1]!='/'; i--){} + if( i==0 ) return 0; if( z[i]=='.' && i==j-2 && z[i+1]=='.' ) return 0; *pJ = i-1; return 1; @@ -64277,7 +64280,7 @@ struct Btree { u8 hasIncrblobCur; /* True if there are one or more Incrblob cursors */ int wantToLock; /* Number of nested calls to sqlite3BtreeEnter() */ int nBackup; /* Number of backup operations reading this btree */ - u32 iDataVersion; /* Combines with pBt->pPager->iDataVersion */ + u32 iBDataVersion; /* Combines with pBt->pPager->iDataVersion */ Btree *pNext; /* List of other sharable Btrees from the same db */ Btree *pPrev; /* Back pointer of the same list */ #ifdef SQLITE_DEBUG @@ -67690,19 +67693,23 @@ static void freeTempSpace(BtShared *pBt){ */ SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){ BtShared *pBt = p->pBt; - BtCursor *pCur; /* Close all cursors opened via this handle. */ assert( sqlite3_mutex_held(p->db->mutex) ); sqlite3BtreeEnter(p); - pCur = pBt->pCursor; - while( pCur ){ - BtCursor *pTmp = pCur; - pCur = pCur->pNext; - if( pTmp->pBtree==p ){ - sqlite3BtreeCloseCursor(pTmp); + + /* Verify that no other cursors have this Btree open */ +#ifdef SQLITE_DEBUG + { + BtCursor *pCur = pBt->pCursor; + while( pCur ){ + BtCursor *pTmp = pCur; + pCur = pCur->pNext; + assert( pTmp->pBtree!=p ); + } } +#endif /* Rollback any active transaction and free the handle structure. ** The call to sqlite3BtreeRollback() drops any table-locks held by @@ -69084,7 +69091,7 @@ SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){ sqlite3BtreeLeave(p); return rc; } - p->iDataVersion--; /* Compensate for pPager->iDataVersion++; */ + p->iBDataVersion--; /* Compensate for pPager->iDataVersion++; */ pBt->inTransaction = TRANS_READ; btreeClearHasContent(pBt); } @@ -69494,7 +69501,14 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){ unlockBtreeIfUnused(pBt); sqlite3_free(pCur->aOverflow); sqlite3_free(pCur->pKey); - sqlite3BtreeLeave(pBtree); + if( (pBt->openFlags & BTREE_SINGLE) && pBt->pCursor==0 ){ + /* Since the BtShared is not sharable, there is no need to + ** worry about the missing sqlite3BtreeLeave() call here. */ + assert( pBtree->sharable==0 ); + sqlite3BtreeClose(pBtree); + }else{ + sqlite3BtreeLeave(pBtree); + } pCur->pBtree = 0; } return SQLITE_OK; @@ -74607,7 +74621,7 @@ SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){ assert( idx>=0 && idx<=15 ); if( idx==BTREE_DATA_VERSION ){ - *pMeta = sqlite3PagerDataVersion(pBt->pPager) + p->iDataVersion; + *pMeta = sqlite3PagerDataVersion(pBt->pPager) + p->iBDataVersion; }else{ *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]); } @@ -80835,20 +80849,15 @@ SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ return; } assert( pCx->pBtx==0 || pCx->eCurType==CURTYPE_BTREE ); + assert( pCx->pBtx==0 || pCx->isEphemeral ); switch( pCx->eCurType ){ case CURTYPE_SORTER: { sqlite3VdbeSorterClose(p->db, pCx); break; } case CURTYPE_BTREE: { - if( pCx->isEphemeral ){ - if( pCx->pBtx ) sqlite3BtreeClose(pCx->pBtx); - /* The pCx->pCursor will be close automatically, if it exists, by - ** the call above. */ - }else{ - assert( pCx->uc.pCursor!=0 ); - sqlite3BtreeCloseCursor(pCx->uc.pCursor); - } + assert( pCx->uc.pCursor!=0 ); + sqlite3BtreeCloseCursor(pCx->uc.pCursor); break; } #ifndef SQLITE_OMIT_VIRTUALTABLE @@ -81932,6 +81941,7 @@ SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor **pp, u32 *piCol){ assert( p->eCurType==CURTYPE_BTREE || p->eCurType==CURTYPE_PSEUDO ); if( p->deferredMoveto ){ u32 iMap; + assert( !p->isEphemeral ); if( p->aAltMap && (iMap = p->aAltMap[1+*piCol])>0 && !p->nullRow ){ *pp = p->pAltCursor; *piCol = iMap - 1; @@ -86140,11 +86150,6 @@ static VdbeCursor *allocateCursor( assert( iCur>=0 && iCurnCursor ); if( p->apCsr[iCur] ){ /*OPTIMIZATION-IF-FALSE*/ - /* Before calling sqlite3VdbeFreeCursor(), ensure the isEphemeral flag - ** is clear. Otherwise, if this is an ephemeral cursor created by - ** OP_OpenDup, the cursor will not be closed and will still be part - ** of a BtShared.pCursor list. */ - if( p->apCsr[iCur]->pBtx==0 ) p->apCsr[iCur]->isEphemeral = 0; sqlite3VdbeFreeCursor(p, p->apCsr[iCur]); p->apCsr[iCur] = 0; } @@ -89830,7 +89835,7 @@ case OP_OpenDup: { pOrig = p->apCsr[pOp->p2]; assert( pOrig ); - assert( pOrig->pBtx!=0 ); /* Only ephemeral cursors can be duplicated */ + assert( pOrig->isEphemeral ); /* Only ephemeral cursors can be duplicated */ pCx = allocateCursor(p, pOp->p1, pOrig->nField, -1, CURTYPE_BTREE); if( pCx==0 ) goto no_mem; @@ -89840,7 +89845,10 @@ case OP_OpenDup: { pCx->isTable = pOrig->isTable; pCx->pgnoRoot = pOrig->pgnoRoot; pCx->isOrdered = pOrig->isOrdered; - rc = sqlite3BtreeCursor(pOrig->pBtx, pCx->pgnoRoot, BTREE_WRCSR, + pCx->pBtx = pOrig->pBtx; + pCx->hasBeenDuped = 1; + pOrig->hasBeenDuped = 1; + rc = sqlite3BtreeCursor(pCx->pBtx, pCx->pgnoRoot, BTREE_WRCSR, pCx->pKeyInfo, pCx->uc.pCursor); /* The sqlite3BtreeCursor() routine can only fail for the first cursor ** opened for a database. Since there is already an open cursor when this @@ -89906,9 +89914,10 @@ case OP_OpenEphemeral: { aMem[pOp->p3].z = ""; } pCx = p->apCsr[pOp->p1]; - 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. */ + if( pCx && !pCx->hasBeenDuped ){ + /* If the ephermeral table is already open and has no duplicates from + ** OP_OpenDup, then erase all existing content so that the table is + ** empty again, rather than creating a new table. */ assert( pCx->isEphemeral ); pCx->seqCount = 0; pCx->cacheStatus = CACHE_STALE; @@ -89922,33 +89931,36 @@ case OP_OpenEphemeral: { vfsFlags); if( rc==SQLITE_OK ){ rc = sqlite3BtreeBeginTrans(pCx->pBtx, 1, 0); - } - if( rc==SQLITE_OK ){ - /* If a transient index is required, create it by calling - ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before - ** opening it. If a transient table is required, just use the - ** automatically created table with root-page 1 (an BLOB_INTKEY table). - */ - if( (pCx->pKeyInfo = pKeyInfo = pOp->p4.pKeyInfo)!=0 ){ - assert( pOp->p4type==P4_KEYINFO ); - rc = sqlite3BtreeCreateTable(pCx->pBtx, &pCx->pgnoRoot, - BTREE_BLOBKEY | pOp->p5); - if( rc==SQLITE_OK ){ - assert( pCx->pgnoRoot==SCHEMA_ROOT+1 ); - assert( pKeyInfo->db==db ); - assert( pKeyInfo->enc==ENC(db) ); - rc = sqlite3BtreeCursor(pCx->pBtx, pCx->pgnoRoot, BTREE_WRCSR, - pKeyInfo, pCx->uc.pCursor); + if( rc==SQLITE_OK ){ + /* If a transient index is required, create it by calling + ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before + ** opening it. If a transient table is required, just use the + ** automatically created table with root-page 1 (an BLOB_INTKEY table). + */ + if( (pCx->pKeyInfo = pKeyInfo = pOp->p4.pKeyInfo)!=0 ){ + assert( pOp->p4type==P4_KEYINFO ); + rc = sqlite3BtreeCreateTable(pCx->pBtx, &pCx->pgnoRoot, + BTREE_BLOBKEY | pOp->p5); + if( rc==SQLITE_OK ){ + assert( pCx->pgnoRoot==SCHEMA_ROOT+1 ); + assert( pKeyInfo->db==db ); + assert( pKeyInfo->enc==ENC(db) ); + rc = sqlite3BtreeCursor(pCx->pBtx, pCx->pgnoRoot, BTREE_WRCSR, + pKeyInfo, pCx->uc.pCursor); + } + pCx->isTable = 0; + }else{ + pCx->pgnoRoot = SCHEMA_ROOT; + rc = sqlite3BtreeCursor(pCx->pBtx, SCHEMA_ROOT, BTREE_WRCSR, + 0, pCx->uc.pCursor); + pCx->isTable = 1; } - pCx->isTable = 0; - }else{ - pCx->pgnoRoot = SCHEMA_ROOT; - rc = sqlite3BtreeCursor(pCx->pBtx, SCHEMA_ROOT, BTREE_WRCSR, - 0, pCx->uc.pCursor); - pCx->isTable = 1; + } + pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED); + if( rc ){ + sqlite3BtreeClose(pCx->pBtx); } } - pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED); } if( rc ) goto abort_due_to_error; pCx->nullRow = 1; @@ -90382,13 +90394,13 @@ seek_not_found: ** ** There are three possible outcomes from this opcode:
    ** -**
  1. If after This.P1 steps, the cursor is still point to a place that -** is earlier in the btree than the target row, -** then fall through into the subsquence OP_SeekGE opcode. +**
  2. If after This.P1 steps, the cursor is still pointing to a place that +** is earlier in the btree than the target row, then fall through +** into the subsquence OP_SeekGE opcode. ** **
  3. If the cursor is successfully moved to the target row by 0 or more ** sqlite3BtreeNext() calls, then jump to This.P2, which will land just -** past the OP_IdxGT opcode that follows the OP_SeekGE. +** past the OP_IdxGT or OP_IdxGE opcode that follows the OP_SeekGE. ** **
  4. If the cursor ends up past the target row (indicating the the target ** row does not exist in the btree) then jump to SeekOP.P2. @@ -90405,7 +90417,8 @@ case OP_SeekScan: { /* pOp->p2 points to the first instruction past the OP_IdxGT that ** follows the OP_SeekGE. */ assert( pOp->p2>=(int)(pOp-aOp)+2 ); - assert( aOp[pOp->p2-1].opcode==OP_IdxGT ); + assert( aOp[pOp->p2-1].opcode==OP_IdxGT || aOp[pOp->p2-1].opcode==OP_IdxGE ); + testcase( aOp[pOp->p2-1].opcode==OP_IdxGE ); assert( pOp[1].p1==aOp[pOp->p2-1].p1 ); assert( pOp[1].p2==aOp[pOp->p2-1].p2 ); assert( pOp[1].p3==aOp[pOp->p2-1].p3 ); @@ -91940,6 +91953,8 @@ case OP_IdxRowid: { /* out2 */ pTabCur->deferredMoveto = 1; assert( pOp->p4type==P4_INTARRAY || pOp->p4.ai==0 ); pTabCur->aAltMap = pOp->p4.ai; + assert( !pC->isEphemeral ); + assert( !pTabCur->isEphemeral ); pTabCur->pAltCursor = pC; }else{ pOut = out2Prerelease(p, pOp); @@ -98988,15 +99003,19 @@ static int lookupName( if( pParse->pTriggerTab!=0 ){ int op = pParse->eTriggerOp; assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT ); - if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){ + if( pParse->bReturning ){ + if( (pNC->ncFlags & NC_UBaseReg)!=0 + && (zTab==0 || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0) + ){ + pExpr->iTable = op!=TK_DELETE; + pTab = pParse->pTriggerTab; + } + }else if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){ pExpr->iTable = 1; pTab = pParse->pTriggerTab; }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 */ @@ -101591,8 +101610,8 @@ SQLITE_PRIVATE Expr *sqlite3ExprAnd(Parse *pParse, Expr *pLeft, Expr *pRight){ }else if( (ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight)) && !IN_RENAME_OBJECT ){ - sqlite3ExprDelete(db, pLeft); - sqlite3ExprDelete(db, pRight); + sqlite3ExprDeferredDelete(pParse, pLeft); + sqlite3ExprDeferredDelete(pParse, pRight); return sqlite3Expr(db, TK_INTEGER, "0"); }else{ return sqlite3PExpr(pParse, TK_AND, pLeft, pRight); @@ -101789,6 +101808,22 @@ SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ if( p ) sqlite3ExprDeleteNN(db, p); } + +/* +** Arrange to cause pExpr to be deleted when the pParse is deleted. +** This is similar to sqlite3ExprDelete() except that the delete is +** deferred untilthe pParse is deleted. +** +** The pExpr might be deleted immediately on an OOM error. +** +** The deferred delete is (currently) implemented by adding the +** pExpr to the pParse->pConstExpr list with a register number of 0. +*/ +SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ + pParse->pConstExpr = + sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); +} + /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the ** expression. */ @@ -106414,8 +106449,7 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ pExpr = sqlite3ExprDup(db, pExpr, 0); if( pExpr ){ pAggInfo->aCol[iAgg].pCExpr = pExpr; - pParse->pConstExpr = - sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); + sqlite3ExprDeferredDelete(pParse, pExpr); } } }else{ @@ -106424,8 +106458,7 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ pExpr = sqlite3ExprDup(db, pExpr, 0); if( pExpr ){ pAggInfo->aFunc[iAgg].pFExpr = pExpr; - pParse->pConstExpr = - sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); + sqlite3ExprDeferredDelete(pParse, pExpr); } } } @@ -108668,33 +108701,44 @@ SQLITE_PRIVATE void sqlite3AlterDropColumn(Parse *pParse, SrcList *pSrc, Token * 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); + pParse->nMem += pTab->nCol; }else{ pPk = sqlite3PrimaryKeyIndex(pTab); + pParse->nMem += pPk->nColumn; + for(i=0; inKeyCol; i++){ + sqlite3VdbeAddOp3(v, OP_Column, iCur, i, reg+i+1); + } + nField = pPk->nKeyCol; } + regRec = ++pParse->nMem; for(i=0; inCol; 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); + if( iPosnKeyCol ) continue; regOut = reg+1+iPos-(iPos>iColPos); }else{ regOut = reg+1+nField; } - sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOut); + if( i==pTab->iPKey ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, regOut); + }else{ + 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); } + sqlite3VdbeChangeP5(v, OPFLAG_SAVEPOSITION); sqlite3VdbeAddOp2(v, OP_Next, iCur, addr+1); VdbeCoverage(v); sqlite3VdbeJumpHere(v, addr); @@ -115684,7 +115728,11 @@ SQLITE_PRIVATE void sqlite3CreateIndex( /* Clean up before exiting */ exit_create_index: if( pIndex ) sqlite3FreeIndex(db, pIndex); - if( pTab ){ /* Ensure all REPLACE indexes are at the end of the list */ + if( pTab ){ + /* Ensure all REPLACE indexes on pTab are at the end of the pIndex list. + ** The list was already ordered when this routine was entered, so at this + ** point at most a single index (the newly added index) will be out of + ** order. So we have to reorder at most one index. */ Index **ppFrom = &pTab->pIndex; Index *pThis; for(ppFrom=&pTab->pIndex; (pThis = *ppFrom)!=0; ppFrom=&pThis->pNext){ @@ -115698,6 +115746,16 @@ exit_create_index: } break; } +#ifdef SQLITE_DEBUG + /* Verify that all REPLACE indexes really are now at the end + ** of the index list. In other words, no other index type ever + ** comes after a REPLACE index on the list. */ + for(pThis = pTab->pIndex; pThis; pThis=pThis->pNext){ + assert( pThis->onError!=OE_Replace + || pThis->pNext==0 + || pThis->pNext->onError==OE_Replace ); + } +#endif } sqlite3ExprDelete(db, pPIWhere); sqlite3ExprListDelete(db, pList); @@ -123114,7 +123172,9 @@ SQLITE_PRIVATE void sqlite3Insert( pNx->iDataCur = iDataCur; pNx->iIdxCur = iIdxCur; if( pNx->pUpsertTarget ){ - sqlite3UpsertAnalyzeTarget(pParse, pTabList, pNx); + if( sqlite3UpsertAnalyzeTarget(pParse, pTabList, pNx) ){ + goto insert_cleanup; + } } pNx = pNx->pNextUpsert; }while( pNx!=0 ); @@ -124536,7 +124596,7 @@ static void codeWithoutRowidPreupdate( Vdbe *v = pParse->pVdbe; int r = sqlite3GetTempReg(pParse); assert( !HasRowid(pTab) ); - assert( 0==(pParse->db->mDbFlags & DBFLAG_Vacuum) ); + assert( 0==(pParse->db->mDbFlags & DBFLAG_Vacuum) || CORRUPT_DB ); sqlite3VdbeAddOp2(v, OP_Integer, 0, r); sqlite3VdbeAddOp4(v, OP_Insert, iCur, regData, r, (char*)pTab, P4_TABLE); sqlite3VdbeChangeP5(v, OPFLAG_ISNOOP); @@ -133084,7 +133144,7 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList( nCol = pEList->nExpr; aCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol); testcase( aCol==0 ); - if( nCol>32767 ) nCol = 32767; + if( NEVER(nCol>32767) ) nCol = 32767; }else{ nCol = 0; aCol = 0; @@ -136158,16 +136218,24 @@ static int resolveFromTermToCte( pSavedWith = pParse->pWith; pParse->pWith = pWith; if( pSel->selFlags & SF_Recursive ){ + int rc; assert( pRecTerm!=0 ); assert( (pRecTerm->selFlags & SF_Recursive)==0 ); assert( pRecTerm->pNext!=0 ); assert( (pRecTerm->pNext->selFlags & SF_Recursive)!=0 ); assert( pRecTerm->pWith==0 ); pRecTerm->pWith = pSel->pWith; - sqlite3WalkSelect(pWalker, pRecTerm); + rc = sqlite3WalkSelect(pWalker, pRecTerm); pRecTerm->pWith = 0; + if( rc ){ + pParse->pWith = pSavedWith; + return 2; + } }else{ - sqlite3WalkSelect(pWalker, pSel); + if( sqlite3WalkSelect(pWalker, pSel) ){ + pParse->pWith = pSavedWith; + return 2; + } } pParse->pWith = pWith; @@ -137476,7 +137544,9 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pPrior->iCursor); pSub->nSelectRow = pPrior->pSelect->nSelectRow; }else{ - /* Generate a subroutine that will materialize the view. */ + /* Materalize the view. If the view is not correlated, generate a + ** subroutine to do the materialization so that subsequent uses of + ** the same view can reuse the materialization. */ int topAddr; int onceAddr = 0; int retAddr; @@ -137503,7 +137573,7 @@ SQLITE_PRIVATE int sqlite3Select( VdbeComment((v, "end %s", pItem->pTab->zName)); sqlite3VdbeChangeP1(v, topAddr, retAddr); sqlite3ClearTempRegCache(pParse); - if( pItem->fg.isCte ){ + if( pItem->fg.isCte && pItem->fg.isCorrelated==0 ){ CteUse *pCteUse = pItem->u2.pCteUse; pCteUse->addrM9e = pItem->addrFillSub; pCteUse->regRtn = pItem->regReturn; @@ -139275,6 +139345,25 @@ SQLITE_PRIVATE SrcList *sqlite3TriggerStepSrc( return pSrc; } +/* +** Return true if the pExpr term from the RETURNING clause argument +** list is of the form "*". Raise an error if the terms if of the +** form "table.*". +*/ +static int isAsteriskTerm( + Parse *pParse, /* Parsing context */ + Expr *pTerm /* A term in the RETURNING clause */ +){ + assert( pTerm!=0 ); + if( pTerm->op==TK_ASTERISK ) return 1; + if( pTerm->op!=TK_DOT ) return 0; + assert( pTerm->pRight!=0 ); + assert( pTerm->pLeft!=0 ); + if( pTerm->pRight->op!=TK_ASTERISK ) return 0; + sqlite3ErrorMsg(pParse, "RETURNING may not use \"TABLE.*\" wildcards"); + return 1; +} + /* The input list pList is the list of result set terms from a RETURNING ** clause. The table that we are returning from is pTab. ** @@ -139292,7 +139381,8 @@ static ExprList *sqlite3ExpandReturning( for(i=0; inExpr; i++){ Expr *pOldExpr = pList->a[i].pExpr; - if( ALWAYS(pOldExpr!=0) && pOldExpr->op==TK_ASTERISK ){ + if( NEVER(pOldExpr==0) ) continue; + if( isAsteriskTerm(pParse, pOldExpr) ){ int jj; for(jj=0; jjnCol; jj++){ Expr *pNewExpr; @@ -146825,6 +146915,7 @@ static void whereCombineDisjuncts( int op; /* Operator for the combined expression */ int idxNew; /* Index in pWC of the next virtual term */ + if( (pOne->wtFlags | pTwo->wtFlags) & TERM_VNULL ) return; if( (pOne->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return; if( (pTwo->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return; if( (eOp & (WO_EQ|WO_LT|WO_LE))!=eOp @@ -147530,6 +147621,7 @@ static void exprAnalyzeExists( #endif if( pSel->pPrior ) return; if( pSel->pWhere==0 ) return; + if( pSel->pLimit ) return; if( 0==exprAnalyzeExistsFindEq(pSel, 0, 0) ) return; pDup = sqlite3ExprDup(db, pExpr, 0); @@ -155314,6 +155406,7 @@ static void windowCheckValue(Parse *pParse, int reg, int eCond){ VdbeCoverageIf(v, eCond==2); } sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg); + sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC); VdbeCoverageNeverNullIf(v, eCond==0); /* NULL case captured by */ VdbeCoverageNeverNullIf(v, eCond==1); /* the OP_MustBeInt */ VdbeCoverageNeverNullIf(v, eCond==2); @@ -162308,7 +162401,7 @@ static const unsigned char aiClass[] = { #ifdef SQLITE_EBCDIC /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ /* 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, +/* 1x */ 28, 28, 28, 28, 28, 7, 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, @@ -229213,7 +229306,7 @@ static void fts5SourceIdFunc( ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886", -1, SQLITE_TRANSIENT); } /* @@ -234139,9 +234232,9 @@ SQLITE_API int sqlite3_stmt_init( #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ /************** End of stmt.c ************************************************/ -#if __LINE__!=234142 +#if __LINE__!=234235 #undef SQLITE_SOURCE_ID -#define SQLITE_SOURCE_ID "2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50calt2" +#define SQLITE_SOURCE_ID "2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98faalt2" #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 f636b294d2..19ee767fe8 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.35.2" -#define SQLITE_VERSION_NUMBER 3035002 -#define SQLITE_SOURCE_ID "2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827" +#define SQLITE_VERSION "3.35.5" +#define SQLITE_VERSION_NUMBER 3035005 +#define SQLITE_SOURCE_ID "2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886" /* ** CAPI3REF: Run-Time Library Version Numbers -- cgit v1.2.3 From 096c6223683e35dddd930fd06ee0dc0f5eefcf22 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Thu, 6 May 2021 07:57:45 +0200 Subject: macOS: Fix synthesized bold MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a user requested bold and there was no available font for this (which is quite common with CJK fonts and in fact is the case for the official Japanese font on the system), we should synthesize the boldness. This was done by checking if the requested font weight boldness matched the one in the font's traits, and if not, we flag the font boldness to be synthesized. But when initializing the font, we would first override the requested weight with the selected font's weight, *before* performing the check above. So even if there was a mismatch, we would not catch this and as a result, e.g. the system Japanese font would never be bold. [ChangeLog][macOS] Fixed an issue where boldness would not be correctly synthesized for families with no bold variant. Fixes: QTBUG-85634 Change-Id: I36da59d7689455e29cca283cb0724a0841095918 Reviewed-by: Konstantin Ritt Reviewed-by: Tor Arne Vestbø (cherry picked from commit 76d3cda88469137050f6aab4bbb8578061fe25f2) --- src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm index b6cefb96a8..5b74280ffc 100644 --- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm +++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm @@ -255,13 +255,15 @@ void QCoreTextFontEngine::init() }; QCFType allTraits = CTFontCopyTraits(ctfont); - fontDef.weight = QCoreTextFontEngine::qtWeightFromCFWeight(getTraitValue(allTraits, kCTFontWeightTrait)); int slant = static_cast(getTraitValue(allTraits, kCTFontSlantTrait) * 500 + 500); if (slant > 500 && !(traits & kCTFontItalicTrait)) fontDef.style = QFont::StyleOblique; if (fontDef.weight >= QFont::Bold && !(traits & kCTFontBoldTrait) && !qEnvironmentVariableIsSet("QT_NO_SYNTHESIZED_BOLD")) synthesisFlags |= SynthesizedBold; + else + fontDef.weight = QCoreTextFontEngine::qtWeightFromCFWeight(getTraitValue(allTraits, kCTFontWeightTrait)); + // XXX: we probably don't need to synthesis italic for oblique font if (fontDef.style != QFont::StyleNormal && !(traits & kCTFontItalicTrait) && !qEnvironmentVariableIsSet("QT_NO_SYNTHESIZED_ITALIC")) synthesisFlags |= SynthesizedItalic; -- cgit v1.2.3 From 79edc48c0dcd03a33abeb36c4b5b512a61339113 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 12 Apr 2021 11:39:21 +0200 Subject: QSqlTableModel::orderByClause(): Quote the table name This ensures correct handling of names with special characters. Fixes: QTBUG-92584 Change-Id: I95c7c54d9c7ee00b221a55f3d07ef1ec3a3bd217 Reviewed-by: Andy Shaw Reviewed-by: Friedemann Kleint Reviewed-by: Edward Welbourne (cherry picked from commit 21b3b54193b9d90ee377fdfa306e21d2fdfe2837) --- src/sql/models/qsqltablemodel.cpp | 3 +- .../models/qsqltablemodel/tst_qsqltablemodel.cpp | 48 ++++++++++++---------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index f2785aaacc..b5dc9e890e 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -1003,7 +1003,8 @@ QString QSqlTableModel::orderByClause() const //we can safely escape the field because it would have been obtained from the database //and have the correct case - QString field = d->tableName + QLatin1Char('.') + QString field = d->db.driver()->escapeIdentifier(d->tableName, QSqlDriver::TableName) + + QLatin1Char('.') + d->db.driver()->escapeIdentifier(f.name(), QSqlDriver::FieldName); field = d->sortOrder == Qt::AscendingOrder ? Sql::asc(field) : Sql::desc(field); return Sql::orderBy(field); diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp index 157565bc03..935734c070 100644 --- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp +++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp @@ -311,33 +311,37 @@ void tst_QSqlTableModel::select() QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); - QSqlTableModel model(0, db); - model.setTable(test); - model.setSort(0, Qt::AscendingOrder); - QVERIFY_SQL(model, select()); + QString withoutQuotes = test; + const QStringList tables = {test, withoutQuotes.remove(QLatin1Char('"'))}; + for (const QString &tbl : tables) { + QSqlTableModel model(0, db); + model.setTable(tbl); + model.setSort(0, Qt::AscendingOrder); + QVERIFY_SQL(model, select()); - QCOMPARE(model.rowCount(), 3); - QCOMPARE(model.columnCount(), 3); + QCOMPARE(model.rowCount(), 3); + QCOMPARE(model.columnCount(), 3); - QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry")); - QCOMPARE(model.data(model.index(0, 2)).toInt(), 1); - QCOMPARE(model.data(model.index(0, 3)), QVariant()); + QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); + QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry")); + QCOMPARE(model.data(model.index(0, 2)).toInt(), 1); + QCOMPARE(model.data(model.index(0, 3)), QVariant()); - QCOMPARE(model.data(model.index(1, 0)).toInt(), 2); - QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond")); - QCOMPARE(model.data(model.index(1, 2)).toInt(), 2); - QCOMPARE(model.data(model.index(1, 3)), QVariant()); + QCOMPARE(model.data(model.index(1, 0)).toInt(), 2); + QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond")); + QCOMPARE(model.data(model.index(1, 2)).toInt(), 2); + QCOMPARE(model.data(model.index(1, 3)), QVariant()); - QCOMPARE(model.data(model.index(2, 0)).toInt(), 3); - QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi")); - QCOMPARE(model.data(model.index(2, 2)).toInt(), 3); - QCOMPARE(model.data(model.index(2, 3)), QVariant()); + QCOMPARE(model.data(model.index(2, 0)).toInt(), 3); + QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi")); + QCOMPARE(model.data(model.index(2, 2)).toInt(), 3); + QCOMPARE(model.data(model.index(2, 3)), QVariant()); - QCOMPARE(model.data(model.index(3, 0)), QVariant()); - QCOMPARE(model.data(model.index(3, 1)), QVariant()); - QCOMPARE(model.data(model.index(3, 2)), QVariant()); - QCOMPARE(model.data(model.index(3, 3)), QVariant()); + QCOMPARE(model.data(model.index(3, 0)), QVariant()); + QCOMPARE(model.data(model.index(3, 1)), QVariant()); + QCOMPARE(model.data(model.index(3, 2)), QVariant()); + QCOMPARE(model.data(model.index(3, 3)), QVariant()); + } } class SelectRowModel: public QSqlTableModel -- cgit v1.2.3 From 716303c35a537bc38ddbdfd80ba23a884abf6978 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 27 Nov 2020 14:39:46 +0100 Subject: Write out the HTML correctly for nested lists When we are having nested lists then we need to ensure that the HTML is outputted correctly so that the closing list and item tags are placed in the right order. [ChangeLog][QtGui][QTextDocument] The output of toHtml() now handles nested lists correctly. Fixes: QTBUG-88374 Change-Id: I88afba0f897aeef78d4835a3124097fe6fd4d55e Reviewed-by: Allan Sandfeld Jensen (cherry picked from commit 72a5151403f107c445e20cf548ca2e7309c88ce7) Reviewed-by: Qt Cherry-pick Bot --- src/gui/text/qtextdocument.cpp | 29 +++++++++-- src/gui/text/qtextdocument_p.h | 1 + .../gui/text/qtextdocument/tst_qtextdocument.cpp | 58 ++++++++++++++++++++++ 3 files changed, 85 insertions(+), 3 deletions(-) diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 4a7af00a92..ee7b25640c 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -3032,10 +3032,12 @@ void QTextHtmlExporter::emitBlock(const QTextBlock &block) if (fragmentMarkers && block.position() + block.length() == doc->docHandle()->length()) html += QLatin1String(""); + QString closeTags; + if (pre) html += QLatin1String(""); else if (list) - html += QLatin1String("
  5. "); + closeTags += QLatin1String(""); else { int headingLevel = blockFormat.headingLevel(); if (headingLevel > 0 && headingLevel <= 6) @@ -3047,9 +3049,30 @@ void QTextHtmlExporter::emitBlock(const QTextBlock &block) if (list) { if (list->itemNumber(block) == list->count() - 1) { // last item? close list if (isOrderedList(list->format().style())) - html += QLatin1String("
"); + closeTags += QLatin1String(""); else - html += QLatin1String(""); + closeTags += QLatin1String(""); + } + const QTextBlock nextBlock = block.next(); + // If the next block is the beginning of a new deeper nested list, then we don't + // want to close the current list item just yet. This should be closed when this + // item is fully finished + if (nextBlock.isValid() && nextBlock.textList() && + nextBlock.textList()->itemNumber(nextBlock) == 0 && + nextBlock.textList()->format().indent() > list->format().indent()) { + QString lastTag; + if (!closingTags.isEmpty() && list->itemNumber(block) == list->count() - 1) + lastTag = closingTags.takeLast(); + lastTag.prepend(closeTags); + closingTags << lastTag; + } else if (list->itemNumber(block) == list->count() - 1) { + // If we are at the end of the list now then we can add in the closing tags for that + // current block + html += closeTags; + if (!closingTags.isEmpty()) + html += closingTags.takeLast(); + } else { + html += closeTags; } } diff --git a/src/gui/text/qtextdocument_p.h b/src/gui/text/qtextdocument_p.h index 35cedc67c0..d90710586a 100644 --- a/src/gui/text/qtextdocument_p.h +++ b/src/gui/text/qtextdocument_p.h @@ -405,6 +405,7 @@ private: QTextCharFormat defaultCharFormat; const QTextDocument *doc; bool fragmentMarkers; + QStringList closingTags; }; QT_END_NAMESPACE diff --git a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp index fdc7997d35..7bc9fe47c5 100644 --- a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp @@ -1772,6 +1772,59 @@ void tst_QTextDocument::toHtml_data() << QString("EMPTYBLOCK") + QString("
  • Blah
"); } + { + CREATE_DOC_AND_CURSOR(); + const QString listHtml = "
  • item-1
  • item-2
    • item-2.1
    • item-2.2" + "
      • item-2.2.1
    • item-2.3
      • item-2.3.1" + "
  • item-3
"; + cursor.insertHtml(listHtml); + + QTest::newRow("nested-lists-one") << QTextDocumentFragment(&doc) + << QString("
  • " + "item-1
  • \n
  • item-2\n
    • item-2.1
    • \n
    • item-2.2\n
      • item-2.2.1
    • \n" + "
    • item-2.3\n
      • " + "item-2.3.1
  • \n
  • item-3
"); + } + { + CREATE_DOC_AND_CURSOR(); + const QString listHtml = "
  • item-1
  • item-2
    • item-2.1
"; + cursor.insertHtml(listHtml); + + QTest::newRow("nested-lists-two") << QTextDocumentFragment(&doc) + << QString("
  • " + "item-1
  • \n
  • item-2\n
    • item-2.1
"); + } + { + CREATE_DOC_AND_CURSOR(); + const QString listHtml = "
  • item-1
  • item-2
    • item-2.1
    • item-2.2" + "
"; + cursor.insertHtml(listHtml); + + QTest::newRow("nested-lists-three") << QTextDocumentFragment(&doc) + << QString("
  • " + "item-1
  • \n
  • item-2\n
    • item-2.1
    • \n
    • item-2.2
    " + "
"); + } + { + CREATE_DOC_AND_CURSOR(); + const QString listHtml = "
  • item-1.1
  • item-1.2
" + "
  • item-2.1
"; + cursor.insertHtml(listHtml); + + QTest::newRow("not-nested-list") << QTextDocumentFragment(&doc) + << QString("
  • " + "item-1.1
  • \n
  • item-1.2
\n
    " + "
  • item-2.1
"); + } } void tst_QTextDocument::toHtml() @@ -1786,6 +1839,11 @@ void tst_QTextDocument::toHtml() expectedOutput.replace("OPENDEFAULTBLOCKSTYLE", "style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"); expectedOutput.replace("DEFAULTBLOCKSTYLE", "style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\""); expectedOutput.replace("EMPTYBLOCK", "


\n"); + expectedOutput.replace("DEFAULTULSTYLE", "style=\"margin-top: 0px; margin-bottom: 0px; " + "margin-left: 0px; margin-right: 0px; -qt-list-indent:"); + expectedOutput.replace("DEFAULTLASTLISTYLE", "style=\" margin-top:0px; margin-bottom:12px; " + "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\""); + if (expectedOutput.endsWith(QLatin1Char('\n'))) expectedOutput.chop(1); expectedOutput.append(htmlTail); -- cgit v1.2.3 From 41f6826546f274805a6e96927b0c99eda0045358 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Mon, 3 May 2021 12:28:58 +0200 Subject: Allow for arguments that have an equals as part of it Since you can pass a define to org.gradle.jvmargs that can have the name=value approach, then we need to ensure that this is accounted for. Task-number: QTBUG-88989 Change-Id: I2a795bff7ce683eca521b3a987293b3320accb6a Reviewed-by: Assam Boudjelthia (cherry picked from commit a8a6558a84471a939d2d23977e394acadd2fcc6a) Reviewed-by: Qt Cherry-pick Bot --- src/tools/androiddeployqt/main.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tools/androiddeployqt/main.cpp b/src/tools/androiddeployqt/main.cpp index 2044f28023..ffa0a56a32 100644 --- a/src/tools/androiddeployqt/main.cpp +++ b/src/tools/androiddeployqt/main.cpp @@ -2260,9 +2260,9 @@ static GradleProperties readGradleProperties(const QString &path) if (line.trimmed().startsWith('#')) continue; - QList prop(line.split('=')); - if (prop.size() > 1) - properties[prop.at(0).trimmed()] = prop.at(1).trimmed(); + const int idx = line.indexOf('='); + if (idx > -1) + properties[line.left(idx).trimmed()] = line.mid(idx + 1).trimmed(); } file.close(); return properties; -- cgit v1.2.3 From 95542698aa3293f6ed5d4a2902b6ea3a1caa9762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Tue, 4 May 2021 15:15:13 +0200 Subject: tst_moc: fix returning-reference-to-local warning Although the code is never executed compilers still throw a warning because it's compiled. Amends 12b8283f899ebcf401d974927314b9531334a56e Change-Id: Ib790d4bcb33c4b9f2a55a784b852275b59debde9 Reviewed-by: Fabian Kosmale (cherry picked from commit 48931167fb5341dc26e27dae03b2112d83daa3b6) --- tests/auto/tools/moc/cxx11-trailing-return.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/auto/tools/moc/cxx11-trailing-return.h b/tests/auto/tools/moc/cxx11-trailing-return.h index 26178ff68e..50f341e1c3 100644 --- a/tests/auto/tools/moc/cxx11-trailing-return.h +++ b/tests/auto/tools/moc/cxx11-trailing-return.h @@ -43,12 +43,12 @@ public slots: inline auto constRefReturn() -> const CXX11TrailingReturn & { - return {}; + return *this; } inline auto constConstRefReturn() const -> const CXX11TrailingReturn & { - return {}; + return *this; } signals: -- cgit v1.2.3 From 743f4c7ca3ec800bc29c44c6963d34e14e5fb324 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 7 May 2021 15:31:55 +0200 Subject: iOS: Accessibility: Set the correct traits for EditableText MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since the correct accessibility traits for EditableText are not available as a direct enum value, then we depend on the defaults for a UITextField to give us this information. Done-with: Tor Arne Vestbø Fixes: QTBUG-93494 Change-Id: If428414aec5ce571f0f8c0ecccffdbaf1c908120 Reviewed-by: Morten Johan Sørvig (cherry picked from commit 08cd5580df382af5ddfe1c0c44bc9dd68e4cd1e7) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/ios/quiaccessibilityelement.mm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/ios/quiaccessibilityelement.mm b/src/plugins/platforms/ios/quiaccessibilityelement.mm index 43b6e913fe..be3f713b98 100644 --- a/src/plugins/platforms/ios/quiaccessibilityelement.mm +++ b/src/plugins/platforms/ios/quiaccessibilityelement.mm @@ -158,8 +158,16 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QMacAccessibilityElement); if (state.searchEdit) traits |= UIAccessibilityTraitSearchField; - if (iface->role() == QAccessible::Button) + const auto accessibleRole = iface->role(); + if (accessibleRole == QAccessible::Button) { traits |= UIAccessibilityTraitButton; + } else if (accessibleRole == QAccessible::EditableText) { + static auto defaultTextFieldTraits = []{ + auto *textField = [[[UITextField alloc] initWithFrame:CGRectZero] autorelease]; + return textField.accessibilityTraits; + }(); + traits |= defaultTextFieldTraits; + } if (iface->valueInterface()) traits |= UIAccessibilityTraitAdjustable; -- cgit v1.2.3 From c5d381a5920379affe146957b6c2b9e80d5dccf4 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 7 May 2021 13:25:42 +0200 Subject: iOS: Accessibility: Don't cut off the last character from the text value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The second parameter is the position of the first character not to be returned when calling text(). So it needs to be passed the length of the text, otherwise the last character is cut off. Task-number: QTBUG-93494 Change-Id: I7dd8324b3939220de125ba819b7b77588b21bd4b Reviewed-by: Tor Arne Vestbø (cherry picked from commit 5c29f981fa069907678f961cf58ecefd64bf268b) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/ios/quiaccessibilityelement.mm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/platforms/ios/quiaccessibilityelement.mm b/src/plugins/platforms/ios/quiaccessibilityelement.mm index be3f713b98..d2792838c0 100644 --- a/src/plugins/platforms/ios/quiaccessibilityelement.mm +++ b/src/plugins/platforms/ios/quiaccessibilityelement.mm @@ -123,8 +123,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QMacAccessibilityElement); if (val) { return val->currentValue().toString().toNSString(); } else if (QAccessibleTextInterface *text = iface->textInterface()) { - // FIXME doesn't work? - return text->text(0, text->characterCount() - 1).toNSString(); + return text->text(0, text->characterCount()).toNSString(); } return [super accessibilityHint]; -- cgit v1.2.3 From b6a7c9b1bde0f70a08f4f03b9a8a4328e7f8abee Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Wed, 19 May 2021 12:46:16 +0200 Subject: QXcb: don't dereference pointer before checking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The virtualDesktop pointer is expected to be populated by queryPointer, but that method handles the case that there either is no reply, or that the reply doesn't match, in which case the pointer remains nullptr. Don't dereference it afterwards without checking. Addresses code checker warning a179d1087759bb6ca9c3380257bd70d6 Change-Id: I5877f26fd3b49327c0de3f2c918bb606bee8ac57 Reviewed-by: Tor Arne Vestbø (cherry picked from commit c2258e85a32b66cf7cbc59a4789e68c31c9955be) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/xcb/qxcbcursor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/xcb/qxcbcursor.cpp b/src/plugins/platforms/xcb/qxcbcursor.cpp index 4b877deb30..fd62dbf012 100644 --- a/src/plugins/platforms/xcb/qxcbcursor.cpp +++ b/src/plugins/platforms/xcb/qxcbcursor.cpp @@ -668,7 +668,8 @@ void QXcbCursor::setPos(const QPoint &pos) { QXcbVirtualDesktop *virtualDesktop = nullptr; queryPointer(connection(), &virtualDesktop, nullptr); - xcb_warp_pointer(xcb_connection(), XCB_NONE, virtualDesktop->root(), 0, 0, 0, 0, pos.x(), pos.y()); + if (virtualDesktop) + xcb_warp_pointer(xcb_connection(), XCB_NONE, virtualDesktop->root(), 0, 0, 0, 0, pos.x(), pos.y()); xcb_flush(xcb_connection()); } -- cgit v1.2.3 From 82878f08e64aec460d4c45533c2e0f1bc485b3ac Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 25 May 2021 17:09:09 +0200 Subject: macOS: don't show invisible separator items MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Give QCocoaMenu access to the item's visibility property by adding a public getter, and respect that state when syncing the separator to the corresponding QCocoaNSMenuItems. Fixes: QTBUG-88651 Change-Id: I7e238e5d3be141ec8f4e8f6f3ab22d761094d2d2 Reviewed-by: Tor Arne Vestbø Reviewed-by: Morten Johan Sørvig (cherry picked from commit a3f3af8a8fb8f8b09d1685df5ab836244f850a62) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/cocoa/qcocoamenu.mm | 10 +++++++--- src/plugins/platforms/cocoa/qcocoamenuitem.h | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index 3e467fc361..943e271e9e 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -294,9 +294,13 @@ void QCocoaMenu::syncSeparatorsCollapsible(bool enable) for (NSMenuItem *item in m_nativeMenu.itemArray) { if (item.separatorItem) { - if (auto *cocoaItem = qt_objc_cast(item).platformMenuItem) - cocoaItem->setVisible(!previousIsSeparator); - item.hidden = previousIsSeparator; + // hide item if previous was a separator, or if it's explicitly hidden + bool itemVisible = !previousIsSeparator; + if (auto *cocoaItem = qt_objc_cast(item).platformMenuItem) { + cocoaItem->setVisible(!previousIsSeparator && cocoaItem->isVisible()); + itemVisible = cocoaItem->isVisible(); + } + item.hidden = !itemVisible; } if (!item.hidden) { diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.h b/src/plugins/platforms/cocoa/qcocoamenuitem.h index 969f17fd07..16f135fe4a 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuitem.h +++ b/src/plugins/platforms/cocoa/qcocoamenuitem.h @@ -117,6 +117,7 @@ public: inline bool isMerged() const { return m_merged; } inline bool isEnabled() const { return m_enabled && m_parentEnabled; } inline bool isSeparator() const { return m_isSeparator; } + inline bool isVisible() const { return m_isVisible; } QCocoaMenu *menu() const { return m_menu; } MenuRole effectiveRole() const; -- cgit v1.2.3 From 0096d1545bc85dbd0556014d4fbbeba77d4fd5b4 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Thu, 27 May 2021 11:44:30 +0200 Subject: macOS: respect underline attribute in menu item fonts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When we draw menu item text with CoreText instead of QPainter, then we need to translate QFont::underline() explicitly to an entry in the attribute dictionary. Task-number: QTBUG-73990 Change-Id: I7e0c258f7cf80a89b29517fa8122576342654de1 Reviewed-by: Tor Arne Vestbø (cherry picked from commit 5ac479f5990a4c2b09ea34fb98d10c17d405aa5e) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/styles/mac/qmacstyle_mac.mm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm index 8c159e4107..22cf75f12b 100644 --- a/src/plugins/styles/mac/qmacstyle_mac.mm +++ b/src/plugins/styles/mac/qmacstyle_mac.mm @@ -4380,8 +4380,10 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter // line-break the string if it doesn't fit the given rect. It's better to draw outside // the rect and possibly overlap something than to have part of the text disappear. [s.toNSString() drawAtPoint:CGPointMake(xpos, yPos) - withAttributes:@{ NSFontAttributeName:f, NSForegroundColorAttributeName:c, - NSObliquenessAttributeName: [NSNumber numberWithDouble: myFont.italic() ? 0.3 : 0.0]}]; + withAttributes:@{ NSFontAttributeName:f, NSForegroundColorAttributeName:c, + NSObliquenessAttributeName: [NSNumber numberWithDouble: myFont.italic() ? 0.3 : 0.0], + NSUnderlineStyleAttributeName: [NSNumber numberWithInt: myFont.underline() ? NSUnderlineStyleSingle + : NSUnderlineStyleNone]}]; d->restoreNSGraphicsContext(cgCtx); } else { -- cgit v1.2.3 From dc9c43b115ec8f76f6ffea00092c721dce8369fa Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 27 May 2021 10:41:29 +0200 Subject: QVector: fix compilation failure in C++20 mode w/strict iterators MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Given QVector v(count, 0); GCC 10 in C++2a mode complained: /d/Qt/5.15.2/gcc_64/include/QtCore/qvector.h:532:18: error: ambiguous overload for ‘operator!=’ (operand types are ‘int*’ and ‘QTypedArrayData::iterator’) 532 | while (i != d->begin()) | ~~^~~~~~~~~~~~~ /d/Qt/5.15.2/gcc_64/include/QtCore/qarraydata.h:148:21: note: candidate: ‘bool QTypedArrayData::iterator::operator==(const QTypedArrayData::iterator&) const [with T = int]’ (reversed) 148 | inline bool operator==(const iterator &o) const { return i == o.i; } | ^~~~~~~~ /d/Qt/5.15.2/gcc_64/include/QtCore/qvector.h:532:18: note: candidate: ‘operator!=(int*, int*)’ (built-in) 532 | while (i != d->begin()) | ~~^~~~~~~~~~~~~ Fix by making `i` an QTypedArrayData::iterator, not a T*. A more thorough fix would systematically evaluate the impact of C++20 relational operator changes on the whole Qt codebase, but this is out of scope for this patch. [ChangeLog][QtCore][QVector] Fixed a compile error in QVector(int, T) that occurred in C++20 mode with QT_STRICT_ITERATORS. Change-Id: Ia71e2bb7d9e252b13fb31cca00ed58a011d52971 Reviewed-by: Volker Hilsheimer Reviewed-by: Giuseppe D'Angelo --- src/corelib/tools/qvector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 75e01cfa3a..efdea05714 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -523,7 +523,7 @@ QVector::QVector(int asize, const T &t) d = Data::allocate(asize); Q_CHECK_PTR(d); d->size = asize; - T* i = d->end(); + auto i = d->end(); while (i != d->begin()) new (--i) T(t); } else { -- cgit v1.2.3 From dc9ac506b72c98eb7ff788599ae062c36c214dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pekka=20Geh=C3=B6r?= Date: Mon, 10 May 2021 14:49:40 +0300 Subject: Android: Remove NoSuchMethodException error CleanUp NoSuchMethodException error(QtActivity.notifyQtAndroidPluginRunning) appears on application start up. Fixes: QTBUG-93620 Change-Id: Ic835e00d02af17e1b48c0ff66d82e5957c635deb Reviewed-by: Assam Boudjelthia (cherry picked from commit 066a1de8e7b198dbe99cdecefeae94d5f0e5f289) --- .../java/src/org/qtproject/qt5/android/bindings/QtActivity.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java index bd8849f49b..40db7941aa 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java @@ -1145,4 +1145,9 @@ public class QtActivity extends Activity { return QtNative.activityDelegate().isKeyboardVisible(); } + + public void notifyQtAndroidPluginRunning(boolean running) + { + QtNative.activityDelegate().notifyQtAndroidPluginRunning(running); + } } -- cgit v1.2.3 From 7724ec773a03d5956d952da70a2da599d3c056de Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 19 May 2021 11:43:23 +0200 Subject: Android: Reset m_usePrimaryClip when clearing the clip data The variable needs to be set to false when we clear the clip data as there is no primary clip anymore so we should not try to access it when setting new data. Fixes: QTBUG-93831 Change-Id: I309270dc075fcb0457607561ee23e12f7eb6397f Reviewed-by: Assam Boudjelthia (cherry picked from commit 96982bab0c5ff855100c1dcde23d090348be53db) --- src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index b31ed3577e..14e4357d63 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -1023,6 +1023,7 @@ public class QtNative { if (Build.VERSION.SDK_INT >= 28 && m_clipboardManager != null) m_clipboardManager.clearPrimaryClip(); + m_usePrimaryClip = false; } private static void setClipboardText(String text) { @@ -1438,4 +1439,4 @@ public class QtNative // service methods public static native IBinder onBind(Intent intent); // service methods -} \ No newline at end of file +} -- cgit v1.2.3 From 7e722fe1fac3f8c581f6339c77d189fd757bb15b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Wed, 28 Apr 2021 18:19:57 +0200 Subject: Let the h2 test server both send and receive DATA frames And use this in the authenticationRequired test. Change-Id: I18e991eb67168214c2c4f829afaca5018568e989 Reviewed-by: Edward Welbourne Reviewed-by: Timur Pocheptsov (cherry picked from commit deda40b8591a387e634ebfcf48287c14162ef332) Reviewed-by: Qt CI Bot --- tests/auto/network/access/http2/http2srv.cpp | 6 ++++-- tests/auto/network/access/http2/tst_http2.cpp | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/tests/auto/network/access/http2/http2srv.cpp b/tests/auto/network/access/http2/http2srv.cpp index c374b6abd8..e2f039e2f7 100644 --- a/tests/auto/network/access/http2/http2srv.cpp +++ b/tests/auto/network/access/http2/http2srv.cpp @@ -748,8 +748,10 @@ void Http2Server::handleDATA() } if (inboundFrame.flags().testFlag(FrameFlag::END_STREAM)) { - closedStreams.insert(streamID); // Enter "half-closed remote" state. - streamWindows.erase(it); + if (responseBody.isEmpty()) { + closedStreams.insert(streamID); // Enter "half-closed remote" state. + streamWindows.erase(it); + } emit receivedData(streamID); } emit receivedDATAFrame(streamID, diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp index 175b60d4bd..0d851cd3df 100644 --- a/tests/auto/network/access/http2/tst_http2.cpp +++ b/tests/auto/network/access/http2/tst_http2.cpp @@ -157,6 +157,7 @@ private: int windowUpdates = 0; bool prefaceOK = false; bool serverGotSettingsACK = false; + bool POSTResponseHEADOnly = true; static const RawSettings defaultServerSettings; }; @@ -773,14 +774,21 @@ void tst_Http2::maxFrameSize() void tst_Http2::authenticationRequired_data() { QTest::addColumn("success"); - - QTest::addRow("failed-auth") << false; - QTest::addRow("successful-auth") << true; + QTest::addColumn("responseHEADOnly"); + + QTest::addRow("failed-auth") << false << true; + QTest::addRow("successful-auth") << true << true; + // Include a DATA frame in the response from the remote server. An example would be receiving a + // JSON response on a request along with the 401 error. + QTest::addRow("failed-auth-with-response") << false << false; + QTest::addRow("successful-auth-with-response") << true << false; } void tst_Http2::authenticationRequired() { clearHTTP2State(); + QFETCH(const bool, responseHEADOnly); + POSTResponseHEADOnly = responseHEADOnly; QFETCH(const bool, success); @@ -860,6 +868,7 @@ void tst_Http2::clearHTTP2State() windowUpdates = 0; prefaceOK = false; serverGotSettingsACK = false; + POSTResponseHEADOnly = true; } void tst_Http2::runEventLoop(int ms) @@ -992,7 +1001,7 @@ void tst_Http2::receivedData(quint32 streamID) Q_ASSERT(srv); QMetaObject::invokeMethod(srv, "sendResponse", Qt::QueuedConnection, Q_ARG(quint32, streamID), - Q_ARG(bool, true /*HEADERS only*/)); + Q_ARG(bool, POSTResponseHEADOnly /*true = HEADERS only*/)); } void tst_Http2::windowUpdated(quint32 streamID) -- cgit v1.2.3 From 7dfee90a10b8d02e5f0bc83b80bc5323673fc5e3 Mon Sep 17 00:00:00 2001 From: Tarja Sundqvist Date: Wed, 26 May 2021 19:15:38 +0300 Subject: Blacklist tst_QAccessibilityMac::notificationsTest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The test is blacklisted from macOS-10.15. Task-number: QTBUG-94036 Change-Id: Ie051ba62fbfa828688caff6e88e8daf703f3c947 Reviewed-by: Jan Arve Sæther --- tests/auto/other/qaccessibilitymac/BLACKLIST | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 tests/auto/other/qaccessibilitymac/BLACKLIST diff --git a/tests/auto/other/qaccessibilitymac/BLACKLIST b/tests/auto/other/qaccessibilitymac/BLACKLIST new file mode 100644 index 0000000000..916342e9fc --- /dev/null +++ b/tests/auto/other/qaccessibilitymac/BLACKLIST @@ -0,0 +1,4 @@ +# See qtbase/src/testlib/qtestblacklist.cpp for format +[notificationsTest] +macos-10.15 + -- cgit v1.2.3 From 1d1e994df5f2bedd549227d42d21a0958a5e8d7a Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Fri, 14 May 2021 10:43:11 +0200 Subject: Avoid mixing atomic futex changes and QAtomic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Either the mix of futex and atomic, or the mix of 32-bit futex and 64-bit atomic doesn't work. In any case, the existing code leads to bad behavior. Fixes: QTBUG-92188 Change-Id: Icc6ba28d6e2465c373d00e84f4da2b92c037e797 Reviewed-by: Qt CI Bot Reviewed-by: Mårten Nordheim (cherry picked from commit 2d9cc639a4a7a5e97979a6034364bd67dfa10c23) Reviewed-by: Allan Sandfeld Jensen --- src/corelib/thread/qsemaphore.cpp | 46 +++++++++++++++------------------------ 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/src/corelib/thread/qsemaphore.cpp b/src/corelib/thread/qsemaphore.cpp index 4f4a8a6387..4c7698af87 100644 --- a/src/corelib/thread/qsemaphore.cpp +++ b/src/corelib/thread/qsemaphore.cpp @@ -357,47 +357,31 @@ void QSemaphore::release(int n) quintptr prevValue = u.fetchAndAddRelease(nn); if (futexNeedsWake(prevValue)) { #ifdef FUTEX_OP - if (!futexHasWaiterCount) { - /* - On 32-bit systems, all waiters are waiting on the same address, - so we'll wake them all and ask the kernel to clear the high bit. - - atomic { - int oldval = u; - u = oldval & ~(1 << 31); - futexWake(u, INT_MAX); - if (oldval == 0) // impossible condition - futexWake(u, INT_MAX); - } - */ - quint32 op = FUTEX_OP_ANDN | FUTEX_OP_OPARG_SHIFT; - quint32 oparg = 31; - quint32 cmp = FUTEX_OP_CMP_EQ; - quint32 cmparg = 0; - futexWakeOp(u, INT_MAX, INT_MAX, u, FUTEX_OP(op, oparg, cmp, cmparg)); - } else { + if (futexHasWaiterCount) { /* On 64-bit systems, the single-token waiters wait on the low half and the multi-token waiters wait on the upper half. So we ask the kernel to wake up n single-token waiters and all multi-token - waiters (if any), then clear the multi-token wait bit. + waiters (if any), and clear the multi-token wait bit. atomic { int oldval = *upper; - *upper = oldval & ~(1 << 31); + *upper = oldval | 0; futexWake(lower, n); - if (oldval < 0) // sign bit set + if (oldval != 0) // always true futexWake(upper, INT_MAX); } */ - quint32 op = FUTEX_OP_ANDN | FUTEX_OP_OPARG_SHIFT; - quint32 oparg = 31; - quint32 cmp = FUTEX_OP_CMP_LT; + quint32 op = FUTEX_OP_OR; + quint32 oparg = 0; + quint32 cmp = FUTEX_OP_CMP_NE; quint32 cmparg = 0; + u.fetchAndAndRelease(futexNeedsWakeAllBit - 1); futexWakeOp(*futexLow32(&u), n, INT_MAX, *futexHigh32(&u), FUTEX_OP(op, oparg, cmp, cmparg)); + return; } -#else - // Unset the bit and wake everyone. There are two possibibilies +#endif + // Unset the bit and wake everyone. There are two possibilities // under which a thread can set the bit between the AND and the // futexWake: // 1) it did see the new counter value, but it wasn't enough for @@ -405,8 +389,12 @@ void QSemaphore::release(int n) // 2) it did not see the new counter value, in which case its // futexWait will fail. u.fetchAndAndRelease(futexNeedsWakeAllBit - 1); - futexWakeAll(u); -#endif + if (futexHasWaiterCount) { + futexWakeAll(*futexLow32(&u)); + futexWakeAll(*futexHigh32(&u)); + } else { + futexWakeAll(u); + } } return; } -- cgit v1.2.3 From 1547ecba0d3f5caf7bda2a6d68724e4c982f9e75 Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Thu, 6 May 2021 12:50:48 +1000 Subject: wasm: fix unicode keyboard handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We can simplify and reduce the lookup table by casting to unicode for all printable keys. This means that non US/ASCII keyboards will have better support. Fixes: QTBUG-84494 Change-Id: I60aa6320cf1b5d82910ed77e136246d301bfc09a Reviewed-by: Morten Johan Sørvig (cherry picked from commit 7c233d4034237e268a513741ce69a0cd6ef47519) Reviewed-by: Qt Cherry-pick Bot --- .../platforms/wasm/qwasmeventtranslator.cpp | 154 ++------------------- 1 file changed, 9 insertions(+), 145 deletions(-) diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp index c059227c89..e50662ec2c 100644 --- a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp +++ b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp @@ -136,139 +136,11 @@ static constexpr const auto KeyTbl = qMakeArray( Emkb2Qt< Qt::Key_F21, 'F','2','1' >, Emkb2Qt< Qt::Key_F22, 'F','2','2' >, Emkb2Qt< Qt::Key_F23, 'F','2','3' >, - Emkb2Qt< Qt::Key_Space, ' ' >, - Emkb2Qt< Qt::Key_Comma, ',' >, - Emkb2Qt< Qt::Key_Minus, '-' >, - Emkb2Qt< Qt::Key_Period, '.' >, - Emkb2Qt< Qt::Key_Slash, '/' >, - Emkb2Qt< Qt::Key_0, 'D','i','g','i','t','0' >, - Emkb2Qt< Qt::Key_1, 'D','i','g','i','t','1' >, - Emkb2Qt< Qt::Key_2, 'D','i','g','i','t','2' >, - Emkb2Qt< Qt::Key_3, 'D','i','g','i','t','3' >, - Emkb2Qt< Qt::Key_4, 'D','i','g','i','t','4' >, - Emkb2Qt< Qt::Key_5, 'D','i','g','i','t','5' >, - Emkb2Qt< Qt::Key_6, 'D','i','g','i','t','6' >, - Emkb2Qt< Qt::Key_7, 'D','i','g','i','t','7' >, - Emkb2Qt< Qt::Key_8, 'D','i','g','i','t','8' >, - Emkb2Qt< Qt::Key_9, 'D','i','g','i','t','9' >, - Emkb2Qt< Qt::Key_Semicolon, ';' >, - Emkb2Qt< Qt::Key_Equal, '=' >, - Emkb2Qt< Qt::Key_A, 'K','e','y','A' >, - Emkb2Qt< Qt::Key_B, 'K','e','y','B' >, - Emkb2Qt< Qt::Key_C, 'K','e','y','C' >, - Emkb2Qt< Qt::Key_D, 'K','e','y','D' >, - Emkb2Qt< Qt::Key_E, 'K','e','y','E' >, - Emkb2Qt< Qt::Key_F, 'K','e','y','F' >, - Emkb2Qt< Qt::Key_G, 'K','e','y','G' >, - Emkb2Qt< Qt::Key_H, 'K','e','y','H' >, - Emkb2Qt< Qt::Key_I, 'K','e','y','I' >, - Emkb2Qt< Qt::Key_J, 'K','e','y','J' >, - Emkb2Qt< Qt::Key_K, 'K','e','y','K' >, - Emkb2Qt< Qt::Key_L, 'K','e','y','L' >, - Emkb2Qt< Qt::Key_M, 'K','e','y','M' >, - Emkb2Qt< Qt::Key_N, 'K','e','y','N' >, - Emkb2Qt< Qt::Key_O, 'K','e','y','O' >, - Emkb2Qt< Qt::Key_P, 'K','e','y','P' >, - Emkb2Qt< Qt::Key_Q, 'K','e','y','Q' >, - Emkb2Qt< Qt::Key_R, 'K','e','y','R' >, - Emkb2Qt< Qt::Key_S, 'K','e','y','S' >, - Emkb2Qt< Qt::Key_T, 'K','e','y','T' >, - Emkb2Qt< Qt::Key_U, 'K','e','y','U' >, - Emkb2Qt< Qt::Key_V, 'K','e','y','V' >, - Emkb2Qt< Qt::Key_W, 'K','e','y','W' >, - Emkb2Qt< Qt::Key_X, 'K','e','y','X' >, - Emkb2Qt< Qt::Key_Y, 'K','e','y','Y' >, - Emkb2Qt< Qt::Key_Z, 'K','e','y','Z' >, - Emkb2Qt< Qt::Key_BracketLeft, '[' >, - Emkb2Qt< Qt::Key_Backslash, '\\' >, - Emkb2Qt< Qt::Key_BracketRight, ']' >, - Emkb2Qt< Qt::Key_Apostrophe, '\'' >, - Emkb2Qt< Qt::Key_QuoteLeft, 'B','a','c','k','q','u','o','t','e' >, - Emkb2Qt< Qt::Key_multiply, 'N','u','m','p','a','d','M','u','l','t','i','p','l','y' >, - Emkb2Qt< Qt::Key_Minus, 'N','u','m','p','a','d','S','u','b','t','r','a','c','t' >, - Emkb2Qt< Qt::Key_Period, 'N','u','m','p','a','d','D','e','c','i','m','a','l' >, - Emkb2Qt< Qt::Key_Plus, 'N','u','m','p','a','d','A','d','d' >, - Emkb2Qt< Qt::Key_division, 'N','u','m','p','a','d','D','i','v','i','d','e' >, - Emkb2Qt< Qt::Key_Equal, 'N','u','m','p','a','d','E','q','u','a','l' >, - Emkb2Qt< Qt::Key_0, 'N','u','m','p','a','d','0' >, - Emkb2Qt< Qt::Key_1, 'N','u','m','p','a','d','1' >, - Emkb2Qt< Qt::Key_2, 'N','u','m','p','a','d','2' >, - Emkb2Qt< Qt::Key_3, 'N','u','m','p','a','d','3' >, - Emkb2Qt< Qt::Key_4, 'N','u','m','p','a','d','4' >, - Emkb2Qt< Qt::Key_5, 'N','u','m','p','a','d','5' >, - Emkb2Qt< Qt::Key_6, 'N','u','m','p','a','d','6' >, - Emkb2Qt< Qt::Key_7, 'N','u','m','p','a','d','7' >, - Emkb2Qt< Qt::Key_8, 'N','u','m','p','a','d','8' >, - Emkb2Qt< Qt::Key_9, 'N','u','m','p','a','d','9' >, - Emkb2Qt< Qt::Key_Comma, 'N','u','m','p','a','d','C','o','m','m','a' >, - Emkb2Qt< Qt::Key_Enter, 'N','u','m','p','a','d','E','n','t','e','r' >, Emkb2Qt< Qt::Key_Paste, 'P','a','s','t','e' >, Emkb2Qt< Qt::Key_AltGr, 'A','l','t','R','i','g','h','t' >, Emkb2Qt< Qt::Key_Help, 'H','e','l','p' >, - Emkb2Qt< Qt::Key_Equal, '=' >, Emkb2Qt< Qt::Key_yen, 'I','n','t','l','Y','e','n' >, - - Emkb2Qt< Qt::Key_Exclam, '\x21' >, - Emkb2Qt< Qt::Key_QuoteDbl, '\x22' >, - Emkb2Qt< Qt::Key_NumberSign, '\x23' >, - Emkb2Qt< Qt::Key_Dollar, '\x24' >, - Emkb2Qt< Qt::Key_Percent, '\x25' >, - Emkb2Qt< Qt::Key_Ampersand, '\x26' >, - Emkb2Qt< Qt::Key_ParenLeft, '\x28' >, - Emkb2Qt< Qt::Key_ParenRight, '\x29' >, - Emkb2Qt< Qt::Key_Asterisk, '\x2a' >, - Emkb2Qt< Qt::Key_Plus, '\x2b' >, - Emkb2Qt< Qt::Key_Colon, '\x3a' >, - Emkb2Qt< Qt::Key_Semicolon, '\x3b' >, - Emkb2Qt< Qt::Key_Less, '\x3c' >, - Emkb2Qt< Qt::Key_Equal, '\x3d' >, - Emkb2Qt< Qt::Key_Greater, '\x3e' >, - Emkb2Qt< Qt::Key_Question, '\x3f' >, - Emkb2Qt< Qt::Key_At, '\x40' >, - Emkb2Qt< Qt::Key_BracketLeft, '\x5b' >, - Emkb2Qt< Qt::Key_Backslash, '\x5c' >, - Emkb2Qt< Qt::Key_BracketRight, '\x5d' >, - Emkb2Qt< Qt::Key_AsciiCircum, '\x5e' >, - Emkb2Qt< Qt::Key_Underscore, '\x5f' >, - Emkb2Qt< Qt::Key_QuoteLeft, '\x60'>, - Emkb2Qt< Qt::Key_BraceLeft, '\x7b'>, - Emkb2Qt< Qt::Key_Bar, '\x7c'>, - Emkb2Qt< Qt::Key_BraceRight, '\x7d'>, - Emkb2Qt< Qt::Key_AsciiTilde, '\x7e'>, - Emkb2Qt< Qt::Key_Space, '\x20' >, - Emkb2Qt< Qt::Key_Comma, '\x2c' >, - Emkb2Qt< Qt::Key_Minus, '\x2d' >, - Emkb2Qt< Qt::Key_Period, '\x2e' >, - Emkb2Qt< Qt::Key_Slash, '\x2f' >, - Emkb2Qt< Qt::Key_Apostrophe, '\x27' >, - Emkb2Qt< Qt::Key_Menu, 'C','o','n','t','e','x','t','M','e','n','u' >, - - Emkb2Qt< Qt::Key_Agrave, '\xc3','\xa0' >, - Emkb2Qt< Qt::Key_Aacute, '\xc3','\xa1' >, - Emkb2Qt< Qt::Key_Acircumflex, '\xc3','\xa2' >, - Emkb2Qt< Qt::Key_Adiaeresis, '\xc3','\xa4' >, - Emkb2Qt< Qt::Key_AE, '\xc3','\xa6' >, - Emkb2Qt< Qt::Key_Atilde, '\xc3','\xa3' >, - Emkb2Qt< Qt::Key_Aring, '\xc3','\xa5' >, - Emkb2Qt< Qt::Key_Ccedilla, '\xc3','\xa7' >, - Emkb2Qt< Qt::Key_Egrave, '\xc3','\xa8' >, - Emkb2Qt< Qt::Key_Eacute, '\xc3','\xa9' >, - Emkb2Qt< Qt::Key_Ecircumflex, '\xc3','\xaa' >, - Emkb2Qt< Qt::Key_Ediaeresis, '\xc3','\xab' >, - Emkb2Qt< Qt::Key_Icircumflex, '\xc3','\xae' >, - Emkb2Qt< Qt::Key_Idiaeresis, '\xc3','\xaf' >, - Emkb2Qt< Qt::Key_Ocircumflex, '\xc3','\xb4' >, - Emkb2Qt< Qt::Key_Odiaeresis, '\xc3','\xb6' >, - Emkb2Qt< Qt::Key_Ograve, '\xc3','\xb2' >, - Emkb2Qt< Qt::Key_Oacute, '\xc3','\xb3' >, - Emkb2Qt< Qt::Key_Ooblique, '\xc3','\xb8' >, - Emkb2Qt< Qt::Key_Otilde, '\xc3','\xb5' >, - Emkb2Qt< Qt::Key_Ucircumflex, '\xc3','\xbb' >, - Emkb2Qt< Qt::Key_Udiaeresis, '\xc3','\xbc' >, - Emkb2Qt< Qt::Key_Ugrave, '\xc3','\xb9' >, - Emkb2Qt< Qt::Key_Uacute, '\xc3','\xba' >, - Emkb2Qt< Qt::Key_Ntilde, '\xc3','\xb1' >, - Emkb2Qt< Qt::Key_ydiaeresis, '\xc3','\xbf' > + Emkb2Qt< Qt::Key_Menu, 'C','o','n','t','e','x','t','M','e','n','u' > >::Data{} ); @@ -469,29 +341,21 @@ Qt::Key QWasmEventTranslator::translateEmscriptKey(const EmscriptenKeyboardEvent if (it1 != KeyTbl.end() && (qstrcmp(searchKey1.em, it1->em) == 0)) { qtKey = static_cast(it1->qt); } - - } else if (qstrncmp(emscriptKey->code, "Key", 3) == 0 || qstrncmp(emscriptKey->code, "Numpad", 6) == 0 || - qstrncmp(emscriptKey->code, "Digit", 5) == 0) { - emkb2qt_t searchKey{emscriptKey->code, 0}; // search emcsripten code - auto it1 = std::lower_bound(KeyTbl.cbegin(), KeyTbl.cend(), searchKey); - if (it1 != KeyTbl.end() && !(searchKey < *it1)) { - qtKey = static_cast(it1->qt); - } } - if (qtKey == Qt::Key_unknown) { - emkb2qt_t searchKey{emscriptKey->key, 0}; // search unicode key + emkb2qt_t searchKey{emscriptKey->key, 0}; + // search key auto it1 = std::lower_bound(KeyTbl.cbegin(), KeyTbl.cend(), searchKey); if (it1 != KeyTbl.end() && !(searchKey < *it1)) { qtKey = static_cast(it1->qt); } } - if (qtKey == Qt::Key_unknown) {//try harder with shifted number keys - emkb2qt_t searchKey1{emscriptKey->key, 0}; - for (auto it1 = KeyTbl.cbegin(); it1 != KeyTbl.end(); ++it1) - if (it1 != KeyTbl.end() && (qstrcmp(searchKey1.em, it1->em) == 0)) { - qtKey = static_cast(it1->qt); - } + + if (qtKey == Qt::Key_unknown) { + // cast to unicode key + QString str = QString::fromUtf8(emscriptKey->key); + ushort c = str.unicode()->toUpper().unicode(); // uppercase + qtKey = static_cast(c); } return qtKey; -- cgit v1.2.3 From 323e5994924309402f8b3f7fbafd963b6f8d3177 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 25 May 2021 11:32:31 +0200 Subject: minor: Clean up areMetricsTooLarge() conditions This amends e2bdff3555f8c2a275c7bbcf964d939a5f489100. The linearAdvance property has some history. First it was a 16 bit value (allowing for 10.6 fixed point numbers). Then it was turned into 22 bits to fit the 16 bits of Freetype integer parts into it (16.6). Then back to 10.6. Then in b7e436738756b1d5d7a45201b7a7204d7fe128a1 it was turned back into 16.6 again. But this was accidentally reverted as part of a bad conflict resolution in afb326f07109da0035112e6f56e683e37b8a5d72. Since there was no check for it, we would sometimes overflow the linearAdvance, but only in the rare cases where the width and height did not also overflow. Specifically this is the case for whitespace, which always has a width of 0 regardless of the advance. This change just moves the linearAdvance condition in together with the other checks to avoid fragmentation, and also adds this fun story to the commit log. Change-Id: Iaac09942f4c50d1aced4a160b6eabb11eb8e6373 Reviewed-by: Paul Olav Tvete (cherry picked from commit a5085d7f6ac0ee4e066431ec9a99b7e0f13d2d0c) --- src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp index 2e5b76f094..e5de3953ff 100644 --- a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp +++ b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp @@ -903,7 +903,7 @@ int QFontEngineFT::loadFlags(QGlyphSet *set, GlyphFormat format, int flags, static inline bool areMetricsTooLarge(const QFontEngineFT::GlyphInfo &info) { // false if exceeds QFontEngineFT::Glyph metrics - return info.width > 0xFF || info.height > 0xFF; + return info.width > 0xFF || info.height > 0xFF || info.linearAdvance > 0x7FFF; } static inline void transformBoundingBox(int *left, int *top, int *right, int *bottom, FT_Matrix *matrix) @@ -1052,7 +1052,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph, // If any of the metrics are too large to fit, don't cache them // Also, avoid integer overflow when linearAdvance is to large to fit in a signed short - if (areMetricsTooLarge(info) || info.linearAdvance > 0x7FFF) + if (areMetricsTooLarge(info)) return nullptr; g = new Glyph; -- cgit v1.2.3 From ddf45ac6344a79b23af2df33eb4abff27f748c94 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Wed, 26 May 2021 17:05:41 +0200 Subject: PCRE2: upgrade to 10.37 New upstream release. Change-Id: I3a7e6c3d6706c940c0a279e4b63e1bfd96cc242c Reviewed-by: Kai Koehne Reviewed-by: Volker Hilsheimer (cherry picked from commit 4ee4b7a8716dd2ffb7b67032aaa0766bc9b33bdb) Reviewed-by: Qt Cherry-pick Bot --- src/3rdparty/pcre2/AUTHORS | 6 +- src/3rdparty/pcre2/LICENCE | 6 +- src/3rdparty/pcre2/qt_attribution.json | 12 +- src/3rdparty/pcre2/src/pcre2.h | 4 +- src/3rdparty/pcre2/src/pcre2_auto_possess.c | 13 +- src/3rdparty/pcre2/src/pcre2_compile.c | 52 +- src/3rdparty/pcre2/src/pcre2_jit_compile.c | 40 +- src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h | 828 +++++++++++++++++++-- src/3rdparty/pcre2/src/pcre2_match.c | 4 +- src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h | 2 + src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c | 124 +-- src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c | 43 +- src/3rdparty/pcre2/src/sljit/sljitUtils.c | 10 +- .../pcre2/src/sljit/sljitWXExecAllocator.c | 8 +- 14 files changed, 973 insertions(+), 179 deletions(-) diff --git a/src/3rdparty/pcre2/AUTHORS b/src/3rdparty/pcre2/AUTHORS index f001cb770e..c61b5f3aff 100644 --- a/src/3rdparty/pcre2/AUTHORS +++ b/src/3rdparty/pcre2/AUTHORS @@ -8,7 +8,7 @@ Email domain: gmail.com University of Cambridge Computing Service, Cambridge, England. -Copyright (c) 1997-2020 University of Cambridge +Copyright (c) 1997-2021 University of Cambridge All rights reserved @@ -19,7 +19,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Emain domain: freemail.hu -Copyright(c) 2010-2020 Zoltan Herczeg +Copyright(c) 2010-2021 Zoltan Herczeg All rights reserved. @@ -30,7 +30,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Emain domain: freemail.hu -Copyright(c) 2009-2020 Zoltan Herczeg +Copyright(c) 2009-2021 Zoltan Herczeg All rights reserved. #### diff --git a/src/3rdparty/pcre2/LICENCE b/src/3rdparty/pcre2/LICENCE index 155d073127..18684ceaa9 100644 --- a/src/3rdparty/pcre2/LICENCE +++ b/src/3rdparty/pcre2/LICENCE @@ -26,7 +26,7 @@ Email domain: gmail.com University of Cambridge Computing Service, Cambridge, England. -Copyright (c) 1997-2020 University of Cambridge +Copyright (c) 1997-2021 University of Cambridge All rights reserved. @@ -37,7 +37,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Email domain: freemail.hu -Copyright(c) 2010-2020 Zoltan Herczeg +Copyright(c) 2010-2021 Zoltan Herczeg All rights reserved. @@ -48,7 +48,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Email domain: freemail.hu -Copyright(c) 2009-2020 Zoltan Herczeg +Copyright(c) 2009-2021 Zoltan Herczeg All rights reserved. diff --git a/src/3rdparty/pcre2/qt_attribution.json b/src/3rdparty/pcre2/qt_attribution.json index e7abb56762..04bdb6cc6b 100644 --- a/src/3rdparty/pcre2/qt_attribution.json +++ b/src/3rdparty/pcre2/qt_attribution.json @@ -7,12 +7,12 @@ "Description": "The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5.", "Homepage": "http://www.pcre.org/", - "Version": "10.36", - "DownloadLocation": "https://ftp.pcre.org/pub/pcre/pcre2-10.36.tar.bz2", + "Version": "10.37", + "DownloadLocation": "https://ftp.pcre.org/pub/pcre/pcre2-10.37.tar.bz2", "License": "BSD 3-clause \"New\" or \"Revised\" License", "LicenseId": "BSD-3-Clause", "LicenseFile": "LICENCE", - "Copyright": "Copyright (c) 1997-2020 University of Cambridge + "Copyright": "Copyright (c) 1997-2021 University of Cambridge Copyright (c) 2010-2020 Zoltan Herczeg" }, { @@ -24,11 +24,11 @@ Copyright (c) 2010-2020 Zoltan Herczeg" "Path": "src/sljit", "Description": "The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5.", "Homepage": "http://www.pcre.org/", - "Version": "10.36", - "DownloadLocation": "https://ftp.pcre.org/pub/pcre/pcre2-10.36.tar.bz2", + "Version": "10.37", + "DownloadLocation": "https://ftp.pcre.org/pub/pcre/pcre2-10.37.tar.bz2", "License": "BSD 2-clause \"Simplified\" License", "LicenseId": "BSD-2-Clause", "LicenseFile": "LICENCE-SLJIT", - "Copyright": "Copyright (c) 2009-2020 Zoltan Herczeg" + "Copyright": "Copyright (c) 2009-2021 Zoltan Herczeg" } ] diff --git a/src/3rdparty/pcre2/src/pcre2.h b/src/3rdparty/pcre2/src/pcre2.h index f204ec8180..7ab6b39aeb 100644 --- a/src/3rdparty/pcre2/src/pcre2.h +++ b/src/3rdparty/pcre2/src/pcre2.h @@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE. /* The current PCRE version information. */ #define PCRE2_MAJOR 10 -#define PCRE2_MINOR 36 +#define PCRE2_MINOR 37 #define PCRE2_PRERELEASE -#define PCRE2_DATE 2020-12-04 +#define PCRE2_DATE 2021-05-26 /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE2, the appropriate diff --git a/src/3rdparty/pcre2/src/pcre2_auto_possess.c b/src/3rdparty/pcre2/src/pcre2_auto_possess.c index c64cf856d1..e5e0895682 100644 --- a/src/3rdparty/pcre2/src/pcre2_auto_possess.c +++ b/src/3rdparty/pcre2/src/pcre2_auto_possess.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -490,6 +490,7 @@ switch(c) list[2] = (uint32_t)(end - code); return end; } + return NULL; /* Opcode not accepted */ } @@ -1186,12 +1187,16 @@ for (;;) c = *repeat_opcode; if (c >= OP_CRSTAR && c <= OP_CRMINRANGE) { - /* end must not be NULL. */ - end = get_chr_property_list(code, utf, ucp, cb->fcc, list); + /* The return from get_chr_property_list() will never be NULL when + *code (aka c) is one of the three class opcodes. However, gcc with + -fanalyzer notes that a NULL return is possible, and grumbles. Hence we + put in a check. */ + end = get_chr_property_list(code, utf, ucp, cb->fcc, list); list[1] = (c & 1) == 0; - if (compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit)) + if (end != NULL && + compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit)) { switch (c) { diff --git a/src/3rdparty/pcre2/src/pcre2_compile.c b/src/3rdparty/pcre2/src/pcre2_compile.c index e811f12f02..da449ae9ed 100644 --- a/src/3rdparty/pcre2/src/pcre2_compile.c +++ b/src/3rdparty/pcre2/src/pcre2_compile.c @@ -1398,32 +1398,47 @@ static BOOL read_repeat_counts(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend, uint32_t *minp, uint32_t *maxp, int *errorcodeptr) { -PCRE2_SPTR p = *ptrptr; +PCRE2_SPTR p; BOOL yield = FALSE; +BOOL had_comma = FALSE; int32_t min = 0; int32_t max = REPEAT_UNLIMITED; /* This value is larger than MAX_REPEAT_COUNT */ -/* NB read_number() initializes the error code to zero. The only error is for a -number that is too big. */ +/* Check the syntax */ +*errorcodeptr = 0; +for (p = *ptrptr;; p++) + { + uint32_t c; + if (p >= ptrend) return FALSE; + c = *p; + if (IS_DIGIT(c)) continue; + if (c == CHAR_RIGHT_CURLY_BRACKET) break; + if (c == CHAR_COMMA) + { + if (had_comma) return FALSE; + had_comma = TRUE; + } + else return FALSE; + } + +/* The only error from read_number() is for a number that is too big. */ + +p = *ptrptr; if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &min, errorcodeptr)) goto EXIT; -if (p >= ptrend) goto EXIT; - if (*p == CHAR_RIGHT_CURLY_BRACKET) { p++; max = min; } - else { - if (*p++ != CHAR_COMMA || p >= ptrend) goto EXIT; - if (*p != CHAR_RIGHT_CURLY_BRACKET) + if (*(++p) != CHAR_RIGHT_CURLY_BRACKET) { if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &max, - errorcodeptr) || p >= ptrend || *p != CHAR_RIGHT_CURLY_BRACKET) + errorcodeptr)) goto EXIT; if (max < min) { @@ -1438,11 +1453,10 @@ yield = TRUE; if (minp != NULL) *minp = (uint32_t)min; if (maxp != NULL) *maxp = (uint32_t)max; -/* Update the pattern pointer on success, or after an error, but not when -the result is "not a repeat quantifier". */ +/* Update the pattern pointer */ EXIT: -if (yield || *errorcodeptr != 0) *ptrptr = p; +*ptrptr = p; return yield; } @@ -1776,19 +1790,23 @@ else { oldptr = ptr; ptr--; /* Back to the digit */ - if (!read_number(&ptr, ptrend, -1, INT_MAX/10 - 1, ERR61, &s, - errorcodeptr)) - break; - /* \1 to \9 are always back references. \8x and \9x are too; \1x to \7x + /* As we know we are at a digit, the only possible error from + read_number() is a number that is too large to be a group number. In this + case we fall through handle this as not a group reference. If we have + read a small enough number, check for a back reference. + + \1 to \9 are always back references. \8x and \9x are too; \1x to \7x are octal escapes if there are not that many previous captures. */ - if (s < 10 || oldptr[-1] >= CHAR_8 || s <= (int)cb->bracount) + if (read_number(&ptr, ptrend, -1, INT_MAX/10 - 1, 0, &s, errorcodeptr) && + (s < 10 || oldptr[-1] >= CHAR_8 || s <= (int)cb->bracount)) { if (s > (int)MAX_GROUP_NUMBER) *errorcodeptr = ERR61; else escape = -s; /* Indicates a back reference */ break; } + ptr = oldptr; /* Put the pointer back and fall through */ } diff --git a/src/3rdparty/pcre2/src/pcre2_jit_compile.c b/src/3rdparty/pcre2/src/pcre2_jit_compile.c index 1977d28aa5..f3a26aeee0 100644 --- a/src/3rdparty/pcre2/src/pcre2_jit_compile.c +++ b/src/3rdparty/pcre2/src/pcre2_jit_compile.c @@ -1226,7 +1226,7 @@ while (cc < ccend) return TRUE; } -#define EARLY_FAIL_ENHANCE_MAX (1 + 1) +#define EARLY_FAIL_ENHANCE_MAX (1 + 3) /* start: @@ -1238,6 +1238,7 @@ return: current number of iterators enhanced with fast fail */ static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start, sljit_s32 depth, int start) { +PCRE2_SPTR begin = cc; PCRE2_SPTR next_alt; PCRE2_SPTR end; PCRE2_SPTR accelerated_start; @@ -1475,31 +1476,19 @@ do case OP_CBRA: end = cc + GET(cc, 1); - if (*end == OP_KET && PRIVATE_DATA(end) == 0) - { - if (*cc == OP_CBRA) - { - if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) - break; - cc += IMM2_SIZE; - } - - cc += 1 + LINK_SIZE; - continue; - } - fast_forward_allowed = FALSE; if (depth >= 4) break; end = bracketend(cc) - (1 + LINK_SIZE); - if (*end != OP_KET || PRIVATE_DATA(end) != 0) - break; - - if (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) + if (*end != OP_KET || (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0)) break; count = detect_early_fail(common, cc, private_data_start, depth + 1, count); + + if (PRIVATE_DATA(cc) != 0) + common->private_data_ptrs[begin - common->start] = 1; + if (count < EARLY_FAIL_ENHANCE_MAX) { cc = end + (1 + LINK_SIZE); @@ -1555,6 +1544,8 @@ do return EARLY_FAIL_ENHANCE_MAX; } + /* Cannot be part of a repeat. */ + common->private_data_ptrs[begin - common->start] = 1; count++; if (count < EARLY_FAIL_ENHANCE_MAX) @@ -1620,11 +1611,12 @@ sljit_sw length = end - begin; sljit_s32 min, max, i; /* Detect fixed iterations first. */ -if (end[-(1 + LINK_SIZE)] != OP_KET) +if (end[-(1 + LINK_SIZE)] != OP_KET || PRIVATE_DATA(begin) != 0) return FALSE; -/* Already detected repeat. */ -if (common->private_data_ptrs[end - common->start - LINK_SIZE] != 0) +/* /(?:AB){4,6}/ is currently converted to /(?:AB){3}(?AB){1,3}/ + * Skip the check of the second part. */ +if (PRIVATE_DATA(end - LINK_SIZE) == 0) return TRUE; next = end; @@ -1763,6 +1755,7 @@ while (cc < ccend) if (private_data_ptr > SLJIT_MAX_LOCAL_SIZE) break; + /* When the bracket is prefixed by a zero iteration, skip the repeat check (at this point). */ if (repeat_check && (*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA || *cc == OP_COND)) { if (detect_repeat(common, cc)) @@ -1813,6 +1806,7 @@ while (cc < ccend) case OP_COND: /* Might be a hidden SCOND. */ + common->private_data_ptrs[cc - common->start] = 0; alternative = cc + GET(cc, 1); if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) { @@ -13661,10 +13655,12 @@ if (!common->private_data_ptrs) memset(common->private_data_ptrs, 0, total_length * sizeof(sljit_s32)); private_data_size = common->cbra_ptr + (re->top_bracket + 1) * sizeof(sljit_sw); -set_private_data_ptrs(common, &private_data_size, ccend); + if ((re->overall_options & PCRE2_ANCHORED) == 0 && (re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0 && !common->has_skip_in_assert_back) detect_early_fail(common, common->start, &private_data_size, 0, 0); +set_private_data_ptrs(common, &private_data_size, ccend); + SLJIT_ASSERT(common->early_fail_start_ptr <= common->early_fail_end_ptr); if (private_data_size > SLJIT_MAX_LOCAL_SIZE) diff --git a/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h b/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h index 5673d338c0..5fd97b15bd 100644 --- a/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h +++ b/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h @@ -39,7 +39,29 @@ POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ -#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) && !(defined SUPPORT_VALGRIND) +#if !(defined SUPPORT_VALGRIND) + +#if ((defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ + || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)) + +typedef enum { + vector_compare_match1, + vector_compare_match1i, + vector_compare_match2, +} vector_compare_type; + +static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void) +{ +#if PCRE2_CODE_UNIT_WIDTH == 8 +return 15; +#elif PCRE2_CODE_UNIT_WIDTH == 16 +return 7; +#elif PCRE2_CODE_UNIT_WIDTH == 32 +return 3; +#else +#error "Unsupported unit width" +#endif +} #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 static struct sljit_jump *jump_if_utf_char_start(struct sljit_compiler *compiler, sljit_s32 reg) @@ -56,6 +78,10 @@ return CMP(SLJIT_NOT_EQUAL, reg, 0, SLJIT_IMM, 0xdc00); } #endif +#endif /* SLJIT_CONFIG_X86 || SLJIT_CONFIG_S390X */ + +#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) + static sljit_s32 character_to_int32(PCRE2_UCHAR chr) { sljit_u32 value = chr; @@ -97,13 +123,7 @@ instruction[4] = (sljit_u8)offset; sljit_emit_op_custom(compiler, instruction, 5); } -typedef enum { - sse2_compare_match1, - sse2_compare_match1i, - sse2_compare_match2, -} sse2_compare_type; - -static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, sse2_compare_type compare_type, +static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type, int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind) { sljit_u8 instruction[4]; @@ -112,11 +132,11 @@ instruction[1] = 0x0f; SLJIT_ASSERT(step >= 0 && step <= 3); -if (compare_type != sse2_compare_match2) +if (compare_type != vector_compare_match2) { if (step == 0) { - if (compare_type == sse2_compare_match1i) + if (compare_type == vector_compare_match1i) { /* POR xmm1, xmm2/m128 */ /* instruction[0] = 0x66; */ @@ -185,14 +205,14 @@ switch (step) static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset) { DEFINE_COMPILER; +sljit_u8 instruction[8]; struct sljit_label *start; #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 struct sljit_label *restart; #endif struct sljit_jump *quit; struct sljit_jump *partial_quit[2]; -sse2_compare_type compare_type = sse2_compare_match1; -sljit_u8 instruction[8]; +vector_compare_type compare_type = vector_compare_match1; sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR); sljit_s32 data_ind = 0; @@ -207,12 +227,12 @@ SLJIT_UNUSED_ARG(offset); if (char1 != char2) { bit = char1 ^ char2; - compare_type = sse2_compare_match1i; + compare_type = vector_compare_match1i; if (!is_powerof2(bit)) { bit = 0; - compare_type = sse2_compare_match2; + compare_type = vector_compare_match2; } } @@ -349,11 +369,11 @@ if (common->utf && offset > 0) static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2) { DEFINE_COMPILER; +sljit_u8 instruction[8]; struct sljit_label *start; struct sljit_jump *quit; jump_list *not_found = NULL; -sse2_compare_type compare_type = sse2_compare_match1; -sljit_u8 instruction[8]; +vector_compare_type compare_type = vector_compare_match1; sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR); sljit_s32 data_ind = 0; @@ -366,12 +386,12 @@ int i; if (char1 != char2) { bit = char1 ^ char2; - compare_type = sse2_compare_match1i; + compare_type = vector_compare_match1i; if (!is_powerof2(bit)) { bit = 0; - compare_type = sse2_compare_match2; + compare_type = vector_compare_match2; } } @@ -476,27 +496,15 @@ return not_found; #ifndef _WIN64 -static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void) -{ -#if PCRE2_CODE_UNIT_WIDTH == 8 -return 15; -#elif PCRE2_CODE_UNIT_WIDTH == 16 -return 7; -#elif PCRE2_CODE_UNIT_WIDTH == 32 -return 3; -#else -#error "Unsupported unit width" -#endif -} - #define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SSE2)) static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1, PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b) { DEFINE_COMPILER; -sse2_compare_type compare1_type = sse2_compare_match1; -sse2_compare_type compare2_type = sse2_compare_match1; +sljit_u8 instruction[8]; +vector_compare_type compare1_type = vector_compare_match1; +vector_compare_type compare2_type = vector_compare_match1; sljit_u32 bit1 = 0; sljit_u32 bit2 = 0; sljit_u32 diff = IN_UCHARS(offs1 - offs2); @@ -516,7 +524,6 @@ struct sljit_label *start; struct sljit_label *restart; #endif struct sljit_jump *jump[2]; -sljit_u8 instruction[8]; int i; SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2); @@ -549,13 +556,13 @@ else bit1 = char1a ^ char1b; if (is_powerof2(bit1)) { - compare1_type = sse2_compare_match1i; + compare1_type = vector_compare_match1i; OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a | bit1)); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit1)); } else { - compare1_type = sse2_compare_match2; + compare1_type = vector_compare_match2; bit1 = 0; OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a)); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char1b)); @@ -578,13 +585,13 @@ else bit2 = char2a ^ char2b; if (is_powerof2(bit2)) { - compare2_type = sse2_compare_match1i; + compare2_type = vector_compare_match1i; OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a | bit2)); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit2)); } else { - compare2_type = sse2_compare_match2; + compare2_type = vector_compare_match2; bit2 = 0; OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a)); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char2b)); @@ -731,9 +738,6 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); -if (common->match_end_ptr != 0) - OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); - #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf) { @@ -760,7 +764,7 @@ if (common->match_end_ptr != 0) #undef SSE2_COMPARE_TYPE_INDEX -#endif /* SLJIT_CONFIG_X86 && !SUPPORT_VALGRIND */ +#endif /* SLJIT_CONFIG_X86 */ #if (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 && (defined __ARM_NEON || defined __ARM_NEON__)) @@ -1121,3 +1125,743 @@ JUMPHERE(partial_quit); } #endif /* SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 */ + +#if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) + +#if PCRE2_CODE_UNIT_WIDTH == 8 +#define VECTOR_ELEMENT_SIZE 0 +#elif PCRE2_CODE_UNIT_WIDTH == 16 +#define VECTOR_ELEMENT_SIZE 1 +#elif PCRE2_CODE_UNIT_WIDTH == 32 +#define VECTOR_ELEMENT_SIZE 2 +#else +#error "Unsupported unit width" +#endif + +static void load_from_mem_vector(struct sljit_compiler *compiler, BOOL vlbb, sljit_s32 dst_vreg, + sljit_s32 base_reg, sljit_s32 index_reg) +{ +sljit_u16 instruction[3]; + +instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | index_reg); +instruction[1] = (sljit_u16)(base_reg << 12); +instruction[2] = (sljit_u16)((0x8 << 8) | (vlbb ? 0x07 : 0x06)); + +sljit_emit_op_custom(compiler, instruction, 6); +} + +#if PCRE2_CODE_UNIT_WIDTH == 32 + +static void replicate_imm_vector(struct sljit_compiler *compiler, int step, sljit_s32 dst_vreg, + PCRE2_UCHAR chr, sljit_s32 tmp_general_reg) +{ +sljit_u16 instruction[3]; + +SLJIT_ASSERT(step >= 0 && step <= 1); + +if (chr < 0x7fff) + { + if (step == 1) + return; + + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4)); + instruction[1] = (sljit_u16)chr; + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); + sljit_emit_op_custom(compiler, instruction, 6); + return; + } + +if (step == 0) + { + OP1(SLJIT_MOV, tmp_general_reg, 0, SLJIT_IMM, chr); + + /* VLVG */ + instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | sljit_get_register_index(tmp_general_reg)); + instruction[1] = 0; + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x22); + sljit_emit_op_custom(compiler, instruction, 6); + return; + } + +/* VREP */ +instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | dst_vreg); +instruction[1] = 0; +instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xc << 8) | 0x4d); +sljit_emit_op_custom(compiler, instruction, 6); +} + +#endif + +static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type, + int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind) +{ +sljit_u16 instruction[3]; + +SLJIT_ASSERT(step >= 0 && step <= 2); + +if (step == 1) + { + /* VCEQ */ + instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind); + instruction[1] = (sljit_u16)(cmp1_ind << 12); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8); + sljit_emit_op_custom(compiler, instruction, 6); + return; + } + +if (compare_type != vector_compare_match2) + { + if (step == 0 && compare_type == vector_compare_match1i) + { + /* VO */ + instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind); + instruction[1] = (sljit_u16)(cmp2_ind << 12); + instruction[2] = (sljit_u16)((0xe << 8) | 0x6a); + sljit_emit_op_custom(compiler, instruction, 6); + } + return; + } + +switch (step) + { + case 0: + /* VCEQ */ + instruction[0] = (sljit_u16)(0xe700 | (tmp_ind << 4) | dst_ind); + instruction[1] = (sljit_u16)(cmp2_ind << 12); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8); + sljit_emit_op_custom(compiler, instruction, 6); + return; + + case 2: + /* VO */ + instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind); + instruction[1] = (sljit_u16)(tmp_ind << 12); + instruction[2] = (sljit_u16)((0xe << 8) | 0x6a); + sljit_emit_op_custom(compiler, instruction, 6); + return; + } +} + +#define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1 + +static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset) +{ +DEFINE_COMPILER; +sljit_u16 instruction[3]; +struct sljit_label *start; +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +struct sljit_label *restart; +#endif +struct sljit_jump *quit; +struct sljit_jump *partial_quit[2]; +vector_compare_type compare_type = vector_compare_match1; +sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); +sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR); +sljit_s32 data_ind = 0; +sljit_s32 tmp_ind = 1; +sljit_s32 cmp1_ind = 2; +sljit_s32 cmp2_ind = 3; +sljit_s32 zero_ind = 4; +sljit_u32 bit = 0; +int i; + +SLJIT_UNUSED_ARG(offset); + +if (char1 != char2) + { + bit = char1 ^ char2; + compare_type = vector_compare_match1i; + + if (!is_powerof2(bit)) + { + bit = 0; + compare_type = vector_compare_match2; + } + } + +partial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); +if (common->mode == PCRE2_JIT_COMPLETE) + add_jump(compiler, &common->failed_match, partial_quit[0]); + +/* First part (unaligned start) */ + +OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16); + +#if PCRE2_CODE_UNIT_WIDTH != 32 + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4)); +instruction[1] = (sljit_u16)(char1 | bit); +instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); +sljit_emit_op_custom(compiler, instruction, 6); + +if (char1 != char2) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4)); + instruction[1] = (sljit_u16)(bit != 0 ? bit : char2); + /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ + sljit_emit_op_custom(compiler, instruction, 6); + } + +#else /* PCRE2_CODE_UNIT_WIDTH == 32 */ + +for (int i = 0; i < 2; i++) + { + replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP1); + + if (char1 != char2) + replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP1); + } + +#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */ + +if (compare_type == vector_compare_match2) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4)); + instruction[1] = 0; + instruction[2] = (sljit_u16)((0x8 << 8) | 0x45); + sljit_emit_op_custom(compiler, instruction, 6); + } + +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +restart = LABEL(); +#endif + +load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0); +OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15); + +if (compare_type != vector_compare_match2) + { + if (compare_type == vector_compare_match1i) + fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFEE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80); + sljit_emit_op_custom(compiler, instruction, 6); + } +else + { + for (i = 0; i < 3; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFENE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((0xe << 8) | 0x81); + sljit_emit_op_custom(compiler, instruction, 6); + } + +/* TODO: use sljit_set_current_flags */ + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); +quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0); + +OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16); + +/* Second part (aligned) */ +start = LABEL(); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16); + +partial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); +if (common->mode == PCRE2_JIT_COMPLETE) + add_jump(compiler, &common->failed_match, partial_quit[1]); + +load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0); + +if (compare_type != vector_compare_match2) + { + if (compare_type == vector_compare_match1i) + fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFEE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80); + sljit_emit_op_custom(compiler, instruction, 6); + } +else + { + for (i = 0; i < 3; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFENE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((0xe << 8) | 0x81); + sljit_emit_op_custom(compiler, instruction, 6); + } + +/* TODO: use sljit_set_current_flags */ + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +CMPTO(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 16, start); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); + +JUMPHERE(quit); + +if (common->mode != PCRE2_JIT_COMPLETE) + { + JUMPHERE(partial_quit[0]); + JUMPHERE(partial_quit[1]); + OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); + } +else + add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +if (common->utf && offset > 0) + { + SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE); + + OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset)); + + quit = jump_if_utf_char_start(compiler, TMP1); + + OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + + OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16); + JUMPTO(SLJIT_JUMP, restart); + + JUMPHERE(quit); + } +#endif +} + +#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD 1 + +static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2) +{ +DEFINE_COMPILER; +sljit_u16 instruction[3]; +struct sljit_label *start; +struct sljit_jump *quit; +jump_list *not_found = NULL; +vector_compare_type compare_type = vector_compare_match1; +sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); +sljit_s32 tmp3_reg_ind = sljit_get_register_index(TMP3); +sljit_s32 data_ind = 0; +sljit_s32 tmp_ind = 1; +sljit_s32 cmp1_ind = 2; +sljit_s32 cmp2_ind = 3; +sljit_s32 zero_ind = 4; +sljit_u32 bit = 0; +int i; + +if (char1 != char2) + { + bit = char1 ^ char2; + compare_type = vector_compare_match1i; + + if (!is_powerof2(bit)) + { + bit = 0; + compare_type = vector_compare_match2; + } + } + +add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0)); + +/* First part (unaligned start) */ + +OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, 16); + +#if PCRE2_CODE_UNIT_WIDTH != 32 + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4)); +instruction[1] = (sljit_u16)(char1 | bit); +instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); +sljit_emit_op_custom(compiler, instruction, 6); + +if (char1 != char2) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4)); + instruction[1] = (sljit_u16)(bit != 0 ? bit : char2); + /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ + sljit_emit_op_custom(compiler, instruction, 6); + } + +#else /* PCRE2_CODE_UNIT_WIDTH == 32 */ + +for (int i = 0; i < 2; i++) + { + replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP3); + + if (char1 != char2) + replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP3); + } + +#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */ + +if (compare_type == vector_compare_match2) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4)); + instruction[1] = 0; + instruction[2] = (sljit_u16)((0x8 << 8) | 0x45); + sljit_emit_op_custom(compiler, instruction, 6); + } + +load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0); +OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15); + +if (compare_type != vector_compare_match2) + { + if (compare_type == vector_compare_match1i) + fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFEE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80); + sljit_emit_op_custom(compiler, instruction, 6); + } +else + { + for (i = 0; i < 3; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFENE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((0xe << 8) | 0x81); + sljit_emit_op_custom(compiler, instruction, 6); + } + +/* TODO: use sljit_set_current_flags */ + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0); +quit = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0); + +OP2(SLJIT_SUB, TMP1, 0, TMP2, 0, SLJIT_IMM, 16); + +/* Second part (aligned) */ +start = LABEL(); + +OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 16); + +add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0)); + +load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0); + +if (compare_type != vector_compare_match2) + { + if (compare_type == vector_compare_match1i) + fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFEE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80); + sljit_emit_op_custom(compiler, instruction, 6); + } +else + { + for (i = 0; i < 3; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFENE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((0xe << 8) | 0x81); + sljit_emit_op_custom(compiler, instruction, 6); + } + +/* TODO: use sljit_set_current_flags */ + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +CMPTO(SLJIT_GREATER_EQUAL, TMP3, 0, SLJIT_IMM, 16, start); + +OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0); + +JUMPHERE(quit); +add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0)); + +return not_found; +} + +#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1 + +static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1, + PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b) +{ +DEFINE_COMPILER; +sljit_u16 instruction[3]; +struct sljit_label *start; +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +struct sljit_label *restart; +#endif +struct sljit_jump *quit; +struct sljit_jump *jump[2]; +vector_compare_type compare1_type = vector_compare_match1; +vector_compare_type compare2_type = vector_compare_match1; +sljit_u32 bit1 = 0; +sljit_u32 bit2 = 0; +sljit_s32 diff = IN_UCHARS(offs2 - offs1); +sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); +sljit_s32 tmp2_reg_ind = sljit_get_register_index(TMP2); +sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR); +sljit_s32 data1_ind = 0; +sljit_s32 data2_ind = 1; +sljit_s32 tmp1_ind = 2; +sljit_s32 tmp2_ind = 3; +sljit_s32 cmp1a_ind = 4; +sljit_s32 cmp1b_ind = 5; +sljit_s32 cmp2a_ind = 6; +sljit_s32 cmp2b_ind = 7; +sljit_s32 zero_ind = 8; +int i; + +SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2); +SLJIT_ASSERT(-diff <= (sljit_s32)IN_UCHARS(max_fast_forward_char_pair_offset())); +SLJIT_ASSERT(tmp1_reg_ind != 0 && tmp2_reg_ind != 0); + +if (char1a != char1b) + { + bit1 = char1a ^ char1b; + compare1_type = vector_compare_match1i; + + if (!is_powerof2(bit1)) + { + bit1 = 0; + compare1_type = vector_compare_match2; + } + } + +if (char2a != char2b) + { + bit2 = char2a ^ char2b; + compare2_type = vector_compare_match1i; + + if (!is_powerof2(bit2)) + { + bit2 = 0; + compare2_type = vector_compare_match2; + } + } + +/* Initialize. */ +if (common->match_end_ptr != 0) + { + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); + OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); + OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1)); + + OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0); + CMOV(SLJIT_LESS, STR_END, TMP1, 0); + } + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1)); +add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); +OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15); + +#if PCRE2_CODE_UNIT_WIDTH != 32 + +OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff); + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (cmp1a_ind << 4)); +instruction[1] = (sljit_u16)(char1a | bit1); +instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); +sljit_emit_op_custom(compiler, instruction, 6); + +if (char1a != char1b) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (cmp1b_ind << 4)); + instruction[1] = (sljit_u16)(bit1 != 0 ? bit1 : char1b); + /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ + sljit_emit_op_custom(compiler, instruction, 6); + } + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (cmp2a_ind << 4)); +instruction[1] = (sljit_u16)(char2a | bit2); +/* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ +sljit_emit_op_custom(compiler, instruction, 6); + +if (char2a != char2b) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (cmp2b_ind << 4)); + instruction[1] = (sljit_u16)(bit2 != 0 ? bit2 : char2b); + /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ + sljit_emit_op_custom(compiler, instruction, 6); + } + +#else /* PCRE2_CODE_UNIT_WIDTH == 32 */ + +for (int i = 0; i < 2; i++) + { + replicate_imm_vector(compiler, i, cmp1a_ind, char1a | bit1, TMP1); + + if (char1a != char1b) + replicate_imm_vector(compiler, i, cmp1b_ind, bit1 != 0 ? bit1 : char1b, TMP1); + + replicate_imm_vector(compiler, i, cmp2a_ind, char2a | bit2, TMP1); + + if (char2a != char2b) + replicate_imm_vector(compiler, i, cmp2b_ind, bit2 != 0 ? bit2 : char2b, TMP1); + } + +OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff); + +#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */ + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4)); +instruction[1] = 0; +instruction[2] = (sljit_u16)((0x8 << 8) | 0x45); +sljit_emit_op_custom(compiler, instruction, 6); + +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +restart = LABEL(); +#endif + +jump[0] = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0); +load_from_mem_vector(compiler, TRUE, data2_ind, tmp1_reg_ind, 0); +jump[1] = JUMP(SLJIT_JUMP); +JUMPHERE(jump[0]); +load_from_mem_vector(compiler, FALSE, data2_ind, tmp1_reg_ind, 0); +JUMPHERE(jump[1]); + +load_from_mem_vector(compiler, TRUE, data1_ind, str_ptr_reg_ind, 0); +OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 16); + +for (i = 0; i < 3; i++) + { + fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind); + fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind); + } + +/* VN */ +instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind); +instruction[1] = (sljit_u16)(data2_ind << 12); +instruction[2] = (sljit_u16)((0xe << 8) | 0x68); +sljit_emit_op_custom(compiler, instruction, 6); + +/* VFENE */ +instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind); +instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); +instruction[2] = (sljit_u16)((0xe << 8) | 0x81); +sljit_emit_op_custom(compiler, instruction, 6); + +/* TODO: use sljit_set_current_flags */ + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data1_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); +quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0); + +OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16); +OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, diff); + +/* Main loop. */ +start = LABEL(); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16); +add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + +load_from_mem_vector(compiler, FALSE, data1_ind, str_ptr_reg_ind, 0); +load_from_mem_vector(compiler, FALSE, data2_ind, str_ptr_reg_ind, tmp1_reg_ind); + +for (i = 0; i < 3; i++) + { + fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind); + fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind); + } + +/* VN */ +instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind); +instruction[1] = (sljit_u16)(data2_ind << 12); +instruction[2] = (sljit_u16)((0xe << 8) | 0x68); +sljit_emit_op_custom(compiler, instruction, 6); + +/* VFENE */ +instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind); +instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); +instruction[2] = (sljit_u16)((0xe << 8) | 0x81); +sljit_emit_op_custom(compiler, instruction, 6); + +/* TODO: use sljit_set_current_flags */ + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp2_reg_ind << 4) | data1_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +CMPTO(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 16, start); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0); + +JUMPHERE(quit); + +add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +if (common->utf) + { + SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE); + + OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1)); + + quit = jump_if_utf_char_start(compiler, TMP1); + + OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + + /* TMP1 contains diff. */ + OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15); + OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff); + JUMPTO(SLJIT_JUMP, restart); + + JUMPHERE(quit); + } +#endif + +OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1)); + +if (common->match_end_ptr != 0) + OP1(SLJIT_MOV, STR_END, 0, TMP3, 0); +} + +#endif /* SLJIT_CONFIG_S390X */ + +#endif /* !SUPPORT_VALGRIND */ diff --git a/src/3rdparty/pcre2/src/pcre2_match.c b/src/3rdparty/pcre2/src/pcre2_match.c index e3f78c2ca3..ed60517131 100644 --- a/src/3rdparty/pcre2/src/pcre2_match.c +++ b/src/3rdparty/pcre2/src/pcre2_match.c @@ -818,10 +818,12 @@ fprintf(stderr, "++ op=%d\n", *Fecode); /* N is now the frame of the recursion; the previous frame is at the OP_RECURSE position. Go back there, copying the current subject position - and mark, and move on past the OP_RECURSE. */ + and mark, and the start_match position (\K might have changed it), and + then move on past the OP_RECURSE. */ P->eptr = Feptr; P->mark = Fmark; + P->start_match = Fstart_match; F = P; Fecode += 1 + LINK_SIZE; continue; diff --git a/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h b/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h index eb1132db30..ff36e5b7c6 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h +++ b/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h @@ -158,6 +158,8 @@ extern "C" { #define SLJIT_CONFIG_MIPS_64 1 #elif defined(__sparc__) || defined(__sparc) #define SLJIT_CONFIG_SPARC_32 1 +#elif defined(__s390x__) +#define SLJIT_CONFIG_S390X 1 #else /* Unsupported architecture */ #define SLJIT_CONFIG_UNSUPPORTED 1 diff --git a/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c b/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c index 61a32f23e9..6e5bf78e45 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c +++ b/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c @@ -79,6 +79,7 @@ */ #ifdef _WIN32 +#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) static SLJIT_INLINE void* alloc_chunk(sljit_uw size) { @@ -91,96 +92,108 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size) VirtualFree(chunk, 0, MEM_RELEASE); } -#else - -#ifdef __APPLE__ -#ifdef MAP_ANON -/* Configures TARGET_OS_OSX when appropriate */ -#include - -#if TARGET_OS_OSX && defined(MAP_JIT) -#include -#endif /* TARGET_OS_OSX && MAP_JIT */ - -#ifdef MAP_JIT +#else /* POSIX */ +#if defined(__APPLE__) && defined(MAP_JIT) /* On macOS systems, returns MAP_JIT if it is defined _and_ we're running on a - version where it's OK to have more than one JIT block. + version where it's OK to have more than one JIT block or where MAP_JIT is + required. On non-macOS systems, returns MAP_JIT if it is defined. */ +#include +#if TARGET_OS_OSX +#if defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86 +#ifdef MAP_ANON +#include +#include + +#define SLJIT_MAP_JIT (get_map_jit_flag()) + static SLJIT_INLINE int get_map_jit_flag() { -#if TARGET_OS_OSX - sljit_sw page_size = get_page_alignment() + 1; + sljit_sw page_size; void *ptr; + struct utsname name; static int map_jit_flag = -1; - /* - The following code is thread safe because multiple initialization - sets map_jit_flag to the same value and the code has no side-effects. - Changing the kernel version witout system restart is (very) unlikely. - */ - if (map_jit_flag == -1) { - struct utsname name; - + if (map_jit_flag < 0) { map_jit_flag = 0; uname(&name); - /* Kernel version for 10.14.0 (Mojave) */ + /* Kernel version for 10.14.0 (Mojave) or later */ if (atoi(name.release) >= 18) { + page_size = get_page_alignment() + 1; /* Only use MAP_JIT if a hardened runtime is used */ + ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANON, -1, 0); - ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0); - - if (ptr == MAP_FAILED) { - map_jit_flag = MAP_JIT; - } else { + if (ptr != MAP_FAILED) munmap(ptr, page_size); - } + else + map_jit_flag = MAP_JIT; } } - return map_jit_flag; -#else /* !TARGET_OS_OSX */ - return MAP_JIT; -#endif /* TARGET_OS_OSX */ } - -#endif /* MAP_JIT */ #endif /* MAP_ANON */ -#endif /* __APPLE__ */ +#else /* !SLJIT_CONFIG_X86 */ +#if !(defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM) +#error Unsupported architecture +#endif /* SLJIT_CONFIG_ARM */ +#include + +#define SLJIT_MAP_JIT (MAP_JIT) +#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) \ + apple_update_wx_flags(enable_exec) + +static SLJIT_INLINE void apple_update_wx_flags(sljit_s32 enable_exec) +{ + pthread_jit_write_protect_np(enable_exec); +} +#endif /* SLJIT_CONFIG_X86 */ +#else /* !TARGET_OS_OSX */ +#define SLJIT_MAP_JIT (MAP_JIT) +#endif /* TARGET_OS_OSX */ +#endif /* __APPLE__ && MAP_JIT */ +#ifndef SLJIT_UPDATE_WX_FLAGS +#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) +#endif /* !SLJIT_UPDATE_WX_FLAGS */ +#ifndef SLJIT_MAP_JIT +#define SLJIT_MAP_JIT (0) +#endif /* !SLJIT_MAP_JIT */ static SLJIT_INLINE void* alloc_chunk(sljit_uw size) { void *retval; - const int prot = PROT_READ | PROT_WRITE | PROT_EXEC; - -#ifdef MAP_ANON + int prot = PROT_READ | PROT_WRITE | PROT_EXEC; + int flags = MAP_PRIVATE; + int fd = -1; - int flags = MAP_PRIVATE | MAP_ANON; - -#ifdef MAP_JIT - flags |= get_map_jit_flag(); +#ifdef PROT_MAX + prot |= PROT_MAX(prot); #endif - retval = mmap(NULL, size, prot, flags, -1, 0); +#ifdef MAP_ANON + flags |= MAP_ANON | SLJIT_MAP_JIT; #else /* !MAP_ANON */ if (SLJIT_UNLIKELY((dev_zero < 0) && open_dev_zero())) return NULL; - retval = mmap(NULL, size, prot, MAP_PRIVATE, dev_zero, 0); + fd = dev_zero; #endif /* MAP_ANON */ + retval = mmap(NULL, size, prot, flags, fd, 0); if (retval == MAP_FAILED) - retval = NULL; - else { - if (mprotect(retval, size, prot) < 0) { - munmap(retval, size); - retval = NULL; - } + return NULL; + + if (mprotect(retval, size, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) { + munmap(retval, size); + return NULL; } + SLJIT_UPDATE_WX_FLAGS(retval, (uint8_t *)retval + size, 0); + return retval; } @@ -189,7 +202,7 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size) munmap(chunk, size); } -#endif +#endif /* windows */ /* --------------------------------------------------------------------- */ /* Common functions */ @@ -261,6 +274,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size) while (free_block) { if (free_block->size >= size) { chunk_size = free_block->size; + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0); if (chunk_size > size + 64) { /* We just cut a block from the end of the free block. */ chunk_size -= size; @@ -326,6 +340,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr) allocated_size -= header->size; /* Connecting free blocks together if possible. */ + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0); /* If header->prev_size == 0, free_block will equal to header. In this case, free_block->header.size will be > 0. */ @@ -358,6 +373,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr) } } + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1); SLJIT_ALLOCATOR_UNLOCK(); } @@ -367,6 +383,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void) struct free_block* next_free_block; SLJIT_ALLOCATOR_LOCK(); + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0); free_block = free_blocks; while (free_block) { @@ -381,5 +398,6 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void) } SLJIT_ASSERT((total_size && free_blocks) || (!total_size && !free_blocks)); + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1); SLJIT_ALLOCATOR_UNLOCK(); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c b/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c index a8b65112d4..3d007fe8a1 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c @@ -42,7 +42,7 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) typedef sljit_uw sljit_ins; /* Instruction tags (most significant halfword). */ -const sljit_ins sljit_ins_const = (sljit_ins)1 << 48; +static const sljit_ins sljit_ins_const = (sljit_ins)1 << 48; static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 4] = { 14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1 @@ -66,22 +66,22 @@ typedef sljit_uw sljit_gpr; * will be retired ASAP (TODO: carenas) */ -const sljit_gpr r0 = 0; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */ -const sljit_gpr r1 = 1; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */ -const sljit_gpr r2 = 2; /* reg_map[1]: 1st argument */ -const sljit_gpr r3 = 3; /* reg_map[2]: 2nd argument */ -const sljit_gpr r4 = 4; /* reg_map[3]: 3rd argument */ -const sljit_gpr r5 = 5; /* reg_map[4]: 4th argument */ -const sljit_gpr r6 = 6; /* reg_map[5]: 5th argument; 1st saved register */ -const sljit_gpr r7 = 7; /* reg_map[6] */ -const sljit_gpr r8 = 8; /* reg_map[7] */ -const sljit_gpr r9 = 9; /* reg_map[8] */ -const sljit_gpr r10 = 10; /* reg_map[9] */ -const sljit_gpr r11 = 11; /* reg_map[10] */ -const sljit_gpr r12 = 12; /* reg_map[11]: GOT */ -const sljit_gpr r13 = 13; /* reg_map[12]: Literal Pool pointer */ -const sljit_gpr r14 = 14; /* reg_map[0]: return address and flag register */ -const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */ +static const sljit_gpr r0 = 0; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */ +static const sljit_gpr r1 = 1; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */ +static const sljit_gpr r2 = 2; /* reg_map[1]: 1st argument */ +static const sljit_gpr r3 = 3; /* reg_map[2]: 2nd argument */ +static const sljit_gpr r4 = 4; /* reg_map[3]: 3rd argument */ +static const sljit_gpr r5 = 5; /* reg_map[4]: 4th argument */ +static const sljit_gpr r6 = 6; /* reg_map[5]: 5th argument; 1st saved register */ +static const sljit_gpr r7 = 7; /* reg_map[6] */ +static const sljit_gpr r8 = 8; /* reg_map[7] */ +static const sljit_gpr r9 = 9; /* reg_map[8] */ +static const sljit_gpr r10 = 10; /* reg_map[9] */ +static const sljit_gpr r11 = 11; /* reg_map[10] */ +static const sljit_gpr r12 = 12; /* reg_map[11]: GOT */ +static const sljit_gpr r13 = 13; /* reg_map[12]: Literal Pool pointer */ +static const sljit_gpr r14 = 14; /* reg_map[0]: return address and flag register */ +static const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */ /* WARNING: r12 and r13 shouldn't be used as per ABI recommendation */ /* TODO(carenas): r12 might conflict in PIC code, reserve? */ @@ -100,8 +100,8 @@ const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack point /* Link registers. The normal link register is r14, but since we use that for flags we need to use r0 instead to do fast calls so that flags are preserved. */ -const sljit_gpr link_r = 14; /* r14 */ -const sljit_gpr fast_link_r = 0; /* r0 */ +static const sljit_gpr link_r = 14; /* r14 */ +static const sljit_gpr fast_link_r = 0; /* r0 */ /* Flag register layout: @@ -110,7 +110,7 @@ const sljit_gpr fast_link_r = 0; /* r0 */ | ZERO | 0 | 0 | C C |///////| +---------------+---+---+-------+-------+ */ -const sljit_gpr flag_r = 14; /* r14 */ +static const sljit_gpr flag_r = 14; /* r14 */ struct sljit_s390x_const { struct sljit_const const_; /* must be first */ @@ -1465,7 +1465,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile op = GET_OPCODE(op) | (op & SLJIT_I32_OP); switch (op) { case SLJIT_BREAKPOINT: - /* TODO(mundaym): insert real breakpoint? */ + /* The following invalid instruction is emitted by gdb. */ + return push_inst(compiler, 0x0001 /* 2-byte trap */); case SLJIT_NOP: return push_inst(compiler, 0x0700 /* 2-byte nop */); case SLJIT_LMUL_UW: diff --git a/src/3rdparty/pcre2/src/sljit/sljitUtils.c b/src/3rdparty/pcre2/src/sljit/sljitUtils.c index 08ca35cf37..9bce714735 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitUtils.c +++ b/src/3rdparty/pcre2/src/sljit/sljitUtils.c @@ -48,7 +48,7 @@ static HANDLE allocator_lock; static SLJIT_INLINE void allocator_grab_lock(void) { HANDLE lock; - if (SLJIT_UNLIKELY(!allocator_lock)) { + if (SLJIT_UNLIKELY(!InterlockedCompareExchangePointer(&allocator_lock, NULL, NULL))) { lock = CreateMutex(NULL, FALSE, NULL); if (InterlockedCompareExchangePointer(&allocator_lock, lock, NULL)) CloseHandle(lock); @@ -146,9 +146,13 @@ static SLJIT_INLINE sljit_sw get_page_alignment(void) { #include static SLJIT_INLINE sljit_sw get_page_alignment(void) { - static sljit_sw sljit_page_align; - if (!sljit_page_align) { + static sljit_sw sljit_page_align = -1; + if (sljit_page_align < 0) { +#ifdef _SC_PAGESIZE sljit_page_align = sysconf(_SC_PAGESIZE); +#else + sljit_page_align = getpagesize(); +#endif /* Should never happen. */ if (sljit_page_align < 0) sljit_page_align = 4096; diff --git a/src/3rdparty/pcre2/src/sljit/sljitWXExecAllocator.c b/src/3rdparty/pcre2/src/sljit/sljitWXExecAllocator.c index 6ef71f7d83..72d5b8dd2b 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitWXExecAllocator.c +++ b/src/3rdparty/pcre2/src/sljit/sljitWXExecAllocator.c @@ -121,14 +121,18 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size) static pthread_mutex_t se_lock = PTHREAD_MUTEX_INITIALIZER; #endif static int se_protected = !SLJIT_PROT_WX; + int prot = PROT_READ | PROT_WRITE | SLJIT_PROT_WX; sljit_uw* ptr; if (SLJIT_UNLIKELY(se_protected < 0)) return NULL; +#ifdef PROT_MAX + prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC); +#endif + size += sizeof(sljit_uw); - ptr = (sljit_uw*)mmap(NULL, size, PROT_READ | PROT_WRITE | SLJIT_PROT_WX, - MAP_PRIVATE | MAP_ANON, -1, 0); + ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0); if (ptr == MAP_FAILED) return NULL; -- cgit v1.2.3 From 2af9e7da094724e0be238db583f038b4ae3861cc Mon Sep 17 00:00:00 2001 From: Luca Beldi Date: Fri, 23 Apr 2021 20:30:17 +0100 Subject: Fix QTreeModel calling beginRemoveRows twice For items that are children of other items, removeRows calls beginRemoveRows directly and then once again inside takeChild() The signal blocker that dates back to the monolitic import from Nokia prevents the model from emitting extra signals but the persistent indexes are corrupted nonetheless. Fixes: QTBUG-90030 Change-Id: I5bc4b2598bf13247683b113faeec22471f1f04a4 Reviewed-by: David Faure (cherry picked from commit 6ec3fa2842b5c4714dc9a3953b2721ef70dd957b) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/itemviews/qtreewidget.cpp | 18 +++++++----------- .../widgets/itemviews/qtreewidget/tst_qtreewidget.cpp | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index 60b6d0493f..9264e4314b 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -508,22 +508,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/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index 7da56ab797..b129868bbd 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -151,6 +151,7 @@ private slots: void getMimeDataWithInvalidItem(); void testVisualItemRect(); void reparentHiddenItem(); + void persistentChildIndex(); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) void clearItemData(); #endif @@ -3597,6 +3598,21 @@ void tst_QTreeWidget::reparentHiddenItem() QVERIFY(grandChild->isHidden()); } +void tst_QTreeWidget::persistentChildIndex() // QTBUG-90030 +{ + QTreeWidget tree; + QTreeWidgetItem *toplevel = new QTreeWidgetItem(QStringList{QStringLiteral("toplevel")}); + tree.addTopLevelItem(toplevel); + QModelIndex firstIndex = tree.model()->index(0, 0); + QTreeWidgetItem *child1 = new QTreeWidgetItem(QStringList{QStringLiteral("child1")}); + QTreeWidgetItem *child2 = new QTreeWidgetItem(QStringList{QStringLiteral("child2")}); + toplevel->addChildren({child1, child2}); + QPersistentModelIndex persistentIdx = tree.model()->index(1, 0, firstIndex); + QCOMPARE(persistentIdx.data().toString(), QStringLiteral("child2")); + tree.model()->removeRows(0, 1, firstIndex); + QCOMPARE(persistentIdx.data().toString(), QStringLiteral("child2")); +} + #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) void tst_QTreeWidget::clearItemData() { -- cgit v1.2.3 From b90b321955ad28d5b1f75358384aa70f96b21176 Mon Sep 17 00:00:00 2001 From: Luca Beldi Date: Thu, 15 Apr 2021 23:41:28 +0100 Subject: Fix QAbstractItemModelTester false positive When rows are removed from a model with no columns, the test should not report a problem if indexes are invalid Fixes: QTBUG-92886 Change-Id: I7a042dfdb2575f87208a00cbed13db3869807f84 Reviewed-by: David Faure (cherry picked from commit fed2c0d23614df1b96dcc8746223501b07597a52) Reviewed-by: Qt Cherry-pick Bot --- src/testlib/qabstractitemmodeltester.cpp | 4 ++-- .../qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/testlib/qabstractitemmodeltester.cpp b/src/testlib/qabstractitemmodeltester.cpp index 2b58e4d1c5..ff2327ab49 100644 --- a/src/testlib/qabstractitemmodeltester.cpp +++ b/src/testlib/qabstractitemmodeltester.cpp @@ -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/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp b/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp index 08419b335e..4aa3f8d60b 100644 --- a/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp +++ b/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp @@ -105,13 +105,16 @@ void tst_QAbstractItemModelTester::standardItemModel() model.insertColumns(0, 5, model.index(1, 3)); } -void tst_QAbstractItemModelTester::standardItemModelZeroColumns() // QTBUG-92220 +void tst_QAbstractItemModelTester::standardItemModelZeroColumns() { QStandardItemModel model; - QAbstractItemModelTester t1(&model); + // QTBUG-92220 model.insertRows(0, 5); model.removeRows(0, 5); + // QTBUG-92886 + model.insertRows(0, 5); + model.removeRows(1, 2); } void tst_QAbstractItemModelTester::testInsertThroughProxy() -- cgit v1.2.3 From 82d8a4ac7ff81b85ce6ee62dc0a10653375bb26b Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Wed, 28 Apr 2021 23:45:07 +0200 Subject: QLocalSocket: fix inclusions in namespaced builds An include statement appeared after opening the Qt namespace, thus injecting symbols in there. Move it outside. Change-Id: I8e95e821b36ad4e4ceed5b0645bf8ebf7e531e06 Reviewed-by: Thiago Macieira (cherry picked from commit 99e95a2cc6ddec5ebd7f69489811be2e9aef98b9) Reviewed-by: Qt Cherry-pick Bot --- src/network/socket/qlocalsocket.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/network/socket/qlocalsocket.h b/src/network/socket/qlocalsocket.h index b9ebae6fe4..6adb61e79d 100644 --- a/src/network/socket/qlocalsocket.h +++ b/src/network/socket/qlocalsocket.h @@ -44,6 +44,10 @@ #include #include +#ifndef QT_NO_DEBUG_STREAM +#include +#endif + QT_REQUIRE_CONFIG(localserver); QT_BEGIN_NAMESPACE @@ -146,7 +150,6 @@ private: }; #ifndef QT_NO_DEBUG_STREAM -#include Q_NETWORK_EXPORT QDebug operator<<(QDebug, QLocalSocket::LocalSocketError); Q_NETWORK_EXPORT QDebug operator<<(QDebug, QLocalSocket::LocalSocketState); #endif -- cgit v1.2.3 From 84a1087bf672f04eb24cccc8efb3a5b24f3b16d4 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Wed, 26 May 2021 13:05:34 +0200 Subject: QComboBox: propagate style change on widget to internal container When changing the style of the combobox, the change will not propagate to the internal container widget, so the changeEvent handler won't be called. This is correct (as per QWidget::setStyle documentation). QComboBoxPrivateContainer asks the combobox style for relevant settings, such as the frame style, which is then used for sizing and positioning. If the combobox's and container's settings become inconsistent, then the combobox popup will not get the correct size and/or position. Move some of the style-dependent changes into a separate function and call it when the QComboBox::changeEvent handles the style change so that both widgets have a consistent set of settings. Add a test case that verifies that the style is asked for the relevant setting when the style changes. Note: QComboBox does a lot of style-dependent setup work in different places, which is quite messy and complex. Trying to consolidate that further breaks tests though, so this change is doing the minimum necessary to fix the reported issue. Fixes: QTBUG-92488 Change-Id: Ia957d504b2d800add26fc0565be727b5c08a5358 Reviewed-by: Richard Moe Gustavsen (cherry picked from commit d36ef40d18b40cfc6f57c1002079f02a15eb41d3) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/widgets/qcombobox.cpp | 24 ++++++----- src/widgets/widgets/qcombobox_p.h | 1 + .../widgets/widgets/qcombobox/tst_qcombobox.cpp | 46 ++++++++++++++++++++++ 3 files changed, 62 insertions(+), 9 deletions(-) diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 894d8ce36d..49489565a3 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -547,8 +547,6 @@ QComboBoxPrivateContainer::QComboBoxPrivateContainer(QAbstractItemView *itemView setLineWidth(1); } - setFrameStyle(combo->style()->styleHint(QStyle::SH_ComboBox_PopupFrameStyle, &opt, combo)); - if (top) { layout->insertWidget(0, top); connect(top, SIGNAL(doScroll(int)), this, SLOT(scrollItemView(int))); @@ -561,7 +559,7 @@ QComboBoxPrivateContainer::QComboBoxPrivateContainer(QAbstractItemView *itemView // Some styles (Mac) have a margin at the top and bottom of the popup. layout->insertSpacing(0, 0); layout->addSpacing(0); - updateTopBottomMargin(); + updateStyleSettings(); } void QComboBoxPrivateContainer::scrollItemView(int action) @@ -744,14 +742,20 @@ void QComboBoxPrivateContainer::updateTopBottomMargin() boxLayout->invalidate(); } +void QComboBoxPrivateContainer::updateStyleSettings() +{ + // add scroller arrows if style needs them + QStyleOptionComboBox opt = comboStyleOption(); + view->setMouseTracking(combo->style()->styleHint(QStyle::SH_ComboBox_ListMouseTracking, &opt, combo) || + combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo)); + setFrameStyle(combo->style()->styleHint(QStyle::SH_ComboBox_PopupFrameStyle, &opt, combo)); + updateTopBottomMargin(); +} + void QComboBoxPrivateContainer::changeEvent(QEvent *e) { - if (e->type() == QEvent::StyleChange) { - QStyleOptionComboBox opt = comboStyleOption(); - view->setMouseTracking(combo->style()->styleHint(QStyle::SH_ComboBox_ListMouseTracking, &opt, combo) || - combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo)); - setFrameStyle(combo->style()->styleHint(QStyle::SH_ComboBox_PopupFrameStyle, &opt, combo)); - } + if (e->type() == QEvent::StyleChange) + updateStyleSettings(); QFrame::changeEvent(e); } @@ -3114,6 +3118,8 @@ void QComboBox::changeEvent(QEvent *e) Q_D(QComboBox); switch (e->type()) { case QEvent::StyleChange: + if (d->container) + d->container->updateStyleSettings(); d->updateDelegate(); #ifdef Q_OS_MAC case QEvent::MacSizeChange: diff --git a/src/widgets/widgets/qcombobox_p.h b/src/widgets/widgets/qcombobox_p.h index 107bd8ea4e..58b5342a5b 100644 --- a/src/widgets/widgets/qcombobox_p.h +++ b/src/widgets/widgets/qcombobox_p.h @@ -223,6 +223,7 @@ public: int topMargin() const; int bottomMargin() const { return topMargin(); } void updateTopBottomMargin(); + void updateStyleSettings(); QTimer blockMouseReleaseTimer; QBasicTimer adjustSizeTimer; diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp index d8bb34933a..32437050f5 100644 --- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp @@ -167,6 +167,7 @@ private slots: void task_QTBUG_52027_mapCompleterIndex(); void checkMenuItemPosWhenStyleSheetIsSet(); void checkEmbeddedLineEditWhenStyleSheetIsSet(); + void propagateStyleChanges(); private: PlatformInputContext m_platformInputContext; @@ -3586,5 +3587,50 @@ void tst_QComboBox::checkEmbeddedLineEditWhenStyleSheetIsSet() qApp->setStyleSheet(oldCss); } +/*! + Tests that the style-based frame style propagates to the internal container + widget of QComboBox when the style changes by verifying that the respective + styleHint is asked for when the style changes. + + See QTBUG-92488 +*/ +void tst_QComboBox::propagateStyleChanges() +{ + class FrameStyle : public QProxyStyle + { + public: + FrameStyle(int frameStyle, QStyle *style = nullptr) + : QProxyStyle(style), frameStyle(frameStyle) + {} + + int styleHint(QStyle::StyleHint hint, const QStyleOption *opt, + const QWidget *widget, QStyleHintReturn *returnData) const + { + if (hint == QStyle::SH_ComboBox_PopupFrameStyle) { + inquired = true; + return frameStyle; + } + return QProxyStyle::styleHint(hint, opt, widget, returnData); + } + + int frameStyle; + mutable bool inquired = false; + }; + + FrameStyle framelessStyle(QFrame::NoFrame); + FrameStyle frameStyle(QFrame::Plain | QFrame::Sunken); + + QComboBox combo; + // container will be created and take settings from this style + combo.setStyle(&framelessStyle); + QVERIFY(framelessStyle.inquired); + combo.addItem(QLatin1String("Open")); + combo.addItem(QLatin1String("Close")); + // needed because of QComboBox's adjustSizeTimer not doing anything otherwise + combo.setSizeAdjustPolicy(QComboBox::AdjustToContents); + combo.setStyle(&frameStyle); + QVERIFY(frameStyle.inquired); +} + QTEST_MAIN(tst_QComboBox) #include "tst_qcombobox.moc" -- cgit v1.2.3 From 4a75c99aa93873678ec6dc0ef5c3e843aa509847 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 25 May 2021 18:11:10 +0200 Subject: QComboBox: add space for scrollbar if needed after showing popup QComboBox tests if a horizontal scrollbar is needed before sizing and showing the popup, but QListView only knows whether a scrollbar is needed only after laying itself out during the initial show and paint event. So test whether the need has arisen as part of this initial layout, and then provide the additional space. Resizing the widget after showing it is not ideal, but in practice makes no visible difference (and it's either way preferable to not being able to access the item covered by the scrollbar). Fixes: QTBUG-93736 Change-Id: I0bf077e18116ce174ae7f9218cb3b0dfa82964e1 Reviewed-by: Andy Shaw (cherry picked from commit 11e88eaa6df629a2c23a60815a1f7826dd2ac31a) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/widgets/qcombobox.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 49489565a3..130ef4472f 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -2900,13 +2900,15 @@ void QComboBox::showPopup() QGuiApplication::inputMethod()->reset(); } - QScrollBar *sb = view()->horizontalScrollBar(); - Qt::ScrollBarPolicy policy = view()->horizontalScrollBarPolicy(); - bool needHorizontalScrollBar = (policy == Qt::ScrollBarAsNeeded || policy == Qt::ScrollBarAlwaysOn) - && sb->minimum() < sb->maximum(); - if (needHorizontalScrollBar) { + const QScrollBar *sb = view()->horizontalScrollBar(); + const auto needHorizontalScrollBar = [this, sb]{ + const Qt::ScrollBarPolicy policy = view()->horizontalScrollBarPolicy(); + return (policy == Qt::ScrollBarAsNeeded || policy == Qt::ScrollBarAlwaysOn) + && sb->minimum() < sb->maximum(); + }; + const bool neededHorizontalScrollBar = needHorizontalScrollBar(); + if (neededHorizontalScrollBar) listRect.adjust(0, 0, 0, sb->height()); - } // Hide the scrollers here, so that the listrect gets the full height of the container // If the scrollers are truly needed, the later call to container->updateScrollers() @@ -2949,6 +2951,11 @@ void QComboBox::showPopup() } } container->show(); + if (!neededHorizontalScrollBar && needHorizontalScrollBar()) { + listRect.adjust(0, 0, 0, sb->height()); + container->setGeometry(listRect); + } + container->updateScrollers(); view()->setFocus(); -- cgit v1.2.3 From d6181cc7044f0d198bbd2a5c3aec3d162006da91 Mon Sep 17 00:00:00 2001 From: Karsten Heimrich Date: Tue, 1 Dec 2020 14:20:12 +0100 Subject: Add test for QTranslator::load() translation file lookup algorithm Change-Id: I70f4b3d7dbc46d21065eab21a5af8a38d4a60589 Reviewed-by: Oswald Buddenhagen (cherry picked from commit a0e04e7d2bfc47891a85378a57ceb5dca1d4c558) Reviewed-by: Edward Welbourne --- .../corelib/kernel/qtranslator/tst_qtranslator.cpp | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp index 9fde7da816..4a4fd89987 100644 --- a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp +++ b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp @@ -29,6 +29,7 @@ #include #include #include +#include class tst_QTranslator : public QObject { @@ -43,6 +44,7 @@ private slots: void load_data(); void load(); + void loadLocale(); void threadLoad(); void testLanguageChange(); void plural(); @@ -155,6 +157,73 @@ void tst_QTranslator::load() } } +void tst_QTranslator::loadLocale() +{ + QLocale locale; + auto localeName = locale.uiLanguages().value(0).replace('-', '_'); + if (localeName.isEmpty()) + QSKIP("This test requires at least one available UI language."); + + QByteArray ba; + { + QFile file(":/tst_qtranslator/hellotr_la.qm"); + QVERIFY2(file.open(QFile::ReadOnly), qPrintable(file.errorString())); + ba = file.readAll(); + QVERIFY(!ba.isEmpty()); + } + + QTemporaryDir dir; + QVERIFY(dir.isValid()); + + auto path = dir.path(); + QFile file(path + "/dummy"); + QVERIFY2(file.open(QFile::WriteOnly), qPrintable(file.errorString())); + QCOMPARE(file.write(ba), ba.size()); + file.close(); + + /* + Test the following order: + + /tmp/tmpDir/foo-en_US.qm + /tmp/tmpDir/foo-en_US + /tmp/tmpDir/foo-en.qm + /tmp/tmpDir/foo-en + /tmp/tmpDir/foo.qm + /tmp/tmpDir/foo- + /tmp/tmpDir/foo + */ + + QStringList files; + while (true) { + files.append(path + "/foo-" + localeName + ".qm"); + QVERIFY2(file.copy(files.last()), qPrintable(file.errorString())); + + files.append(path + "/foo-" + localeName); + QVERIFY2(file.copy(files.last()), qPrintable(file.errorString())); + + int rightmost = localeName.lastIndexOf(QLatin1Char('_')); + if (rightmost <= 0) + break; + localeName.truncate(rightmost); + } + + files.append(path + "/foo.qm"); + QVERIFY2(file.copy(files.last()), qPrintable(file.errorString())); + + files.append(path + "/foo-"); + QVERIFY2(file.copy(files.last()), qPrintable(file.errorString())); + + files.append(path + "/foo"); + QVERIFY2(file.rename(files.last()), qPrintable(file.errorString())); + + QTranslator tor; + for (const auto &filePath : files) { + QVERIFY(tor.load(locale, "foo", "-", path, ".qm")); + QCOMPARE(tor.filePath(), filePath); + QVERIFY2(file.remove(filePath), qPrintable(file.errorString())); + } +} + class TranslatorThread : public QThread { void run() { -- cgit v1.2.3 From c6803b0ef71278e68c371158db368d59ab198bc1 Mon Sep 17 00:00:00 2001 From: Qiang Li Date: Wed, 3 Mar 2021 19:26:27 +0800 Subject: Fix the crashes when animated QTreeWidgetItems are hidden QTreeView's drawTree implementation performs lazy layouting when calling itemDecorationAt. If animations are enabled, this can change the list of items, and invalidate the copy made earlier. Don't copy the list of items, use a reference instead so that code iterating over the items later operates on valid data. Add an assert in the private itemHeight method, it must not be called with an index that is out of bounds. Fixes: QTBUG-42469 Change-Id: Ifdb782881447912e00baffd1c407de10a1d8d0d4 Reviewed-by: Volker Hilsheimer (cherry picked from commit f140ef04a0c54c2c8a699db33433b8d7235d137c) --- src/widgets/itemviews/qtreeview.cpp | 4 +++- .../widgets/itemviews/qtreeview/tst_qtreeview.cpp | 24 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 4a90a95361..3ceafaed62 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -1448,7 +1448,8 @@ void QTreeViewPrivate::adjustViewOptionsForIndex(QStyleOptionViewItem *option, c void QTreeView::drawTree(QPainter *painter, const QRegion ®ion) const { Q_D(const QTreeView); - const QVector viewItems = d->viewItems; + // d->viewItems changes when posted layouts are executed in itemDecorationAt, so don't copy + const QVector &viewItems = d->viewItems; QStyleOptionViewItem option = d->viewOptionsV1(); const QStyle::State state = option.state; @@ -3459,6 +3460,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/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 52fac891c0..b75defe168 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -241,6 +241,7 @@ private slots: void taskQTBUG_7232_AllowUserToControlSingleStep(); void taskQTBUG_8376(); void taskQTBUG_61476(); + void taskQTBUG_42469_crash(); void testInitialFocus(); void fetchUntilScreenFull(); }; @@ -4966,6 +4967,29 @@ void tst_QTreeView::taskQTBUG_61476() QCOMPARE(lastTopLevel->checkState(), Qt::Checked); } +void tst_QTreeView::taskQTBUG_42469_crash() +{ + QTreeWidget treeWidget; + QTreeWidgetItem *itemOne = new QTreeWidgetItem(QStringList("item1")); + QTreeWidgetItem *itemTwo = new QTreeWidgetItem(QStringList("item2")); + treeWidget.addTopLevelItem(itemOne); + treeWidget.addTopLevelItem(itemTwo); + treeWidget.topLevelItem(1)->addChild(new QTreeWidgetItem(QStringList("child1"))); + + treeWidget.setAnimated(true); + QObject::connect(&treeWidget, &QTreeWidget::itemExpanded, [&](QTreeWidgetItem* p_item) { + auto tempCount = treeWidget.topLevelItemCount(); + for (int j = 0; j < tempCount; ++j) + if (treeWidget.topLevelItem(j) != p_item) { + auto temp = treeWidget.topLevelItem(j); + temp->setHidden(true); + } + }); + + treeWidget.show(); + itemTwo->setExpanded(true); +} + void tst_QTreeView::fetchUntilScreenFull() { class TreeModel : public QAbstractItemModel -- cgit v1.2.3 From 8fc1a885d19a2dfb1a3a684aea1cfa41967e041f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pekka=20Geh=C3=B6r?= Date: Sun, 4 Apr 2021 09:59:41 +0200 Subject: Android: Fix Application becomes unresponsive issue Block key events until the plugin is running. Fixes: QTBUG-67944 Pick-to: 5.15 Change-Id: Iea47f2e94d850141834a7e8fc26218be2cacf660 Reviewed-by: Assam Boudjelthia (cherry picked from commit 2262a9cd2d135d5ea2ade42460496c88d8b2c292) --- .../src/org/qtproject/qt5/android/QtActivityDelegate.java | 13 +++++++++---- src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 5 +++++ src/plugins/platforms/android/androidjnimain.cpp | 5 +++++ src/plugins/platforms/android/androidjnimain.h | 1 + .../platforms/android/qandroidplatformintegration.cpp | 5 +++++ 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 4d3c30a807..c76bf0994e 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -154,6 +154,7 @@ public class QtActivityDelegate private CursorHandle m_leftSelectionHandle; private CursorHandle m_rightSelectionHandle; private EditPopupMenu m_editPopupMenu; + private boolean m_isPluginRunning = false; public void setFullScreen(boolean enterFullScreen) { @@ -238,7 +239,6 @@ public class QtActivityDelegate private QtAccessibilityDelegate m_accessibilityDelegate = null; - public boolean setKeyboardVisibility(boolean visibility, long timeStamp) { if (m_showHideTimeStamp > timeStamp) @@ -892,6 +892,11 @@ public class QtActivityDelegate m_accessibilityDelegate.notifyObjectFocus(viewId); } + public void notifyQtAndroidPluginRunning(boolean running) + { + m_isPluginRunning = running; + } + public void initializeAccessibility() { m_accessibilityDelegate = new QtAccessibilityDelegate(m_activity, m_layout, this); @@ -999,7 +1004,7 @@ public class QtActivityDelegate public boolean onKeyDown(int keyCode, KeyEvent event) { - if (!m_started) + if (!m_started || !m_isPluginRunning) return false; m_metaState = MetaKeyKeyListener.handleKeyDown(m_metaState, keyCode, event); @@ -1033,7 +1038,7 @@ public class QtActivityDelegate public boolean onKeyUp(int keyCode, KeyEvent event) { - if (!m_started) + if (!m_started || !m_isPluginRunning) return false; if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP @@ -1321,4 +1326,4 @@ public class QtActivityDelegate { QtNative.sendRequestPermissionsResult(requestCode, permissions, grantResults); } -} \ No newline at end of file +} diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 14e4357d63..e7de00687c 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -992,6 +992,11 @@ public class QtNative }); } + public static void notifyQtAndroidPluginRunning(final boolean running) + { + m_activityDelegate.notifyQtAndroidPluginRunning(running); + } + private static void registerClipboardManager() { if (m_service == null || m_activity != null) { // Avoid freezing if only service diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index cf90eaacf0..be8717db0a 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -238,6 +238,11 @@ namespace QtAndroid QJNIObjectPrivate::callStaticMethod(m_applicationClass, "notifyObjectFocus","(I)V", accessibilityObjectId); } + void notifyQtAndroidPluginRunning(bool running) + { + QJNIObjectPrivate::callStaticMethod(m_applicationClass, "notifyQtAndroidPluginRunning","(Z)V", running); + } + jobject createBitmap(QImage img, JNIEnv *env) { if (!m_bitmapClass) diff --git a/src/plugins/platforms/android/androidjnimain.h b/src/plugins/platforms/android/androidjnimain.h index 2e3b0b368e..fd02bfeab6 100644 --- a/src/plugins/platforms/android/androidjnimain.h +++ b/src/plugins/platforms/android/androidjnimain.h @@ -98,6 +98,7 @@ namespace QtAndroid void notifyAccessibilityLocationChange(); void notifyObjectHide(uint accessibilityObjectId); void notifyObjectFocus(uint accessibilityObjectId); + void notifyQtAndroidPluginRunning(bool running); const char *classErrorMsgFmt(); const char *methodErrorMsgFmt(); diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index bf73ff2f98..f137db28dd 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -90,6 +90,7 @@ Qt::ScreenOrientation QAndroidPlatformIntegration::m_orientation = Qt::PrimaryOr Qt::ScreenOrientation QAndroidPlatformIntegration::m_nativeOrientation = Qt::PrimaryOrientation; bool QAndroidPlatformIntegration::m_showPasswordEnabled = false; +static bool m_running = false; void *QAndroidPlatformNativeInterface::nativeResourceForIntegration(const QByteArray &resource) { @@ -158,6 +159,10 @@ void QAndroidPlatformNativeInterface::customEvent(QEvent *event) api->accessibility()->setActive(QtAndroidAccessibility::isActive()); #endif // QT_NO_ACCESSIBILITY + if (!m_running) { + m_running = true; + QtAndroid::notifyQtAndroidPluginRunning(m_running); + } api->flushPendingUpdates(); } -- cgit v1.2.3