diff options
Diffstat (limited to 'src/corelib')
304 files changed, 23502 insertions, 13928 deletions
diff --git a/src/corelib/Qt5Config.cmake.in b/src/corelib/Qt5Config.cmake.in new file mode 100644 index 0000000000..408dd64496 --- /dev/null +++ b/src/corelib/Qt5Config.cmake.in @@ -0,0 +1,43 @@ + +if (CMAKE_VERSION VERSION_LESS 2.8.9) + message(FATAL_ERROR \"Qt5 requires at least CMake version 2.8.9\") +endif() + +if (NOT Qt5_FIND_COMPONENTS) + set(Qt5_NOT_FOUND_MESSAGE \"The Qt5 package requires at least one component\") + set(Qt5_FOUND False) + return() +endif() + +set(_Qt5_FIND_PARTS_REQUIRED) +if (Qt5_FIND_REQUIRED) + set(_Qt5_FIND_PARTS_REQUIRED REQUIRED) +endif() +set(_Qt5_FIND_PARTS_QUIET) +if (Qt5_FIND_QUIETLY) + set(_Qt5_FIND_PARTS_QUIET QUIET) +endif() + +get_filename_component(_qt5_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE) + +set(_Qt5_NOTFOUND_MESSAGE) + +foreach(module ${Qt5_FIND_COMPONENTS}) + find_package(Qt5${module} + ${_Qt5_FIND_PARTS_QUIET} + ${_Qt5_FIND_PARTS_REQUIRED} + PATHS \"${_qt5_install_prefix}\" NO_DEFAULT_PATH + ) + if (NOT Qt5${module}_FOUND) + if (Qt5_FIND_REQUIRED_${module}) + set(_Qt5_NOTFOUND_MESSAGE \"${_Qt5_NOTFOUND_MESSAGE}Failed to find Qt5 component \\\"${module}\\\" config file at \\\"${_qt5_install_prefix}/lib/cmake/Qt5${module}/Qt5${module}Config.cmake\\\"\\n\") + elseif(NOT Qt5_FIND_QUIETLY) + message(WARNING \"Failed to find Qt5 component \\\"${module}\\\" config file at \\\"${_qt5_install_prefix}/lib/cmake/Qt5${module}/Qt5${module}Config.cmake\\\"\") + endif() + endif() +endforeach() + +if (_Qt5_NOTFOUND_MESSAGE) + set(Qt5_NOT_FOUND_MESSAGE \"${_Qt5_NOTFOUND_MESSAGE}\") + set(Qt5_FOUND False) +endif() diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h index e1884aa533..f1aa6c0d78 100644 --- a/src/corelib/animation/qabstractanimation.h +++ b/src/corelib/animation/qabstractanimation.h @@ -44,8 +44,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -177,6 +175,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QABSTRACTANIMATION_H diff --git a/src/corelib/animation/qanimationgroup.h b/src/corelib/animation/qanimationgroup.h index 987efa0f94..cf32f844d3 100644 --- a/src/corelib/animation/qanimationgroup.h +++ b/src/corelib/animation/qanimationgroup.h @@ -44,8 +44,6 @@ #include <QtCore/qabstractanimation.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -82,6 +80,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif //QANIMATIONGROUP_H diff --git a/src/corelib/animation/qparallelanimationgroup.h b/src/corelib/animation/qparallelanimationgroup.h index ad9c0ccae7..31810cfca2 100644 --- a/src/corelib/animation/qparallelanimationgroup.h +++ b/src/corelib/animation/qparallelanimationgroup.h @@ -44,8 +44,6 @@ #include <QtCore/qanimationgroup.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -80,6 +78,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QPARALLELANIMATIONGROUP diff --git a/src/corelib/animation/qpauseanimation.h b/src/corelib/animation/qpauseanimation.h index 49abad4e5f..5c770015ef 100644 --- a/src/corelib/animation/qpauseanimation.h +++ b/src/corelib/animation/qpauseanimation.h @@ -44,8 +44,6 @@ #include <QtCore/qanimationgroup.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -78,6 +76,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QPAUSEANIMATION_H diff --git a/src/corelib/animation/qpropertyanimation.h b/src/corelib/animation/qpropertyanimation.h index 7b53eb3d96..f6b92cb515 100644 --- a/src/corelib/animation/qpropertyanimation.h +++ b/src/corelib/animation/qpropertyanimation.h @@ -44,8 +44,6 @@ #include <QtCore/qvariantanimation.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -83,6 +81,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QPROPERTYANIMATION_H diff --git a/src/corelib/animation/qsequentialanimationgroup.h b/src/corelib/animation/qsequentialanimationgroup.h index 9070720669..51b4227599 100644 --- a/src/corelib/animation/qsequentialanimationgroup.h +++ b/src/corelib/animation/qsequentialanimationgroup.h @@ -44,8 +44,6 @@ #include <QtCore/qanimationgroup.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -90,6 +88,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif //QSEQUENTIALANIMATIONGROUP_H diff --git a/src/corelib/animation/qvariantanimation.h b/src/corelib/animation/qvariantanimation.h index b5ebbd235a..83018c30ae 100644 --- a/src/corelib/animation/qvariantanimation.h +++ b/src/corelib/animation/qvariantanimation.h @@ -48,8 +48,6 @@ #include <QtCore/qvariant.h> #include <QtCore/qpair.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -124,6 +122,4 @@ void qRegisterAnimationInterpolator(QVariant (*func)(const T &from, const T &to, QT_END_NAMESPACE -QT_END_HEADER - #endif //QVARIANTANIMATION_H diff --git a/src/corelib/arch/qatomic_alpha.h b/src/corelib/arch/qatomic_alpha.h index b842859336..71cb112d47 100644 --- a/src/corelib/arch/qatomic_alpha.h +++ b/src/corelib/arch/qatomic_alpha.h @@ -44,10 +44,17 @@ #include <QtCore/qoldbasicatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE +#if 0 +// silence syncqt warnings +QT_END_NAMESPACE +QT_END_HEADER + +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif + #define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE inline bool QBasicAtomicInt::isReferenceCountingNative() @@ -517,6 +524,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueTo QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_ALPHA_H diff --git a/src/corelib/arch/qatomic_armv5.h b/src/corelib/arch/qatomic_armv5.h index cdb9c8f979..e0a50b3c24 100644 --- a/src/corelib/arch/qatomic_armv5.h +++ b/src/corelib/arch/qatomic_armv5.h @@ -45,15 +45,12 @@ #include <QtCore/qgenericatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -167,12 +164,20 @@ __asm T QBasicAtomicOps<4>::fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL template<> template <typename T> inline T QBasicAtomicOps<4>::fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL_NOTHROW { +#if defined(__thumb__) + register T originalValue; + do { + originalValue = _q_value; + } while (_q_cmpxchg(originalValue, newValue, &_q_value) != 0); + return originalValue; +#else T originalValue; asm volatile("swp %0,%2,[%3]" : "=&r"(originalValue), "=m" (_q_value) : "r"(newValue), "r"(&_q_value) : "cc", "memory"); return originalValue; +#endif } #endif // Q_CC_RVCT @@ -190,6 +195,4 @@ T QBasicAtomicOps<4>::fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveTy QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_ARMV5_H diff --git a/src/corelib/arch/qatomic_armv6.h b/src/corelib/arch/qatomic_armv6.h index 38ab1983d6..7f5939e391 100644 --- a/src/corelib/arch/qatomic_armv6.h +++ b/src/corelib/arch/qatomic_armv6.h @@ -45,15 +45,12 @@ #include <QtCore/qgenericatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -729,6 +726,4 @@ void QBasicAtomicOps<size>::orderedMemoryFence(const T &) Q_DECL_NOTHROW QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_ARMV6_H diff --git a/src/corelib/arch/qatomic_armv7.h b/src/corelib/arch/qatomic_armv7.h index fc5dbc9175..1929ae0ab3 100644 --- a/src/corelib/arch/qatomic_armv7.h +++ b/src/corelib/arch/qatomic_armv7.h @@ -54,11 +54,12 @@ #if 0 // silence syncqt warnings -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_END_NAMESPACE -QT_END_HEADER + +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing #endif #endif // QATOMIC_ARMV7_H diff --git a/src/corelib/arch/qatomic_bfin.h b/src/corelib/arch/qatomic_bfin.h index 24c9ea77e1..79519308a4 100644 --- a/src/corelib/arch/qatomic_bfin.h +++ b/src/corelib/arch/qatomic_bfin.h @@ -44,10 +44,17 @@ #include <QtCore/qoldbasicatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE +#if 0 +// silence syncqt warnings +QT_END_NAMESPACE +QT_END_HEADER + +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif + #define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_NOT_NATIVE inline bool QBasicAtomicInt::isReferenceCountingNative() @@ -340,6 +347,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueTo QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_BFIN_H diff --git a/src/corelib/arch/qatomic_bootstrap.h b/src/corelib/arch/qatomic_bootstrap.h index 5b2a2f86fd..160e0abdf3 100644 --- a/src/corelib/arch/qatomic_bootstrap.h +++ b/src/corelib/arch/qatomic_bootstrap.h @@ -45,15 +45,12 @@ #include <QtCore/qgenericatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -98,6 +95,4 @@ template <typename T> struct QAtomicOps: QGenericAtomicOps<QAtomicOps<T> > QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_BOOTSTRAP_H diff --git a/src/corelib/arch/qatomic_cxx11.h b/src/corelib/arch/qatomic_cxx11.h index f7a7ba4295..3119edaf45 100644 --- a/src/corelib/arch/qatomic_cxx11.h +++ b/src/corelib/arch/qatomic_cxx11.h @@ -45,14 +45,12 @@ #include <QtCore/qgenericatomic.h> #include <atomic> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -247,6 +245,5 @@ template <typename T> struct QAtomicOps #endif QT_END_NAMESPACE -QT_END_HEADER #endif // QATOMIC_CXX0X_H diff --git a/src/corelib/arch/qatomic_gcc.h b/src/corelib/arch/qatomic_gcc.h index 0940ed082f..bd296053e5 100644 --- a/src/corelib/arch/qatomic_gcc.h +++ b/src/corelib/arch/qatomic_gcc.h @@ -44,14 +44,12 @@ #include <QtCore/qgenericatomic.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -132,6 +130,4 @@ template <typename T> struct QAtomicOps: QGenericAtomicOps<QAtomicOps<T> > }; QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_GCC_H diff --git a/src/corelib/arch/qatomic_ia64.h b/src/corelib/arch/qatomic_ia64.h index 1a5259aa09..d4b187ffea 100644 --- a/src/corelib/arch/qatomic_ia64.h +++ b/src/corelib/arch/qatomic_ia64.h @@ -45,15 +45,12 @@ #include <QtCore/qgenericatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -1089,6 +1086,4 @@ T QBasicAtomicOps<size>::fetchAndAddOrdered(T &_q_value, typename QAtomicAdditiv QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_IA64_H diff --git a/src/corelib/arch/qatomic_integrity.h b/src/corelib/arch/qatomic_integrity.h index 50654e6713..f8cfc8ce5b 100644 --- a/src/corelib/arch/qatomic_integrity.h +++ b/src/corelib/arch/qatomic_integrity.h @@ -45,10 +45,17 @@ #include <QtCore/qoldbasicatomic.h> #include <INTEGRITY.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE +#if 0 +// silence syncqt warnings +QT_END_NAMESPACE +QT_END_HEADER + +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif + #define qt_i2addr(a) reinterpret_cast<Address *>(const_cast<int *>(a)) #define qt_p2addr(a) reinterpret_cast<Address *>(const_cast<void *>(a)) #define qt_addr(a) reinterpret_cast<Address>(a) @@ -284,7 +291,5 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueTo QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_INTEGRITY_H diff --git a/src/corelib/arch/qatomic_mips.h b/src/corelib/arch/qatomic_mips.h index 98ac928184..7716750332 100644 --- a/src/corelib/arch/qatomic_mips.h +++ b/src/corelib/arch/qatomic_mips.h @@ -45,15 +45,12 @@ #include <QtCore/qgenericatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -362,6 +359,4 @@ T QBasicAtomicOps<8>::fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveTy QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_MIPS_H diff --git a/src/corelib/arch/qatomic_msvc.h b/src/corelib/arch/qatomic_msvc.h index 58b2f30bb7..4f91e3d9da 100644 --- a/src/corelib/arch/qatomic_msvc.h +++ b/src/corelib/arch/qatomic_msvc.h @@ -214,14 +214,12 @@ extern "C" { //////////////////////////////////////////////////////////////////////////////////////////////////// -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -383,6 +381,4 @@ inline T *QAtomicOps<T *>::fetchAndAddRelaxed(T *&_q_value, qptrdiff valueToAdd) #undef QT_INTERLOCKED_EXCHANGE_ADD_POINTER QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_MSVC_H diff --git a/src/corelib/arch/qatomic_power.h b/src/corelib/arch/qatomic_power.h index 5e4de3f9fd..ad1c619d56 100644 --- a/src/corelib/arch/qatomic_power.h +++ b/src/corelib/arch/qatomic_power.h @@ -44,10 +44,17 @@ #include <QtCore/qoldbasicatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE +#if 0 +// silence syncqt warnings +QT_END_NAMESPACE +QT_END_HEADER + +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif + #define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE inline bool QBasicAtomicInt::isReferenceCountingNative() @@ -511,6 +518,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueTo QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_POWER_H diff --git a/src/corelib/arch/qatomic_s390.h b/src/corelib/arch/qatomic_s390.h index c24c243c03..0469f44e5f 100644 --- a/src/corelib/arch/qatomic_s390.h +++ b/src/corelib/arch/qatomic_s390.h @@ -44,10 +44,17 @@ #include <QtCore/qoldbasicatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE +#if 0 +// silence syncqt warnings +QT_END_NAMESPACE +QT_END_HEADER + +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif + #define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE inline bool QBasicAtomicInt::isReferenceCountingNative() @@ -423,6 +430,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueTo QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_S390_H diff --git a/src/corelib/arch/qatomic_sh4a.h b/src/corelib/arch/qatomic_sh4a.h index 0fd96d1f0f..08f75e44f2 100644 --- a/src/corelib/arch/qatomic_sh4a.h +++ b/src/corelib/arch/qatomic_sh4a.h @@ -44,14 +44,15 @@ #include <QtCore/qoldbasicatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_END_NAMESPACE -QT_END_HEADER +#if 0 +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif #define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE diff --git a/src/corelib/arch/qatomic_sparc.h b/src/corelib/arch/qatomic_sparc.h index 1bf625fbb1..8aea33ce85 100644 --- a/src/corelib/arch/qatomic_sparc.h +++ b/src/corelib/arch/qatomic_sparc.h @@ -44,10 +44,17 @@ #include <QtCore/qoldbasicatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE +#if 0 +// silence syncqt warnings +QT_END_NAMESPACE +QT_END_HEADER + +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif + #if defined(_LP64) #define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE @@ -522,6 +529,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueTo QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_SPARC_H diff --git a/src/corelib/arch/qatomic_unix.h b/src/corelib/arch/qatomic_unix.h index 0e9c105d57..03c7d2eee8 100644 --- a/src/corelib/arch/qatomic_unix.h +++ b/src/corelib/arch/qatomic_unix.h @@ -44,14 +44,12 @@ #include <QtCore/qgenericatomic.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -112,6 +110,4 @@ struct QAtomicOps<T *> : QGenericAtomicOps<QAtomicOps<T *> > }; QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_UNIX_H diff --git a/src/corelib/arch/qatomic_vxworks.h b/src/corelib/arch/qatomic_vxworks.h index a8664cf752..57e3b6a32b 100644 --- a/src/corelib/arch/qatomic_vxworks.h +++ b/src/corelib/arch/qatomic_vxworks.h @@ -42,8 +42,6 @@ #ifndef QATOMIC_VXWORKS_H #define QATOMIC_VXWORKS_H -QT_BEGIN_HEADER - #if defined(__ppc) # include <QtCore/qatomic_power.h> #else // generic implementation with taskLock() @@ -56,14 +54,28 @@ QT_BEGIN_HEADER # include <vxWorksCommon.h> # include <taskLib.h> #else +#if defined(_WRS_KERNEL) extern "C" int taskLock(); extern "C" int taskUnlock(); +#else +inline int taskLock() { return 0; } +inline int taskUnlock() { return 0; } +#endif #endif QT_BEGIN_NAMESPACE +#if 0 +// silence syncqt warnings +QT_END_NAMESPACE +QT_END_HEADER + +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif + #define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_NOT_NATIVE inline bool QBasicAtomicInt::isReferenceCountingNative() @@ -315,6 +327,4 @@ QT_END_NAMESPACE #endif // generic implementation with taskLock() -QT_END_HEADER - #endif // QATOMIC_VXWORKS_H diff --git a/src/corelib/arch/qatomic_x86.h b/src/corelib/arch/qatomic_x86.h index 077cfd1336..f8180ad9d6 100644 --- a/src/corelib/arch/qatomic_x86.h +++ b/src/corelib/arch/qatomic_x86.h @@ -45,15 +45,12 @@ #include <QtCore/qgenericatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -423,6 +420,4 @@ template <> struct QBasicAtomicOps<8>: QGenericAtomicOps<QBasicAtomicOps<8> > QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_X86_H diff --git a/src/corelib/codecs/qicucodec.cpp b/src/corelib/codecs/qicucodec.cpp index 000f6872b5..9afae8c0ee 100644 --- a/src/corelib/codecs/qicucodec.cpp +++ b/src/corelib/codecs/qicucodec.cpp @@ -457,7 +457,8 @@ QTextCodec *QIcuCodec::codecForNameUnlocked(const char *name) if (!qstrcmp(name, "windows-874-2000") || !qstrcmp(name, "windows-874") || !qstrcmp(name, "MS874") - || !qstrcmp(name, "x-windows-874")) + || !qstrcmp(name, "x-windows-874") + || !qstrcmp(name, "ISO 8859-11")) name = "TIS-620"; UErrorCode error = U_ZERO_ERROR; diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index 0e671518ef..1a5c9f6766 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -89,7 +89,7 @@ #include <stdlib.h> #include <ctype.h> #include <locale.h> -#if defined (_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF) && !defined(Q_OS_LINUX_ANDROID) +#if defined (_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF) && !defined(Q_OS_ANDROID) # include <langinfo.h> #endif @@ -1043,28 +1043,30 @@ QString QTextDecoder::toUnicode(const QByteArray &ba) QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec) { // determine charset - int pos; - QTextCodec *c = 0; - - c = QTextCodec::codecForUtfText(ba, c); + QTextCodec *c = QTextCodec::codecForUtfText(ba, 0); if (!c) { QByteArray header = ba.left(512).toLower(); - if ((pos = header.indexOf("http-equiv=")) != -1) { - if ((pos = header.lastIndexOf("meta ", pos)) != -1) { - pos = header.indexOf("charset=", pos) + int(strlen("charset=")); - if (pos != -1) { - int pos2 = header.indexOf('\"', pos+1); - QByteArray cs = header.mid(pos, pos2-pos); - // qDebug("found charset: %s", cs.data()); - c = QTextCodec::codecForName(cs); + int pos = header.indexOf("meta "); + if (pos != -1) { + pos = header.indexOf("charset=", pos); + if (pos != -1) { + pos += qstrlen("charset="); + + int pos2 = pos; + // The attribute can be closed with either """, "'", ">" or "/", + // none of which are valid charset characters. + while (++pos2 < header.size()) { + char ch = header.at(pos2); + if (ch == '\"' || ch == '\'' || ch == '>') { + c = QTextCodec::codecForName(header.mid(pos, pos2 - pos)); + return c ? c : defaultCodec; + } } } } } - if (!c) - c = defaultCodec; - return c; + return defaultCodec; } /*! diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h index ac0bc77ea5..35ff83a27a 100644 --- a/src/corelib/codecs/qtextcodec.h +++ b/src/corelib/codecs/qtextcodec.h @@ -45,8 +45,6 @@ #include <QtCore/qstring.h> #include <QtCore/qlist.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -166,6 +164,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QTEXTCODEC_H diff --git a/src/corelib/codecs/qtextcodec_p.h b/src/corelib/codecs/qtextcodec_p.h index 18629f4bf3..0fec1e80c7 100644 --- a/src/corelib/codecs/qtextcodec_p.h +++ b/src/corelib/codecs/qtextcodec_p.h @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE #ifndef QT_NO_TEXTCODEC -#if defined(Q_OS_MAC) || defined(Q_OS_IOS) || defined(Q_OS_LINUX_ANDROID) || defined(Q_OS_QNX) +#if defined(Q_OS_MAC) || defined(Q_OS_IOS) || defined(Q_OS_ANDROID) || defined(Q_OS_QNX) #define QT_LOCALE_IS_UTF8 #endif diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index 4462203a11..b1f1a60b6c 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -16,6 +16,12 @@ win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x QMAKE_DOCS = $$PWD/doc/qtcore.qdocconf +ANDROID_JAR_DEPENDENCIES = \ + jar/QtAndroid.jar +ANDROID_LIB_DEPENDENCIES = \ + plugins/platforms/android/libqtforandroid.so \ + libs/libgnustl_shared.so + load(qt_module) include(animation/animation.pri) @@ -63,10 +69,16 @@ ctest_macros_file.input = $$PWD/Qt5CTestMacros.cmake ctest_macros_file.output = $$DESTDIR/cmake/Qt5Core/Qt5CTestMacros.cmake ctest_macros_file.CONFIG = verbatim -QMAKE_SUBSTITUTES += ctest_macros_file +cmake_umbrella_config_file.input = $$PWD/Qt5Config.cmake.in +cmake_umbrella_config_file.output = $$DESTDIR/cmake/Qt5/Qt5Config.cmake + +cmake_qt5_umbrella_module_files.files = $$cmake_umbrella_config_file.output +cmake_qt5_umbrella_module_files.path = $$[QT_INSTALL_LIBS]/cmake/Qt5 + +QMAKE_SUBSTITUTES += ctest_macros_file cmake_umbrella_config_file ctest_qt5_module_files.files += $$ctest_macros_file.output ctest_qt5_module_files.path = $$[QT_INSTALL_LIBS]/cmake/Qt5Core -INSTALLS += ctest_qt5_module_files +INSTALLS += ctest_qt5_module_files cmake_qt5_umbrella_module_files diff --git a/src/corelib/doc/snippets/code/doc_src_properties.cpp b/src/corelib/doc/snippets/code/doc_src_properties.cpp index 9a25918d47..7a70200cce 100644 --- a/src/corelib/doc/snippets/code/doc_src_properties.cpp +++ b/src/corelib/doc/snippets/code/doc_src_properties.cpp @@ -40,8 +40,8 @@ //! [0] Q_PROPERTY(type name - READ getFunction - [WRITE setFunction] + (READ getFunction [WRITE setFunction] | + MEMBER memberName [(READ getFunction | WRITE setFunction)]) [RESET resetFunction] [NOTIFY notifySignal] [REVISION int] @@ -130,3 +130,20 @@ object->setProperty("priority", "VeryHigh"); //! [7] Q_CLASSINFO("Version", "3.0.0") //! [7] + +//! [8] + Q_PROPERTY(QColor color MEMBER m_color NOTIFY colorChanged) + Q_PROPERTY(qreal spacing MEMBER m_spacing NOTIFY spacingChanged) + Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged) + ... +signals: + void colorChanged(); + void spacingChanged(); + void textChanged(const QString &newText); + +private: + QColor m_color; + qreal m_spacing; + QString m_text; +//! [8] + diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp index 2f81b15752..c448c75206 100644 --- a/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp @@ -97,3 +97,37 @@ beginResetModel(); myData.clear(); endResetModel(); //! [11] + +//! [12] +class CustomDataProxy : public QSortFilterProxyModel +{ + Q_OBJECT +public: + CustomDataProxy(QObject *parent) + : QSortFilterProxyModel(parent) + { + } + + ... + + QVariant data(const QModelIndex &index, int role) + { + if (role != Qt::BackgroundRole) + return QSortFilterProxyModel::data(index, role); + + if (m_customData.contains(index.row())) + return m_customData.value(index.row()); + return QSortFilterProxyModel::data(index, role); + } + +private slots: + void resetInternalData() + { + m_customData.clear(); + } + +private: + QHash<int, QVariant> m_customData; +}; +//! [12] + diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp index cbb5a9db5d..c349a6dbba 100644 --- a/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp @@ -57,7 +57,14 @@ foreach (const QString &path, app.libraryPaths()) //! [3] +// Called once QCoreApplication exists +static void preRoutineMyDebugTool() +{ + MyDebugTool* tool = new MyDebugTool(QCoreApplication::instance()); + QCoreApplication::instance()->installEventFilter(tool); +} +Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool) //! [3] diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qmath.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qmath.cpp new file mode 100644 index 0000000000..71a2a09a7d --- /dev/null +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qmath.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Laszlo Papp <lpapp@kde.org> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +float degrees = 180.0f +float radians = qDegreesToRadians(degrees) +//! [0] + + +//! [1] +double degrees = 180.0 +double radians = qDegreesToRadians(degrees) +//! [1] + + +//! [2] +float radians = float(M_PI) +float degrees = qRadiansToDegrees(radians) +//! [2] + + +//! [3] +double radians = M_PI +double degrees = qRadiansToDegrees(radians) +//! [3] + diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qpoint.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qpoint.cpp index a83fd9a71f..8c6751cbaa 100644 --- a/src/corelib/doc/snippets/code/src_corelib_tools_qpoint.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_tools_qpoint.cpp @@ -79,6 +79,13 @@ p *= 2.5; // p becomes (-3, 10) //! [5] +//! [16] +QPoint p( 3, 7); +QPoint q(-1, 4); +int lengthSquared = QPoint::dotProduct(p, q); // lengthSquared becomes 25 +//! [16] + + //! [6] QPoint p(-3, 10); p /= 2.5; // p becomes (-1, 4) @@ -147,3 +154,10 @@ p *= 2.5; // p becomes (-2.75, 10.25) QPointF p(-2.75, 10.25); p /= 2.5; // p becomes (-1.1, 4.1) //! [15] + + +//! [17] +QPointF p( 3.1, 7.1); +QPointF q(-1.0, 4.1); +int lengthSquared = QPointF::dotProduct(p, q); // lengthSquared becomes 26.01 +//! [17] diff --git a/src/corelib/doc/snippets/qmessageauthenticationcode/main.cpp b/src/corelib/doc/snippets/qmessageauthenticationcode/main.cpp new file mode 100644 index 0000000000..4441fbd9a1 --- /dev/null +++ b/src/corelib/doc/snippets/qmessageauthenticationcode/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Ruslan Nigmatullin <euroelessar@yandex.ru> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtCore> + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + +//! [0] + QByteArray key = "key"; + QByteArray message = "The quick brown fox jumps over the lazy dog"; +//! [0] + +//! [1] + QMessageAuthenticationCode code(QCryptographicHash::Sha1); + code.setKey(key); + code.addData(message); + code.result().toHex(); // returns "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9" +//! [1] + +//! [2] + QMessageAuthenticationCode::hash(message, key, QCryptographicHash::Sha1).toHex(); +//! [2] +} diff --git a/src/corelib/doc/src/objectmodel/properties.qdoc b/src/corelib/doc/src/objectmodel/properties.qdoc index 66325ca6c0..37f54621a1 100644 --- a/src/corelib/doc/src/objectmodel/properties.qdoc +++ b/src/corelib/doc/src/objectmodel/properties.qdoc @@ -53,16 +53,22 @@ \snippet code/doc_src_properties.cpp 1 + Here is an example showing how to export member variables as Qt + properties using the \c MEMBER keyword. + Note that a \c NOTIFY signal must be specified to allow QML property bindings. + + \snippet code/doc_src_properties.cpp 8 + A property behaves like a class data member, but it has additional features accessible through the \l {Meta-Object System}. \list - \li A \c READ accessor function is required. It is for reading the - property value. Ideally, a const function is used for this purpose, - and it must return either the property's type or a pointer or - reference to that type. e.g., QWidget::focus is a read-only property - with \c READ function, QWidget::hasFocus(). + \li A \c READ accessor function is required if no \c MEMBER variable was + specified. It is for reading the property value. Ideally, a const function + is used for this purpose, and it must return either the property's type or a + pointer or reference to that type. e.g., QWidget::focus is a read-only + property with \c READ function, QWidget::hasFocus(). \li A \c WRITE accessor function is optional. It is for setting the property value. It must return void and must take exactly one @@ -71,6 +77,13 @@ QWidget::setEnabled(). Read-only properties do not need \c WRITE functions. e.g., QWidget::focus has no \c WRITE function. + \li A \c MEMBER variable association is required if no \c READ accessor + function is specified. This makes the given member variable + readable and writable without the need of creating \c READ and \c WRITE accessor + functions. It's still possible to use \c READ or \c WRITE accessor functions in + addition to \c MEMBER variable association (but not both), if you need to + control the variable access. + \li A \c RESET function is optional. It is for setting the property back to its context specific default value. e.g., QWidget::cursor has the typical \c READ and \c WRITE functions, QWidget::cursor() @@ -82,6 +95,9 @@ \li A \c NOTIFY signal is optional. If defined, it should specify one existing signal in that class that is emitted whenever the value of the property changes. + \c NOTIFY signals for \c MEMBER variables must take zero or one parameter, + which must be of the same type as the property. The parameter will take the + new value of the property. \li A \c REVISION number is optional. If included, it defines the property and its notifier signal to be used in a particular diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index 01756c8419..6ac32cd35d 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -9,6 +9,7 @@ HEADERS += \ global/qendian.h \ global/qnumeric_p.h \ global/qnumeric.h \ + global/qglobalstatic.h \ global/qlibraryinfo.h \ global/qlogging.h \ global/qtypeinfo.h \ @@ -19,6 +20,7 @@ HEADERS += \ SOURCES += \ global/qglobal.cpp \ + global/qglobalstatic.cpp \ global/qlibraryinfo.cpp \ global/qmalloc.cpp \ global/qnumeric.cpp \ diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index 15229e03a0..e547d58c2e 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -157,6 +157,10 @@ # define Q_CC_CLANG # define Q_ASSUME_IMPL(expr) if (expr){} else __builtin_unreachable() # define Q_UNREACHABLE_IMPL() __builtin_unreachable() +# if !defined(__has_extension) +# /* Compatibility with older Clang versions */ +# define __has_extension __has_feature +# endif # else /* Plain GCC */ # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 @@ -179,6 +183,7 @@ # define Q_TYPEOF(expr) __typeof__(expr) # define Q_DECL_DEPRECATED __attribute__ ((__deprecated__)) # define Q_DECL_ALIGN(n) __attribute__((__aligned__(n))) +# define Q_DECL_UNUSED __attribute__((__unused__)) # define Q_LIKELY(expr) __builtin_expect(!!(expr), true) # define Q_UNLIKELY(expr) __builtin_expect(!!(expr), false) # define Q_NORETURN __attribute__((__noreturn__)) @@ -816,6 +821,9 @@ #ifndef Q_DECL_HIDDEN # define Q_DECL_HIDDEN #endif +#ifndef Q_DECL_UNUSED +# define Q_DECL_UNUSED +#endif #ifndef Q_FUNC_INFO # if defined(Q_OS_SOLARIS) || defined(Q_CC_XLC) # define Q_FUNC_INFO __FILE__ "(line number unavailable)" diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index cdffb10d5a..c9c4d23aab 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -52,8 +52,6 @@ #include <byteswap.h> #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -386,6 +384,4 @@ template <> inline qint8 qbswap<qint8>(qint8 source) QT_END_NAMESPACE -QT_END_HEADER - #endif // QENDIAN_H diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h index 7ae4863da3..a751f9af56 100644 --- a/src/corelib/global/qfeatures.h +++ b/src/corelib/global/qfeatures.h @@ -154,6 +154,9 @@ // Properties //#define QT_NO_PROPERTIES +// QRegularExpression +//#define QT_NO_REGULAREXPRESSION + // Resize Handler //#define QT_NO_RESIZEHANDLER diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt index a97309b876..c27463897f 100644 --- a/src/corelib/global/qfeatures.txt +++ b/src/corelib/global/qfeatures.txt @@ -28,6 +28,13 @@ Requires: Name: CssParser SeeAlso: ??? +Feature: REGULAREXPRESSION +Description: Perl-compatible regular expression APIs +Section: Kernel +Requires: +Name: QRegularExpression +SeeAlso: ??? + Feature: CONCURRENT Description: Provides a high-level multi-threaded APIs Section: Kernel diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h index 4b75383213..4722fe2282 100644 --- a/src/corelib/global/qflags.h +++ b/src/corelib/global/qflags.h @@ -47,8 +47,6 @@ #include <QtCore/qtypeinfo.h> #include <QtCore/qtypetraits.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QFlag @@ -152,6 +150,4 @@ typedef uint Flags; QT_END_NAMESPACE -QT_END_HEADER - #endif // QFLAGS_H diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index f0fb9c1a02..c591cc5b49 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -68,7 +68,7 @@ # endif #endif -#if defined(Q_OS_VXWORKS) +#if defined(Q_OS_VXWORKS) && defined(_WRS_KERNEL) # include <envLib.h> #endif @@ -2193,6 +2193,10 @@ bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT \a varName. It will create the variable if it does not exist. It returns 0 if the variable could not be set. + Calling qputenv with an empty value removes the environment variable on + Windows, and makes it set (but empty) on Unix. Prefer using qunsetenv() + for fully portable behavior. + \note qputenv() was introduced because putenv() from the standard C library was deprecated in VC2005 (and later versions). qputenv() uses the replacement function in VC, and calls the standard C @@ -2219,6 +2223,39 @@ bool qputenv(const char *varName, const QByteArray& value) #endif } +/*! + \relates <QtGlobal> + + This function deletes the variable \a varName from the environment. + + Returns true on success. + + \since 5.1 + + \sa qputenv(), qgetenv() +*/ +bool qunsetenv(const char *varName) +{ +#if defined(_MSC_VER) && _MSC_VER >= 1400 + return _putenv_s(varName, "") == 0; +#elif (defined(_POSIX_VERSION) && (_POSIX_VERSION-0) >= 200112L) || defined(Q_OS_BSD4) + // POSIX.1-2001 and BSD have unsetenv + return unsetenv(varName) == 0; +#elif defined(Q_CC_MINGW) + // On mingw, putenv("var=") removes "var" from the environment + QByteArray buffer(varName); + buffer += '='; + return putenv(buffer.constData()) == 0; +#else + // Fallback to putenv("var=") which will insert an empty var into the + // environment and leak it + QByteArray buffer(varName); + buffer += '='; + char *envVar = qstrdup(buffer.constData()); + return putenv(envVar) == 0; +#endif +} + #if defined(Q_OS_UNIX) && !defined(QT_NO_THREAD) # if defined(Q_OS_INTEGRITY) && defined(__GHS_VERSION_NUMBER) && (__GHS_VERSION_NUMBER < 500) @@ -2814,8 +2851,7 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters) As a rule of thumb, \c QT_BEGIN_NAMESPACE should appear in all Qt header and Qt source files after the last \c{#include} line and before the first - declaration. In Qt headers using \c QT_BEGIN_HEADER, \c QT_BEGIN_NAMESPACE - follows \c QT_BEGIN_HEADER immediately. + declaration. If that rule can't be followed because, e.g., \c{#include} lines and declarations are wildly mixed, place \c QT_BEGIN_NAMESPACE before diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 13bdc7553f..233743f3ce 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -45,11 +45,11 @@ #include <stddef.h> -#define QT_VERSION_STR "5.0.2" +#define QT_VERSION_STR "5.1.0" /* QT_VERSION is (major << 16) + (minor << 8) + patch. */ -#define QT_VERSION 0x050002 +#define QT_VERSION 0x050100 /* can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0)) */ @@ -151,6 +151,7 @@ namespace QT_NAMESPACE {} #endif /* __cplusplus */ +// ### Qt6: remove me. #define QT_BEGIN_HEADER #define QT_END_HEADER @@ -158,7 +159,6 @@ namespace QT_NAMESPACE {} # define QT_LARGEFILE_SUPPORT 64 #endif -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE /* @@ -512,6 +512,16 @@ template <typename T> Q_DECL_CONSTEXPR inline const T &qBound(const T &min, const T &val, const T &max) { return qMax(min, qMin(max, val)); } +#ifdef Q_OS_DARWIN +# define QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE(osx, ios) \ + (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= osx) || \ + (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= ios) + +# define QT_MAC_DEPLOYMENT_TARGET_BELOW(osx, ios) \ + (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && osx != __MAC_NA && __MAC_OS_X_VERSION_MIN_REQUIRED < osx) || \ + (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && ios != __IPHONE_NA && __IPHONE_OS_VERSION_MIN_REQUIRED < ios) +#endif + /* Data stream functions are provided by many classes (defined in qdatastream.h) */ @@ -664,125 +674,6 @@ typedef void (*QFunctionPointer)(); # define Q_UNIMPLEMENTED() qWarning("%s:%d: %s: Unimplemented code.", __FILE__, __LINE__, Q_FUNC_INFO) #endif -#if defined(QT_NO_THREAD) - -template <typename T> -class QGlobalStatic -{ -public: - T *pointer; - inline QGlobalStatic(T *p) : pointer(p) { } - inline ~QGlobalStatic() { pointer = 0; } -}; - -#define Q_GLOBAL_STATIC(TYPE, NAME) \ - static TYPE *NAME() \ - { \ - static TYPE thisVariable; \ - static QGlobalStatic<TYPE > thisGlobalStatic(&thisVariable); \ - return thisGlobalStatic.pointer; \ - } - -#define Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS) \ - static TYPE *NAME() \ - { \ - static TYPE thisVariable ARGS; \ - static QGlobalStatic<TYPE > thisGlobalStatic(&thisVariable); \ - return thisGlobalStatic.pointer; \ - } - -#define Q_GLOBAL_STATIC_WITH_INITIALIZER(TYPE, NAME, INITIALIZER) \ - static TYPE *NAME() \ - { \ - static TYPE thisVariable; \ - static QGlobalStatic<TYPE > thisGlobalStatic(0); \ - if (!thisGlobalStatic.pointer) { \ - TYPE *x = thisGlobalStatic.pointer = &thisVariable; \ - INITIALIZER; \ - } \ - return thisGlobalStatic.pointer; \ - } - -#else - -// forward declaration, since qatomic.h needs qglobal.h -template <typename T> class QBasicAtomicPointer; - -// POD for Q_GLOBAL_STATIC -template <typename T> -class QGlobalStatic -{ -public: - QBasicAtomicPointer<T> pointer; - bool destroyed; -}; - -// Created as a function-local static to delete a QGlobalStatic<T> -template <typename T> -class QGlobalStaticDeleter -{ -public: - QGlobalStatic<T> &globalStatic; - QGlobalStaticDeleter(QGlobalStatic<T> &_globalStatic) - : globalStatic(_globalStatic) - { } - - inline ~QGlobalStaticDeleter() - { - delete globalStatic.pointer.load(); - globalStatic.pointer.store(0); - globalStatic.destroyed = true; - } -}; - -#define Q_GLOBAL_STATIC(TYPE, NAME) \ - static TYPE *NAME() \ - { \ - static QGlobalStatic<TYPE > thisGlobalStatic \ - = { Q_BASIC_ATOMIC_INITIALIZER(0), false }; \ - if (!thisGlobalStatic.pointer.load() && !thisGlobalStatic.destroyed) { \ - TYPE *x = new TYPE; \ - if (!thisGlobalStatic.pointer.testAndSetOrdered(0, x)) \ - delete x; \ - else \ - static QGlobalStaticDeleter<TYPE > cleanup(thisGlobalStatic); \ - } \ - return thisGlobalStatic.pointer.load(); \ - } - -#define Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS) \ - static TYPE *NAME() \ - { \ - static QGlobalStatic<TYPE > thisGlobalStatic \ - = { Q_BASIC_ATOMIC_INITIALIZER(0), false }; \ - if (!thisGlobalStatic.pointer.load() && !thisGlobalStatic.destroyed) { \ - TYPE *x = new TYPE ARGS; \ - if (!thisGlobalStatic.pointer.testAndSetOrdered(0, x)) \ - delete x; \ - else \ - static QGlobalStaticDeleter<TYPE > cleanup(thisGlobalStatic); \ - } \ - return thisGlobalStatic.pointer.load(); \ - } - -#define Q_GLOBAL_STATIC_WITH_INITIALIZER(TYPE, NAME, INITIALIZER) \ - static TYPE *NAME() \ - { \ - static QGlobalStatic<TYPE > thisGlobalStatic \ - = { Q_BASIC_ATOMIC_INITIALIZER(0), false }; \ - if (!thisGlobalStatic.pointer.load() && !thisGlobalStatic.destroyed) { \ - QScopedPointer<TYPE > x(new TYPE); \ - INITIALIZER; \ - if (thisGlobalStatic.pointer.testAndSetOrdered(0, x.data())) { \ - static QGlobalStaticDeleter<TYPE > cleanup(thisGlobalStatic); \ - x.take(); \ - } \ - } \ - return thisGlobalStatic.pointer.load(); \ - } - -#endif - Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1, double p2) { return (qAbs(p1 - p2) <= 0.000000000001 * qMin(qAbs(p1), qAbs(p2))); @@ -1053,6 +944,7 @@ Q_CORE_EXPORT QString qtTrId(const char *id, int n = -1); class QByteArray; Q_CORE_EXPORT QByteArray qgetenv(const char *varName); Q_CORE_EXPORT bool qputenv(const char *varName, const QByteArray& value); +Q_CORE_EXPORT bool qunsetenv(const char *varName); Q_CORE_EXPORT bool qEnvironmentVariableIsEmpty(const char *varName) Q_DECL_NOEXCEPT; Q_CORE_EXPORT bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT; @@ -1087,7 +979,8 @@ template <typename T> struct QEnableIf<true, T> { typedef T Type; }; } QT_END_NAMESPACE -QT_END_HEADER +// Q_GLOBAL_STATIC +#include <QtCore/qglobalstatic.h> // qDebug and friends #include <QtCore/qlogging.h> diff --git a/src/corelib/global/qglobalstatic.cpp b/src/corelib/global/qglobalstatic.cpp new file mode 100644 index 0000000000..8474d132b4 --- /dev/null +++ b/src/corelib/global/qglobalstatic.cpp @@ -0,0 +1,524 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Intel Corporation. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qglobalstatic.h" + +/*! + \macro Q_GLOBAL_STATIC(Type, VariableName) + \since 5.1 + \relates QGlobalStatic + + Creates a global and static object of type \l QGlobalStatic, of name \a + VariableName and that behaves as a pointer to \a Type. The object created + by Q_GLOBAL_STATIC initializes itself on the first use, which means that it + will not increase the application or the library's load time. Additionally, + the object is initialized in a thread-safe manner on all platforms. + + The typical use of this macro is as follows, in a global context (that is, + outside of any function bodies): + + \code + Q_GLOBAL_STATIC(MyType, staticType) + \endcode + + This macro is intended to replace global static objects that are not POD + (Plain Old Data, or in C++11 terms, not made of a trivial type), hence the + name. For example, the following C++ code creates a global static: + + \code + static MyType staticType; + \endcode + + Compared to Q_GLOBAL_STATIC, and assuming that \c MyType is a class or + struct that has a constructor, a destructor, or is otherwise non-POD, the + above has the following drawbacks: + + \list + \li it requires load-time initialization of \c MyType (that is, the + default constructor for \c MyType is called when the library or + application is loaded); + + \li the type will be initialized even if it is never used; + + \li the order of initialization and destruction among different + translation units is not determined, leading to possible uses before + initialization or after destruction; + + \li if it is found inside a function (that is, not global), it will be + initialized on first use, but many current compilers (as of 2013) do + not guarantee that the initialization will be thread-safe; + \endlist + + The Q_GLOBAL_STATIC macro solves all of the above problems by guaranteeing + thread-safe initialization on first use and allowing the user to query for + whether the type has already been destroyed, to avoid the + use-after-destruction problem (see QGlobalStatic::isDestroyed()). + + \section1 Constructor and destructor + + For Q_GLOBAL_STATIC, the type \c Type must be publicly + default-constructible and publicly destructible. For + Q_GLOBAL_STATIC_WITH_ARGS(), there must be a public constructor that + matches the arguments passed. + + It is not possible to use Q_GLOBAL_STATIC with types that have protected or + private default constructors or destructors (for Q_GLOBAL_STATIC_WITH_ARGS(), + a protected or private constructor matching the arguments). If the type in + question has those members as protected, it is possible to overcome the + issue by deriving from the type and creating public a constructor and + destructor. If the type has them as private, a friend declaration is + necessary before deriving. + + For example, the following is enough to create \c MyType based on a + previously-defined \c MyOtherType which has a protected default constructor + and/or a protected destructor (or has them as private, but that defines \c + MyType as a friend). + + \code + class MyType : public MyOtherType { }; + Q_GLOBAL_STATIC(MyType, staticType) + \endcode + + No body for \c MyType is required since the destructor is an implicit + member and so is the default constructor if no other constructors are + defined. For use with Q_GLOBAL_STATIC_WITH_ARGS(), however, a suitable + constructor body is necessary: + + \code + class MyType : public MyOtherType + { + public: + MyType(int i) : MyOtherType(i) {} + }; + Q_GLOBAL_STATIC_WITH_ARGS(MyType, staticType, (42)) + \endcode + + Alternatively, if the compiler supports C++11 inheriting constructors, one could write: + + \code + class MyType : public MyOtherType + { + public: + using MyOtherType::MyOtherType; + }; + Q_GLOBAL_STATIC_WITH_ARGS(MyType, staticType, (42)) + \endcode + + \section1 Placement + + The Q_GLOBAL_STATIC macro creates a type that is necessarily static, at the + global scope. It is not possible to place the Q_GLOBAL_STATIC macro inside + a function (doing so will result in compilation errors). + + More importantly, this macro should be placed in source files, never in + headers. Since the resulting object is has static linkage, if the macro is + placed in a header and included by multiple source files, the object will + be defined multiple times and will not cause linking errors. Instead, each + translation unit will refer to a different object, which could lead to + subtle and hard-to-track errors. + + \section1 Non-recommended uses + + Note that the macro is not recommended for use with types that are POD or + that have C++11 constexpr constructors (trivially constructible and + destructible). For those types, it is still recommended to use regular + static, whether global or function-local. + + This macro will work, but it will add unnecessary overhead. + + \section1 Reentrancy, thread-safety, deadlocks, and exception-safety on construction + + The Q_GLOBAL_STATIC macro creates an object that initializes itself on + first use in a thread-safe manner: if multiple threads attempt to + initialize the object at the same time, only one thread will proceed to + initialize, while all other threads wait for completion. + + If the initialization process throws an exception, the initialization is + deemed not complete and will be attempted again when control reaches any + use of the object. If there are any threads waiting for initialization, one + of them will be woken up to attempt to initialize. + + The macro makes no guarantee about reentrancy from the same thread. If the + global static object is accessed directly or indirectly from inside the + constructor, a deadlock will surely happen. + + In addition, if two Q_GLOBAL_STATIC objects are being initialized on two + different threads and each one's initialization sequence accesses the + other, a deadlock might happen. For that reason, it is recommended to keep + global static constructors simple or, failing that, to ensure that there's + no cross-dependency of uses of global static during construction. + + \section1 Destruction + + If the object is never used during the lifetime of the program, aside from + the QGlobalStatic::exists() and QGlobalStatic::isDestroyed() functions, the + contents of type \a Type will not be created and there will not be any + exit-time operation. + + If the object is created, it will be destroyed at exit-time, similar to the + C \c atexit function. On most systems, in fact, the destructor will also be + called if the library or plugin is unloaded from memory before exit. + + Since the destruction is meant to happen at program exit, no thread-safety + is provided. This includes the case of plugin or library unload. In + addition, since destructors are not supposed to throw exceptions, no + exception safety is provided either. + + However, reentrancy is permitted: during destruction, it is possible to + access the global static object and the pointer returned will be the same + as it was before destruction began. After the destruction has completed, + accessing the global static object is not permitted, except as noted in the + \l QGlobalStatic API. + + \omit + \section1 Compatibility with Qt 4 and Qt 5.0 + + This macro, in its current form and behavior, was introduced in Qt 5.1. + Prior to that version, Qt had another macro with the same name that was + private API. This section is not meant to document how to use + Q_GLOBAL_STATIC in those versions, but instead to serve as a porting guide + for Qt code that used those macros. + + The Qt 4 Q_GLOBAL_STATIC macro differed in behavior in the following ways: + + \list + \li the object created was not of type \l QGlobalStatic, but instead + it was a function that returned a pointer to \a Type; that means the + \l QGlobalStatic API was not present; + + \li the initialization was thread-safe, but not guaranteed to be + unique: instead, if N threads tried to initialize the object at the + same time, N objects would be created on the heap and N-1 would be + destroyed; + + \li the object was always created on the heap. + \endlist + + \section1 Implementation details + + Q_GLOBAL_STATIC is implemented by creating a QBasicAtomicInt called the \c + guard and a free, inline function called \c innerFunction. The guard + variable is initialized to value 0 (chosen so that the guard can be placed + in the .bss section of the binary file), which denotes that construction + has not yet taken place (uninitialized). The inner function is implemented + by the helper macro Q_GLOBAL_STATIC_INTERNAL. + + Both the guard variable and the inner function are passed as template + parameters to QGlobalStatic, along with the type \a Type. Both should also + have static linkage or be placed inside an anonymous namespace, so that the + visibility of Q_GLOBAL_STATIC is that of a global static. To permit + multiple Q_GLOBAL_STATIC per translation unit, the guard variable and the + inner function must have unique names, which can be accomplished by + concatenating with \a VariableName or by placing them in a namespace that + has \a VariableName as part of the name. To simplify and improve + readability on Q_GLOBAL_STATIC_INTERNAL, we chose the namespace solution. + It's also required for C++98 builds, since static symbols cannot be used as + template parameters. + + The guard variable can assume the following values: + + \list + \li -2: object was once initialized but has been destroyed already; + \li -1: object was initialized and is still valid; + \li 0: object was not initialized yet; + \li +1: object is being initialized and any threads encountering this + value must wait for completion (not used in the current implementation). + \endlist + + Collectively, all positive values indicate that the initialization is + progressing and must be waited on, whereas all negative values indicate + that the initialization has terminated and must not be attempted again. + Positive values are not used in the current implementation, but were in + earlier versions. They could be used again in the future. + + The QGlobalStatic::exists() and QGlobalStatic::isDestroyed() functions + operate solely on the guard variable: the former returns true if the guard + is negative, whereas the latter returns true only if it is -2. + + The Q_GLOBAL_STATIC_INTERNAL macro implements the actual construction and + destruction. There are two implementations of it: one for compilers that + support thread-safe initialization of function-local statics and one for + compilers that don't. Thread-safe initialization is required by C++11 in + [stmt.decl], but as of the time of this writing, only compilers based on + the IA-64 C++ ABI implemented it properly. The implementation requiring + thread-safe initialization is also used on the Qt bootstrapped tools, which + define QT_NO_THREAD. + + The implementation requiring thread-safe initialization from the compiler + is the simplest: it creates the \a Type object as a function-local static + and returns its address. The actual object is actually inside a holder + structure so holder's destructor can set the guard variable to the value -2 + (destroyed) when the type has finished destruction. Since we need to set + the guard \b after the destruction has finished, this code needs to be in a + base struct's destructor. And it only sets to -2 (destroyed) if it finds + the guard at -1 (initialized): this is done to ensure that the guard isn't + set to -2 in the event the type's constructor threw an exception. A holder + structure is used to avoid creating two statics, which the ABI might + require duplicating the thread-safe control structures for. + + The other implementation is similar to Qt 4's Q_GLOBAL_STATIC, but unlike + that one, it uses a \l QBasicMutex to provide locking. It is also more + efficient memory-wise. It use a simple double-checked locking of the mutex + and then creates the contents on the heap. After that, it creates a + function-local structure called "Cleanup", whose destructor will be run at + program exit and will actually destroy the contents. + + \endomit + + \sa Q_GLOBAL_STATIC_WITH_ARGS(), QGlobalStatic +*/ + +/*! + \macro Q_GLOBAL_STATIC_WITH_ARGS(Type, VariableName, Arguments) + \since 5.1 + \relates QGlobalStatic + + Creates a global and static object of type \l QGlobalStatic, of name \a + VariableName, initialized by the arguments \a Arguments and that behaves as + a pointer to \a Type. The object created by Q_GLOBAL_STATIC_WITH_ARGS + initializes itself on the first use, which means that it will not increase + the application or the library's load time. Additionally, the object is + initialized in a thread-safe manner on all platforms. + + The typical use of this macro is as follows, in a global context (that is, + outside of any function bodies): + + \code + Q_GLOBAL_STATIC_WITH_ARGS(MyType, staticType, (42, "Hello", "World")) + \endcode + + The \a Arguments macro parameter must always include the parentheses or, if + C++11 uniform initialization is allowed, the braces. + + Aside from the actual initialization of the contents with the supplied + arguments, this macro behaves identically to Q_GLOBAL_STATIC(). Please + see that macro's documentation for more information. + + \sa Q_GLOBAL_STATIC(), QGlobalStatic +*/ + +/*! + \class QGlobalStatic + \threadsafe + \inmodule QtCore + \since 5.1 + \brief The QGlobalStatic class is used to implement a global static object + + The QGlobalStatic class is the front-end API exported when + Q_GLOBAL_STATIC() is used. See the documentation for the macro for a + discussion on when to use it and its requirements. + + Normally, you will never use this class directly, but instead you will use + the Q_GLOBAL_STATIC() or Q_GLOBAL_STATIC_WITH_ARGS() macros, as + follows: + + \code + Q_GLOBAL_STATIC(MyType, staticType) + \endcode + + The above example creates an object of type QGlobalStatic called \c + staticType. After the above declaration, the \c staticType object may be + used as if it were a pointer, guaranteed to be initialized exactly once. In + addition to the use as a pointer, the object offers two methods to + determine the current status of the global: exists() and isDestroyed(). + + \sa Q_GLOBAL_STATIC(), Q_GLOBAL_STATIC_WITH_ARGS() +*/ + +/*! + \typedef QGlobalStatic::Type + + This type is equivalent to the \c Type parameter passed to the + Q_GLOBAL_STATIC() or Q_GLOBAL_STATIC_WITH_ARGS() macros. It is used in the + return types of some functions. +*/ + +/*! + \fn bool QGlobalStatic::isDestroyed() const + + This function returns true if the global static object has already + completed destruction (that is, if the destructor for the type has already + returned). In specific, note that this function returns false if + the destruction is still in progress. + + Once this function has returned true once, it will never return + false again until either the program is restarted or the plugin or library + containing the global static is unloaded and reloaded. + + This function is safe to call at any point in the program execution: it + cannot fail and cannot cause a deadlock. Additionally, it will not cause + the contents to be created if they have not yet been created. + + This function is useful in code that may be executed at program shutdown, + to determine whether the contents may still be accessed or not. + + \omit + Due to the non-atomic nature of destruction, it's possible that + QGlobalStatic::isDestroyed might return false for a short time after the + destructor has finished. However, since the destructor is only run in an + environment where concurrent multithreaded access is impossible, no one can + see that state. (omitted because it's useless information) + \endomit + + \sa exists() +*/ + +/*! + \fn bool QGlobalStatic::exists() const + + This function returns true if the global static object has already + completed initialization (that is, if the constructor for the type has + already returned). In specific, note that this function returns false if + the initialization is still in progress. + + Once this function has returned true once, it will never return false again + until either the program is restarted or the plugin or library containing + the global static is unloaded and reloaded. + + This function is safe to call at any point in the program execution: it + cannot fail and cannot cause a deadlock. Additionally, it will not cause + the contents to be created if they have not yet been created. + + This function is useful if one can determine the initial conditions of the + global static object and would prefer to avoid a possibly expensive + construction operation. + + For example, in the following code sample, this function is used to + short-circuit the creation of the global static called \c globalState and + returns a default value: + + \code + Q_GLOBAL_STATIC(MyType, globalState) + QString someState() + { + if (globalState.exists()) + return globalState->someState; + return QString(); + } + \endcode + + \b{Thread-safety notice:} this function is thread-safe in the sense that it + may be called from any thread at any time and will always return a valid + reply. But due to the non-atomic nature of construction, this function may + return false for a short time after the construction has completed. + + \b{Memory ordering notice:} this function does not impose any memory + ordering guarantees. That is instead provided by the accessor functions + that return the pointer or reference to the contents. If you bypass the + accessor functions and attempt to access some global state set by the + constructor, be sure to use the correct memory ordering semantics provided + by \l QAtomicInt or \l QAtomicPointer. + + \sa isDestroyed() +*/ + +/*! + \fn QGlobalStatic::operator Type*() + + This function returns the address of the contents of this global static. If + the contents have not yet been created, they will be created thread-safely + by this function. If the contents have already been destroyed, this + function will return a null pointer. + + This function can be used, for example, to store the pointer to the + contents of the global static in a local variable, thus avoiding multiple + calls to the function. The implementation of Q_GLOBAL_STATIC() is quite + efficient already, but in performance-critical sections it might be useful + to help the compiler a little. For example: + + \code + Q_GLOBAL_STATIC(MyType, globalState) + QString someState() + { + MyType *state = globalState; + if (!state) { + // we're in a post-destruction state + return QString(); + } + if (state->condition) + return state->value1; + else + return state->value2; + } + \endcode + + \sa operator->(), operator*() +*/ + +/*! + \fn Type *QGlobalStatic::operator()() + \deprecated + + This function returns the address of the contents of this global static. If + the contents have not yet been created, they will be created thread-safely + by this function. If the contents have already been destroyed, this + function will return a null pointer. + + This function is equivalent to \l {operator Type *()}. It is provided for + compatibility with the private Q_GLOBAL_STATIC implementation that existed + in Qt 4.x and 5.0. New code should avoid using it and should instead treat + the object as a smart pointer. +*/ + +/*! + \fn Type *QGlobalStatic::operator->() + + This function returns the address of the contents of this global static. If + the contents have not yet been created, they will be created thread-safely + by this function. + + This function does not check if the contents have already been destroyed and + will never return null. If this function is called after the object has + been destroyed, it will return a dangling pointer that should not be + dereferenced. +*/ + +/*! + \fn Type &QGlobalStatic::operator*() + + This function returns a reference to the contents of this global static. If + the contents have not yet been created, they will be created thread-safely + by this function. + + This function does not check if the contents have already been destroyed. + If this function is called after the object has been destroyed, it will + return an invalid reference that must not be used. +*/ diff --git a/src/corelib/global/qglobalstatic.h b/src/corelib/global/qglobalstatic.h new file mode 100644 index 0000000000..a6268e057e --- /dev/null +++ b/src/corelib/global/qglobalstatic.h @@ -0,0 +1,142 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Intel Corporation +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtCore/qglobal.h> + +#ifndef QGLOBALSTATIC_H +#define QGLOBALSTATIC_H + +#include <QtCore/qatomic.h> + +QT_BEGIN_NAMESPACE + +namespace QtGlobalStatic { +enum GuardValues { + Destroyed = -2, + Initialized = -1, + Uninitialized = 0, + Initializing = 1 +}; +} + +#if defined(QT_NO_THREAD) || defined(Q_CC_GNU) +// some compilers support thread-safe statics +// The IA-64 C++ ABI requires this, so we know that all GCC versions since 3.4 +// support it. C++11 also requires this behavior. +// Clang and Intel CC masquerade as GCC when compiling on Linux and Mac OS X. + +#define Q_GLOBAL_STATIC_INTERNAL(ARGS) \ + Q_DECL_HIDDEN inline Type *innerFunction() \ + { \ + struct HolderBase { \ + ~HolderBase() Q_DECL_NOTHROW \ + { if (guard.load() == QtGlobalStatic::Initialized) \ + guard.store(QtGlobalStatic::Destroyed); } \ + }; \ + static struct Holder : public HolderBase { \ + Type value; \ + Holder() \ + Q_DECL_NOEXCEPT_EXPR(noexcept(Type ARGS)) \ + : value ARGS \ + { guard.store(QtGlobalStatic::Initialized); } \ + } holder; \ + return &holder.value; \ + } +#else +// We don't know if this compiler supports thread-safe global statics +// so use our own locked implementation + +QT_END_NAMESPACE +#include <QtCore/qmutex.h> +QT_BEGIN_NAMESPACE + +#define Q_GLOBAL_STATIC_INTERNAL(ARGS) \ + Q_DECL_HIDDEN inline Type *innerFunction() \ + { \ + static Type *d; \ + static QBasicMutex mutex; \ + int x = guard.loadAcquire(); \ + if (Q_UNLIKELY(x >= QtGlobalStatic::Uninitialized)) { \ + QMutexLocker locker(&mutex); \ + if (guard.load() == QtGlobalStatic::Uninitialized) { \ + d = new Type ARGS; \ + static struct Cleanup { \ + ~Cleanup() { \ + delete d; \ + guard.store(QtGlobalStatic::Destroyed); \ + } \ + } cleanup; \ + guard.store(QtGlobalStatic::Initialized); \ + } \ + } \ + return d; \ + } +#endif + +// this class must be POD, unless the compiler supports thread-safe statics +template <typename T, T *(&innerFunction)(), QBasicAtomicInt &guard> +struct QGlobalStatic +{ + typedef T Type; + + bool isDestroyed() const { return guard.load() <= QtGlobalStatic::Destroyed; } + bool exists() const { return guard.load() == QtGlobalStatic::Initialized; } + operator Type *() { if (isDestroyed()) return 0; return innerFunction(); } + Type *operator()() { if (isDestroyed()) return 0; return innerFunction(); } + Type *operator->() { return innerFunction(); } + Type &operator*() { return *innerFunction(); } +}; + +#define Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS) \ + namespace { namespace Q_QGS_ ## NAME { \ + typedef TYPE Type; \ + QBasicAtomicInt guard = Q_BASIC_ATOMIC_INITIALIZER(QtGlobalStatic::Uninitialized); \ + Q_GLOBAL_STATIC_INTERNAL(ARGS) \ + } } \ + static QGlobalStatic<TYPE, \ + Q_QGS_ ## NAME::innerFunction, \ + Q_QGS_ ## NAME::guard> NAME; + +#define Q_GLOBAL_STATIC(TYPE, NAME) \ + Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ()) + +QT_END_NAMESPACE +#endif // QGLOBALSTATIC_H diff --git a/src/corelib/global/qisenum.h b/src/corelib/global/qisenum.h index 073d5a591f..577007b455 100644 --- a/src/corelib/global/qisenum.h +++ b/src/corelib/global/qisenum.h @@ -62,9 +62,6 @@ #endif // shut up syncqt -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_END_NAMESPACE -QT_END_HEADER - #endif // QISENUM_H diff --git a/src/corelib/global/qlibraryinfo.h b/src/corelib/global/qlibraryinfo.h index 054231b084..1a00a14caf 100644 --- a/src/corelib/global/qlibraryinfo.h +++ b/src/corelib/global/qlibraryinfo.h @@ -45,8 +45,6 @@ #include <QtCore/qstring.h> #include <QtCore/qdatetime.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class Q_CORE_EXPORT QLibraryInfo @@ -103,6 +101,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QLIBRARYINFO_H diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp index 60ba19e625..6a127e1786 100644 --- a/src/corelib/global/qlogging.cpp +++ b/src/corelib/global/qlogging.cpp @@ -57,6 +57,10 @@ #include <slog2.h> #endif +#ifdef Q_OS_ANDROID +#include <android/log.h> +#endif + #include <stdio.h> QT_BEGIN_NAMESPACE @@ -73,7 +77,7 @@ static bool isFatal(QtMsgType msgType) return true; if (msgType == QtWarningMsg) { - static bool fatalWarnings = qEnvironmentVariableIsSet("QT_FATAL_WARNINGS"); + static bool fatalWarnings = !qEnvironmentVariableIsEmpty("QT_FATAL_WARNINGS"); return fatalWarnings; } @@ -115,6 +119,7 @@ static bool isFatal(QtMsgType msgType) extern bool usingWinMain; #endif +#ifdef Q_OS_WIN static inline void convert_to_wchar_t_elided(wchar_t *d, size_t space, const char *s) Q_DECL_NOEXCEPT { size_t len = qstrlen(s); @@ -128,6 +133,7 @@ static inline void convert_to_wchar_t_elided(wchar_t *d, size_t space, const cha *d++ = *s++; *d++ = 0; } +#endif #if !defined(QT_NO_EXCEPTIONS) /*! @@ -521,6 +527,11 @@ static const char functionTokenC[] = "%{function}"; static const char pidTokenC[] = "%{pid}"; static const char appnameTokenC[] = "%{appname}"; static const char threadidTokenC[] = "%{threadid}"; +static const char ifDebugTokenC[] = "%{if-debug}"; +static const char ifWarningTokenC[] = "%{if-warning}"; +static const char ifCriticalTokenC[] = "%{if-critical}"; +static const char ifFatalTokenC[] = "%{if-fatal}"; +static const char endifTokenC[] = "%{endif}"; static const char emptyTokenC[] = ""; static const char defaultPattern[] = "%{message}"; @@ -607,6 +618,10 @@ void QMessagePattern::setPattern(const QString &pattern) tokens = new const char*[lexemes.size() + 1]; tokens[lexemes.size()] = 0; + bool nestedIfError = false; + bool inIf = false; + QString error; + for (int i = 0; i < lexemes.size(); ++i) { const QString lexeme = lexemes.at(i); if (lexeme.startsWith(QLatin1String("%{")) @@ -630,23 +645,28 @@ void QMessagePattern::setPattern(const QString &pattern) tokens[i] = appnameTokenC; else if (lexeme == QLatin1String(threadidTokenC)) tokens[i] = threadidTokenC; - else { - tokens[i] = emptyTokenC; - QString error = QStringLiteral("QT_MESSAGE_PATTERN: Unknown placeholder %1\n") +#define IF_TOKEN(LEVEL) \ + else if (lexeme == QLatin1String(LEVEL)) { \ + if (inIf) \ + nestedIfError = true; \ + tokens[i] = LEVEL; \ + inIf = true; \ + } + IF_TOKEN(ifDebugTokenC) + IF_TOKEN(ifWarningTokenC) + IF_TOKEN(ifCriticalTokenC) + IF_TOKEN(ifFatalTokenC) +#undef IF_TOKEN + else if (lexeme == QLatin1String(endifTokenC)) { + tokens[i] = endifTokenC; + if (!inIf && !nestedIfError) + error += QStringLiteral("QT_MESSAGE_PATTERN: %{endif} without an %{if-*}\n"); + inIf = false; + } else { + tokens[i] = emptyTokenC; + error += QStringLiteral("QT_MESSAGE_PATTERN: Unknown placeholder %1\n") .arg(lexeme); - -#if defined(Q_OS_WINCE) - OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16())); - continue; -#elif defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB) - if (usingWinMain) { - OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16())); - continue; - } -#endif - fprintf(stderr, "%s", error.toLocal8Bit().constData()); - fflush(stderr); } } else { char *literal = new char[lexeme.size() + 1]; @@ -656,6 +676,24 @@ void QMessagePattern::setPattern(const QString &pattern) tokens[i] = literal; } } + if (nestedIfError) + error += QStringLiteral("QT_MESSAGE_PATTERN: %{if-*} cannot be nested\n"); + else if (inIf) + error += QStringLiteral("QT_MESSAGE_PATTERN: missing %{endif}\n"); + if (!error.isEmpty()) { +#if defined(Q_OS_WINCE) + OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16())); + if (0) +#elif defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB) + if (usingWinMain) { + OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16())); + } else +#endif + { + fprintf(stderr, "%s", error.toLocal8Bit().constData()); + fflush(stderr); + } + } literals = new const char*[literalsVar.size() + 1]; literals[literalsVar.size()] = 0; memcpy(literals, literalsVar.constData(), literalsVar.size() * sizeof(const char*)); @@ -735,10 +773,16 @@ Q_CORE_EXPORT QString qMessageFormatString(QtMsgType type, const QMessageLogCont if (pattern->tokens[0] == 0) return message; + bool skip = false; + // we do not convert file, function, line literals to local encoding due to overhead for (int i = 0; pattern->tokens[i] != 0; ++i) { const char *token = pattern->tokens[i]; - if (token == messageTokenC) { + if (token == endifTokenC) { + skip = false; + } else if (skip) { + // do nothing + } else if (token == messageTokenC) { message.append(str); } else if (token == categoryTokenC) { message.append(QLatin1String(context.category)); @@ -770,6 +814,14 @@ Q_CORE_EXPORT QString qMessageFormatString(QtMsgType type, const QMessageLogCont message.append(QLatin1String("0x")); message.append(QString::number(qlonglong(QThread::currentThread()->currentThread()), 16)); #endif +#define HANDLE_IF_TOKEN(LEVEL) \ + } else if (token == if##LEVEL##TokenC) { \ + skip = type != Qt##LEVEL##Msg; + HANDLE_IF_TOKEN(Debug) + HANDLE_IF_TOKEN(Warning) + HANDLE_IF_TOKEN(Critical) + HANDLE_IF_TOKEN(Fatal) +#undef HANDLE_IF_TOKEN } else { message.append(QLatin1String(token)); } @@ -787,6 +839,24 @@ Q_CORE_EXPORT QtMsgHandler qInstallMsgHandler(QtMsgHandler); static QtMsgHandler msgHandler = 0; // pointer to debug handler (without context) static QtMessageHandler messageHandler = 0; // pointer to debug handler (with context) +#ifdef Q_OS_ANDROID +static void android_default_message_handler(QtMsgType type, + const QMessageLogContext &context, + const QString &message) +{ + android_LogPriority priority; + switch (type) { + case QtDebugMsg: priority = ANDROID_LOG_DEBUG; break; + case QtWarningMsg: priority = ANDROID_LOG_WARN; break; + case QtCriticalMsg: priority = ANDROID_LOG_ERROR; break; + case QtFatalMsg: priority = ANDROID_LOG_FATAL; break; + }; + + __android_log_print(priority, "Qt", "%s:%d (%s): %s", qPrintable(context.file), context.line, + qPrintable(context.function), qPrintable(message)); +} +#endif //Q_OS_ANDROID + /*! \internal */ @@ -807,6 +877,8 @@ static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &con #if defined(QT_USE_SLOG2) slog2_default_handler(type, logMessage.toLocal8Bit().constData()); +#elif defined(Q_OS_ANDROID) + android_default_message_handler(type, context, logMessage); #else fprintf(stderr, "%s", logMessage.toLocal8Bit().constData()); fflush(stderr); @@ -1009,6 +1081,15 @@ void qErrnoWarning(int code, const char *msg, ...) \row \li \c %{type} \li "debug", "warning", "critical" or "fatal" \endtable + You can also use conditionals on the type of the message using \c %{if-debug}, + \c %{if-warning}, \c %{if-critical} or \c %{if-fatal} followed by an \c %{endif}. + What is inside the \c %{if-*} and \c %{endif} will only be printed if the type matches. + + Example: + \code + QT_MESSAGE_PATTERN="[%{if-debug}D%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{file}:%{line} - %{message}" + \endcode + The default \a pattern is "%{message}". The \a pattern can also be changed at runtime by setting the QT_MESSAGE_PATTERN diff --git a/src/corelib/global/qlogging.h b/src/corelib/global/qlogging.h index 7d8f7313c8..a6f244698d 100644 --- a/src/corelib/global/qlogging.h +++ b/src/corelib/global/qlogging.h @@ -49,7 +49,6 @@ #pragma qt_no_master_include #endif -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE /* @@ -172,6 +171,4 @@ Q_CORE_EXPORT QtMessageHandler qInstallMessageHandler(QtMessageHandler); Q_CORE_EXPORT void qSetMessagePattern(const QString &messagePattern); QT_END_NAMESPACE -QT_END_HEADER - #endif // QLOGGING_H diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index e6cd166832..41bca2a443 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -327,6 +325,15 @@ public: Q_DECLARE_FLAGS(WindowStates, WindowState) + enum ApplicationState { + ApplicationSuspended = 0x00000000, + ApplicationHidden = 0x00000001, + ApplicationInactive = 0x00000002, + ApplicationActive = 0x00000004 + }; + + Q_DECLARE_FLAGS(ApplicationStates, ApplicationState) + enum ScreenOrientation { PrimaryOrientation = 0x00000000, PortraitOrientation = 0x00000001, @@ -1300,6 +1307,8 @@ public: ImhPreferLatin = 0x200, + ImhMultiLine = 0x400, + ImhDigitsOnly = 0x10000, ImhFormattedNumbersOnly = 0x20000, ImhUppercaseOnly = 0x40000, @@ -1397,7 +1406,8 @@ public: ItemIsDropEnabled = 8, ItemIsUserCheckable = 16, ItemIsEnabled = 32, - ItemIsTristate = 64 + ItemIsTristate = 64, + ItemNeverHasChildren = 128 }; Q_DECLARE_FLAGS(ItemFlags, ItemFlag) @@ -1603,6 +1613,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QNAMESPACE_H diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index cb18dde724..8ec206a572 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -1783,6 +1783,36 @@ */ /*! + \enum Qt::ApplicationState + + \keyword application state + + This enum type is used to specify the current state of the application. + + The states are + + \value ApplicationSuspended The application is about to suspend. When entering this state, the + application should save its state, cease all activities, and be + prepared for code execution to stop. While suspended, the + application can be killed at any time without further warnings + (e.g. when low memory forces the OS to purge suspended applications). + \value ApplicationHidden The application is hidden and runs in the background. This + is the normal state for applications that need to do background + processing, like playing music, while the user interacts with + other applications. The application should free up all graphical + resources when entering this state. + \value ApplicationInactive The application is visible, but not selected to be in front. + On desktop platforms, this typically means that the user + activated another application. On mobile platforms, it is + more common to enter this state when the OS is interrupting + the user with e.g. incoming calls or SMS-messages. + While in this state, consider reducing CPU-intensive tasks. + \value ApplicationActive The application is visible and selected to be in front. + + \since 5.1 +*/ + +/*! \enum Qt::ScreenOrientation This enum type specifies the various orientations a screen might have. @@ -2315,6 +2345,8 @@ \value ImhTime The text editor functions as a time field. \value ImhPreferLatin Latin characters are preferred (but not required). + \value ImhMultiLine Multiple lines can be entered into the text field. + Flags that restrict input (exclusive flags): \value ImhDigitsOnly Only digits are allowed. @@ -2441,6 +2473,7 @@ \value ItemIsUserCheckable It can be checked or unchecked by the user. \value ItemIsEnabled The user can interact with the item. \value ItemIsTristate The item is checkable with three separate states. + \value ItemNeverHasChildren The item never has child items. Note that checkable items need to be given both a suitable set of flags and an initial state, indicating whether the item is checked or not. diff --git a/src/corelib/global/qnumeric.h b/src/corelib/global/qnumeric.h index f8e84825c0..25db5443eb 100644 --- a/src/corelib/global/qnumeric.h +++ b/src/corelib/global/qnumeric.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -65,6 +63,4 @@ Q_CORE_EXPORT double qInf(); QT_END_NAMESPACE -QT_END_HEADER - #endif // QNUMERIC_H diff --git a/src/corelib/global/qprocessordetection.h b/src/corelib/global/qprocessordetection.h index c005c5446e..86023d1703 100644 --- a/src/corelib/global/qprocessordetection.h +++ b/src/corelib/global/qprocessordetection.h @@ -118,6 +118,7 @@ # define Q_PROCESSOR_ARM_V6 # define Q_PROCESSOR_ARM_V5 # elif defined(__ARM_ARCH_5TEJ__) \ + || defined(__ARM_ARCH_5TE__) \ || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 5) \ || (defined(_M_ARM) && _M_ARM-0 >= 5) # define Q_PROCESSOR_ARM_V5 diff --git a/src/corelib/global/qsysinfo.h b/src/corelib/global/qsysinfo.h index c95c1674eb..edeef3c461 100644 --- a/src/corelib/global/qsysinfo.h +++ b/src/corelib/global/qsysinfo.h @@ -44,7 +44,6 @@ #ifndef QSYSINFO_H #define QSYSINFO_H -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE /* @@ -151,6 +150,4 @@ public: }; QT_END_NAMESPACE -QT_END_HEADER - #endif // QSYSINFO_H diff --git a/src/corelib/global/qsystemdetection.h b/src/corelib/global/qsystemdetection.h index 5f9671932f..0caac3d797 100644 --- a/src/corelib/global/qsystemdetection.h +++ b/src/corelib/global/qsystemdetection.h @@ -50,6 +50,8 @@ The operating system, must be one of: (Q_OS_x) DARWIN - Darwin OS (synonym for Q_OS_MAC) + MAC - Mac OS X or iOS (iPhoneOS) + IOS - iOS (treated as a variant of Mac OS) MSDOS - MS-DOS and Windows OS2 - OS/2 OS2EMX - XFree86 on OS/2 (not PM) @@ -78,6 +80,7 @@ LYNX - LynxOS BSD4 - Any BSD 4.4 system UNIX - Any UNIX BSD/SYSV system + ANDROID - Android platform */ #if defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__)) @@ -88,6 +91,9 @@ # else # define Q_OS_DARWIN32 # endif +#elif defined(ANDROID) +# define Q_OS_ANDROID +# define Q_OS_LINUX #elif defined(__CYGWIN__) # define Q_OS_CYGWIN #elif !defined(SAG_COM) && (defined(WIN64) || defined(_WIN64) || defined(__WIN64__)) @@ -166,6 +172,10 @@ # elif defined(Q_OS_DARWIN32) # define Q_OS_MAC32 # endif +# include <TargetConditionals.h> +# if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE +# define Q_OS_IOS +# endif #endif #if defined(Q_OS_WIN) @@ -175,30 +185,50 @@ #endif #ifdef Q_OS_DARWIN -# ifdef MAC_OS_X_VERSION_MIN_REQUIRED -# undef MAC_OS_X_VERSION_MIN_REQUIRED +# include <Availability.h> +# if !defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_6 +# undef __MAC_OS_X_VERSION_MIN_REQUIRED +# define __MAC_OS_X_VERSION_MIN_REQUIRED __MAC_10_6 # endif -# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_4 # include <AvailabilityMacros.h> -# if !defined(MAC_OS_X_VERSION_10_3) -# define MAC_OS_X_VERSION_10_3 MAC_OS_X_VERSION_10_2 + 1 +# if !defined(MAC_OS_X_VERSION_MIN_REQUIRED) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 +# undef MAC_OS_X_VERSION_MIN_REQUIRED +# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_6 # endif -# if !defined(MAC_OS_X_VERSION_10_4) -# define MAC_OS_X_VERSION_10_4 MAC_OS_X_VERSION_10_3 + 1 +# +# // Numerical checks are preferred to named checks, but to be safe +# // we define the missing version names in case Qt uses them. +# +# if !defined(__MAC_10_7) +# define __MAC_10_7 1070 # endif -# if !defined(MAC_OS_X_VERSION_10_5) -# define MAC_OS_X_VERSION_10_5 MAC_OS_X_VERSION_10_4 + 1 -# endif -# if !defined(MAC_OS_X_VERSION_10_6) -# define MAC_OS_X_VERSION_10_6 MAC_OS_X_VERSION_10_5 + 1 +# if !defined(__MAC_10_8) +# define __MAC_10_8 1080 # endif # if !defined(MAC_OS_X_VERSION_10_7) -# define MAC_OS_X_VERSION_10_7 MAC_OS_X_VERSION_10_6 + 1 +# define MAC_OS_X_VERSION_10_7 1070 # endif # if !defined(MAC_OS_X_VERSION_10_8) -# define MAC_OS_X_VERSION_10_8 MAC_OS_X_VERSION_10_7 + 1 +# define MAC_OS_X_VERSION_10_8 1080 +# endif +# +# if !defined(__IPHONE_4_3) +# define __IPHONE_4_3 40300 +# endif +# if !defined(__IPHONE_5_0) +# define __IPHONE_5_0 50000 +# endif +# if !defined(__IPHONE_5_1) +# define __IPHONE_5_1 50100 +# endif +# if !defined(__IPHONE_6_0) +# define __IPHONE_6_0 60000 +# endif +# if !defined(__IPHONE_6_1) +# define __IPHONE_6_1 60100 # endif -# if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_8) +# +# if (__MAC_OS_X_VERSION_MAX_ALLOWED > __MAC_10_8) # warning "This version of Mac OS X is unsupported" # endif #endif diff --git a/src/corelib/global/qt_windows.h b/src/corelib/global/qt_windows.h index 26b55336ed..c3266c5487 100644 --- a/src/corelib/global/qt_windows.h +++ b/src/corelib/global/qt_windows.h @@ -42,6 +42,11 @@ #ifndef QT_WINDOWS_H #define QT_WINDOWS_H +#if 0 +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif + #if defined(Q_CC_BOR) // Borland's windows.h does not set these correctly, resulting in // unusable WinSDK standard dialogs diff --git a/src/corelib/global/qtypeinfo.h b/src/corelib/global/qtypeinfo.h index 754aa6712b..8e34c9792d 100644 --- a/src/corelib/global/qtypeinfo.h +++ b/src/corelib/global/qtypeinfo.h @@ -44,7 +44,6 @@ #ifndef QTYPEINFO_H #define QTYPEINFO_H -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE /* @@ -241,6 +240,4 @@ Q_DECLARE_TYPEINFO(long double, Q_PRIMITIVE_TYPE); #endif QT_END_NAMESPACE -QT_END_HEADER - #endif // QTYPEINFO_H diff --git a/src/corelib/global/qtypetraits.h b/src/corelib/global/qtypetraits.h index 54b48667b4..7ccad067d0 100644 --- a/src/corelib/global/qtypetraits.h +++ b/src/corelib/global/qtypetraits.h @@ -109,7 +109,6 @@ #include <utility> // For pair -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE namespace QtPrivate { @@ -505,6 +504,4 @@ Q_STATIC_ASSERT(( is_signed<qint64>::value)); } // namespace QtPrivate QT_END_NAMESPACE -QT_END_HEADER - #endif // QTYPETRAITS_H diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri index f57dcebe33..3f100593bb 100644 --- a/src/corelib/io/io.pri +++ b/src/corelib/io/io.pri @@ -18,14 +18,19 @@ HEADERS += \ io/qipaddress_p.h \ io/qiodevice.h \ io/qiodevice_p.h \ + io/qlockfile.h \ + io/qlockfile_p.h \ io/qnoncontiguousbytedevice_p.h \ io/qprocess.h \ io/qprocess_p.h \ io/qtextstream.h \ + io/qtextstream_p.h \ io/qtemporarydir.h \ io/qtemporaryfile.h \ + io/qtemporaryfile_p.h \ io/qresource_p.h \ io/qresource_iterator_p.h \ + io/qsavefile.h \ io/qstandardpaths.h \ io/qurl.h \ io/qurl_p.h \ @@ -58,6 +63,7 @@ SOURCES += \ io/qfileinfo.cpp \ io/qipaddress.cpp \ io/qiodevice.cpp \ + io/qlockfile.cpp \ io/qnoncontiguousbytedevice.cpp \ io/qprocess.cpp \ io/qtextstream.cpp \ @@ -65,6 +71,7 @@ SOURCES += \ io/qtemporaryfile.cpp \ io/qresource.cpp \ io/qresource_iterator.cpp \ + io/qsavefile.cpp \ io/qstandardpaths.cpp \ io/qurl.cpp \ io/qurlidna.cpp \ @@ -81,6 +88,7 @@ SOURCES += \ win32 { SOURCES += io/qsettings_win.cpp SOURCES += io/qfsfileengine_win.cpp + SOURCES += io/qlockfile_win.cpp SOURCES += io/qfilesystemwatcher_win.cpp HEADERS += io/qfilesystemwatcher_win_p.h @@ -105,15 +113,16 @@ win32 { SOURCES += \ io/qfsfileengine_unix.cpp \ io/qfilesystemengine_unix.cpp \ + io/qlockfile_unix.cpp \ io/qprocess_unix.cpp \ io/qfilesystemiterator_unix.cpp \ - !nacl:macx-*: { + !nacl:mac: { SOURCES += io/qfilesystemengine_mac.cpp SOURCES += io/qsettings_mac.cpp } - macx-*: { - !ios { + mac { + macx { SOURCES += io/qstandardpaths_mac.cpp } else { SOURCES += io/qstandardpaths_unix.cpp @@ -124,13 +133,13 @@ win32 { SOURCES += io/qstandardpaths_unix.cpp } - linux-*|if(qnx:contains(QT_CONFIG, inotify)) { + linux|if(qnx:contains(QT_CONFIG, inotify)) { SOURCES += io/qfilesystemwatcher_inotify.cpp HEADERS += io/qfilesystemwatcher_inotify_p.h } !nacl { - freebsd-*|macx-*|darwin-*|openbsd-*:{ + freebsd-*|mac|darwin-*|openbsd-*:{ SOURCES += io/qfilesystemwatcher_kqueue.cpp HEADERS += io/qfilesystemwatcher_kqueue_p.h } diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp index 2d9cb85d9f..9cdbbbbb25 100644 --- a/src/corelib/io/qabstractfileengine.cpp +++ b/src/corelib/io/qabstractfileengine.cpp @@ -400,6 +400,19 @@ bool QAbstractFileEngine::close() } /*! + \since 5.1 + + Flushes and syncs the file to disk. + + Returns true if successful; otherwise returns false. + The default implementation always returns false. +*/ +bool QAbstractFileEngine::syncToDisk() +{ + return false; +} + +/*! Flushes the open file, returning true if successful; otherwise returns false. @@ -496,6 +509,24 @@ bool QAbstractFileEngine::rename(const QString &newName) } /*! + \since 5.1 + + Requests that the file be renamed to \a newName in the file + system. If the new name already exists, it must be overwritten. + If the operation succeeds, returns true; otherwise returns + false. + + This virtual function must be reimplemented by all subclasses. + + \sa setFileName() + */ +bool QAbstractFileEngine::renameOverwrite(const QString &newName) +{ + Q_UNUSED(newName); + return false; +} + +/*! Creates a link from the file currently specified by fileName() to \a newName. What a link is depends on the underlying filesystem (be it a shortcut on Windows or a symbolic link on Unix). Returns diff --git a/src/corelib/io/qabstractfileengine_p.h b/src/corelib/io/qabstractfileengine_p.h index 868b086b57..dd64e3d71f 100644 --- a/src/corelib/io/qabstractfileengine_p.h +++ b/src/corelib/io/qabstractfileengine_p.h @@ -66,7 +66,7 @@ class QVariant; class QAbstractFileEngineIterator; class QAbstractFileEnginePrivate; -class Q_AUTOTEST_EXPORT QAbstractFileEngine +class Q_CORE_EXPORT QAbstractFileEngine { public: enum FileFlag { @@ -124,6 +124,7 @@ public: virtual bool open(QIODevice::OpenMode openMode); virtual bool close(); virtual bool flush(); + virtual bool syncToDisk(); virtual qint64 size() const; virtual qint64 pos() const; virtual bool seek(qint64 pos); @@ -131,6 +132,7 @@ public: virtual bool remove(); virtual bool copy(const QString &newName); virtual bool rename(const QString &newName); + virtual bool renameOverwrite(const QString &newName); virtual bool link(const QString &newName); virtual bool mkdir(const QString &dirName, bool createParentDirectories) const; virtual bool rmdir(const QString &dirName, bool recurseParentDirectories) const; @@ -208,7 +210,7 @@ private: Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractFileEngine::FileFlags) -class Q_AUTOTEST_EXPORT QAbstractFileEngineHandler +class Q_CORE_EXPORT QAbstractFileEngineHandler { public: QAbstractFileEngineHandler(); @@ -217,7 +219,7 @@ public: }; class QAbstractFileEngineIteratorPrivate; -class Q_AUTOTEST_EXPORT QAbstractFileEngineIterator +class Q_CORE_EXPORT QAbstractFileEngineIterator { public: QAbstractFileEngineIterator(QDir::Filters filters, const QStringList &nameFilters); diff --git a/src/corelib/io/qbuffer.h b/src/corelib/io/qbuffer.h index f246f1375f..de0fe9f36a 100644 --- a/src/corelib/io/qbuffer.h +++ b/src/corelib/io/qbuffer.h @@ -45,8 +45,6 @@ #include <QtCore/qiodevice.h> #include <QtCore/qbytearray.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -106,6 +104,4 @@ inline void QBuffer::setData(const char *adata, int alen) QT_END_NAMESPACE -QT_END_HEADER - #endif // QBUFFER_H diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index 544e9e8592..8f788ac355 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -251,7 +251,7 @@ QT_BEGIN_NAMESPACE return retVal; enum { - DefaultStreamVersion = QDataStream::Qt_5_0 + DefaultStreamVersion = QDataStream::Qt_5_1 }; /*! @@ -539,6 +539,7 @@ void QDataStream::setByteOrder(ByteOrder bo) \value Qt_4_8 Same as Qt_4_6. \value Qt_4_9 Same as Qt_4_6. \value Qt_5_0 Version 13 (Qt 5.0) + \value Qt_5_1 Same as Qt_5_0. \sa setVersion(), version() */ diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h index 092f3a15b3..6017ba5e7d 100644 --- a/src/corelib/io/qdatastream.h +++ b/src/corelib/io/qdatastream.h @@ -50,8 +50,6 @@ #error qdatastream.h must be included before any header file that defines Status #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -87,8 +85,9 @@ public: Qt_4_7 = Qt_4_6, Qt_4_8 = Qt_4_7, Qt_4_9 = Qt_4_8, - Qt_5_0 = 13 -#if QT_VERSION >= 0x050100 + Qt_5_0 = 13, + Qt_5_1 = Qt_5_0 +#if QT_VERSION >= 0x050200 #error Add the datastream version for this Qt version #endif }; @@ -434,6 +433,4 @@ inline QDataStream& operator<<(QDataStream& s, const QPair<T1, T2>& p) QT_END_NAMESPACE -QT_END_HEADER - #endif // QDATASTREAM_H diff --git a/src/corelib/io/qdebug.cpp b/src/corelib/io/qdebug.cpp index bd43963139..9cb5609dac 100644 --- a/src/corelib/io/qdebug.cpp +++ b/src/corelib/io/qdebug.cpp @@ -47,6 +47,9 @@ #endif #include "qdebug.h" +#include <private/qtextstream_p.h> + +QT_BEGIN_NAMESPACE // This file is needed to force compilation of QDebug into the kernel library. @@ -170,6 +173,8 @@ between writes. \since 5.0 + + \sa QDebugStateSaver */ /*! @@ -179,6 +184,8 @@ automatic insertion of spaces is disabled. \since 5.0 + + \sa QDebugStateSaver */ /*! @@ -321,3 +328,69 @@ \fn QDebug &QDebug::operator<<(QTextStreamManipulator m) \internal */ + +/*! + \class QDebugStateSaver + + \brief Convenience class for custom QDebug operators + + Saves the settings used by QDebug, and restores them upon destruction. + + The automatic insertion of spaces between writes is one of the settings + that QDebugStateSaver stores for the duration of the current block. + + The settings of the internal QTextStream are also saved and restored, + so that using << hex in a QDebug operator doesn't affect other QDebug + operators. + + \since 5.1 +*/ + +class QDebugStateSaverPrivate +{ +public: + QDebugStateSaverPrivate(QDebug &dbg) + : m_dbg(dbg), + m_spaces(dbg.autoInsertSpaces()), + m_streamParams(dbg.stream->ts.d_ptr->params) + { + } + void restoreState() + { + m_dbg.setAutoInsertSpaces(m_spaces); + m_dbg.stream->ts.d_ptr->params = m_streamParams; + } + + QDebug &m_dbg; + + // QDebug state + const bool m_spaces; + + // QTextStream state + const QTextStreamPrivate::Params m_streamParams; +}; + + +/*! + Creates a QDebugStateSaver instance, which saves the settings + currently used by \a dbg. + + \sa QDebug::setAutoInsertSpaces(), QDebug::autoInsertSpaces() +*/ +QDebugStateSaver::QDebugStateSaver(QDebug &dbg) + : d(new QDebugStateSaverPrivate(dbg)) +{ +} + +/*! + Destroyes a QDebugStateSaver instance, which restores the settings + used by \a dbg when the QDebugStateSaver instance was created. + + \sa QDebug::setAutoInsertSpaces(), QDebug::autoInsertSpaces() +*/ +QDebugStateSaver::~QDebugStateSaver() +{ + d->restoreState(); +} + +QT_END_NAMESPACE diff --git a/src/corelib/io/qdebug.h b/src/corelib/io/qdebug.h index be8252fbb2..ce72fcd26d 100644 --- a/src/corelib/io/qdebug.h +++ b/src/corelib/io/qdebug.h @@ -53,14 +53,13 @@ #include <QtCore/qset.h> #include <QtCore/qcontiguouscache.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class Q_CORE_EXPORT QDebug { friend class QMessageLogger; + friend class QDebugStateSaverPrivate; struct Stream { Stream(QIODevice *device) : ts(device), ref(1), type(QtDebugMsg), space(true), message_output(false) {} Stream(QString *string) : ts(string, QIODevice::WriteOnly), ref(1), type(QtDebugMsg), space(true), message_output(false) {} @@ -132,6 +131,17 @@ public: Q_DECLARE_SHARED(QDebug) +class QDebugStateSaverPrivate; +class Q_CORE_EXPORT QDebugStateSaver +{ +public: + QDebugStateSaver(QDebug &dbg); + ~QDebugStateSaver(); +private: + Q_DISABLE_COPY(QDebugStateSaver) + QScopedPointer<QDebugStateSaverPrivate> d; +}; + class QNoDebug { public: @@ -279,6 +289,4 @@ inline QDebug operator<<(QDebug debug, const QFlags<T> &flags) QT_END_NAMESPACE -QT_END_HEADER - #endif // QDEBUG_H diff --git a/src/corelib/io/qdir.h b/src/corelib/io/qdir.h index 00091bb0d1..dbb6d93d2e 100644 --- a/src/corelib/io/qdir.h +++ b/src/corelib/io/qdir.h @@ -47,8 +47,6 @@ #include <QtCore/qstringlist.h> #include <QtCore/qshareddata.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -236,6 +234,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QDir &dir); QT_END_NAMESPACE -QT_END_HEADER - #endif // QDIR_H diff --git a/src/corelib/io/qdiriterator.h b/src/corelib/io/qdiriterator.h index f0601e602e..4a96005570 100644 --- a/src/corelib/io/qdiriterator.h +++ b/src/corelib/io/qdiriterator.h @@ -44,8 +44,6 @@ #include <QtCore/qdir.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -91,6 +89,4 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QDirIterator::IteratorFlags) QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/io/qfile.h b/src/corelib/io/qfile.h index 2e86af3703..2e75e29995 100644 --- a/src/corelib/io/qfile.h +++ b/src/corelib/io/qfile.h @@ -50,8 +50,6 @@ #error qfile.h must be included before any header file that defines open #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QTemporaryFile; @@ -154,6 +152,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QFILE_H diff --git a/src/corelib/io/qfiledevice.h b/src/corelib/io/qfiledevice.h index fc07097b1c..fc2779086a 100644 --- a/src/corelib/io/qfiledevice.h +++ b/src/corelib/io/qfiledevice.h @@ -45,8 +45,6 @@ #include <QtCore/qiodevice.h> #include <QtCore/qstring.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QFileDevicePrivate; @@ -142,6 +140,4 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QFileDevice::Permissions) QT_END_NAMESPACE -QT_END_HEADER - #endif // QFILEDEVICE_H diff --git a/src/corelib/io/qfileinfo.h b/src/corelib/io/qfileinfo.h index 938114f9d1..211c18d0a0 100644 --- a/src/corelib/io/qfileinfo.h +++ b/src/corelib/io/qfileinfo.h @@ -47,8 +47,6 @@ #include <QtCore/qshareddata.h> #include <QtCore/qmetatype.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -159,6 +157,4 @@ QT_END_NAMESPACE Q_DECLARE_METATYPE(QFileInfo) -QT_END_HEADER - #endif // QFILEINFO_H diff --git a/src/corelib/io/qfilesystemengine.cpp b/src/corelib/io/qfilesystemengine.cpp index 0fd77fbeb5..71ecc4a0a0 100644 --- a/src/corelib/io/qfilesystemengine.cpp +++ b/src/corelib/io/qfilesystemengine.cpp @@ -272,8 +272,7 @@ void QFileSystemMetaData::fillFromStatBuf(const QT_STATBUF &statBuffer) // Attributes entryFlags |= QFileSystemMetaData::ExistsAttribute; size_ = statBuffer.st_size; -#if defined (Q_OS_MAC) && !defined(Q_OS_IOS) \ - && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 +#if defined (Q_OS_MAC) && !defined(Q_OS_IOS) if (statBuffer.st_flags & UF_HIDDEN) { entryFlags |= QFileSystemMetaData::HiddenAttribute; knownFlagsMask |= QFileSystemMetaData::HiddenAttribute; diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index 4af01f6730..4bfb03a41e 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -169,7 +169,7 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry, if (entry.isEmpty() || entry.isRoot()) return entry; -#if !defined(Q_OS_MAC) && !defined(Q_OS_QNX) && _POSIX_VERSION < 200809L +#if !defined(Q_OS_MAC) && !defined(Q_OS_QNX) && !defined(Q_OS_ANDROID) && _POSIX_VERSION < 200809L // realpath(X,0) is not supported Q_UNUSED(data); return QFileSystemEntry(slowCanonicalized(absoluteName(entry).filePath())); @@ -286,7 +286,7 @@ QString QFileSystemEngine::resolveUserName(uint userId) struct passwd *pw = 0; #if !defined(Q_OS_INTEGRITY) -#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) +#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) && !defined(Q_OS_VXWORKS) struct passwd entry; getpwuid_r(userId, &entry, buf.data(), buf.size(), &pw); #else @@ -310,7 +310,7 @@ QString QFileSystemEngine::resolveGroupName(uint groupId) struct group *gr = 0; #if !defined(Q_OS_INTEGRITY) -#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) +#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) && !defined(Q_OS_VXWORKS) size_max = sysconf(_SC_GETGR_R_SIZE_MAX); if (size_max == -1) size_max = 1024; @@ -360,12 +360,10 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM if (!data.hasFlags(QFileSystemMetaData::DirectoryType)) what |= QFileSystemMetaData::DirectoryType; } -# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 if (what & QFileSystemMetaData::HiddenAttribute) { // Mac OS >= 10.5: st_flags & UF_HIDDEN what |= QFileSystemMetaData::PosixStatFlags; } -# endif // MAC_OS_X_VERSION_MAX_ALLOWED... #endif // defined(Q_OS_MAC) && !defined(Q_OS_IOS) if (what & QFileSystemMetaData::PosixStatFlags) @@ -685,8 +683,16 @@ QFileSystemEntry QFileSystemEngine::currentPath() } #else char currentName[PATH_MAX+1]; - if (::getcwd(currentName, PATH_MAX)) + if (::getcwd(currentName, PATH_MAX)) { +#if defined(Q_OS_VXWORKS) && defined(VXWORKS_VXSIM) + QByteArray dir(currentName); + if (dir.indexOf(':') < dir.indexOf('/')) + dir.remove(0, dir.indexOf(':')+1); + + qstrncpy(currentName, dir.constData(), PATH_MAX); +#endif result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath()); + } # if defined(QT_DEBUG) if (result.isEmpty()) qWarning("QFileSystemEngine::currentPath: getcwd() failed"); diff --git a/src/corelib/io/qfilesystemwatcher.h b/src/corelib/io/qfilesystemwatcher.h index e2f48ce0bf..5a326075ba 100644 --- a/src/corelib/io/qfilesystemwatcher.h +++ b/src/corelib/io/qfilesystemwatcher.h @@ -46,8 +46,6 @@ #ifndef QT_NO_FILESYSTEMWATCHER -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -90,7 +88,5 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_FILESYSTEMWATCHER #endif // QFILESYSTEMWATCHER_H diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index 3963416084..f0f3c935e6 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -419,6 +419,17 @@ bool QFSFileEngine::flush() } /*! + \reimp +*/ +bool QFSFileEngine::syncToDisk() +{ + Q_D(QFSFileEngine); + if ((d->openMode & QIODevice::WriteOnly) == 0) + return true; + return d->nativeSyncToDisk(); +} + +/*! \internal */ bool QFSFileEnginePrivate::flushFh() @@ -908,6 +919,11 @@ bool QFSFileEngine::supportsExtension(Extension extension) const \reimp */ + +/*! \fn bool QFSFileEngine::renameOverwrite(const QString &newName) + \reimp +*/ + /*! \fn bool QFSFileEngine::rmdir(const QString &name, bool recurseParentDirectories) const \reimp */ diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h index d19310b6b6..21f38fea1d 100644 --- a/src/corelib/io/qfsfileengine_p.h +++ b/src/corelib/io/qfsfileengine_p.h @@ -81,6 +81,7 @@ public: bool open(QIODevice::OpenMode flags, FILE *fh); bool close(); bool flush(); + bool syncToDisk(); qint64 size() const; qint64 pos() const; bool seek(qint64); @@ -88,6 +89,7 @@ public: bool remove(); bool copy(const QString &newName); bool rename(const QString &newName); + bool renameOverwrite(const QString &newName); bool link(const QString &newName); bool mkdir(const QString &dirName, bool createParentDirectories) const; bool rmdir(const QString &dirName, bool recurseParentDirectories) const; @@ -149,6 +151,7 @@ public: bool nativeClose(); bool closeFdFh(); bool nativeFlush(); + bool nativeSyncToDisk(); bool flushFh(); qint64 nativeSize() const; #ifndef Q_OS_WIN diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index 482f65e7f6..a5f077bd0b 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -258,6 +258,23 @@ bool QFSFileEnginePrivate::nativeFlush() /*! \internal + \since 5.1 +*/ +bool QFSFileEnginePrivate::nativeSyncToDisk() +{ + Q_Q(QFSFileEngine); +#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 + const int ret = fdatasync(nativeHandle()); +#else + const int ret = fsync(nativeHandle()); +#endif + if (ret != 0) + q->setError(QFile::WriteError, qt_error_string(errno)); + return ret == 0; +} + +/*! + \internal */ qint64 QFSFileEnginePrivate::nativeRead(char *data, qint64 len) { @@ -388,6 +405,12 @@ bool QFSFileEngine::copy(const QString &newName) return ret; } +bool QFSFileEngine::renameOverwrite(const QString &newName) +{ + // On Unix, rename() overwrites. + return rename(newName); +} + bool QFSFileEngine::rename(const QString &newName) { Q_D(QFSFileEngine); diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index 24631f11c7..23ab507dad 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -198,15 +198,25 @@ bool QFSFileEnginePrivate::nativeFlush() return true; } - // Windows native mode; flushing is - // unnecessary. FlushFileBuffers(), the equivalent of sync() or - // fsync() on Unix, does a low-level flush to the disk, and we - // don't expose an API for this. + // Windows native mode; flushing is unnecessary. return true; } /* \internal + \since 5.1 +*/ +bool QFSFileEnginePrivate::nativeSyncToDisk() +{ + if (fh || fd != -1) { + // stdlib / stdio mode. No API available. + return false; + } + return FlushFileBuffers(fileHandle); +} + +/* + \internal */ qint64 QFSFileEnginePrivate::nativeSize() const { @@ -507,6 +517,17 @@ bool QFSFileEngine::rename(const QString &newName) return ret; } +bool QFSFileEngine::renameOverwrite(const QString &newName) +{ + Q_D(QFSFileEngine); + bool ret = ::MoveFileEx((wchar_t*)d->fileEntry.nativeFilePath().utf16(), + (wchar_t*)QFileSystemEntry(newName).nativeFilePath().utf16(), + MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED) != 0; + if (!ret) + setError(QFile::RenameError, QSystemError(::GetLastError(), QSystemError::NativeError).toString()); + return ret; +} + bool QFSFileEngine::mkdir(const QString &name, bool createParentDirectories) const { return QFileSystemEngine::createDirectory(QFileSystemEntry(name), createParentDirectories); diff --git a/src/corelib/io/qiodevice.h b/src/corelib/io/qiodevice.h index 96a8971639..39c2d70492 100644 --- a/src/corelib/io/qiodevice.h +++ b/src/corelib/io/qiodevice.h @@ -54,8 +54,6 @@ #error qiodevice.h must be included before any header file that defines open #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -177,6 +175,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug debug, QIODevice::OpenMode modes); QT_END_NAMESPACE -QT_END_HEADER - #endif // QIODEVICE_H diff --git a/src/corelib/io/qlockfile.cpp b/src/corelib/io/qlockfile.cpp new file mode 100644 index 0000000000..5d56a67f48 --- /dev/null +++ b/src/corelib/io/qlockfile.cpp @@ -0,0 +1,346 @@ +/**************************************************************************** +** +** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qlockfile.h" +#include "qlockfile_p.h" + +#include <QtCore/qthread.h> +#include <QtCore/qelapsedtimer.h> +#include <QtCore/qdatetime.h> + +QT_BEGIN_NAMESPACE + +/*! + \class QLockFile + \inmodule QtCore + \brief The QLockFile class provides locking between processes using a file. + \since 5.1 + + A lock file can be used to prevent multiple processes from accessing concurrently + the same resource. For instance, a configuration file on disk, or a socket, a port, + a region of shared memory... + + Serialization is only guaranteed if all processes that access the shared resource + use QLockFile, with the same file path. + + QLockFile supports two use cases: + to protect a resource for a short-term operation (e.g. verifying if a configuration + file has changed before saving new settings), and for long-lived protection of a + resource (e.g. a document opened by a user in an editor) for an indefinite amount of time. + + When protecting for a short-term operation, it is acceptable to call lock() and wait + until any running operation finishes. + When protecting a resource over a long time, however, the application should always + call setStaleLockTime(0) and then tryLock() with a short timeout, in order to + warn the user that the resource is locked. + + If the process holding the lock crashes, the lock file stays on disk and can prevent + any other process from accessing the shared resource, ever. For this reason, QLockFile + tries to detect such a "stale" lock file, based on the process ID written into the file, + and (in case that process ID got reused meanwhile), on the last modification time of + the lock file (30s by default, for the use case of a short-lived operation). + If the lock file is found to be stale, it will be deleted. + + For the use case of protecting a resource over a long time, you should therefore call + setStaleLockTime(0), and when tryLock() returns LockFailedError, inform the user + that the document is locked, possibly using getLockInfo() for more details. +*/ + +/*! + \enum QLockFile::LockError + + This enum describes the result of the last call to lock() or tryLock(). + + \value NoError The lock was acquired successfully. + \value LockFailedError The lock could not be acquired because another process holds it. + \value PermissionError The lock file could not be created, for lack of permissions + in the parent directory. + \value UnknownError Another error happened, for instance a full partition + prevented writing out the lock file. +*/ + +/*! + Constructs a new lock file object. + The object is created in an unlocked state. + When calling lock() or tryLock(), a lock file named \a fileName will be created, + if it doesn't already exist. + + \sa lock(), unlock() +*/ +QLockFile::QLockFile(const QString &fileName) + : d_ptr(new QLockFilePrivate(fileName)) +{ +} + +/*! + Destroys the lock file object. + If the lock was acquired, this will release the lock, by deleting the lock file. +*/ +QLockFile::~QLockFile() +{ + unlock(); +} + +/*! + Sets \a staleLockTime to be the time in milliseconds after which + a lock file is considered stale. + The default value is 30000, i.e. 30 seconds. + If your application typically keeps the file locked for more than 30 seconds + (for instance while saving megabytes of data for 2 minutes), you should set + a bigger value using setStaleLockTime(). + + The value of \a staleLockTime is used by lock() and tryLock() in order + to determine when an existing lock file is considered stale, i.e. left over + by a crashed process. This is useful for the case where the PID got reused + meanwhile, so the only way to detect a stale lock file is by the fact that + it has been around for a long time. + + \sa staleLockTime() +*/ +void QLockFile::setStaleLockTime(int staleLockTime) +{ + Q_D(QLockFile); + d->staleLockTime = staleLockTime; +} + +/*! + Returns the time in milliseconds after which + a lock file is considered stale. + + \sa setStaleLockTime() +*/ +int QLockFile::staleLockTime() const +{ + Q_D(const QLockFile); + return d->staleLockTime; +} + +/*! + Returns true if the lock was acquired by this QLockFile instance, + otherwise returns false. + + \sa lock(), unlock(), tryLock() +*/ +bool QLockFile::isLocked() const +{ + Q_D(const QLockFile); + return d->isLocked; +} + +/*! + Creates the lock file. + + If another process (or another thread) has created the lock file already, + this function will block until that process (or thread) releases it. + + Calling this function multiple times on the same lock from the same + thread without unlocking first is not allowed. This function will + \e dead-lock when the file is locked recursively. + + Returns true if the lock was acquired, false if it could not be acquired + due to an unrecoverable error, such as no permissions in the parent directory. + + \sa unlock(), tryLock() +*/ +bool QLockFile::lock() +{ + return tryLock(-1); +} + +/*! + Attempts to create the lock file. This function returns true if the + lock was obtained; otherwise it returns false. If another process (or + another thread) has created the lock file already, this function will + wait for at most \a timeout milliseconds for the lock file to become + available. + + Note: Passing a negative number as the \a timeout is equivalent to + calling lock(), i.e. this function will wait forever until the lock + file can be locked if \a timeout is negative. + + If the lock was obtained, it must be released with unlock() + before another process (or thread) can successfully lock it. + + Calling this function multiple times on the same lock from the same + thread without unlocking first is not allowed, this function will + \e always return false when attempting to lock the file recursively. + + \sa lock(), unlock() +*/ +bool QLockFile::tryLock(int timeout) +{ + Q_D(QLockFile); + QElapsedTimer timer; + if (timeout > 0) + timer.start(); + int sleepTime = 100; + forever { + d->lockError = d->tryLock_sys(); + switch (d->lockError) { + case NoError: + d->isLocked = true; + return true; + case PermissionError: + case UnknownError: + return false; + case LockFailedError: + if (!d->isLocked && d->isApparentlyStale()) { + // Stale lock from another thread/process + // Ensure two processes don't remove it at the same time + QLockFile rmlock(d->fileName + QStringLiteral(".rmlock")); + if (rmlock.tryLock()) { + if (d->isApparentlyStale() && d->removeStaleLock()) + continue; + } + } + break; + } + if (timeout == 0 || (timeout > 0 && timer.hasExpired(timeout))) + return false; + QThread::msleep(sleepTime); + if (sleepTime < 5 * 1000) + sleepTime *= 2; + } + // not reached + return false; +} + +/*! + \fn void QLockFile::unlock() + Releases the lock, by deleting the lock file. + + Calling unlock() without locking the file first, does nothing. + + \sa lock(), tryLock() +*/ + +/*! + Retrieves information about the current owner of the lock file. + + If tryLock() returns false, and error() returns LockFailedError, + this function can be called to find out more information about the existing + lock file: + \list + \li the PID of the application (returned in \a pid) + \li the \a hostname it's running on (useful in case of networked filesystems), + \li the name of the application which created it (returned in \a appname), + \endlist + + Note that tryLock() automatically deleted the file if there is no + running application with this PID, so LockFailedError can only happen if there is + an application with this PID (it could be unrelated though). + + This can be used to inform users about the existing lock file and give them + the choice to delete it. After removing the file using removeStaleLockFile(), + the application can call tryLock() again. + + This function returns true if the information could be successfully retrieved, false + if the lock file doesn't exist or doesn't contain the expected data. + This can happen if the lock file was deleted between the time where tryLock() failed + and the call to this function. Simply call tryLock() again if this happens. +*/ +bool QLockFile::getLockInfo(qint64 *pid, QString *hostname, QString *appname) const +{ + Q_D(const QLockFile); + return d->getLockInfo(pid, hostname, appname); +} + +bool QLockFilePrivate::getLockInfo(qint64 *pid, QString *hostname, QString *appname) const +{ + QFile reader(fileName); + if (!reader.open(QIODevice::ReadOnly)) + return false; + + QByteArray pidLine = reader.readLine(); + pidLine.chop(1); + QByteArray appNameLine = reader.readLine(); + appNameLine.chop(1); + QByteArray hostNameLine = reader.readLine(); + hostNameLine.chop(1); + if (pidLine.isEmpty() || appNameLine.isEmpty()) + return false; + + qint64 thePid = pidLine.toLongLong(); + if (pid) + *pid = thePid; + if (appname) + *appname = QString::fromUtf8(appNameLine); + if (hostname) + *hostname = QString::fromUtf8(hostNameLine); + return thePid > 0; +} + +/*! + Attempts to forcefully remove an existing lock file. + + Calling this is not recommended when protecting a short-lived operation: QLockFile + already takes care of removing lock files after they are older than staleLockTime(). + + This method should only be called when protecting a resource for a long time, i.e. + with staleLockTime(0), and after tryLock() returned LockFailedError, and the user + agreed on removing the lock file. + + Returns true on success, false if the lock file couldn't be removed. This happens + on Windows, when the application owning the lock is still running. +*/ +bool QLockFile::removeStaleLockFile() +{ + Q_D(QLockFile); + if (d->isLocked) { + qWarning("removeStaleLockFile can only be called when not holding the lock"); + return false; + } + return d->removeStaleLock(); +} + +/*! + Returns the lock file error status. + + If tryLock() returns false, this function can be called to find out + the reason why the locking failed. +*/ +QLockFile::LockError QLockFile::error() const +{ + Q_D(const QLockFile); + return d->lockError; +} + +QT_END_NAMESPACE diff --git a/src/corelib/io/qlockfile.h b/src/corelib/io/qlockfile.h new file mode 100644 index 0000000000..4c8b6bf31a --- /dev/null +++ b/src/corelib/io/qlockfile.h @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QLOCKFILE_H +#define QLOCKFILE_H + +#include <QtCore/qstring.h> +#include <QtCore/qscopedpointer.h> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QLockFilePrivate; + +class Q_CORE_EXPORT QLockFile +{ +public: + QLockFile(const QString &fileName); + ~QLockFile(); + + bool lock(); + bool tryLock(int timeout = 0); + void unlock(); + + void setStaleLockTime(int); + int staleLockTime() const; + + bool isLocked() const; + bool getLockInfo(qint64 *pid, QString *hostname, QString *appname) const; + bool removeStaleLockFile(); + + enum LockError { + NoError = 0, + LockFailedError = 1, + PermissionError = 2, + UnknownError = 3 + }; + LockError error() const; + +protected: + QScopedPointer<QLockFilePrivate> d_ptr; + +private: + Q_DECLARE_PRIVATE(QLockFile) + Q_DISABLE_COPY(QLockFile) +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QLOCKFILE_H diff --git a/src/corelib/io/qlockfile_p.h b/src/corelib/io/qlockfile_p.h new file mode 100644 index 0000000000..e046e87cf4 --- /dev/null +++ b/src/corelib/io/qlockfile_p.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QLOCKFILE_P_H +#define QLOCKFILE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtCore/qlockfile.h> +#include <QtCore/qfile.h> + +#ifdef Q_OS_WIN +#include <qt_windows.h> +#endif + +QT_BEGIN_NAMESPACE + +class QLockFilePrivate +{ +public: + QLockFilePrivate(const QString &fn) + : fileName(fn), +#ifdef Q_OS_WIN + fileHandle(INVALID_HANDLE_VALUE), +#else + fileHandle(-1), +#endif + staleLockTime(30 * 1000), // 30 seconds + lockError(QLockFile::NoError), + isLocked(false) + { + } + QLockFile::LockError tryLock_sys(); + bool removeStaleLock(); + bool getLockInfo(qint64 *pid, QString *hostname, QString *appname) const; + // Returns true if the lock belongs to dead PID, or is old. + // The attempt to delete it will tell us if it was really stale or not, though. + bool isApparentlyStale() const; + +#ifdef Q_OS_UNIX + static int checkFcntlWorksAfterFlock(); +#endif + + QString fileName; +#ifdef Q_OS_WIN + Qt::HANDLE fileHandle; +#else + int fileHandle; +#endif + int staleLockTime; // "int milliseconds" is big enough for 24 days + QLockFile::LockError lockError; + bool isLocked; +}; + +QT_END_NAMESPACE + +#endif /* QLOCKFILE_P_H */ diff --git a/src/corelib/io/qlockfile_unix.cpp b/src/corelib/io/qlockfile_unix.cpp new file mode 100644 index 0000000000..ed3b399fbf --- /dev/null +++ b/src/corelib/io/qlockfile_unix.cpp @@ -0,0 +1,207 @@ +/**************************************************************************** +** +** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "private/qlockfile_p.h" + +#include "QtCore/qtemporaryfile.h" +#include "QtCore/qcoreapplication.h" +#include "QtCore/qfileinfo.h" +#include "QtCore/qdebug.h" + +#include "private/qcore_unix_p.h" // qt_safe_open +#include "private/qabstractfileengine_p.h" +#include "private/qtemporaryfile_p.h" + +#include <sys/file.h> // flock +#include <sys/types.h> // kill +#include <signal.h> // kill + +QT_BEGIN_NAMESPACE + +static QString localHostName() // from QHostInfo::localHostName() +{ + char hostName[512]; + if (gethostname(hostName, sizeof(hostName)) == -1) + return QString(); + hostName[sizeof(hostName) - 1] = '\0'; + return QString::fromLocal8Bit(hostName); +} + +// ### merge into qt_safe_write? +static qint64 qt_write_loop(int fd, const char *data, qint64 len) +{ + qint64 pos = 0; + while (pos < len) { + const qint64 ret = qt_safe_write(fd, data + pos, len - pos); + if (ret == -1) // e.g. partition full + return pos; + pos += ret; + } + return pos; +} + +int QLockFilePrivate::checkFcntlWorksAfterFlock() +{ + QTemporaryFile file; + if (!file.open()) + return -2; + const int fd = file.d_func()->engine()->handle(); + if (flock(fd, LOCK_EX | LOCK_NB) == -1) // other threads, and other processes on a local fs + return -3; + struct flock flockData; + flockData.l_type = F_WRLCK; + flockData.l_whence = SEEK_SET; + flockData.l_start = 0; + flockData.l_len = 0; // 0 = entire file + flockData.l_pid = getpid(); + if (fcntl(fd, F_SETLK, &flockData) == -1) // for networked filesystems + return 0; + return 1; +} + +static QBasicAtomicInt fcntlOK = Q_BASIC_ATOMIC_INITIALIZER(-1); + +/*! + \internal + Checks that the OS isn't using POSIX locks to emulate flock(). + Mac OS X is one of those. +*/ +static bool fcntlWorksAfterFlock() +{ + int value = fcntlOK.load(); + if (Q_UNLIKELY(value == -1)) { + value = QLockFilePrivate::checkFcntlWorksAfterFlock(); + fcntlOK.store(value); + } + return value == 1; +} + +static bool setNativeLocks(int fd) +{ + if (flock(fd, LOCK_EX | LOCK_NB) == -1) // other threads, and other processes on a local fs + return false; + struct flock flockData; + flockData.l_type = F_WRLCK; + flockData.l_whence = SEEK_SET; + flockData.l_start = 0; + flockData.l_len = 0; // 0 = entire file + flockData.l_pid = getpid(); + if (fcntlWorksAfterFlock() && fcntl(fd, F_SETLK, &flockData) == -1) // for networked filesystems + return false; + return true; +} + +QLockFile::LockError QLockFilePrivate::tryLock_sys() +{ + const QByteArray lockFileName = QFile::encodeName(fileName); + const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY | O_CREAT | O_EXCL, 0644); + if (fd < 0) { + switch (errno) { + case EEXIST: + return QLockFile::LockFailedError; + case EACCES: + case EROFS: + return QLockFile::PermissionError; + default: + return QLockFile::UnknownError; + } + } + // Ensure nobody else can delete the file while we have it + if (!setNativeLocks(fd)) + qWarning() << "setNativeLocks failed:" << strerror(errno); + + // We hold the lock, continue. + fileHandle = fd; + + // Assemble data, to write in a single call to write + // (otherwise we'd have to check every write call) + QByteArray fileData; + fileData += QByteArray::number(QCoreApplication::applicationPid()); + fileData += '\n'; + fileData += qAppName().toUtf8(); + fileData += '\n'; + fileData += localHostName().toUtf8(); + fileData += '\n'; + + QLockFile::LockError error = QLockFile::NoError; + if (qt_write_loop(fd, fileData.constData(), fileData.size()) < fileData.size()) + error = QLockFile::UnknownError; // partition full + return error; +} + +bool QLockFilePrivate::removeStaleLock() +{ + const QByteArray lockFileName = QFile::encodeName(fileName); + const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY, 0644); + if (fd < 0) // gone already? + return false; + bool success = setNativeLocks(fd) && (::unlink(lockFileName) == 0); + close(fd); + return success; +} + +bool QLockFilePrivate::isApparentlyStale() const +{ + qint64 pid; + QString hostname, appname; + if (!getLockInfo(&pid, &hostname, &appname)) + return false; + if (hostname == localHostName()) { + if (::kill(pid, 0) == -1 && errno == ESRCH) + return true; // PID doesn't exist anymore + } + const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime()); + return staleLockTime > 0 && age > staleLockTime; +} + +void QLockFile::unlock() +{ + Q_D(QLockFile); + if (!d->isLocked) + return; + close(d->fileHandle); + d->fileHandle = -1; + QFile::remove(d->fileName); + d->lockError = QLockFile::NoError; + d->isLocked = false; +} + +QT_END_NAMESPACE diff --git a/src/corelib/io/qlockfile_win.cpp b/src/corelib/io/qlockfile_win.cpp new file mode 100644 index 0000000000..b5f6d9f3da --- /dev/null +++ b/src/corelib/io/qlockfile_win.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "private/qlockfile_p.h" +#include "private/qfilesystementry_p.h" +#include <qt_windows.h> + +#include "QtCore/qcoreapplication.h" +#include "QtCore/qfileinfo.h" +#include "QtCore/qdatetime.h" +#include "QtCore/qdebug.h" + +QT_BEGIN_NAMESPACE + +QLockFile::LockError QLockFilePrivate::tryLock_sys() +{ + SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE }; + const QFileSystemEntry fileEntry(fileName); + // When writing, allow others to read. + // When reading, QFile will allow others to read and write, all good. + // Adding FILE_SHARE_DELETE would allow forceful deletion of stale files, + // but Windows doesn't allow recreating it while this handle is open anyway, + // so this would only create confusion (can't lock, but no lock file to read from). + const DWORD dwShareMode = FILE_SHARE_READ; + HANDLE fh = CreateFile((const wchar_t*)fileEntry.nativeFilePath().utf16(), + GENERIC_WRITE, + dwShareMode, + &securityAtts, + CREATE_NEW, // error if already exists + FILE_ATTRIBUTE_NORMAL, + NULL); + if (fh == INVALID_HANDLE_VALUE) { + const DWORD lastError = GetLastError(); + switch (lastError) { + case ERROR_SHARING_VIOLATION: + case ERROR_ALREADY_EXISTS: + case ERROR_FILE_EXISTS: + case ERROR_ACCESS_DENIED: // readonly file, or file still in use by another process. Assume the latter, since we don't create it readonly. + return QLockFile::LockFailedError; + default: + qWarning() << "Got unexpected locking error" << lastError; + return QLockFile::UnknownError; + } + } + + // We hold the lock, continue. + fileHandle = fh; + // Assemble data, to write in a single call to write + // (otherwise we'd have to check every write call) + QByteArray fileData; + fileData += QByteArray::number(QCoreApplication::applicationPid()); + fileData += '\n'; + fileData += qAppName().toUtf8(); + fileData += '\n'; + //fileData += localHostname(); // gethostname requires winsock init, see QHostInfo... + fileData += '\n'; + DWORD bytesWritten = 0; + QLockFile::LockError error = QLockFile::NoError; + if (!WriteFile(fh, fileData.constData(), fileData.size(), &bytesWritten, NULL) || !FlushFileBuffers(fh)) + error = QLockFile::UnknownError; // partition full + return error; +} + +bool QLockFilePrivate::removeStaleLock() +{ + // QFile::remove fails on Windows if the other process is still using the file, so it's not stale. + return QFile::remove(fileName); +} + +bool QLockFilePrivate::isApparentlyStale() const +{ + qint64 pid; + QString hostname, appname; + if (!getLockInfo(&pid, &hostname, &appname)) + return false; + + HANDLE procHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); + if (!procHandle) + return true; + // We got a handle but check if process is still alive + DWORD dwR = ::WaitForSingleObject(procHandle, 0); + ::CloseHandle(procHandle); + if (dwR == WAIT_TIMEOUT) + return true; + const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime()); + return staleLockTime > 0 && age > staleLockTime; +} + +void QLockFile::unlock() +{ + Q_D(QLockFile); + if (!d->isLocked) + return; + CloseHandle(d->fileHandle); + QFile::remove(d->fileName); + d->lockError = QLockFile::NoError; + d->isLocked = false; +} + +QT_END_NAMESPACE diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index 8409e7e479..3993cf5002 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -458,6 +458,9 @@ void QProcessPrivate::Channel::clear() the program you want to run as arguments to start(). Arguments are supplied as individual strings in a QStringList. + Alternatively, you can set the program to run with setProgram() + and setArguments(), and then call start() or open(). + For example, the following code snippet runs the analog clock example in the Fusion style on X11 platforms by passing strings containing "-style" and "fusion" as two items in the list of @@ -1946,6 +1949,58 @@ void QProcess::start(const QString &program, const QStringList &arguments, OpenM return; } + d->program = program; + d->arguments = arguments; + + open(mode); +} + +/*! + \since 5.1 + \overload + + Starts the program set by setProgram() with arguments set by setArguments(). + The OpenMode is set to \a mode. + + This method is a convenient alias to open(). + + \sa open(), setProgram(), setArguments() + */ +void QProcess::start(OpenMode mode) +{ + open(mode); +} + +/*! + Starts the program set by setProgram() in a new process, if none is already + running, passing the command line arguments set by setArguments(). The OpenMode + is set to \a mode. + + The QProcess object will immediately enter the Starting state. If the + process starts successfully, QProcess will emit started(); otherwise, + error() will be emitted. If the QProcess object is already running a + process, a warning may be printed at the console, the function will return false, + and the existing process will continue running. + + \note Processes are started asynchronously, which means the started() + and error() signals may be delayed. Call waitForStarted() to make + sure the process has started (or has failed to start) and those signals + have been emitted. In this regard, a true return value merly means the process + was correcty initialized, not that the program was actually started. + +*/ +bool QProcess::open(OpenMode mode) +{ + Q_D(QProcess); + if (d->processState != NotRunning) { + qWarning("QProcess::start: Process is already running"); + return false; + } + if (d->program.isEmpty()) { + qWarning("QProcess::start: program not set"); + return false; + } + #if defined QPROCESS_DEBUG qDebug() << "QProcess::start(" << program << ',' << arguments << ',' << mode << ')'; #endif @@ -1967,14 +2022,13 @@ void QProcess::start(const QString &program, const QStringList &arguments, OpenM d->stdoutChannel.closed = false; d->stderrChannel.closed = false; - d->program = program; - d->arguments = arguments; - d->exitCode = 0; d->exitStatus = NormalExit; d->processError = QProcess::UnknownError; d->errorString.clear(); d->startProcess(); + + return true; } @@ -2074,6 +2128,24 @@ QString QProcess::program() const } /*! + \since 5.1 + + Set the \a program to use when starting the process. + That function must be call before open() + + \sa start(), setArguments(), program() +*/ +void QProcess::setProgram(const QString &program) +{ + Q_D(QProcess); + if (d->processState != NotRunning) { + qWarning("QProcess::setProgram: Process is already running"); + return; + } + d->program = program; +} + +/*! Returns the command line arguments the process was last started with. \sa start() @@ -2085,6 +2157,24 @@ QStringList QProcess::arguments() const } /*! + \since 5.1 + + Set the \a arguments to pass to the called program when starting the process. + That function must be call before open() + + \sa start(), setProgram(), arguments() +*/ +void QProcess::setArguments(const QStringList &arguments) +{ + Q_D(QProcess); + if (d->processState != NotRunning) { + qWarning("QProcess::setProgram: Process is already running"); + return; + } + d->arguments = arguments; +} + +/*! Attempts to terminate the process. The process may not exit as a result of calling this function (it is given diff --git a/src/corelib/io/qprocess.h b/src/corelib/io/qprocess.h index 2c6746b0ab..29adf37f74 100644 --- a/src/corelib/io/qprocess.h +++ b/src/corelib/io/qprocess.h @@ -46,8 +46,6 @@ #include <QtCore/qstringlist.h> #include <QtCore/qshareddata.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -138,8 +136,14 @@ public: void start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite); void start(const QString &command, OpenMode mode = ReadWrite); + void start(OpenMode mode = ReadWrite); + bool open(OpenMode mode = ReadWrite) Q_DECL_OVERRIDE; + QString program() const; + void setProgram(const QString &program); + QStringList arguments() const; + void setArguments(const QStringList & arguments); ProcessChannelMode readChannelMode() const; void setReadChannelMode(ProcessChannelMode mode); @@ -261,6 +265,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QPROCESS_H diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index e159bf8f30..997848851d 100644 --- a/src/corelib/io/qprocess_unix.cpp +++ b/src/corelib/io/qprocess_unix.cpp @@ -328,16 +328,18 @@ void QProcessManager::unlock() mutex.unlock(); } -static void qt_create_pipe(int *pipe) +static int qt_create_pipe(int *pipe) { if (pipe[0] != -1) qt_safe_close(pipe[0]); if (pipe[1] != -1) qt_safe_close(pipe[1]); - if (qt_safe_pipe(pipe) != 0) { + int pipe_ret = qt_safe_pipe(pipe); + if (pipe_ret != 0) { qWarning("QProcessPrivate::createPipe: Cannot create pipe %p: %s", pipe, qPrintable(qt_error_string(errno))); } + return pipe_ret; } void QProcessPrivate::destroyPipe(int *pipe) @@ -374,7 +376,8 @@ bool QProcessPrivate::createChannel(Channel &channel) if (channel.type == Channel::Normal) { // we're piping this channel to our own process - qt_create_pipe(channel.pipe); + if (qt_create_pipe(channel.pipe) != 0) + return false; // create the socket notifiers if (threadData->eventDispatcher) { @@ -458,7 +461,8 @@ bool QProcessPrivate::createChannel(Channel &channel) Q_ASSERT(sink->pipe[0] == INVALID_Q_PIPE && sink->pipe[1] == INVALID_Q_PIPE); Q_PIPE pipe[2] = { -1, -1 }; - qt_create_pipe(pipe); + if (qt_create_pipe(pipe) != 0) + return false; sink->pipe[0] = pipe[0]; source->pipe[1] = pipe[1]; @@ -548,10 +552,15 @@ void QProcessPrivate::startProcess() // Initialize pipes if (!createChannel(stdinChannel) || !createChannel(stdoutChannel) || - !createChannel(stderrChannel)) + !createChannel(stderrChannel) || + qt_create_pipe(childStartedPipe) != 0 || + qt_create_pipe(deathPipe) != 0) { + processError = QProcess::FailedToStart; + q->setErrorString(qt_error_string(errno)); + emit q->error(processError); + cleanup(); return; - qt_create_pipe(childStartedPipe); - qt_create_pipe(deathPipe); + } if (threadData->eventDispatcher) { startupSocketNotifier = new QSocketNotifier(childStartedPipe[0], @@ -1001,9 +1010,9 @@ static int select_msecs(int nfds, fd_set *fdread, fd_set *fdwrite, int timeout) if (timeout < 0) return qt_safe_select(nfds, fdread, fdwrite, 0, 0); - struct timeval tv; + struct timespec tv; tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout % 1000) * 1000; + tv.tv_nsec = (timeout % 1000) * 1000 * 1000; return qt_safe_select(nfds, fdread, fdwrite, 0, &tv); } @@ -1339,10 +1348,15 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a // To catch the startup of the child int startedPipe[2]; - qt_safe_pipe(startedPipe); + if (qt_safe_pipe(startedPipe) != 0) + return false; // To communicate the pid of the child int pidPipe[2]; - qt_safe_pipe(pidPipe); + if (qt_safe_pipe(pidPipe) != 0) { + qt_safe_close(startedPipe[0]); + qt_safe_close(startedPipe[1]); + return false; + } pid_t childPid = fork(); if (childPid == 0) { diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index 0ce3ce3611..7dfc9b977c 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -62,15 +62,6 @@ //#define DEBUG_RESOURCE_MATCH -#if defined(Q_OS_VXWORKS) -# if defined(m_data) -# undef m_data -# endif -# if defined(m_len) -# undef m_len -# endif -#endif - QT_BEGIN_NAMESPACE diff --git a/src/corelib/io/qresource.h b/src/corelib/io/qresource.h index 1623792e0b..88467bd53b 100644 --- a/src/corelib/io/qresource.h +++ b/src/corelib/io/qresource.h @@ -47,8 +47,6 @@ #include <QtCore/qstringlist.h> #include <QtCore/qlist.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -98,6 +96,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QRESOURCE_H diff --git a/src/corelib/io/qsavefile.cpp b/src/corelib/io/qsavefile.cpp new file mode 100644 index 0000000000..fee6a4c4d8 --- /dev/null +++ b/src/corelib/io/qsavefile.cpp @@ -0,0 +1,316 @@ +/**************************************************************************** +** +** Copyright (C) 2012 David Faure <faure@kde.org> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformdefs.h" +#include "qsavefile.h" +#include "private/qsavefile_p.h" +#include "qfileinfo.h" +#include "qabstractfileengine_p.h" +#include "qdebug.h" +#include "qtemporaryfile.h" +#include "private/qiodevice_p.h" +#include "private/qtemporaryfile_p.h" + +QT_BEGIN_NAMESPACE + +QSaveFilePrivate::QSaveFilePrivate() + : writeError(QFileDevice::NoError) +{ +} + +QSaveFilePrivate::~QSaveFilePrivate() +{ +} + +/*! + \class QSaveFile + \inmodule QtCore + \brief The QSaveFile class provides an interface for safely writing to files. + + \ingroup io + + \reentrant + + \since 5.1 + + QSaveFile is an I/O device for writing text and binary files, without losing + existing data if the writing operation fails. + + While writing, the contents will be written to a temporary file, and if + no error happened, commit() will move it to the final file. This ensures that + no data at the final file is lost in case an error happens while writing, + and no partially-written file is ever present at the final location. Always + use QSaveFile when saving entire documents to disk. + + QSaveFile automatically detects errors while writing, such as the full partition + situation, where write() cannot write all the bytes. It will remember that + an error happened, and will discard the temporary file in commit(). + + Much like with QFile, the file is opened with open(). Data is usually read + and written using QDataStream or QTextStream, but you can also call the + QIODevice-inherited functions read(), readLine(), readAll(), write(). + + Unlike QFile, calling close() is not allowed. commit() replaces it. If commit() + was not called and the QSaveFile instance is destroyed, the temporary file is + discarded. + + To abort saving due to an application error, call cancelWriting(), so that + even a call to commit() later on will not save. + + \sa QTextStream, QDataStream, QFileInfo, QDir, QFile, QTemporaryFile +*/ + +/*! + Constructs a new file object with the given \a parent. +*/ +QSaveFile::QSaveFile(QObject *parent) + : QFileDevice(*new QSaveFilePrivate, parent) +{ +} +/*! + Constructs a new file object to represent the file with the given \a name. +*/ +QSaveFile::QSaveFile(const QString &name) + : QFileDevice(*new QSaveFilePrivate, 0) +{ + Q_D(QSaveFile); + d->fileName = name; +} +/*! + Constructs a new file object with the given \a parent to represent the + file with the specified \a name. +*/ +QSaveFile::QSaveFile(const QString &name, QObject *parent) + : QFileDevice(*new QSaveFilePrivate, parent) +{ + Q_D(QSaveFile); + d->fileName = name; +} + +/*! + Destroys the file object, discarding the saved contents unless commit() was called. +*/ +QSaveFile::~QSaveFile() +{ + Q_D(QSaveFile); + QFileDevice::close(); + if (d->fileEngine) { + d->fileEngine->remove(); + delete d->fileEngine; + d->fileEngine = 0; + } +} + +/*! + Returns the name set by setFileName() or to the QSaveFile + constructor. + + \sa setFileName() +*/ +QString QSaveFile::fileName() const +{ + return d_func()->fileName; +} + +/*! + Sets the \a name of the file. The name can have no path, a + relative path, or an absolute path. + + \sa QFile::setFileName(), fileName() +*/ +void QSaveFile::setFileName(const QString &name) +{ + d_func()->fileName = name; +} + +/*! + Opens the file using OpenMode \a mode, returning true if successful; + otherwise false. + + Important: the \a mode must include QIODevice::WriteOnly. + It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered. + + QIODevice::ReadWrite and QIODevice::Append are not supported at the moment. + + \sa QIODevice::OpenMode, setFileName() +*/ +bool QSaveFile::open(OpenMode mode) +{ + Q_D(QSaveFile); + if (isOpen()) { + qWarning("QSaveFile::open: File (%s) already open", qPrintable(fileName())); + return false; + } + unsetError(); + if ((mode & (ReadOnly | WriteOnly)) == 0) { + qWarning("QSaveFile::open: Open mode not specified"); + return false; + } + // In the future we could implement ReadWrite by copying from the existing file to the temp file... + if ((mode & ReadOnly) || (mode & Append)) { + qWarning("QSaveFile::open: Unsupported open mode 0x%x", int(mode)); + return false; + } + + // check if existing file is writable + QFileInfo existingFile(d->fileName); + if (existingFile.exists() && !existingFile.isWritable()) { + d->setError(QFileDevice::WriteError, QSaveFile::tr("Existing file %1 is not writable").arg(d->fileName)); + d->writeError = QFileDevice::WriteError; + return false; + } + d->fileEngine = new QTemporaryFileEngine(d->fileName); + // Same as in QFile: QIODevice provides the buffering, so there's no need to request it from the file engine. + if (!d->fileEngine->open(mode | QIODevice::Unbuffered)) { + QFileDevice::FileError err = d->fileEngine->error(); + if (err == QFileDevice::UnspecifiedError) + err = QFileDevice::OpenError; + d->setError(err, d->fileEngine->errorString()); + delete d->fileEngine; + d->fileEngine = 0; + return false; + } + + QFileDevice::open(mode); + if (existingFile.exists()) + setPermissions(existingFile.permissions()); + return true; +} + +/*! + \reimp + This method has been made private so that it cannot be called, in order to prevent mistakes. + In order to finish writing the file, call commit(). + If instead you want to abort writing, call cancelWriting(). +*/ +void QSaveFile::close() +{ + qFatal("QSaveFile::close called"); +} + +/*! + Commits the changes to disk, if all previous writes were successful. + + It is mandatory to call this at the end of the saving operation, otherwise the file will be + discarded. + + If an error happened during writing, deletes the temporary file and returns false. + Otherwise, renames it to the final fileName and returns true on success. + Finally, closes the device. + + \sa cancelWriting() +*/ +bool QSaveFile::commit() +{ + Q_D(QSaveFile); + if (!d->fileEngine) + return false; + + if (!isOpen()) { + qWarning("QSaveFile::commit: File (%s) is not open", qPrintable(fileName())); + return false; + } + QFileDevice::close(); // calls flush() + + // Sync to disk if possible. Ignore errors (e.g. not supported). + d->fileEngine->syncToDisk(); + + if (d->writeError != QFileDevice::NoError) { + d->fileEngine->remove(); + d->writeError = QFileDevice::NoError; + delete d->fileEngine; + d->fileEngine = 0; + return false; + } + // atomically replace old file with new file + // Can't use QFile::rename for that, must use the file engine directly + Q_ASSERT(d->fileEngine); + if (!d->fileEngine->renameOverwrite(d->fileName)) { + d->setError(d->fileEngine->error(), d->fileEngine->errorString()); + d->fileEngine->remove(); + delete d->fileEngine; + d->fileEngine = 0; + return false; + } + delete d->fileEngine; + d->fileEngine = 0; + return true; +} + +/*! + Cancels writing the new file. + + If the application changes its mind while saving, it can call cancelWriting(), + which sets an error code so that commit() will discard the temporary file. + + Alternatively, it can simply make sure not to call commit(). + + Further write operations are possible after calling this method, but none + of it will have any effect, the written file will be discarded. + + \sa commit() +*/ +void QSaveFile::cancelWriting() +{ + Q_D(QSaveFile); + if (!isOpen()) + return; + d->setError(QFileDevice::WriteError, QSaveFile::tr("Writing canceled by application")); + d->writeError = QFileDevice::WriteError; +} + +/*! + \reimp +*/ +qint64 QSaveFile::writeData(const char *data, qint64 len) +{ + Q_D(QSaveFile); + if (d->writeError != QFileDevice::NoError) + return -1; + + const qint64 ret = QFileDevice::writeData(data, len); + + if (d->error != QFileDevice::NoError) + d->writeError = d->error; + return ret; +} + +QT_END_NAMESPACE diff --git a/src/corelib/io/qsavefile.h b/src/corelib/io/qsavefile.h new file mode 100644 index 0000000000..32af4a708e --- /dev/null +++ b/src/corelib/io/qsavefile.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2012 David Faure <faure@kde.org> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSAVEFILE_H +#define QSAVEFILE_H + +#include <QtCore/qfiledevice.h> +#include <QtCore/qstring.h> + +#ifdef open +#error qsavefile.h must be included before any header file that defines open +#endif + +QT_BEGIN_NAMESPACE + + +class QAbstractFileEngine; +class QSaveFilePrivate; + +class Q_CORE_EXPORT QSaveFile : public QFileDevice +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QSaveFile) + +public: + + explicit QSaveFile(const QString &name); + explicit QSaveFile(QObject *parent = 0); + explicit QSaveFile(const QString &name, QObject *parent); + ~QSaveFile(); + + QString fileName() const Q_DECL_OVERRIDE; + void setFileName(const QString &name); + + bool open(OpenMode flags) Q_DECL_OVERRIDE; + bool commit(); + + void cancelWriting(); + +protected: + qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE; + +private: + void close() Q_DECL_OVERRIDE; + +private: + Q_DISABLE_COPY(QSaveFile) +}; + +QT_END_NAMESPACE + +#endif // QSAVEFILE_H diff --git a/src/corelib/io/qsavefile_p.h b/src/corelib/io/qsavefile_p.h new file mode 100644 index 0000000000..27e687835b --- /dev/null +++ b/src/corelib/io/qsavefile_p.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2013 David Faure <faure@kde.org> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSAVEFILE_P_H +#define QSAVEFILE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "private/qfiledevice_p.h" + +QT_BEGIN_NAMESPACE + +class QSaveFilePrivate : public QFileDevicePrivate +{ + Q_DECLARE_PUBLIC(QSaveFile) + +protected: + QSaveFilePrivate(); + ~QSaveFilePrivate(); + + QString fileName; + + QFileDevice::FileError writeError; +}; + +QT_END_NAMESPACE + +#endif // QSAVEFILE_P_H diff --git a/src/corelib/io/qsettings.h b/src/corelib/io/qsettings.h index 99b8ac108f..a720b3d709 100644 --- a/src/corelib/io/qsettings.h +++ b/src/corelib/io/qsettings.h @@ -47,8 +47,6 @@ #include <QtCore/qstring.h> #include <QtCore/qscopedpointer.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_END_NAMESPACE @@ -198,6 +196,4 @@ QT_END_NAMESPACE #endif // QT_NO_SETTINGS -QT_END_HEADER - #endif // QSETTINGS_H diff --git a/src/corelib/io/qstandardpaths.h b/src/corelib/io/qstandardpaths.h index 9b95d26ce1..2376b7d6c8 100644 --- a/src/corelib/io/qstandardpaths.h +++ b/src/corelib/io/qstandardpaths.h @@ -44,8 +44,6 @@ #include <QtCore/qstringlist.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -102,6 +100,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSTANDARDPATHS_H diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp index 6782fcb986..755c31f371 100644 --- a/src/corelib/io/qtemporarydir.cpp +++ b/src/corelib/io/qtemporarydir.cpp @@ -52,7 +52,7 @@ #endif #include <stdlib.h> // mkdtemp -#if defined(Q_OS_QNX) || defined(Q_OS_WIN) +#if defined(Q_OS_QNX) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID) #include <private/qfilesystemengine_p.h> #endif @@ -94,9 +94,9 @@ static QString defaultTemplateName() return QDir::tempPath() + QLatin1Char('/') + baseName + QLatin1String("-XXXXXX"); } -#if defined(Q_OS_QNX ) || defined(Q_OS_WIN) -static char *mkdtemp(char *templateName) +static char *q_mkdtemp(char *templateName) { +#if defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID) static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; const size_t length = strlen(templateName); @@ -137,17 +137,17 @@ static char *mkdtemp(char *templateName) } } return 0; -} -#elif defined(Q_OS_LINUX_ANDROID) -extern char *mkdtemp(char *); +#else + return mkdtemp(templateName); #endif +} void QTemporaryDirPrivate::create(const QString &templateName) { QByteArray buffer = QFile::encodeName(templateName); if (!buffer.endsWith("XXXXXX")) buffer += "XXXXXX"; - if (mkdtemp(buffer.data())) { // modifies buffer + if (q_mkdtemp(buffer.data())) { // modifies buffer success = true; path = QFile::decodeName(buffer.constData()); } diff --git a/src/corelib/io/qtemporarydir.h b/src/corelib/io/qtemporarydir.h index b22c8f9329..47252cb5e5 100644 --- a/src/corelib/io/qtemporarydir.h +++ b/src/corelib/io/qtemporarydir.h @@ -45,8 +45,6 @@ #include <QtCore/qdir.h> #include <QtCore/QScopedPointer> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -79,6 +77,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QTEMPORARYDIR_H diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index 9408727d25..d3a6e3c238 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -44,10 +44,9 @@ #ifndef QT_NO_TEMPORARYFILE #include "qplatformdefs.h" +#include "private/qtemporaryfile_p.h" #include "private/qfile_p.h" -#include "private/qfsfileengine_p.h" #include "private/qsystemerror_p.h" -#include "private/qfilesystemengine_p.h" #if !defined(Q_OS_WIN) #include "private/qcore_unix_p.h" // overrides QT_OPEN @@ -218,36 +217,6 @@ static bool createFileFromTemplate(NativeFileHandle &file, } //************* QTemporaryFileEngine -class QTemporaryFileEngine : public QFSFileEngine -{ - Q_DECLARE_PRIVATE(QFSFileEngine) -public: - QTemporaryFileEngine(const QString &file, bool fileIsTemplate = true) - : QFSFileEngine(), filePathIsTemplate(fileIsTemplate), - filePathWasTemplate(fileIsTemplate) - { - Q_D(QFSFileEngine); - d->fileEntry = QFileSystemEntry(file); - - if (!filePathIsTemplate) - QFSFileEngine::setFileName(file); - } - - ~QTemporaryFileEngine(); - - bool isReallyOpen(); - void setFileName(const QString &file); - void setFileTemplate(const QString &fileTemplate); - - bool open(QIODevice::OpenMode flags); - bool remove(); - bool rename(const QString &newName); - bool close(); - - bool filePathIsTemplate; - bool filePathWasTemplate; -}; - QTemporaryFileEngine::~QTemporaryFileEngine() { QFSFileEngine::close(); @@ -398,6 +367,12 @@ bool QTemporaryFileEngine::rename(const QString &newName) return QFSFileEngine::rename(newName); } +bool QTemporaryFileEngine::renameOverwrite(const QString &newName) +{ + QFSFileEngine::close(); + return QFSFileEngine::renameOverwrite(newName); +} + bool QTemporaryFileEngine::close() { // Don't close the file, just seek to the front. @@ -407,19 +382,6 @@ bool QTemporaryFileEngine::close() } //************* QTemporaryFilePrivate -class QTemporaryFilePrivate : public QFilePrivate -{ - Q_DECLARE_PUBLIC(QTemporaryFile) - -protected: - QTemporaryFilePrivate(); - ~QTemporaryFilePrivate(); - - QAbstractFileEngine *engine() const; - - bool autoRemove; - QString templateName; -}; QTemporaryFilePrivate::QTemporaryFilePrivate() : autoRemove(true) { @@ -440,7 +402,7 @@ QAbstractFileEngine *QTemporaryFilePrivate::engine() const return fileEngine; } -static QString defaultTemplateName() +QString QTemporaryFilePrivate::defaultTemplateName() { QString baseName; #if defined(QT_BUILD_CORE_LIB) @@ -506,7 +468,7 @@ QTemporaryFile::QTemporaryFile() : QFile(*new QTemporaryFilePrivate) { Q_D(QTemporaryFile); - d->templateName = defaultTemplateName(); + d->templateName = QTemporaryFilePrivate::defaultTemplateName(); } QTemporaryFile::QTemporaryFile(const QString &templateName) @@ -529,7 +491,7 @@ QTemporaryFile::QTemporaryFile() : QFile(*new QTemporaryFilePrivate, 0) { Q_D(QTemporaryFile); - d->templateName = defaultTemplateName(); + d->templateName = QTemporaryFilePrivate::defaultTemplateName(); } /*! @@ -565,7 +527,7 @@ QTemporaryFile::QTemporaryFile(QObject *parent) : QFile(*new QTemporaryFilePrivate, parent) { Q_D(QTemporaryFile); - d->templateName = defaultTemplateName(); + d->templateName = QTemporaryFilePrivate::defaultTemplateName(); } /*! diff --git a/src/corelib/io/qtemporaryfile.h b/src/corelib/io/qtemporaryfile.h index b497d9de93..09aa53c33b 100644 --- a/src/corelib/io/qtemporaryfile.h +++ b/src/corelib/io/qtemporaryfile.h @@ -49,14 +49,13 @@ #error qtemporaryfile.h must be included before any header file that defines open #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #ifndef QT_NO_TEMPORARYFILE class QTemporaryFilePrivate; +class QLockFilePrivate; class Q_CORE_EXPORT QTemporaryFile : public QFile { @@ -98,6 +97,7 @@ protected: private: friend class QFile; + friend class QLockFilePrivate; Q_DISABLE_COPY(QTemporaryFile) }; @@ -105,6 +105,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QTEMPORARYFILE_H diff --git a/src/corelib/io/qtemporaryfile_p.h b/src/corelib/io/qtemporaryfile_p.h new file mode 100644 index 0000000000..d274f60ecc --- /dev/null +++ b/src/corelib/io/qtemporaryfile_p.h @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTEMPORARYFILE_P_H +#define QTEMPORARYFILE_P_H + +#include "private/qfsfileengine_p.h" +#include "private/qfilesystemengine_p.h" +#include "private/qfile_p.h" + +QT_BEGIN_NAMESPACE + +class QTemporaryFilePrivate : public QFilePrivate +{ + Q_DECLARE_PUBLIC(QTemporaryFile) + +protected: + QTemporaryFilePrivate(); + ~QTemporaryFilePrivate(); + + QAbstractFileEngine *engine() const; + + bool autoRemove; + QString templateName; + + static QString defaultTemplateName(); + + friend class QLockFilePrivate; +}; + +class QTemporaryFileEngine : public QFSFileEngine +{ + Q_DECLARE_PRIVATE(QFSFileEngine) +public: + QTemporaryFileEngine(const QString &file, bool fileIsTemplate = true) + : QFSFileEngine(), filePathIsTemplate(fileIsTemplate), + filePathWasTemplate(fileIsTemplate) + { + Q_D(QFSFileEngine); + d->fileEntry = QFileSystemEntry(file); + + if (!filePathIsTemplate) + QFSFileEngine::setFileName(file); + } + + ~QTemporaryFileEngine(); + + bool isReallyOpen(); + void setFileName(const QString &file); + void setFileTemplate(const QString &fileTemplate); + + bool open(QIODevice::OpenMode flags); + bool remove(); + bool rename(const QString &newName); + bool renameOverwrite(const QString &newName); + bool close(); + + bool filePathIsTemplate; + bool filePathWasTemplate; +}; + +QT_END_NAMESPACE + +#endif /* QTEMPORARYFILE_P_H */ + diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index 70c6eed9da..8459cdd158 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -226,12 +226,10 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384; */ #include "qtextstream.h" +#include "private/qtextstream_p.h" #include "qbuffer.h" #include "qfile.h" #include "qnumeric.h" -#ifndef QT_NO_TEXTCODEC -#include "qtextcodec.h" -#endif #ifndef Q_OS_WINCE #include <locale.h> #endif @@ -315,119 +313,7 @@ QT_END_NAMESPACE QT_BEGIN_NAMESPACE -#ifndef QT_NO_QOBJECT -class QDeviceClosedNotifier : public QObject -{ - Q_OBJECT -public: - inline QDeviceClosedNotifier() - { } - - inline void setupDevice(QTextStream *stream, QIODevice *device) - { - disconnect(); - if (device) - connect(device, SIGNAL(aboutToClose()), this, SLOT(flushStream())); - this->stream = stream; - } - -public Q_SLOTS: - inline void flushStream() { stream->flush(); } - -private: - QTextStream *stream; -}; -#endif - //------------------------------------------------------------------- -class QTextStreamPrivate -{ - Q_DECLARE_PUBLIC(QTextStream) -public: - QTextStreamPrivate(QTextStream *q_ptr); - ~QTextStreamPrivate(); - void reset(); - - // device - QIODevice *device; -#ifndef QT_NO_QOBJECT - QDeviceClosedNotifier deviceClosedNotifier; -#endif - bool deleteDevice; - - // string - QString *string; - int stringOffset; - QIODevice::OpenMode stringOpenMode; - -#ifndef QT_NO_TEXTCODEC - // codec - QTextCodec *codec; - QTextCodec::ConverterState readConverterState; - QTextCodec::ConverterState writeConverterState; - QTextCodec::ConverterState *readConverterSavedState; - bool autoDetectUnicode; -#endif - - // i/o - enum TokenDelimiter { - Space, - NotSpace, - EndOfLine - }; - - QString read(int maxlen); - bool scan(const QChar **ptr, int *tokenLength, - int maxlen, TokenDelimiter delimiter); - inline const QChar *readPtr() const; - inline void consumeLastToken(); - inline void consume(int nchars); - void saveConverterState(qint64 newPos); - void restoreToSavedConverterState(); - int lastTokenSize; - - // Return value type for getNumber() - enum NumberParsingStatus { - npsOk, - npsMissingDigit, - npsInvalidPrefix - }; - - inline bool getChar(QChar *ch); - inline void ungetChar(QChar ch); - NumberParsingStatus getNumber(qulonglong *l); - bool getReal(double *f); - - inline void write(const QString &data); - inline void putString(const QString &ch, bool number = false); - void putNumber(qulonglong number, bool negative); - - // buffers - bool fillReadBuffer(qint64 maxBytes = -1); - void resetReadBuffer(); - void flushWriteBuffer(); - QString writeBuffer; - QString readBuffer; - int readBufferOffset; - int readConverterSavedStateOffset; //the offset between readBufferStartDevicePos and that start of the buffer - qint64 readBufferStartDevicePos; - - // streaming parameters - int realNumberPrecision; - int integerBase; - int fieldWidth; - QChar padChar; - QTextStream::FieldAlignment fieldAlignment; - QTextStream::RealNumberNotation realNumberNotation; - QTextStream::NumberFlags numberFlags; - - // status - QTextStream::Status status; - - QLocale locale; - - QTextStream *q_ptr; -}; /*! \internal @@ -481,10 +367,7 @@ static void copyConverterStateHelper(QTextCodec::ConverterState *dest, } #endif -/*! - \internal -*/ -void QTextStreamPrivate::reset() +void QTextStreamPrivate::Params::reset() { realNumberPrecision = 6; integerBase = 0; @@ -493,6 +376,14 @@ void QTextStreamPrivate::reset() fieldAlignment = QTextStream::AlignRight; realNumberNotation = QTextStream::SmartNotation; numberFlags = 0; +} + +/*! + \internal +*/ +void QTextStreamPrivate::reset() +{ + params.reset(); device = 0; deleteDevice = false; @@ -985,15 +876,17 @@ inline void QTextStreamPrivate::putString(const QString &s, bool number) QString tmp = s; // handle padding - int padSize = fieldWidth - s.size(); + int padSize = params.fieldWidth - s.size(); if (padSize > 0) { - QString pad(padSize, padChar); - if (fieldAlignment == QTextStream::AlignLeft) { - tmp.append(QString(padSize, padChar)); - } else if (fieldAlignment == QTextStream::AlignRight - || fieldAlignment == QTextStream::AlignAccountingStyle) { - tmp.prepend(QString(padSize, padChar)); - if (fieldAlignment == QTextStream::AlignAccountingStyle && number) { + QString pad(padSize, params.padChar); + switch (params.fieldAlignment) { + case QTextStream::AlignLeft: + tmp.append(pad); + break; + case QTextStream::AlignRight: + case QTextStream::AlignAccountingStyle: + tmp.prepend(pad); + if (params.fieldAlignment == QTextStream::AlignAccountingStyle && number) { const QChar sign = s.size() > 0 ? s.at(0) : QChar(); if (sign == locale.negativeSign() || sign == locale.positiveSign()) { QChar *data = tmp.data(); @@ -1001,9 +894,11 @@ inline void QTextStreamPrivate::putString(const QString &s, bool number) data[0] = sign; } } - } else if (fieldAlignment == QTextStream::AlignCenter) { - tmp.prepend(QString(padSize/2, padChar)); - tmp.append(QString(padSize - padSize/2, padChar)); + break; + case QTextStream::AlignCenter: + tmp.prepend(QString(padSize/2, params.padChar)); + tmp.append(QString(padSize - padSize/2, params.padChar)); + break; } } @@ -1175,13 +1070,7 @@ void QTextStream::reset() { Q_D(QTextStream); - d->realNumberPrecision = 6; - d->integerBase = 0; - d->fieldWidth = 0; - d->padChar = QLatin1Char(' '); - d->fieldAlignment = QTextStream::AlignRight; - d->realNumberNotation = QTextStream::SmartNotation; - d->numberFlags = 0; + d->params.reset(); } /*! @@ -1400,7 +1289,7 @@ QString *QTextStream::string() const void QTextStream::setFieldAlignment(FieldAlignment mode) { Q_D(QTextStream); - d->fieldAlignment = mode; + d->params.fieldAlignment = mode; } /*! @@ -1411,7 +1300,7 @@ void QTextStream::setFieldAlignment(FieldAlignment mode) QTextStream::FieldAlignment QTextStream::fieldAlignment() const { Q_D(const QTextStream); - return d->fieldAlignment; + return d->params.fieldAlignment; } /*! @@ -1432,7 +1321,7 @@ QTextStream::FieldAlignment QTextStream::fieldAlignment() const void QTextStream::setPadChar(QChar ch) { Q_D(QTextStream); - d->padChar = ch; + d->params.padChar = ch; } /*! @@ -1443,7 +1332,7 @@ void QTextStream::setPadChar(QChar ch) QChar QTextStream::padChar() const { Q_D(const QTextStream); - return d->padChar; + return d->params.padChar; } /*! @@ -1461,7 +1350,7 @@ QChar QTextStream::padChar() const void QTextStream::setFieldWidth(int width) { Q_D(QTextStream); - d->fieldWidth = width; + d->params.fieldWidth = width; } /*! @@ -1472,7 +1361,7 @@ void QTextStream::setFieldWidth(int width) int QTextStream::fieldWidth() const { Q_D(const QTextStream); - return d->fieldWidth; + return d->params.fieldWidth; } /*! @@ -1486,7 +1375,7 @@ int QTextStream::fieldWidth() const void QTextStream::setNumberFlags(NumberFlags flags) { Q_D(QTextStream); - d->numberFlags = flags; + d->params.numberFlags = flags; } /*! @@ -1497,7 +1386,7 @@ void QTextStream::setNumberFlags(NumberFlags flags) QTextStream::NumberFlags QTextStream::numberFlags() const { Q_D(const QTextStream); - return d->numberFlags; + return d->params.numberFlags; } /*! @@ -1513,7 +1402,7 @@ QTextStream::NumberFlags QTextStream::numberFlags() const void QTextStream::setIntegerBase(int base) { Q_D(QTextStream); - d->integerBase = base; + d->params.integerBase = base; } /*! @@ -1525,7 +1414,7 @@ void QTextStream::setIntegerBase(int base) int QTextStream::integerBase() const { Q_D(const QTextStream); - return d->integerBase; + return d->params.integerBase; } /*! @@ -1539,7 +1428,7 @@ int QTextStream::integerBase() const void QTextStream::setRealNumberNotation(RealNumberNotation notation) { Q_D(QTextStream); - d->realNumberNotation = notation; + d->params.realNumberNotation = notation; } /*! @@ -1550,7 +1439,7 @@ void QTextStream::setRealNumberNotation(RealNumberNotation notation) QTextStream::RealNumberNotation QTextStream::realNumberNotation() const { Q_D(const QTextStream); - return d->realNumberNotation; + return d->params.realNumberNotation; } /*! @@ -1567,10 +1456,10 @@ void QTextStream::setRealNumberPrecision(int precision) Q_D(QTextStream); if (precision < 0) { qWarning("QTextStream::setRealNumberPrecision: Invalid precision (%d)", precision); - d->realNumberPrecision = 6; + d->params.realNumberPrecision = 6; return; } - d->realNumberPrecision = precision; + d->params.realNumberPrecision = precision; } /*! @@ -1582,7 +1471,7 @@ void QTextStream::setRealNumberPrecision(int precision) int QTextStream::realNumberPrecision() const { Q_D(const QTextStream); - return d->realNumberPrecision; + return d->params.realNumberPrecision; } /*! @@ -1722,7 +1611,7 @@ QTextStreamPrivate::NumberParsingStatus QTextStreamPrivate::getNumber(qulonglong consumeLastToken(); // detect int encoding - int base = integerBase; + int base = params.integerBase; if (base == 0) { QChar ch; if (!getChar(&ch)) @@ -2300,6 +2189,7 @@ void QTextStreamPrivate::putNumber(qulonglong number, bool negative) QString result; unsigned flags = 0; + const QTextStream::NumberFlags numberFlags = params.numberFlags; if (numberFlags & QTextStream::ShowBase) flags |= QLocalePrivate::ShowBase; if (numberFlags & QTextStream::ForceSign) @@ -2315,7 +2205,7 @@ void QTextStreamPrivate::putNumber(qulonglong number, bool negative) flags |= QLocalePrivate::ThousandsGroup; const QLocalePrivate *dd = locale.d; - int base = integerBase ? integerBase : 10; + int base = params.integerBase ? params.integerBase : 10; if (negative && base == 10) { result = dd->longLongToString(-static_cast<qlonglong>(number), -1, base, -1, flags); @@ -2330,7 +2220,7 @@ void QTextStreamPrivate::putNumber(qulonglong number, bool negative) result = dd->unsLongLongToString(number, -1, base, -1, flags); // workaround for backward compatibility - in octal form with // ShowBase flag set zero should be written as '00' - if (number == 0 && base == 8 && numberFlags & QTextStream::ShowBase + if (number == 0 && base == 8 && params.numberFlags & QTextStream::ShowBase && result == QLatin1String("0")) { result.prepend(QLatin1Char('0')); } @@ -2524,7 +2414,7 @@ QTextStream &QTextStream::operator<<(double f) flags |= QLocalePrivate::Alternate; const QLocalePrivate *dd = d->locale.d; - QString num = dd->doubleToString(f, d->realNumberPrecision, form, -1, flags); + QString num = dd->doubleToString(f, d->params.realNumberPrecision, form, -1, flags); d->putString(num, true); return *this; } @@ -2605,13 +2495,13 @@ QTextStream &QTextStream::operator<<(const void *ptr) { Q_D(QTextStream); CHECK_VALID_STREAM(*this); - int oldBase = d->integerBase; - NumberFlags oldFlags = d->numberFlags; - d->integerBase = 16; - d->numberFlags |= ShowBase; + const int oldBase = d->params.integerBase; + const NumberFlags oldFlags = d->params.numberFlags; + d->params.integerBase = 16; + d->params.numberFlags |= ShowBase; d->putNumber(reinterpret_cast<quintptr>(ptr), false); - d->integerBase = oldBase; - d->numberFlags = oldFlags; + d->params.integerBase = oldBase; + d->params.numberFlags = oldFlags; return *this; } @@ -3130,7 +3020,3 @@ QLocale QTextStream::locale() const QT_END_NAMESPACE -#ifndef QT_NO_QOBJECT -#include "qtextstream.moc" -#endif - diff --git a/src/corelib/io/qtextstream.h b/src/corelib/io/qtextstream.h index 3c25e0587a..6d143bdca7 100644 --- a/src/corelib/io/qtextstream.h +++ b/src/corelib/io/qtextstream.h @@ -54,8 +54,6 @@ #error qtextstream.h must be included before any header file that defines Status #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -194,6 +192,7 @@ public: private: Q_DISABLE_COPY(QTextStream) + friend class QDebugStateSaverPrivate; QScopedPointer<QTextStreamPrivate> d_ptr; }; @@ -284,6 +283,4 @@ inline QTextStreamManipulator qSetRealNumberPrecision(int precision) QT_END_NAMESPACE -QT_END_HEADER - #endif // QTEXTSTREAM_H diff --git a/src/corelib/io/qtextstream_p.h b/src/corelib/io/qtextstream_p.h new file mode 100644 index 0000000000..d5d5288426 --- /dev/null +++ b/src/corelib/io/qtextstream_p.h @@ -0,0 +1,185 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTEXTSTREAM_P_H +#define QTEXTSTREAM_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qtextstream.h" +#ifndef QT_NO_TEXTCODEC +#include "qtextcodec.h" +#endif + +QT_BEGIN_NAMESPACE + +#ifndef QT_NO_QOBJECT +class QDeviceClosedNotifier : public QObject +{ + Q_OBJECT +public: + inline QDeviceClosedNotifier() + { } + + inline void setupDevice(QTextStream *stream, QIODevice *device) + { + disconnect(); + if (device) + connect(device, SIGNAL(aboutToClose()), this, SLOT(flushStream())); + this->stream = stream; + } + +public Q_SLOTS: + inline void flushStream() { stream->flush(); } + +private: + QTextStream *stream; +}; +#endif + +class QTextStreamPrivate +{ + Q_DECLARE_PUBLIC(QTextStream) +public: + QTextStreamPrivate(QTextStream *q_ptr); + ~QTextStreamPrivate(); + void reset(); + + // device + QIODevice *device; +#ifndef QT_NO_QOBJECT + QDeviceClosedNotifier deviceClosedNotifier; +#endif + bool deleteDevice; + + // string + QString *string; + int stringOffset; + QIODevice::OpenMode stringOpenMode; + +#ifndef QT_NO_TEXTCODEC + // codec + QTextCodec *codec; + QTextCodec::ConverterState readConverterState; + QTextCodec::ConverterState writeConverterState; + QTextCodec::ConverterState *readConverterSavedState; + bool autoDetectUnicode; +#endif + + // i/o + enum TokenDelimiter { + Space, + NotSpace, + EndOfLine + }; + + QString read(int maxlen); + bool scan(const QChar **ptr, int *tokenLength, + int maxlen, TokenDelimiter delimiter); + inline const QChar *readPtr() const; + inline void consumeLastToken(); + inline void consume(int nchars); + void saveConverterState(qint64 newPos); + void restoreToSavedConverterState(); + int lastTokenSize; + + // Return value type for getNumber() + enum NumberParsingStatus { + npsOk, + npsMissingDigit, + npsInvalidPrefix + }; + + inline bool getChar(QChar *ch); + inline void ungetChar(QChar ch); + NumberParsingStatus getNumber(qulonglong *l); + bool getReal(double *f); + + inline void write(const QString &data); + inline void putString(const QString &ch, bool number = false); + void putNumber(qulonglong number, bool negative); + + // buffers + bool fillReadBuffer(qint64 maxBytes = -1); + void resetReadBuffer(); + void flushWriteBuffer(); + QString writeBuffer; + QString readBuffer; + int readBufferOffset; + int readConverterSavedStateOffset; //the offset between readBufferStartDevicePos and that start of the buffer + qint64 readBufferStartDevicePos; + + // streaming parameters + class Params + { + public: + void reset(); + + int realNumberPrecision; + int integerBase; + int fieldWidth; + QChar padChar; + QTextStream::FieldAlignment fieldAlignment; + QTextStream::RealNumberNotation realNumberNotation; + QTextStream::NumberFlags numberFlags; + }; + Params params; + + // status + QTextStream::Status status; + + QLocale locale; + + QTextStream *q_ptr; +}; + +QT_END_NAMESPACE + +#endif // QTEXTSTREAM_P_H diff --git a/src/corelib/io/qtldurl.cpp b/src/corelib/io/qtldurl.cpp index 436e6a4568..dd4301e9f1 100644 --- a/src/corelib/io/qtldurl.cpp +++ b/src/corelib/io/qtldurl.cpp @@ -51,12 +51,22 @@ QT_BEGIN_NAMESPACE static bool containsTLDEntry(const QString &entry) { int index = qt_hash(entry) % tldCount; - int currentDomainIndex = tldIndices[index]; - while (currentDomainIndex < tldIndices[index+1]) { - QString currentEntry = QString::fromUtf8(tldData + currentDomainIndex); + + // select the right chunk from the big table + short chunk = 0; + uint chunkIndex = tldIndices[index], offset = 0; + while (tldIndices[index] >= tldChunks[chunk] && chunk < tldChunkCount) { + chunkIndex -= tldChunks[chunk]; + offset += tldChunks[chunk]; + chunk++; + } + + // check all the entries from the given index + while (chunkIndex < tldIndices[index+1] - offset) { + QString currentEntry = QString::fromUtf8(tldData[chunk] + chunkIndex); if (currentEntry == entry) return true; - currentDomainIndex += qstrlen(tldData + currentDomainIndex) + 1; // +1 for the ending \0 + chunkIndex += qstrlen(tldData[chunk] + chunkIndex) + 1; // +1 for the ending \0 } return false; } diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 7ff23d931c..c71bb3afac 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -333,11 +333,6 @@ static inline QString ftpScheme() return QStringLiteral("ftp"); } -static inline QString httpScheme() -{ - return QStringLiteral("http"); -} - static inline QString fileScheme() { return QStringLiteral("file"); @@ -660,7 +655,7 @@ static const ushort encodedFragmentActions[] = { encode(']'), // 6 0 }; -static const ushort * const decodedFragmentInUrlActions = 0; +//static const ushort * const decodedFragmentInUrlActions = 0; static const ushort * const decodedFragmentInIsolationActions = 0; // the query is handled specially: the decodedQueryXXX tables are run with @@ -3765,6 +3760,37 @@ QString QUrl::errorString() const } /*! + \since 5.1 + + Converts a list of \a urls into a list of QStrings, using toString(\a options). +*/ +QStringList QUrl::toStringList(const QList<QUrl> &urls, FormattingOptions options) +{ + QStringList lst; + lst.reserve(urls.size()); + foreach (const QUrl &url, urls) + lst.append(url.toString(options)); + return lst; + +} + +/*! + \since 5.1 + + Converts a list of strings representing \a urls into a list of urls, using QUrl(str, \a mode). + Note that this means all strings must be urls, not for instance local paths. +*/ +QList<QUrl> QUrl::fromStringList(const QStringList &urls, ParsingMode mode) +{ + QList<QUrl> lst; + lst.reserve(urls.size()); + foreach (const QString &str, urls) { + lst.append(QUrl(str, mode)); + } + return lst; +} + +/*! \typedef QUrl::DataPtr \internal */ diff --git a/src/corelib/io/qurl.h b/src/corelib/io/qurl.h index bd35b44f17..de4ce754fb 100644 --- a/src/corelib/io/qurl.h +++ b/src/corelib/io/qurl.h @@ -50,8 +50,6 @@ #include <QtCore/qpair.h> #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -322,6 +320,9 @@ public: static QString fromAce(const QByteArray &); static QByteArray toAce(const QString &); static QStringList idnWhitelist(); + static QStringList toStringList(const QList<QUrl> &uris, FormattingOptions options = FormattingOptions(PrettyDecoded)); + static QList<QUrl> fromStringList(const QStringList &uris, ParsingMode mode = TolerantMode); + static void setIdnWhitelist(const QStringList &); friend Q_CORE_EXPORT uint qHash(const QUrl &url, uint seed = 0) Q_DECL_NOTHROW; @@ -381,6 +382,4 @@ QT_END_NAMESPACE # include <QtCore/qurlquery.h> #endif -QT_END_HEADER - #endif // QURL_H diff --git a/src/corelib/io/qurlidna.cpp b/src/corelib/io/qurlidna.cpp index e2cd481035..fac1703da8 100644 --- a/src/corelib/io/qurlidna.cpp +++ b/src/corelib/io/qurlidna.cpp @@ -2336,27 +2336,42 @@ Q_AUTOTEST_EXPORT QString qt_punycodeDecoder(const QString &pc) } static const char * const idn_whitelist[] = { - "ac", "ar", "at", + "ac", "ar", "asia", "at", "biz", "br", - "cat", "ch", "cl", "cn", + "cat", "ch", "cl", "cn", "com", "de", "dk", "es", "fi", "gr", "hu", - "info", "io", "is", + "il", "info", "io", "is", "ir", "jp", "kr", - "li", "lt", + "li", "lt", "lu", "lv", "museum", - "no", + "name", "net", "no", "nu", "nz", "org", + "pl", "pr", "se", "sh", - "th", "tm", "tw", + "tel", "th", "tm", "tw", + "ua", "vn", + "xn--fiqs8s", // China + "xn--fiqz9s", // China + "xn--fzc2c9e2c", // Sri Lanka + "xn--j6w193g", // Hong Kong + "xn--kprw13d", // Taiwan + "xn--kpry57d", // Taiwan + "xn--mgba3a4f16a", // Iran + "xn--mgba3a4fra", // Iran "xn--mgbaam7a8h", // UAE + "xn--mgbayh7gpa", // Jordan "xn--mgberp4a5d4ar", // Saudi Arabia - "xn--wgbh1c" // Egypt + "xn--ogbpf8fl", // Syria + "xn--p1ai", // Russian Federation + "xn--wgbh1c", // Egypt + "xn--wgbl6a", // Qatar + "xn--xkc2al3hye2a" // Sri Lanka }; static const size_t idn_whitelist_size = sizeof idn_whitelist / sizeof *idn_whitelist; diff --git a/src/corelib/io/qurlquery.h b/src/corelib/io/qurlquery.h index 319fe3cf22..c515bf78c7 100644 --- a/src/corelib/io/qurlquery.h +++ b/src/corelib/io/qurlquery.h @@ -50,8 +50,6 @@ #include <QtCore/qstringlist.h> #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QUrlQueryPrivate; @@ -173,6 +171,4 @@ inline QList<QByteArray> QUrl::allEncodedQueryItemValues(const QByteArray &key) QT_END_NAMESPACE -QT_END_HEADER - #endif // QURLQUERY_H diff --git a/src/corelib/io/qurltlds_p.h b/src/corelib/io/qurltlds_p.h index f4f525ced7..dfc69f500b 100644 --- a/src/corelib/io/qurltlds_p.h +++ b/src/corelib/io/qurltlds_p.h @@ -59,6423 +59,9898 @@ QT_BEGIN_NAMESPACE // for instructions see the program at // util/corelib/qurl-generateTLDs -static const quint16 tldCount = 3949; -static const quint16 tldIndices[] = { +static const quint16 tldCount = 6063; +static const quint32 tldIndices[] = { 0, -7, -14, -14, -20, -51, -61, -93, -100, -100, -116, -159, -167, -180, -180, -193, -234, -234, -234, -255, -255, -255, -280, -280, +13, +19, +36, +66, +90, +90, +113, +130, +151, +151, +151, +168, +179, +196, +203, +222, +222, +237, +237, +251, +258, 287, 287, -295, -303, -313, -326, -326, -380, -393, -413, -419, -419, -419, -424, -438, -438, -469, -515, -515, -515, -534, -534, -557, -557, -557, -557, -572, -572, -572, -579, -587, -597, -612, -612, -624, -636, -648, -662, -687, -709, -714, -740, -766, -789, -789, -805, -805, -810, -815, -815, -824, -824, -831, -857, -869, -891, -891, -916, -916, -916, -927, -934, -964, -971, +287, +287, +287, +314, +336, +352, +352, +352, +369, +369, +377, +396, +396, +396, +405, +405, +431, +431, +442, +451, +485, +495, +509, +509, +509, +524, +524, +533, +533, +552, +552, +552, +552, +577, +577, +593, +593, +593, +593, +593, +593, +622, +643, +643, +658, +691, +703, +715, +731, +731, +747, +781, +793, +793, +814, +826, +851, +851, +866, +885, +914, +929, +929, +929, +941, +947, +947, 987, 987, 987, -1008, -1008, -1016, -1016, -1030, -1030, -1052, -1075, -1075, -1082, -1087, -1115, -1135, -1135, -1135, -1172, -1178, -1178, -1178, -1202, -1207, -1220, -1220, -1266, -1266, -1266, -1266, -1272, -1290, -1316, -1316, -1332, -1332, -1339, -1339, -1352, -1352, -1389, -1389, -1408, -1415, -1437, -1444, -1489, -1489, -1502, -1502, -1512, -1518, -1539, -1555, -1562, +1003, +1061, +1080, +1080, +1080, +1104, +1104, +1138, +1148, +1148, +1148, +1148, +1160, +1179, +1179, +1208, +1208, +1225, +1225, +1273, +1273, +1291, +1291, +1304, +1304, +1304, +1304, +1318, +1335, +1335, +1335, +1349, +1349, +1364, +1364, +1364, +1364, +1402, +1402, +1402, +1402, +1430, +1455, +1506, +1537, +1537, +1559, +1573, +1578, +1578, +1578, +1578, 1584, -1598, -1607, -1607, -1607, -1632, -1652, -1652, -1658, -1658, -1675, +1592, +1599, +1599, +1599, +1606, +1641, +1641, +1663, +1663, +1663, +1663, +1663, 1682, -1709, -1733, -1748, -1776, -1783, -1783, -1790, -1797, -1826, -1850, -1850, -1856, -1880, -1887, -1901, -1921, -1947, -1961, -1967, -1967, -1967, -1972, -1986, -1986, -1986, -2009, -2029, -2029, -2047, -2061, -2075, -2075, -2075, -2075, -2075, -2075, -2082, -2082, -2124, -2124, -2129, -2162, -2162, -2162, -2236, -2256, -2263, -2276, -2283, -2313, -2313, -2347, -2380, -2387, -2387, -2387, -2431, -2438, -2445, -2452, -2459, -2459, -2469, -2490, -2516, -2527, -2540, -2540, -2586, -2610, -2630, -2630, -2653, -2660, -2669, -2693, -2693, -2710, -2710, -2719, -2719, -2734, -2740, -2740, -2753, -2753, -2763, -2770, -2775, -2782, -2789, -2802, -2820, -2827, -2827, -2841, -2855, -2855, -2865, -2872, -2884, -2884, -2919, -2937, -2955, -2962, -3012, -3042, -3073, -3083, -3083, -3100, -3105, -3112, -3131, -3131, -3166, -3180, -3187, -3194, -3211, -3218, -3223, -3233, -3249, -3259, -3268, -3314, -3314, -3324, -3324, -3336, -3336, -3336, +1682, +1689, +1689, +1689, +1715, +1731, +1731, +1741, +1761, +1777, +1777, +1777, +1777, +1777, +1796, +1796, +1824, +1847, +1847, +1854, +1876, +1876, +1876, +1908, +1908, +1925, +1952, +1974, +1991, +2010, +2010, +2010, +2010, +2028, +2048, +2066, +2066, +2091, +2119, +2151, +2151, +2151, +2175, +2175, +2175, +2205, +2219, +2232, +2281, +2281, +2281, +2302, +2311, +2327, +2327, +2327, +2340, +2340, +2340, +2368, +2386, +2404, +2414, +2423, +2423, +2423, +2423, +2443, +2443, +2450, +2487, +2487, +2487, +2487, +2494, +2509, +2509, +2509, +2535, +2545, +2615, +2615, +2615, +2633, +2633, +2641, +2688, +2688, +2688, +2702, +2708, +2730, +2748, +2748, +2748, +2748, +2764, +2798, +2807, +2815, +2826, +2826, +2835, +2864, +2864, +2898, +2898, +2905, +2915, +2922, +2922, +2938, +2938, +2967, +2967, +2967, +2986, +2986, +3002, +3008, +3018, +3052, +3066, +3099, +3099, +3115, +3115, +3115, +3159, +3159, +3172, +3186, +3186, +3262, +3262, +3262, +3305, 3336, 3350, -3363, -3376, -3398, -3416, -3445, -3464, -3488, -3488, -3497, -3545, -3552, -3552, -3552, -3566, -3573, -3573, -3573, -3581, -3581, -3603, -3603, -3615, -3621, -3621, -3683, -3683, -3710, -3710, -3716, -3716, -3748, -3770, -3791, -3803, -3810, -3817, -3833, -3846, -3846, -3852, -3876, -3876, -3882, -3903, -3910, -3939, -3939, -3939, -3947, -3962, -3962, -3981, -3994, -4021, -4030, -4042, -4085, -4085, -4096, -4096, -4104, -4123, -4123, -4123, -4143, -4154, -4164, -4194, -4194, -4194, -4205, -4205, -4222, -4238, -4301, -4309, -4322, -4331, -4331, -4331, -4331, -4331, -4347, -4365, -4375, -4375, -4385, -4398, -4412, -4430, -4430, -4437, -4447, -4463, -4472, -4472, -4472, -4484, -4484, -4484, -4484, -4484, -4490, -4490, -4511, -4511, -4522, -4522, -4522, -4522, -4528, -4528, +3394, +3411, +3411, +3424, +3483, +3505, +3532, +3532, +3532, +3538, +3538, +3561, +3575, +3580, +3601, +3601, +3601, +3601, +3601, +3601, +3601, +3601, +3635, +3635, +3635, +3686, +3704, +3704, +3736, +3749, +3783, +3783, +3816, +3840, +3877, +3885, +3885, +3885, +3885, +3907, +3944, +3944, +3956, +3963, +3963, +3963, +3963, +3975, +3975, +3975, +3993, +4038, +4062, +4062, +4062, +4071, +4071, +4084, +4097, +4119, +4119, +4119, +4135, +4135, +4166, +4178, +4178, +4208, +4225, +4285, +4300, +4300, +4300, +4300, +4318, +4318, +4318, +4336, +4348, +4354, +4354, +4388, +4388, +4416, +4433, +4433, +4433, +4433, +4433, +4433, +4450, +4450, +4450, +4450, +4467, +4467, +4480, +4514, +4524, 4534, -4551, -4551, -4551, -4564, -4583, -4583, -4611, -4611, -4611, -4622, -4622, -4649, -4668, -4677, -4692, -4692, -4692, -4705, -4723, -4723, -4723, -4729, -4729, -4743, -4743, -4750, -4750, -4763, -4770, -4776, -4776, -4776, -4793, -4811, -4811, -4811, -4821, -4821, -4841, -4857, -4891, -4897, -4903, -4903, -4903, -4919, -4935, -4942, -4958, -4958, -4975, -4975, -4975, -4985, -4985, -5020, -5032, +4552, +4552, +4572, +4572, +4599, +4641, +4659, +4659, +4659, +4666, +4666, +4666, +4717, +4769, +4785, +4797, +4797, +4815, +4853, +4859, +4868, +4894, +4894, +4894, +4920, +4930, +4972, +4972, +5005, +5005, +5023, +5023, 5032, -5040, -5053, -5068, -5079, -5079, -5101, -5115, -5115, -5135, -5154, -5161, -5161, -5168, -5168, -5184, -5210, -5210, -5238, -5255, -5278, -5285, -5308, -5318, -5327, -5327, -5333, -5333, -5340, -5348, -5355, -5366, -5377, -5384, -5408, -5415, -5422, -5435, -5442, -5482, -5482, -5482, -5482, -5498, -5527, -5534, -5541, -5572, -5572, -5572, -5579, -5591, -5602, -5602, -5621, -5621, -5646, -5664, -5671, -5671, -5681, -5696, -5707, -5716, -5716, -5723, -5723, -5732, +5059, +5059, +5080, +5094, +5100, +5100, +5100, +5100, +5100, +5118, +5145, +5145, +5145, +5153, +5221, +5256, +5289, +5296, +5306, +5306, +5343, +5343, +5343, +5362, +5369, +5433, +5451, +5451, +5451, +5470, +5470, +5470, +5490, +5506, +5528, +5548, +5548, +5548, +5548, +5563, +5576, +5585, +5636, +5636, +5661, +5661, +5668, +5685, +5698, +5715, 5742, -5742, -5763, -5770, -5776, -5790, -5790, -5797, -5806, -5816, -5832, -5882, -5882, -5882, -5882, -5893, -5934, -5934, -5965, -5965, -5980, -5980, -5980, -5980, -6007, -6017, -6034, -6051, -6065, -6075, -6075, -6091, -6097, -6097, -6109, -6109, -6109, -6122, -6147, -6168, -6168, -6191, -6191, -6191, -6191, -6191, -6198, -6217, -6224, -6224, -6231, -6245, -6252, -6252, -6270, -6270, -6284, -6305, -6315, -6322, -6322, -6322, -6329, -6329, -6329, -6353, -6361, -6361, -6375, -6391, -6405, -6405, -6415, -6431, -6431, -6431, -6431, -6458, -6475, -6475, -6475, -6482, -6489, -6496, -6496, -6503, -6520, -6520, -6520, -6527, -6527, +5748, +5756, +5800, +5800, +5800, +5827, +5827, +5846, +5864, +5910, +5926, +5941, +5952, +5952, +5958, +5958, +5976, +5985, +5991, +5991, +5991, +5998, +5998, +5998, +6011, +6011, +6060, +6076, +6088, +6105, +6124, +6124, +6124, +6157, +6157, +6157, +6157, +6174, +6190, +6190, +6190, +6209, +6228, +6228, +6228, +6228, +6234, +6234, +6234, +6234, +6234, +6249, +6264, +6264, +6290, +6308, +6346, +6362, +6362, +6400, +6420, +6432, +6455, +6455, +6464, +6491, +6491, +6491, +6497, +6524, +6544, +6544, +6544, 6544, -6561, -6573, -6573, -6580, -6580, -6587, -6587, -6592, -6592, -6592, -6592, -6599, -6599, -6612, -6633, -6649, -6649, -6669, -6676, -6683, -6683, -6713, -6720, -6727, -6736, -6736, -6746, -6770, -6807, -6814, -6827, -6846, -6846, -6864, -6864, -6864, -6864, -6881, -6888, -6888, -6888, +6559, +6576, +6619, +6682, +6682, +6716, +6716, +6716, +6716, +6716, +6716, +6730, +6745, +6783, +6783, +6801, +6817, +6841, +6841, +6858, +6858, 6914, -6935, -6935, -6935, -6953, -6959, -6966, -6983, -6983, -6983, -7013, -7023, -7023, -7023, -7023, +6925, +6943, +6954, +6954, +6954, +6973, +6973, +6973, +6987, +6987, +6987, +7005, 7037, -7044, -7058, -7079, -7086, -7123, -7134, -7155, -7168, +7037, +7050, +7050, +7075, +7090, +7090, +7096, +7108, +7124, +7124, +7136, +7136, +7146, +7169, 7178, -7203, -7227, -7236, -7258, -7265, -7274, -7274, -7303, -7303, -7314, -7314, -7345, -7352, -7367, -7377, -7388, -7388, -7402, -7402, -7409, -7421, -7421, -7467, -7484, -7484, -7484, +7197, +7197, +7197, +7204, +7204, +7268, +7268, +7288, +7311, +7311, +7321, +7334, +7334, +7387, +7417, +7426, +7444, +7444, +7460, +7470, 7491, -7532, -7532, -7539, -7546, -7546, -7553, -7573, -7573, -7573, -7580, -7587, -7594, -7594, -7594, -7606, -7606, -7637, -7637, -7637, -7664, -7664, -7664, -7677, -7684, -7701, -7723, -7723, -7723, -7723, -7734, -7734, -7734, -7748, -7748, -7748, -7748, -7759, -7759, -7775, -7775, -7782, -7789, -7817, -7824, -7831, -7836, -7865, -7865, +7516, +7516, +7535, +7535, +7555, +7555, +7555, +7555, +7575, +7597, +7597, +7597, +7597, +7607, +7627, +7627, +7652, +7710, +7710, +7719, +7737, +7737, +7737, +7737, +7737, +7747, +7747, +7753, +7773, +7773, +7793, +7828, +7841, +7860, +7860, +7876, 7876, 7901, 7901, -7908, -7918, -7938, -7945, -7945, -7957, -7964, -7979, -7986, -7994, -8007, -8007, -8014, -8021, -8061, -8061, -8071, -8088, -8131, -8138, -8153, -8160, -8160, -8160, -8175, -8183, +7901, +7911, +7911, +7911, +7911, +7924, +7941, +7951, +7983, +7983, +7990, +8008, +8008, +8018, +8018, +8031, +8056, +8063, +8077, +8077, +8090, +8100, +8165, +8192, +8192, +8192, +8192, +8197, 8197, -8211, -8211, -8211, -8243, -8243, -8243, -8243, -8259, -8259, -8259, -8259, -8259, -8266, -8275, -8281, -8281, -8281, -8281, -8288, -8288, +8197, +8197, +8197, +8197, +8227, +8237, +8253, +8253, 8309, 8309, 8309, -8330, -8330, -8330, -8330, -8337, -8343, -8343, -8360, -8370, -8370, -8380, -8380, -8386, -8386, -8397, -8415, -8415, -8428, -8454, -8460, -8475, -8492, -8526, +8309, +8329, +8329, +8329, +8345, +8378, +8398, +8420, +8420, +8420, +8436, +8452, +8497, +8538, 8554, 8554, 8583, 8583, 8583, -8598, -8607, -8617, -8617, +8616, 8642, 8652, 8652, -8652, -8662, -8688, -8688, -8704, -8704, -8747, -8765, -8775, -8783, -8811, -8835, -8835, -8835, -8850, -8859, -8884, -8910, -8919, -8952, -8978, -8978, -8991, -8991, -8991, -8999, -8999, -8999, -9030, -9030, -9030, -9030, -9030, -9041, -9048, -9048, -9054, -9054, -9054, -9086, -9108, -9108, -9119, -9119, -9130, -9144, -9152, -9161, -9174, -9194, -9207, -9207, -9207, -9232, -9242, -9242, -9271, -9290, -9308, -9308, -9308, -9308, -9320, -9333, -9343, -9356, -9379, -9379, +8672, +8690, +8699, +8699, +8715, +8715, +8737, +8767, +8767, +8767, +8780, +8800, +8837, +8867, +8896, +8931, +8948, +8959, +8981, +9002, +9008, +9017, +9017, +9017, +9017, +9044, +9044, +9044, +9069, +9087, +9087, +9087, +9087, +9104, +9136, +9173, +9173, +9199, +9199, +9199, +9199, +9222, +9233, +9257, +9257, +9257, +9272, +9272, +9284, +9316, +9346, +9346, +9346, +9362, 9379, -9395, -9395, -9406, -9419, -9419, -9419, -9419, -9450, -9485, -9485, -9497, -9497, -9505, -9517, -9528, -9528, +9404, +9413, +9413, +9413, +9439, +9439, +9447, +9460, +9479, +9479, +9486, +9499, +9506, +9506, +9513, 9551, -9564, -9586, -9586, -9608, -9608, -9626, -9626, -9626, -9653, -9653, -9681, -9681, -9681, -9698, -9698, -9698, -9714, -9729, -9737, -9737, -9765, -9765, -9765, -9765, -9765, -9825, -9844, -9866, -9880, -9880, -9880, -9880, -9886, -9895, -9895, -9895, -9895, -9895, -9913, -9913, -9924, -9958, -9958, -9967, -9975, -9975, -9975, -9981, -9998, -9998, -9998, +9551, +9577, +9577, +9634, +9634, +9671, +9693, +9700, +9700, +9732, +9774, +9774, +9780, +9827, +9851, +9875, +9875, +9911, +9937, +9937, +9944, +9944, +9944, +9964, +9992, +9999, +9999, +9999, +10006, 10012, -10036, -10036, -10066, -10079, -10097, +10019, +10026, +10047, +10059, +10059, +10076, +10083, +10083, +10083, +10089, +10089, +10089, +10096, 10121, -10133, -10142, -10142, -10142, -10156, -10173, -10173, -10173, -10196, -10205, -10205, -10205, -10205, -10218, -10234, -10240, -10240, -10240, -10264, -10273, -10286, -10286, -10286, -10286, -10299, -10299, -10309, -10309, -10339, -10358, -10358, -10374, -10374, -10390, -10390, -10413, -10413, -10439, -10461, -10467, +10121, +10137, +10137, +10137, +10137, +10154, +10161, +10161, +10168, +10177, +10177, +10231, +10238, +10261, +10268, +10288, +10295, +10303, +10320, +10344, +10387, +10421, +10421, +10421, 10467, 10467, -10492, -10492, 10501, -10528, -10528, -10528, -10539, -10583, -10583, -10583, -10613, -10613, -10619, -10628, -10645, -10645, -10645, -10650, -10671, -10687, -10709, -10709, -10709, -10709, -10709, -10727, +10517, +10535, +10552, +10577, +10577, +10577, +10577, +10577, +10615, +10621, +10639, +10639, +10639, +10682, +10682, +10698, +10698, +10716, 10727, -10727, -10727, -10733, -10733, -10768, -10768, -10773, -10780, -10788, -10788, +10750, +10774, +10781, 10797, -10797, -10835, -10835, -10845, -10852, -10861, -10861, -10861, -10861, -10861, -10861, -10861, -10875, -10888, -10907, -10907, -10907, -10920, -10920, -10932, -10946, -10977, -10977, -10997, -11008, -11037, -11059, -11059, -11059, -11067, -11067, -11067, -11067, -11067, -11077, -11091, -11102, +10804, +10804, +10804, +10816, +10836, +10850, +10850, +10857, +10857, +10878, +10878, +10934, +10934, +10934, +10934, +10934, +10934, +10934, +10941, +10941, +10941, +10948, +10973, +10984, +11015, +11015, +11015, +11041, +11058, +11066, +11066, +11066, +11087, +11097, 11102, -11112, -11125, +11108, +11115, +11122, +11122, +11122, 11129, -11129, -11154, -11154, -11154, -11164, -11164, -11189, -11189, -11189, -11189, -11189, -11196, -11196, -11227, -11238, -11247, -11256, -11265, -11265, -11286, +11160, +11194, +11194, +11215, +11224, +11224, +11280, +11297, 11307, -11330, -11337, -11378, -11378, -11389, -11413, -11454, -11469, -11475, -11475, -11475, -11475, -11503, -11503, -11503, -11503, -11534, -11534, -11550, -11550, -11557, -11557, -11557, -11557, -11574, -11585, -11585, -11603, -11626, -11643, -11643, -11643, -11643, -11663, -11663, -11682, -11696, -11696, -11696, -11696, -11706, -11706, -11706, -11706, -11723, -11723, -11757, -11757, -11773, -11795, -11813, -11836, -11836, -11883, -11903, -11952, -11965, -11965, -11984, -11997, -12008, -12008, -12008, -12024, -12043, -12065, -12071, -12099, -12129, -12140, -12140, -12146, -12161, -12161, -12161, -12161, -12167, -12167, -12180, -12186, -12208, -12226, -12243, -12243, -12252, -12252, -12274, -12289, -12302, -12302, -12313, -12313, -12313, -12313, -12358, -12358, -12358, -12369, -12375, -12391, -12391, -12391, -12391, -12405, -12410, -12416, -12416, -12436, -12436, -12436, -12443, -12443, -12462, -12477, -12492, -12492, -12503, -12519, -12525, -12531, -12571, -12571, -12591, -12591, -12601, -12641, -12641, -12641, -12657, -12657, -12657, -12699, -12699, -12699, -12712, -12728, -12744, -12761, -12769, -12782, -12793, -12823, -12836, -12851, -12863, -12890, -12900, -12900, -12900, -12910, -12910, -12924, -12924, -12924, -12924, -12924, -12952, -12984, -13003, -13038, -13038, -13056, -13056, -13056, +11319, +11352, +11364, +11364, +11399, +11399, +11430, +11430, +11445, +11478, +11500, +11508, +11526, +11526, +11539, +11539, +11583, +11583, +11624, +11654, +11654, +11661, +11679, +11714, +11721, +11733, +11769, +11778, +11786, +11805, +11820, +11857, +11864, +11877, +11877, +11892, +11892, +11892, +11908, +11915, +11922, +11940, +11947, +11975, +11998, +12021, +12028, +12028, +12046, +12068, +12086, +12109, +12116, +12130, +12150, +12150, +12150, +12150, +12157, +12182, +12205, +12212, +12219, +12219, +12229, +12229, +12229, +12250, +12271, +12285, +12285, +12292, +12330, +12330, +12349, +12349, +12357, +12357, +12357, +12357, +12389, +12409, +12409, +12448, +12459, +12473, +12480, +12489, +12489, +12497, +12535, +12542, +12568, +12575, +12590, +12620, +12645, +12652, +12665, +12672, +12683, +12683, +12709, +12716, +12723, +12746, +12746, +12746, +12771, +12771, +12796, +12796, +12803, +12803, +12803, +12838, +12856, +12872, +12872, +12872, +12872, +12872, +12872, +12889, +12899, +12899, +12899, +12899, +12917, +12934, +12934, +12947, +12969, +12969, +12976, +13012, 13056, -13074, -13081, -13093, -13103, -13103, -13112, -13119, -13132, -13132, -13132, -13141, -13151, -13183, -13193, -13206, -13206, -13206, -13236, -13252, -13267, -13267, -13294, -13307, -13307, -13307, -13343, -13349, -13349, -13349, -13375, -13375, -13375, -13384, -13384, -13384, -13393, -13393, -13393, -13402, -13414, -13425, -13445, -13467, -13485, -13499, -13509, -13528, -13528, -13549, -13549, -13559, -13570, -13570, -13570, -13570, -13598, -13637, -13647, -13647, -13661, -13673, -13682, -13687, -13694, -13694, -13720, -13733, -13742, -13748, -13771, -13795, -13795, -13814, -13821, -13821, -13855, -13862, -13862, -13862, -13874, -13874, -13897, -13909, -13909, -13947, -13947, -13952, -13952, -13970, -13979, -13979, -13979, -14008, -14049, -14049, -14049, -14049, -14049, -14049, -14060, -14083, -14083, -14091, -14101, -14101, -14101, -14101, -14118, -14136, -14195, -14195, -14195, -14213, -14213, -14232, -14232, -14253, -14253, +13063, +13092, +13118, +13142, +13163, +13202, +13237, +13256, +13284, +13295, +13302, +13326, +13355, +13372, +13383, +13398, +13424, +13452, +13452, +13452, +13494, +13533, +13547, +13547, +13551, +13558, +13610, +13657, +13665, +13692, +13692, +13707, +13714, +13714, +13714, +13728, +13728, +13750, +13763, +13782, +13782, +13819, +13840, +13840, +13858, +13867, +13888, +13925, +13925, +13950, +13960, +13960, +13974, +14014, +14051, +14067, +14086, +14095, +14102, +14102, +14102, +14123, +14123, +14123, +14144, +14168, +14168, +14175, +14175, +14175, +14175, +14186, +14237, +14237, 14258, -14275, -14275, -14304, -14311, -14311, -14318, -14318, -14318, -14318, -14318, -14318, -14325, -14325, -14345, -14345, -14379, -14389, -14422, -14422, -14422, -14422, -14435, -14441, -14441, -14460, -14460, -14471, -14471, -14481, -14495, -14495, -14495, -14502, -14502, -14502, -14502, -14524, -14533, -14541, -14552, -14552, -14552, -14552, -14563, -14563, -14568, -14568, -14585, -14595, -14602, -14628, -14628, -14645, -14672, -14678, -14697, -14697, -14734, -14757, -14764, -14771, -14771, -14771, -14796, -14815, -14822, -14845, -14861, -14861, -14861, -14873, -14873, -14873, -14902, -14920, -14920, -14926, -14926, -14926, -14941, -14949, -14949, -14949, -14949, -14949, -14960, -14960, -14971, -14971, -14998, -15003, -15003, -15003, -15013, -15013, -15027, -15027, -15027, -15043, -15053, -15063, -15074, -15083, -15093, -15093, -15121, -15121, -15128, -15128, -15144, -15144, -15144, -15144, -15165, -15170, -15170, -15170, -15170, -15170, -15170, -15170, -15186, -15206, -15206, -15206, -15224, -15236, -15236, -15252, -15258, -15258, -15258, -15258, -15264, -15277, -15288, -15307, -15307, -15318, -15328, -15328, -15334, -15334, -15363, -15399, -15399, -15422, -15438, -15447, -15447, -15456, -15456, -15456, -15495, -15495, -15495, -15495, -15511, -15511, -15530, -15557, -15566, -15582, -15590, -15590, -15604, -15604, -15625, -15635, -15655, -15655, -15655, -15655, -15655, -15665, -15675, -15675, -15675, -15675, -15675, -15682, -15682, -15682, -15694, -15719, -15749, -15749, -15794, -15794, -15837, -15854, -15854, -15861, -15861, -15861, -15861, -15884, -15900, -15911, -15931, -15931, -15931, -15931, -15931, -15963, -15963, -15996, -16006, -16013, -16024, +14258, +14258, +14292, +14292, +14328, +14338, +14338, +14338, +14364, +14390, +14390, +14423, +14454, +14469, +14512, +14512, +14512, +14512, +14512, +14512, +14512, +14525, +14535, +14550, +14572, +14578, +14591, +14603, +14603, +14603, +14619, +14619, +14619, +14619, +14656, +14679, +14700, +14725, +14725, +14725, +14725, +14725, +14730, +14751, +14767, +14767, +14767, +14767, +14787, +14820, +14837, +14837, +14865, +14865, +14882, +14882, +14882, +14882, +14882, +14892, +14892, +14892, +14912, +14929, +14947, +14947, +14947, +14947, +14947, +14947, +14966, +15018, +15034, +15044, +15055, +15055, +15073, +15118, +15118, +15118, +15146, +15158, +15169, +15175, +15175, +15175, +15181, +15181, +15181, +15247, +15279, +15292, +15292, +15292, +15292, +15326, +15331, +15365, +15389, +15398, +15412, +15426, +15433, +15433, +15433, +15433, +15469, +15490, +15490, +15506, +15523, +15553, +15553, +15571, +15571, +15585, +15602, +15602, +15602, +15602, +15602, +15631, +15658, +15669, +15699, +15716, +15716, +15757, +15789, +15796, +15796, +15796, +15796, +15815, +15840, +15898, +15898, +15919, +15933, +15933, +15940, +15946, +15946, +15964, +15964, +15964, +15973, +15979, +16008, +16019, +16019, 16034, -16049, -16049, -16049, -16059, -16059, -16059, -16059, -16059, -16059, -16059, -16064, -16075, -16104, -16104, -16117, -16124, -16124, -16124, -16124, -16130, -16145, -16159, -16190, -16193, -16196, -16210, -16224, -16243, -16255, -16261, -16280, -16283, -16292, -16295, -16295, -16301, -16304, +16042, +16057, +16073, +16095, +16095, +16112, +16121, +16139, +16139, +16139, +16148, +16148, +16148, +16148, +16165, +16187, +16187, +16199, +16199, +16215, +16215, +16215, +16231, +16240, +16284, +16305, +16305, 16322, -16325, -16328, -16349, -16355, -16382, -16408, -16414, -16414, -16414, -16458, -16477, -16480, -16485, -16488, -16514, -16520, -16530, -16530, -16546, -16562, -16597, -16603, -16622, -16622, -16646, -16669, -16672, -16715, -16715, -16715, -16718, -16718, -16727, -16733, -16752, -16770, -16787, -16794, -16810, -16827, -16840, -16850, -16876, -16901, -16901, -16901, -16916, -16919, -16926, -16943, -16972, -16978, -16978, -16978, -16981, -17008, -17008, -17016, -17053, -17053, -17053, -17053, -17072, -17086, -17105, -17139, -17153, -17162, -17162, -17177, -17177, -17177, -17177, -17195, -17218, -17221, -17221, -17237, -17276, -17276, -17300, -17319, -17339, -17357, -17370, -17383, -17400, -17407, -17419, -17439, -17439, -17449, -17465, -17475, -17504, -17527, -17527, -17534, -17548, -17564, -17564, -17598, -17598, -17601, -17630, -17649, -17669, -17669, -17679, -17686, +16343, +16362, +16383, +16393, +16393, +16411, +16419, +16425, +16436, +16461, +16468, +16468, +16468, +16490, +16490, +16490, +16507, +16528, +16528, +16528, +16538, +16555, +16566, +16566, +16590, +16590, +16605, +16623, +16636, +16636, +16636, +16656, +16666, +16696, +16713, +16743, +16760, +16781, +16797, +16811, +16811, +16823, +16838, +16859, +16879, +16879, +16879, +16902, +16908, +16908, +16908, +16908, +16966, +16966, +16966, +16975, +16992, +16992, +16992, +17033, +17069, +17069, +17100, +17117, +17133, +17151, +17151, +17159, +17203, +17203, +17220, +17226, +17226, +17245, +17245, +17259, +17259, +17269, +17295, +17295, +17295, +17353, +17386, +17394, +17394, +17394, +17409, +17409, +17442, +17442, +17454, +17509, +17509, +17509, +17532, +17532, +17532, +17550, +17561, +17561, +17561, +17561, +17561, +17561, +17561, +17561, +17561, +17575, +17581, +17581, +17581, +17620, +17627, +17640, +17640, +17677, +17677, +17688, +17688, +17722, +17734, +17747, +17757, +17757, 17757, -17776, -17796, -17810, -17840, -17840, -17877, -17884, -17884, -17911, -17936, -17970, +17803, +17820, +17846, +17892, +17892, +17899, +17899, +17919, +17919, +17968, 17980, -17995, -17995, -18008, -18011, -18036, -18075, -18097, -18097, -18104, -18115, -18115, -18129, -18134, -18141, -18141, -18157, -18180, -18190, -18217, -18224, -18252, -18284, -18284, -18296, -18299, -18312, -18322, -18338, -18348, -18348, -18363, -18372, -18387, -18387, -18390, +17996, +18021, +18021, +18021, +18021, +18050, +18050, +18072, +18102, +18119, +18119, +18132, +18132, +18132, +18146, +18146, +18165, +18184, +18184, +18192, +18192, +18192, +18223, +18223, +18223, +18231, +18231, +18231, +18231, +18257, +18270, +18300, +18313, +18331, +18331, +18331, +18351, +18351, +18382, +18392, +18392, +18392, 18402, +18402, +18418, 18445, -18445, -18445, -18466, -18479, -18479, -18498, -18508, -18511, -18511, -18511, -18511, -18511, -18526, -18558, -18586, -18622, +18519, +18519, +18528, +18542, +18571, +18595, +18616, +18628, +18628, 18643, -18670, -18686, -18710, -18720, -18739, -18739, -18742, -18745, -18771, -18774, -18777, -18791, -18813, -18816, -18822, -18839, -18845, -18851, -18854, -18878, -18881, -18896, -18896, -18899, -18926, -18937, -18940, -18953, -18963, -19010, -19010, -19017, -19046, -19060, -19060, -19087, -19095, -19101, -19101, -19128, -19146, -19157, -19157, -19188, +18678, +18690, +18715, +18731, +18731, +18751, +18763, +18763, +18763, +18779, +18793, +18793, +18824, +18840, +18840, +18856, +18856, +18864, +18864, +18902, +18902, +18933, +18946, +18946, +18946, +18946, +18946, +18946, +18955, +18955, +18973, +18979, +18992, +18992, +18992, +19008, +19016, +19016, +19033, +19033, +19044, +19044, +19044, +19044, +19082, +19129, +19149, 19198, -19205, -19223, -19230, -19255, -19280, -19280, -19283, -19292, -19301, -19320, -19323, -19323, -19341, -19341, -19365, -19378, -19381, -19394, -19423, -19433, -19440, +19210, +19210, +19210, +19219, +19219, +19219, +19227, +19261, +19261, +19268, +19291, +19319, +19319, +19319, +19331, +19359, +19369, +19369, +19384, +19384, +19406, +19413, 19466, -19490, -19490, -19490, -19497, -19504, -19511, -19511, -19518, -19545, -19568, -19575, -19575, -19583, -19586, -19592, -19592, -19609, -19622, -19629, -19641, -19641, -19656, -19673, -19700, -19723, -19733, -19746, -19759, -19769, -19782, -19789, -19795, -19831, -19834, -19841, -19851, -19854, -19880, -19895, -19898, -19898, -19911, -19922, -19950, -20020, +19482, +19482, +19494, +19515, +19522, +19570, +19570, +19570, +19610, +19625, +19632, +19639, +19658, +19665, +19672, +19672, +19679, +19679, +19692, +19719, +19749, +19756, +19776, +19807, +19817, +19817, +19837, +19844, +19876, +19906, +19906, +19923, +19923, +19942, +19958, +19973, +19995, +20002, +20023, 20030, -20059, -20062, -20089, -20107, -20151, -20154, -20175, +20036, +20036, +20060, +20060, +20066, +20073, +20108, +20116, +20131, +20131, +20131, +20166, +20183, +20202, 20205, -20208, -20229, -20229, -20255, -20261, -20261, -20283, -20335, -20362, -20385, -20392, -20392, -20392, -20392, -20418, -20418, -20418, +20215, +20233, +20233, +20236, +20243, +20253, +20281, +20284, +20294, +20297, +20315, +20355, +20400, +20415, 20418, +20428, 20443, -20446, -20446, -20452, -20452, +20461, 20467, -20467, -20489, -20489, -20498, -20525, -20554, -20560, +20470, +20476, +20499, +20499, +20513, +20513, +20516, +20523, +20546, +20549, 20575, -20589, -20589, -20589, -20614, -20652, -20659, -20659, -20668, -20679, -20679, -20679, -20685, +20615, +20615, +20618, +20682, 20685, -20685, -20685, -20685, -20685, -20696, -20733, -20760, -20766, -20769, -20792, -20792, -20792, -20792, -20813, -20813, -20813, -20813, -20826, -20826, -20846, -20862, -20880, +20691, +20700, +20727, +20776, +20779, +20800, +20816, +20858, 20887, -20901, -20908, -20933, -20938, -20958, -20969, -20978, -20978, -20978, -20985, -20985, -20985, -21000, -21010, -21010, -21014, -21026, -21033, -21041, -21041, -21051, -21051, -21064, -21071, -21113, -21120, -21120, -21127, -21134, -21142, -21164, -21164, -21164, -21188, -21195, -21208, -21215, -21226, -21226, -21226, -21238, -21249, -21255, -21255, -21265, -21279, -21296, -21301, -21315, -21321, -21331, -21331, -21331, -21337, -21343, -21343, -21351, -21351, -21361, -21368, -21383, -21383, -21389, -21413, -21437, -21449, -21462, -21478, -21506, -21534, -21546, -21546, -21557, -21580, -21595, -21595, -21595, -21595, -21626, -21626, -21646, -21670, -21676, -21688, -21688, -21716, -21731, -21762, -21762, -21762, -21762, -21762, -21783, -21789, -21799, -21828, -21828, +20898, +20898, +20898, +20923, +20926, +20949, +20952, +20959, +20965, +20974, +20980, +20996, +20996, +21021, +21039, +21039, +21052, +21055, +21076, +21079, +21091, +21094, +21114, +21114, +21117, +21117, +21124, +21143, +21196, +21196, +21196, +21196, +21196, +21205, +21212, +21261, +21278, +21293, +21333, +21354, +21366, +21373, +21408, +21433, +21439, +21442, +21442, +21445, +21448, +21460, +21463, +21466, +21476, +21479, +21529, +21568, +21574, +21574, +21577, +21604, +21611, +21611, +21631, +21649, +21689, +21692, +21714, +21752, +21752, +21780, +21787, +21813, 21837, -21845, -21868, -21874, -21874, -21880, -21880, -21889, -21901, -21910, -21941, -21941, -21959, -21959, -21959, -21966, -21966, -21972, -21972, -21995, -22011, +21840, +21857, +21885, +21888, +21888, +21911, +21918, +21928, +21928, +21934, +21970, +21983, +21992, +22012, +22019, +22036, 22043, -22043, -22051, -22051, -22060, -22060, -22060, -22074, -22086, -22086, -22099, -22099, -22120, -22120, -22134, -22144, -22150, -22158, -22164, -22164, -22171, -22199, -22210, -22210, -22210, -22220, +22050, +22078, +22112, +22115, +22122, +22125, +22174, +22208, +22211, +22221, 22228, 22228, -22239, -22261, -22304, -22304, -22312, -22349, -22349, -22349, -22357, -22381, -22381, -22390, -22390, -22390, -22390, -22402, -22413, -22413, -22422, -22422, -22445, -22445, -22445, -22456, -22456, +22240, +22254, +22254, +22273, +22291, +22327, +22355, +22358, +22368, +22368, +22368, +22368, +22384, +22397, +22415, +22418, +22418, +22439, +22459, +22459, 22469, -22479, -22501, -22512, -22528, -22528, -22528, -22528, -22528, -22528, -22528, -22540, +22488, +22507, +22524, +22524, 22540, +22543, 22546, 22546, 22546, 22546, -22569, -22591, -22591, -22591, -22591, -22610, -22655, -22655, -22667, -22667, -22677, -22677, -22692, -22692, -22702, -22702, -22702, -22717, -22736, +22553, +22575, +22581, +22584, +22587, +22595, +22607, +22607, +22614, +22624, +22650, +22686, +22699, +22705, +22718, 22750, -22755, -22780, -22785, -22822, -22844, -22859, -22871, -22909, -22949, -22962, -22973, -22979, -22988, -23007, -23027, -23035, -23072, -23082, -23082, -23109, -23116, -23130, -23158, -23166, -23166, -23172, -23177, -23189, -23219, -23219, -23250, -23273, -23281, -23281, -23281, -23281, -23281, +22753, +22772, +22782, +22789, +22825, +22838, +22890, +22913, +22916, +22926, +22932, +22946, +22986, +22986, +23015, +23050, +23073, +23076, +23079, +23101, +23132, +23152, +23211, +23237, +23240, +23259, +23284, 23287, -23287, -23299, -23305, -23315, -23315, -23321, -23328, -23334, -23355, -23355, -23355, -23355, -23355, -23366, -23390, -23396, -23396, -23396, -23396, -23402, -23418, -23424, -23424, -23438, -23446, -23446, -23446, -23500, -23525, -23569, -23592, -23592, -23592, -23605, -23614, -23614, -23614, -23627, -23633, -23657, -23673, -23673, -23673, -23689, -23689, -23701, -23701, -23701, -23713, -23713, -23713, -23738, -23758, -23775, -23775, -23794, -23794, -23803, -23803, -23803, -23803, -23813, -23826, -23845, -23845, -23845, -23845, -23872, -23872, -23872, -23888, -23888, -23900, -23900, -23906, -23906, -23906, -23906, -23906, -23924, -23924, -23924, -23930, -23930, -23939, -23949, -23971, -23971, -23971, -24000, -24012, -24042, -24042, -24042, -24042, -24042, -24070, -24076, -24094, -24094, -24094, -24123, -24123, -24123, -24134, -24150, +23302, +23308, +23311, +23311, +23311, +23318, +23325, +23339, +23352, +23369, +23380, +23430, +23437, +23457, +23460, +23466, +23473, +23516, +23519, +23522, +23534, +23549, +23568, +23589, +23609, +23631, +23642, +23645, +23676, +23683, +23693, +23696, +23730, +23746, +23790, +23807, +23819, +23840, +23843, +23843, +23868, +23885, +23898, +23905, +23921, +23921, +23938, +23979, +23988, +23994, +24022, +24029, +24059, +24059, +24081, +24100, +24100, +24107, +24131, 24150, -24150, -24150, -24150, -24150, -24155, -24179, -24179, -24189, -24189, -24189, -24198, -24198, -24218, -24218, -24218, -24234, -24251, -24257, -24276, +24181, +24181, +24184, +24187, +24209, +24239, +24252, +24265, +24271, +24274, +24300, 24305, -24321, -24321, -24321, -24334, -24334, -24334, -24349, -24356, -24361, -24372, -24372, -24372, -24388, -24396, -24396, -24402, -24410, -24410, -24428, -24428, -24450, -24450, +24308, +24311, +24314, +24330, +24333, +24333, +24333, +24336, +24339, +24345, +24348, +24351, +24378, +24384, +24422, +24435, +24446, 24467, -24485, -24495, -24495, -24495, -24507, -24507, -24514, -24531, -24531, -24531, +24470, +24473, +24492, +24505, +24508, +24508, 24531, -24531, -24537, -24537, -24558, -24572, -24584, -24584, -24601, -24601, -24607, -24615, -24615, -24632, -24632, -24632, -24632, -24661, -24676, -24676, -24724, -24751, -24751, -24774, -24774, -24783, -24793, -24793, -24793, -24813, -24819, -24819, -24826, -24826, -24842, -24858, -24872, -24872, -24890, -24890, -24890, -24890, -24890, -24890, -24890, -24890, -24890, -24906, -24906, -24917, -24928, -24947, -24947, -24947, -24947, -24947, -24947, -24947, -24947, -24947, -24963, -24983, -24991, -24991, -24991, -24991, -24991, -24991, -24991, -24991, -25007, -25007, -25007, -25007, -25007, -25007, -25007, -25030, -25040, -25040, -25040, -25040, -25040, -25059, -25097, +24551, +24593, +24617, +24640, +24652, +24652, +24668, +24668, +24668, +24717, +24748, +24748, +24766, +24769, +24775, +24791, +24791, +24829, +24829, +24851, +24861, +24867, +24913, +24946, +24946, +24965, +24968, +24968, +24981, +24981, +24994, +24994, +25009, +25012, +25015, +25026, +25031, +25043, +25043, +25056, +25056, +25056, +25056, +25062, +25075, +25099, +25106, +25118, +25118, +25118, +25118, +25126, 25132, -25149, -25159, -25169, -25169, -25169, -25192, -25192, -25192, -25192, -25205, -25205, -25216, -25221, -25221, -25233, -25233, -25240, -25250, -25256, -25273, -25273, -25303, -25321, -25321, -25321, -25333, -25333, -25333, -25333, -25370, -25370, -25402, -25418, -25418, -25439, -25439, -25454, -25454, -25454, -25463, -25477, -25526, -25526, -25526, -25526, -25545, -25562, -25572, -25572, -25582, -25582, -25582, +25183, +25183, +25200, +25219, +25225, +25241, +25247, +25259, +25274, +25322, +25322, +25336, +25336, +25336, +25360, +25368, +25368, +25368, +25374, +25381, +25387, +25398, +25417, +25417, +25417, +25431, +25466, +25492, +25500, +25549, +25569, +25569, +25590, +25590, 25597, -25610, -25634, -25641, -25641, -25641, -25668, -25668, -25675, -25707, -25727, -25727, -25741, -25756, -25756, -25779, -25811, -25811, -25811, -25817, -25817, -25817, -25827, -25827, -25827, -25827, -25827, -25836, -25836, -25836, -25836, -25850, -25850, +25616, +25622, +25640, +25640, +25640, +25655, +25655, +25671, +25671, +25691, +25706, +25706, +25706, +25738, +25738, +25746, +25759, +25759, +25781, +25781, +25802, +25815, 25860, -25884, -25901, -25922, -25936, -25946, -25969, -25969, -25969, -25969, -25975, -25975, -25987, -25987, -26065, -26065, +25860, +25867, +25877, +25877, +25877, +25913, +25913, +25953, +25980, +26002, +26013, +26026, +26026, +26032, +26032, +26038, +26050, +26050, +26059, 26065, -26084, -26084, -26103, +26071, +26087, +26122, 26128, -26141, -26151, -26169, -26169, -26169, -26180, -26191, -26191, -26191, -26197, -26197, -26205, -26211, -26235, -26235, -26235, -26235, -26235, -26235, -26245, -26245, -26259, -26259, -26259, -26259, -26284, -26284, -26325, -26325, -26355, -26364, -26364, -26402, -26418, -26418, -26425, -26432, -26432, -26454, -26504, -26513, -26525, -26525, -26525, -26525, -26525, -26545, -26545, -26571, -26590, -26597, -26597, -26597, -26597, -26597, +26146, +26164, +26185, +26212, +26212, +26229, +26229, +26236, +26248, +26266, +26290, +26311, +26311, +26311, +26311, +26321, +26352, +26365, +26371, +26371, +26394, +26403, +26435, +26435, +26435, +26435, +26485, +26516, +26522, +26528, +26565, +26565, +26600, 26639, -26648, -26659, -26666, -26672, -26672, -26672, -26672, -26672, -26694, -26701, -26701, -26701, -26724, -26724, -26746, -26753, -26774, -26774, -26774, -26774, -26806, -26824, -26824, -26830, -26852, -26882, -26882, -26889, -26889, -26889, -26889, -26889, -26889, -26903, -26911, -26918, -26918, -26928, -26948, -26948, -26970, -26970, -26985, -26996, -27045, -27045, -27058, -27058, -27068, -27068, -27104, -27155, -27155, -27155, -27155, -27155, -27172, -27172, -27172, -27172, -27189, -27195, -27195, -27223, -27223, -27223, -27223, -27244, -27290, -27322, -27332, -27364, +26649, +26649, +26649, +26649, +26700, +26735, +26745, +26759, +26778, +26778, +26801, +26810, +26810, +26829, +26836, +26849, +26849, +26856, +26856, +26874, +26883, +26883, +26883, +26883, +26899, +26915, +26915, +26915, +26915, +26936, +26951, +26958, +26958, +26975, +26994, +27000, +27010, +27041, +27066, +27073, +27110, +27150, +27150, +27168, +27168, +27175, +27184, +27184, +27184, +27196, +27209, +27224, +27242, +27242, +27248, +27248, +27278, +27298, +27314, +27320, +27363, 27371, 27371, -27371, -27401, -27401, -27417, -27417, +27393, +27399, +27399, +27405, +27405, +27405, +27411, +27418, +27425, +27431, 27431, -27470, -27470, -27470, -27470, -27484, -27484, -27484, -27484, -27484, -27496, -27496, -27515, -27515, -27543, -27560, -27576, -27604, -27622, -27631, -27631, -27638, -27649, -27672, -27682, -27682, -27682, -27707, -27717, -27724, -27732, -27755, -27755, -27755, -27768, -27768, -27783, -27789, -27799, -27799, -27799, -27818, -27826, -27838, -27848, -27848, -27848, -27855, -27862, -27862, -27896, -27921, -27921, -27943, -27954, -27954, -27976, -27976, -27976, -27985, -28002, -28012, -28019, -28034, -28034, -28046, -28068, -28097, -28122, -28122, -28131, -28137, -28151, -28151, -28172, -28190, +27455, +27469, +27475, +27475, +27475, +27475, +27475, +27500, +27500, +27523, +27523, +27558, +27574, +27580, +27650, +27663, +27679, +27679, +27733, +27745, +27754, +27761, +27774, +27774, +27782, +27816, +27854, +27854, +27875, +27875, +27875, +27930, +27947, +27967, +27967, +27979, +27986, +28007, +28015, +28036, +28036, +28060, +28060, +28078, +28078, +28078, +28085, +28085, +28091, +28105, +28119, +28119, +28157, +28157, +28163, +28175, +28196, +28196, 28196, -28211, -28211, -28264, -28273, -28286, -28324, -28324, -28324, -28354, -28354, -28361, -28397, -28417, -28417, -28424, -28435, -28461, -28461, -28470, -28483, -28483, -28483, -28483, -28483, -28483, -28483, -28515, -28531, -28531, +28230, +28230, +28230, +28230, +28256, +28265, +28265, +28281, +28281, +28299, +28310, +28325, +28325, +28344, +28353, +28353, +28389, +28389, +28389, +28399, +28421, +28444, +28444, +28478, +28525, +28525, 28549, -28575, -28575, -28575, -28582, -28599, -28615, -28630, -28630, +28549, +28579, +28579, +28594, +28607, +28621, +28638, 28672, -28711, -28723, -28723, -28731, -28752, -28752, -28752, -28763, -28763, -28775, -28775, -28775, -28775, -28775, -28775, -28805, -28814, -28830, -28861, -28882, -28882, -28902, -28918, -28937, -28952, -28959, -28998, -29009, -29009, -29009, -29009, -29019, -29019, -29019, -29019, -29019, -29057, -29069, -29076, -29076, -29076, -29076, -29076, -29082, -29082, -29082, -29117, -29117, -29117, +28679, +28679, +28679, +28690, +28738, +28748, +28748, +28748, +28748, +28748, +28769, +28803, +28810, +28810, +28819, +28819, +28819, +28826, +28853, +28853, +28853, +28860, +28873, +28898, +28898, +28913, +28913, +28913, +28930, +28930, +28956, +28981, +29024, +29024, +29044, +29044, +29074, +29085, +29104, 29117, -29134, -29134, -29159, -29159, -29185, -29185, -29196, -29196, -29242, -29248, -29256, -29280, -29301, -29307, -29307, -29307, -29314, -29314, -29338, -29356, -29367, -29367, -29381, -29391, -29399, -29399, -29414, -29434, -29434, -29441, -29473, -29484, -29503, -29520, -29520, -29548, -29565, -29572, -29572, -29572, -29572, -29572, -29597, -29597, -29620, -29655, -29660, -29660, -29660, -29667, -29674, -29688, -29698, -29705, -29728, -29740, -29740, -29761, -29761, -29767, -29780, -29787, -29794, -29794, -29807, -29820, -29820, -29820, -29820, -29832, -29844, -29855, -29855, -29855, -29867, -29867, -29867, -29867, -29881, -29881, -29905, -29905, -29905, -29923, -29923, -29948, -29948, -29948, -29976, -29986, -29996, -29996, -30030, -30030, -30054, -30054, -30070, -30070, -30070, -30077, -30077, -30087, -30107, -30107, -30115, -30141, -30178, -30178, -30201, -30201, -30201, -30207, -30229, -30239, -30254, -30268, -30277, -30311, -30323, -30323, -30331, -30331, -30331, -30331, -30331, -30353, -30365, -30374, -30374, -30374, -30380, -30380, -30380, -30380, -30410, -30410, -30410, -30443, -30443, -30453, -30462, -30472, -30472, -30472, -30472, -30472, -30472, -30489, -30500, -30500, -30500, -30532, -30532, -30553, -30577, -30599, -30599, -30609, -30640, -30640, -30640, -30664, -30676, -30676, -30676, -30692, -30719, -30728, -30728, -30742, -30742, -30749, -30749, -30760, -30770, -30770, -30783, -30783, -30783, -30804, -30847, -30847, -30847, -30847, -30857, -30857, -30857, -30857, -30875, -30875, -30895, -30895, -30921, -30926, -30926, -30926, +29125, +29125, +29146, +29153, +29153, +29160, +29175, +29189, +29189, +29214, +29214, +29214, +29224, +29224, +29224, +29234, +29299, +29318, +29325, +29325, +29343, +29400, +29417, +29417, +29436, +29436, +29436, +29436, +29454, +29460, +29460, +29478, +29478, +29478, +29487, +29487, +29516, +29516, +29549, +29559, +29559, +29576, +29587, +29609, +29609, +29630, +29630, +29644, +29644, +29644, +29644, +29664, +29664, +29686, +29711, +29734, +29734, +29741, +29752, +29752, +29778, +29798, +29805, +29819, +29835, +29842, +29849, +29866, +29884, +29891, +29891, +29919, +29943, +29993, +30000, +30010, +30016, +30046, +30069, +30085, +30085, +30102, +30124, +30143, +30150, +30150, +30169, +30169, +30216, +30230, +30256, +30256, +30265, +30280, +30304, +30320, +30324, +30340, +30354, +30364, +30382, +30396, +30396, +30407, +30457, +30473, +30490, +30490, +30490, +30514, +30514, +30539, +30562, +30583, +30615, +30622, +30622, +30629, +30638, +30662, +30662, +30688, +30712, +30712, +30721, +30721, +30721, +30721, +30721, +30758, +30792, +30811, +30811, +30811, +30843, +30843, +30876, +30876, +30876, +30876, +30889, +30909, +30923, 30945, 30945, -30945, -30945, -30959, -30959, -30959, -30959, -30972, -30972, -30984, -31011, -31011, -31048, -31056, -31056, -31070, -31077, -31077, -31110, -31110, -31115, -31122, -31139, -31159, -31159, -31165, -31171, -31171, -31197, -31204, -31211, -31211, -31221, -31228, -31228, -31245, -31245, -31245, -31252, -31265, -31265, -31265, -31265, -31294, -31305, -31320, -31333, -31333, -31333, -31343, -31350, -31357, -31369, -31369, -31379, -31385, -31391, -31407, -31407, -31407, -31423, -31423, -31423, -31434, -31454, -31470, -31511, -31521, -31521, -31521, -31542, -31582, -31582, -31597, -31597, -31597, -31614, -31623, -31645, -31645, +30980, +31031, +31059, +31078, +31108, +31125, +31137, +31174, +31200, +31200, +31200, +31200, +31207, +31237, +31237, +31259, +31279, +31307, +31335, +31378, +31378, +31378, +31378, +31397, +31437, +31443, +31467, +31467, +31483, +31527, +31537, +31548, +31557, +31564, +31564, +31589, +31603, +31647, 31661, -31661, -31669, -31669, -31676, -31676, -31706, -31720, -31726, -31743, -31785, -31804, -31817, -31817, -31835, -31846, -31863, -31885, -31885, -31896, -31907, -31907, -31907, -31922, -31922, -31929, -31929, -31929, -31936, -31943, -31949, -31949, -31949, -31959, -32006, -32024, -32031, -32031, -32038, -32063, -32095, -32095, -32105, -32105, -32105, -32105, -32105, -32125, -32134, -32140, -32176, -32185, -32195, -32195, -32195, -32195, -32202, -32202, -32218, -32236, -32259, -32294, +31677, +31677, +31690, +31709, +31709, +31762, +31769, +31776, +31799, +31841, +31841, +31848, +31869, +31875, +31875, +31904, +31904, +31925, +31939, +31952, +31984, +31984, +31984, +32029, +32029, +32029, +32045, +32055, +32086, +32086, +32124, +32152, +32152, +32159, +32159, +32184, +32190, +32211, +32231, +32231, +32238, +32261, +32268, +32284, +32284, +32284, +32284, 32300, -32305, -32305, -32305, 32323, -32337, -32352, -32359, -32374, -32381, -32388, -32388, -32388, -32402, +32351, +32358, +32396, +32396, +32396, 32402, 32402, -32402, -32418, -32428, -32428, -32428, -32450, -32450, -32450, -32462, -32467, -32480, -32480, -32480, -32487, -32502, -32509, -32525, -32560, -32570, -32583, -32597, -32623, -32637, -32644, -32667, -32707, -32725, -32725, -32747, -32747, -32751, -32758, -32789, -32807, -32824, -32824, -32824, -32824, -32843, -32843, -32850, -32876, -32908, -32915, -32946, -32965, -32965, -32982, -33002, -33009, -33029, -33064, -33084, -33098, -33098, -33098, -33098, +32414, +32414, +32438, +32449, +32455, +32483, +32490, +32510, +32541, +32548, +32578, +32585, +32592, +32592, +32592, +32616, +32625, +32641, +32671, +32681, +32681, +32688, +32711, +32737, +32754, +32761, +32761, +32777, +32810, +32817, +32817, +32817, +32817, +32817, +32844, +32867, +32901, +32943, +32956, +32974, +32983, +33004, +33004, +33050, +33066, +33072, +33072, +33080, +33080, 33110, 33110, -33151, -33158, -33180, -33198, -33205, -33227, -33227, -33237, -33237, -33253, -33258, -33277, -33292, -33315, -33315, -33333, -33348, -33348, -33348, +33134, +33157, +33164, +33200, +33200, +33207, +33244, +33244, +33309, +33316, +33316, +33316, +33316, +33316, +33323, +33341, 33348, -33348, -33348, -33348, -33355, -33355, -33355, -33390, -33408, -33423, -33437, -33452, -33458, -33465, -33480, -33480, +33361, +33394, +33394, +33394, +33394, +33432, +33442, +33470, +33470, +33470, +33487, 33487, -33494, -33504, -33511, -33551, -33551, -33558, -33589, -33595, -33595, +33487, +33516, +33548, +33562, +33562, +33569, +33584, +33584, +33584, 33602, -33627, -33644, -33668, -33668, -33668, -33676, -33676, -33716, -33728, -33747, -33747, -33769, -33775, -33789, -33803, -33803, -33810, -33810, -33810, -33820, -33820, -33820, -33820, -33843, -33843, -33843, -33879, -33889, -33889, -33889, -33903, -33917, -33931, -33959, -33993, -34000, -34014, -34037, -34043, -34055, -34055, +33621, +33621, +33629, +33645, +33645, +33652, +33652, +33672, +33691, +33707, +33714, +33721, +33721, +33735, +33766, +33772, +33772, +33772, +33779, +33779, +33824, +33844, +33844, +33850, +33867, +33867, +33874, +33874, +33874, +33874, +33901, +33946, +33960, +33971, +34019, +34050, 34077, -34083, -34090, -34099, -34099, -34115, -34115, -34133, -34140, -34167, -34172, -34184, -34221, -34245, -34252, -34252, +34084, +34103, +34110, +34121, +34128, +34157, +34193, +34193, +34220, 34259, -34318, +34272, +34272, +34272, +34279, +34294, +34300, +34313, 34318, 34325, -34325, -34352, -34400, -34415, -34422, -34422, -34431, -34438, -34445, -34445, -34473, -34473, -34489, -34489, -34489, -34489, -34499, -34499, -34499, -34516, -34536, -34551, -34564, -34580, -34580, -34580, -34589, +34333, +34347, +34354, +34361, +34368, +34368, +34368, +34408, +34433, +34467, +34504, +34504, +34547, +34547, +34554, +34561, +34561, +34561, +34582, 34589, -34589, -34613, -34648, -34648, -34648, -34655, -34664, -34681, -34681, -34698, -34698, -34720, -34736, +34611, +34627, +34637, +34637, +34637, +34641, +34666, +34666, +34683, +34690, +34690, +34699, +34699, +34716, 34749, 34749, -34765, -34778, -34785, -34795, -34819, -34819, -34829, -34841, -34848, -34854, -34854, -34854, -34878, -34894, -34894, -34900, -34917, -34934, -34940, -34970, -34998, -34998, -35004, -35004, -35012, -35012, -35012, -35020, -35020, -35032, -35038, -35062, -35062, -35062, -35068, -35068, -35082, -35092, -35096, -35107, -35118, -35134, -35155, -35155, -35166, -35178, -35178, -35195, -35201, -35201, -35201, -35226, -35226, +34756, +34756, +34756, +34756, +34777, +34777, +34777, +34820, +34827, +34862, +34874, +34881, +34881, +34903, +34903, +34903, +34920, +34949, +34949, +34949, +34949, +34968, +34968, +35003, +35003, +35015, +35039, +35039, +35081, +35093, +35093, +35115, +35115, +35132, +35132, +35132, +35132, +35157, 35226, -35226, -35256, -35262, -35272, -35280, +35241, +35248, +35266, +35266, +35273, +35273, +35273, +35273, +35299, 35299, -35332, -35354, -35354, -35354, -35370, -35386, -35417, -35417, -35460, -35473, -35478, -35495, -35504, -35504, -35518, -35552, -35589, -35624, -35624, -35637, -35637, -35643, -35643, -35669, -35682, -35695, -35702, -35709, -35709, -35726, -35739, -35749, -35756, -35756, -35778, -35803, -35810, -35829, -35883, +35306, +35334, +35365, +35365, +35406, +35428, +35428, +35441, +35474, +35506, +35506, +35529, +35529, +35548, +35555, +35574, +35574, +35574, +35595, +35630, +35644, +35649, +35698, +35750, +35750, +35762, +35762, +35762, +35798, +35842, +35849, +35866, +35878, +35885, +35892, 35899, -35905, -35911, -35911, +35899, +35906, +35906, +35906, 35923, -35947, -35954, -35980, -35987, -36034, -36052, -36063, -36095, -36106, -36106, +35944, +35951, +35961, +35978, +35984, +35992, +36023, +36060, +36076, +36085, 36113, -36120, -36140, -36140, -36153, -36160, -36160, -36167, -36203, -36203, -36218, -36218, -36225, -36253, -36259, -36284, -36296, -36310, -36324, -36331, -36344, -36367, -36367, -36367, -36412, -36412, -36422, -36463, -36463, -36463, -36479, -36490, -36513, -36520, -36520, -36527, -36527, -36527, -36540, -36574, -36594, -36594, -36605, -36621, -36621, -36641, -36641, -36641, -36659, -36682, -36682, -36682, -36682, -36705, -36705, -36705, -36720, -36720, -36755, -36755, -36771, -36771, -36771, -36788, -36806, -36835, -36845, -36875, -36875, -36903, -36921, -36928, -36928, -36940, -36940, -36940, -36966, -36966, -36973, -36983, -36998, -37004, -37014, -37024, -37024, -37032, -37038, -37038, -37061, -37074, -37074, -37091, -37098, -37105, -37105, -37133, -37141, -37141, -37148, -37191, -37191, -37197, -37197, -37210, -37224, -37224, -37231, -37250, -37257, -37273, -37273, -37280, -37287, -37294, -37300, -37307, -37330, -37348, -37348, -37359, -37359, -37359, -37377, -37392, -37398, -37412, -37431, -37469, -37486, -37508, -37517, -37535, -37535, -37542, -37542, -37549, -37549, -37549, -37549, -37556, -37576, -37576, -37583, -37590, -37597, -37604, -37604, -37621, -37635, -37676, -37676, -37704, -37711, -37728, +36144, +36144, +36159, +36166, +36166, +36173, +36173, +36201, +36201, +36220, +36227, +36227, +36227, +36247, +36263, +36270, +36270, +36315, +36315, +36322, +36330, +36354, +36408, +36420, +36420, +36440, +36454, +36454, +36454, +36461, +36474, +36529, +36569, +36667, +36674, +36674, +36700, +36707, +36707, +36714, +36721, +36721, +36731, +36760, +36781, +36793, +36800, +36800, +36847, +36854, +36868, +36938, +36945, +36967, +36967, +36992, +37008, +37050, +37050, +37050, +37068, +37081, +37088, +37113, +37145, +37145, +37145, +37145, +37165, +37171, +37171, +37198, +37198, +37211, +37239, +37247, +37298, +37341, +37341, +37367, +37400, +37422, +37458, +37492, +37530, +37530, +37530, +37537, +37551, +37566, +37592, +37614, +37614, +37631, +37638, +37645, +37652, +37664, +37702, +37714, +37721, 37728, -37737, -37737, -37737, -37750, -37757, -37778, -37785, -37785, -37819, -37826, -37833, -37843, -37850, -37869, -37914, -37921, -37935, +37740, +37770, +37770, +37793, +37809, +37830, +37830, +37841, +37841, +37867, +37867, +37883, +37890, +37890, +37910, +37926, 37942, -37949, -37982, -38013, -38013, -38013, -38023, -38057, -38077, -38097, -38110, -38117, -38123, -38133, -38133, -38133, -38140, -38140, -38148, -38159, -38179, -38192, -38205, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38225, -38225, -38230, -38246, -38258, -38280, -38287, -38294, -38294, -38294, -38301, -38318, -38318, -38340, -38371, -38371, -38384, -38420, -38440, -38453, -38481, -38506, -38522, -38534, +37957, +37991, +38010, +38010, +38026, +38079, +38086, +38093, +38112, +38119, +38136, +38136, +38155, +38189, +38210, +38220, +38248, +38278, +38278, +38314, +38339, +38339, +38354, +38370, +38385, +38399, +38417, +38441, +38469, +38476, +38483, +38499, +38499, +38499, +38521, 38559, -38559, -38559, -38564, -38564, -38581, -38604, -38604, -38611, -38620, -38626, -38635, -38635, -38635, -38666, -38674, +38599, +38617, +38624, +38624, +38660, +38673, 38688, -38693, -38710, -38722, -38722, -38722, -38729, -38734, -38752, -38792, -38818, -38825, +38742, +38774, +38774, +38799, +38799, +38830, +38861, +38861, 38861, +38861, +38861, +38890, 38902, -38934, -38949, -38949, -38960, -38969, -38985, -38985, -38996, -39013, -39024, -39024, -39032, -39061, -39074, +38909, +38944, +38989, +39007, +39045, +39063, 39089, -39123, -39123, -39123, -39140, -39161, -39180, -39206, -39215, -39254, -39261, -39277, -39284, -39314, -39314, -39330, -39340, -39340, -39371, -39371, -39392, +39096, +39109, +39109, +39114, +39127, +39162, +39177, +39177, +39200, +39218, +39226, +39226, +39257, +39293, +39293, +39324, +39324, +39352, +39364, +39364, +39377, +39395, +39395, +39413, 39430, -39430, -39437, -39444, -39461, -39468, -39468, -39485, -39517, -39524, -39538, -39543, -39548, -39555, +39459, +39469, +39469, +39479, +39479, +39479, +39503, +39518, +39528, +39528, +39528, +39540, +39565, +39565, 39581, -39588, -39588, -39609, -39609, -39616, -39652, +39605, +39622, +39653, +39670, 39670, -39677, -39677, -39684, -39691, -39702, -39717, -39717, -39717, -39724, -39749, -39760, -39766, -39775, -39791, -39791, -39814, -39827, -39827, -39837, -39859}; +39670, +39670, +39683, +39689, +39708, +39743, +39743, +39743, +39743, +39743, +39750, +39750, +39750, +39761, +39761, +39777, +39805, +39845, +39855, +39855, +39855, +39855, +39887, +39887, +39887, +39887, +39916, +39916, +39936, +39943, +39962, +39962, +39976, +39976, +40005, +40011, +40011, +40011, +40039, +40051, +40071, +40087, +40087, +40087, +40099, +40099, +40099, +40148, +40170, +40170, +40183, +40183, +40210, +40210, +40210, +40210, +40210, +40221, +40221, +40221, +40221, +40243, +40271, +40271, +40293, +40309, +40314, +40329, +40329, +40354, +40354, +40354, +40354, +40373, +40383, +40383, +40383, +40383, +40396, +40404, +40411, +40417, +40417, +40417, +40417, +40424, +40462, +40473, +40473, +40479, +40479, +40510, +40539, +40539, +40539, +40539, +40539, +40539, +40539, +40556, +40556, +40577, +40588, +40588, +40588, +40588, +40597, +40614, +40623, +40623, +40623, +40623, +40635, +40635, +40635, +40652, +40652, +40652, +40663, +40702, +40724, +40724, +40724, +40724, +40724, +40750, +40750, +40759, +40781, +40781, +40791, +40817, +40817, +40817, +40817, +40817, +40840, +40891, +40891, +40891, +40936, +40990, +40997, +41022, +41071, +41086, +41086, +41102, +41110, +41131, +41157, +41157, +41198, +41216, +41216, +41216, +41235, +41235, +41235, +41247, +41273, +41273, +41273, +41286, +41286, +41320, +41351, +41377, +41403, +41403, +41416, +41426, +41426, +41442, +41458, +41458, +41458, +41470, +41470, +41487, +41498, +41525, +41525, +41544, +41550, +41581, +41598, +41608, +41645, +41654, +41687, +41715, +41715, +41721, +41763, +41776, +41800, +41800, +41800, +41826, +41853, +41879, +41879, +41898, +41908, +41908, +41908, +41926, +41926, +41926, +41943, +41962, +41972, +41998, +42013, +42027, +42027, +42064, +42064, +42073, +42073, +42087, +42101, +42101, +42138, +42148, +42185, +42185, +42208, +42244, +42284, +42284, +42311, +42311, +42321, +42367, +42367, +42367, +42413, +42413, +42427, +42427, +42447, +42486, +42486, +42486, +42509, +42518, +42556, +42556, +42556, +42568, +42586, +42586, +42586, +42605, +42605, +42605, +42628, +42638, +42651, +42651, +42651, +42660, +42681, +42731, +42769, +42769, +42769, +42794, +42802, +42831, +42862, +42862, +42862, +42862, +42911, +42911, +42931, +42946, +42946, +42977, +42994, +43024, +43024, +43024, +43030, +43030, +43084, +43116, +43163, +43163, +43175, +43175, +43175, +43175, +43175, +43175, +43200, +43206, +43206, +43217, +43249, +43249, +43268, +43268, +43285, +43285, +43306, +43306, +43306, +43306, +43324, +43342, +43342, +43361, +43375, +43375, +43375, +43391, +43418, +43424, +43424, +43436, +43443, +43443, +43443, +43473, +43473, +43473, +43486, +43486, +43501, +43501, +43534, +43552, +43567, +43583, +43583, +43599, +43599, +43621, +43621, +43630, +43646, +43663, +43663, +43680, +43680, +43680, +43692, +43720, +43753, +43765, +43778, +43795, +43795, +43795, +43811, +43811, +43811, +43823, +43879, +43895, +43895, +43930, +43930, +43954, +43954, +43971, +43971, +43971, +44004, +44029, +44038, +44048, +44060, +44060, +44060, +44066, +44075, +44090, +44100, +44137, +44157, +44166, +44175, +44175, +44180, +44188, +44210, +44220, +44220, +44220, +44220, +44220, +44220, +44236, +44246, +44255, +44279, +44279, +44302, +44332, +44332, +44332, +44352, +44368, +44391, +44391, +44391, +44420, +44420, +44444, +44479, +44479, +44497, +44510, +44510, +44510, +44510, +44510, +44510, +44543, +44550, +44550, +44557, +44623, +44623, +44642, +44642, +44642, +44679, +44691, +44774, +44774, +44774, +44819, +44836, +44895, +44895, +44930, +44945, +44945, +45013, +45020, +45083, +45099, +45111, +45119, +45129, +45136, +45148, +45148, +45148, +45154, +45171, +45171, +45171, +45171, +45171, +45182, +45182, +45208, +45217, +45255, +45255, +45274, +45274, +45274, +45303, +45309, +45323, +45323, +45354, +45363, +45372, +45372, +45388, +45421, +45449, +45463, +45477, +45504, +45504, +45521, +45521, +45537, +45556, +45556, +45563, +45569, +45569, +45569, +45587, +45593, +45611, +45616, +45616, +45628, +45648, +45692, +45710, +45740, +45773, +45787, +45805, +45811, +45828, +45828, +45861, +45875, +45881, +45881, +45881, +45891, +45891, +45908, +45920, +45920, +45932, +45932, +45932, +45932, +45947, +45966, +45966, +46003, +46039, +46045, +46081, +46087, +46104, +46133, +46150, +46165, +46176, +46176, +46176, +46176, +46181, +46187, +46187, +46187, +46187, +46196, +46202, +46202, +46202, +46213, +46213, +46218, +46218, +46235, +46235, +46235, +46235, +46240, +46302, +46302, +46324, +46324, +46324, +46324, +46324, +46324, +46324, +46324, +46344, +46344, +46356, +46365, +46365, +46396, +46396, +46402, +46430, +46444, +46467, +46492, +46492, +46534, +46563, +46563, +46584, +46595, +46605, +46616, +46616, +46629, +46629, +46654, +46660, +46676, +46676, +46676, +46682, +46682, +46682, +46682, +46711, +46728, +46728, +46728, +46728, +46782, +46797, +46802, +46818, +46818, +46824, +46853, +46853, +46870, +46876, +46876, +46928, +46961, +46981, +46981, +47023, +47023, +47023, +47023, +47075, +47112, +47134, +47146, +47162, +47172, +47172, +47172, +47177, +47177, +47177, +47182, +47193, +47193, +47214, +47256, +47278, +47289, +47338, +47344, +47344, +47367, +47367, +47414, +47423, +47423, +47434, +47451, +47464, +47464, +47464, +47464, +47464, +47479, +47479, +47520, +47520, +47533, +47546, +47552, +47561, +47573, +47573, +47573, +47591, +47591, +47591, +47591, +47596, +47609, +47609, +47620, +47650, +47650, +47650, +47655, +47693, +47708, +47708, +47732, +47737, +47742, +47754, +47768, +47800, +47818, +47818, +47829, +47850, +47850, +47908, +47908, +47930, +47936, +47936, +47978, +47978, +47983, +48002, +48012, +48025, +48025, +48034, +48049, +48083, +48093, +48138, +48138, +48153, +48182, +48205, +48205, +48205, +48212, +48212, +48212, +48234, +48234, +48234, +48234, +48250, +48264, +48264, +48280, +48280, +48295, +48295, +48295, +48295, +48319, +48319, +48319, +48328, +48328, +48334, +48356, +48356, +48362, +48419, +48469, +48488, +48494, +48534, +48534, +48559, +48569, +48583, +48604, +48620, +48670, +48688, +48688, +48697, +48710, +48710, +48710, +48724, +48751, +48757, +48770, +48782, +48797, +48835, +48835, +48840, +48886, +48906, +48922, +48931, +48931, +48951, +48951, +48951, +48962, +48962, +48969, +49033, +49033, +49033, +49074, +49116, +49116, +49123, +49130, +49130, +49164, +49170, +49187, +49206, +49215, +49234, +49261, +49261, +49273, +49324, +49324, +49357, +49404, +49404, +49429, +49448, +49448, +49466, +49472, +49499, +49499, +49499, +49543, +49572, +49579, +49622, +49632, +49685, +49724, +49724, +49724, +49724, +49724, +49761, +49769, +49769, +49797, +49797, +49832, +49832, +49832, +49859, +49859, +49873, +49884, +49884, +49920, +49920, +49931, +49947, +49961, +49978, +50008, +50038, +50038, +50038, +50060, +50076, +50089, +50089, +50089, +50102, +50130, +50130, +50146, +50146, +50146, +50151, +50159, +50184, +50206, +50233, +50250, +50250, +50266, +50274, +50274, +50274, +50274, +50287, +50315, +50315, +50315, +50327, +50327, +50334, +50334, +50366, +50372, +50402, +50402, +50434, +50474, +50494, +50494, +50510, +50510, +50510, +50510, +50510, +50510, +50515, +50515, +50536, +50557, +50578, +50595, +50595, +50595, +50620, +50626, +50626, +50644, +50656, +50671, +50671, +50671, +50695, +50730, +50730, +50740, +50746, +50750, +50765, +50771, +50771, +50817, +50817, +50828, +50837, +50837, +50844, +50844, +50894, +50894, +50905, +50905, +50905, +50944, +50944, +50944, +50975, +51011, +51024, +51024, +51024, +51042, +51042, +51042, +51054, +51054, +51064, +51073, +51073, +51073, +51073, +51073, +51073, +51098, +51117, +51117, +51117, +51137, +51137, +51137, +51200, +51221, +51246, +51246, +51272, +51307, +51334, +51334, +51334, +51334, +51354, +51354, +51370, +51377, +51377, +51415, +51431, +51431, +51431, +51450, +51450, +51456, +51499, +51517, +51529, +51550, +51550, +51558, +51569, +51569, +51569, +51569, +51569, +51569, +51584, +51584, +51584, +51598, +51638, +51638, +51638, +51671, +51683, +51710, +51710, +51731, +51766, +51775, +51808, +51829, +51861, +51861, +51861, +51877, +51877, +51889, +51889, +51889, +51911, +51946, +51946, +51966, +51966, +51966, +51966, +51980, +51985, +51997, +51997, +51997, +51997, +52004, +52004, +52004, +52004, +52017, +52032, +52032, +52032, +52063, +52063, +52076, +52095, +52107, +52121, +52121, +52121, +52121, +52121, +52121, +52149, +52184, +52213, +52213, +52213, +52213, +52213, +52213, +52246, +52257, +52286, +52286, +52316, +52316, +52329, +52329, +52329, +52365, +52365, +52365, +52365, +52372, +52386, +52386, +52412, +52420, +52430, +52430, +52436, +52436, +52448, +52454, +52454, +52454, +52479, +52497, +52497, +52512, +52531, +52531, +52551, +52571, +52609, +52609, +52623, +52623, +52635, +52656, +52656, +52668, +52689, +52689, +52706, +52706, +52716, +52716, +52732, +52749, +52755, +52772, +52772, +52772, +52772, +52801, +52801, +52830, +52841, +52841, +52841, +52864, +52864, +52864, +52864, +52864, +52875, +52885, +52893, +52914, +52936, +52960, +52980, +53001, +53001, +53001, +53001, +53001, +53023, +53039, +53039, +53039, +53056, +53069, +53069, +53127, +53145, +53162, +53162, +53183, +53199, +53230, +53244, +53251, +53251, +53269, +53269, +53284, +53320, +53326, +53326, +53359, +53359, +53377, +53404, +53404, +53436, +53454, +53471, +53481, +53498, +53517, +53517, +53517, +53517, +53536, +53557, +53603, +53617, +53617, +53636, +53663, +53663, +53682, +53682, +53702, +53702, +53702, +53717, +53717, +53757, +53769, +53788, +53788, +53788, +53788, +53788, +53809, +53809, +53823, +53840, +53840, +53866, +53907, +53942, +53942, +53942, +53979, +54003, +54003, +54024, +54024, +54024, +54024, +54024, +54043, +54043, +54059, +54069, +54110, +54131, +54142, +54160, +54177, +54177, +54177, +54187, +54187, +54205, +54212, +54212, +54244, +54270, +54280, +54292, +54292, +54292, +54309, +54309, +54335, +54335, +54335, +54343, +54365, +54379, +54379, +54414, +54414, +54414, +54414, +54414, +54448, +54448, +54458, +54490, +54496, +54513, +54521, +54583, +54583, +54603, +54637, +54658, +54658, +54666, +54682, +54691, +54691, +54726, +54743, +54784, +54784, +54794, +54825, +54825, +54825, +54839, +54866, +54866, +54899, +54899, +54908, +54908, +54936, +54936, +54942, +54942, +54977, +54977, +54977, +54977, +54977, +54977, +54977, +54977, +54977, +54988, +54988, +54995, +55056, +55082, +55082, +55082, +55092, +55104, +55128, +55128, +55148, +55170, +55170, +55170, +55210, +55229, +55251, +55308, +55308, +55326, +55336, +55355, +55355, +55355, +55355, +55368, +55375, +55382, +55382, +55382, +55389, +55389, +55389, +55415, +55425, +55467, +55467, +55481, +55492, +55492, +55492, +55516, +55516, +55516, +55529, +55540, +55540, +55560, +55560, +55577, +55577, +55577, +55584, +55584, +55602, +55602, +55602, +55638, +55638, +55655, +55655, +55655, +55655, +55655, +55672, +55680, +55680, +55698, +55715, +55754, +55762, +55802, +55802, +55802, +55808, +55825, +55825, +55825, +55865, +55865, +55865, +55885, +55891, +55901, +55901, +55918, +55945, +55945, +55971, +55978, +55991, +56004, +56011, +56026, +56026, +56041, +56049, +56049, +56071, +56122, +56122, +56149, +56149, +56149, +56169, +56169, +56181, +56181, +56181, +56181, +56181, +56196, +56196, +56255, +56281, +56281, +56299, +56299, +56336, +56342, +56342, +56375, +56381, +56381, +56381, +56387, +56410, +56426, +56426, +56436, +56436, +56436, +56457, +56457, +56457, +56464, +56464, +56478, +56490, +56490, +56490, +56511, +56511, +56517, +56531, +56548, +56548, +56548, +56554, +56570, +56593, +56605, +56619, +56619, +56638, +56638, +56638, +56638, +56650, +56668, +56685, +56698, +56698, +56698, +56709, +56722, +56739, +56739, +56755, +56773, +56812, +56828, +56834, +56865, +56865, +56865, +56865, +56871, +56893, +56911, +56937, +56937, +56937, +56937, +56976, +56976, +57000, +57009, +57027, +57073, +57073, +57124, +57124, +57149, +57190, +57221, +57243, +57253, +57279, +57300, +57300, +57338, +57338, +57338, +57347, +57359, +57380, +57380, +57380, +57403, +57409, +57424, +57433, +57450, +57472, +57472, +57480, +57480, +57480, +57480, +57491, +57518, +57518, +57518, +57533, +57533, +57533, +57533, +57553, +57553, +57553, +57588, +57595, +57610, +57619, +57619, +57661, +57691, +57691, +57691, +57691, +57707, +57713, +57731, +57731, +57750, +57750, +57756, +57791, +57791, +57791, +57791, +57791, +57805, +57829, +57867, +57867, +57867, +57873, +57893, +57912, +57912, +57948, +57948, +57973, +57979, +57979, +57979, +57990, +58009, +58027, +58039, +58056, +58056, +58080, +58080, +58080, +58115, +58115, +58115, +58115, +58122, +58122, +58122, +58122, +58122, +58153, +58168, +58175, +58175, +58188, +58212, +58237, +58237, +58237, +58275, +58275, +58275, +58275, +58313, +58322, +58343, +58352, +58379, +58379, +58388, +58401, +58418, +58430, +58444, +58469, +58479, +58484, +58503, +58521, +58545, +58572, +58582, +58597, +58630, +58630, +58637, +58654, +58654, +58690, +58690, +58697, +58707, +58713, +58713, +58713, +58730, +58730, +58730, +58763, +58817, +58817, +58817, +58817, +58838, +58838, +58838, +58866, +58902, +58902, +58902, +58911, +58911, +58930, +58930, +58960, +58960, +58988, +59006, +59043, +59061, +59061, +59097, +59122, +59122, +59122, +59122, +59122, +59122, +59122, +59122, +59151, +59167, +59187, +59204, +59212, +59222, +59222, +59222, +59238, +59266, +59285, +59300, +59315, +59315, +59315, +59330, +59343, +59375, +59375, +59395, +59413, +59428, +59428, +59428, +59456, +59466, +59486, +59508, +59508, +59517, +59524, +59542, +59542, +59549, +59549, +59557, +59571, +59587, +59587, +59642, +59668, +59679, +59679, +59694, +59734, +59744, +59758, +59771, +59771, +59786, +59793, +59802, +59820, +59831, +59870, +59896, +59896, +59917, +59932, +59932, +59942, +59942, +59962, +59969, +59969, +60007, +60038, +60050, +60057, +60064, +60102, +60102, +60109, +60116, +60132, +60146, +60165, +60181, +60201, +60201, +60208, +60224, +60245, +60328, +60328, +60335, +60342, +60349, +60349, +60401, +60401, +60401, +60436, +60467, +60467, +60474, +60497, +60504, +60545, +60545, +60569, +60592, +60632, +60638, +60645, +60654, +60654, +60654, +60684, +60684, +60701, +60701, +60718, +60744, +60751, +60751, +60751, +60751, +60776, +60792, +60799, +60799, +60806, +60806, +60845, +60872, +60890, +60890, +60930, +60930, +60930, +60930, +60930, +60948, +60992, +61000, +61000, +61017, +61017, +61044, +61061, +61087, +61107, +61107, +61107, +61107, +61123, +61123, +61142, +61142, +61142, +61184, +61207, +61227, +61227, +61276, +61283, +61290, +61313, +61342, +61376, +61383, +61383, +61390, +61390, +61415, +61424, +61449, +61461, +61461, +61495, +61495, +61502, +61502, +61548, +61548, +61548, +61570, +61602, +61619, +61628, +61628, +61628, +61659, +61673, +61680, +61706, +61729, +61753, +61753, +61753, +61753, +61763, +61796, +61796, +61813, +61820, +61820, +61845, +61852, +61877, +61884, +61904, +61912, +61912, +61912, +61949, +61949, +61961, +61961, +61968, +61968, +61968, +61968, +62014, +62026, +62047, +62068, +62075, +62075, +62082, +62089, +62099, +62128, +62155, +62184, +62184, +62213, +62220, +62245, +62274, +62318, +62338, +62359, +62359, +62359, +62388, +62408, +62415, +62415, +62421, +62421, +62429, +62440, +62440, +62470, +62470, +62470, +62494, +62535, +62542, +62549, +62556, +62564, +62571, +62578, +62611, +62618, +62645, +62655, +62667, +62676, +62701, +62720, +62720, +62727, +62752, +62759, +62766, +62782, +62794, +62794, +62804, +62804, +62814, +62831, +62839, +62846, +62852, +62886, +62886, +62900, +62910, +62929, +62943, +62950, +62972, +62985, +62985, +62985, +62998, +63014, +63041, +63067, +63067, +63085, +63101, +63108, +63108, +63115, +63135, +63135, +63142, +63149, +63149, +63156, +63173, +63173, +63180, +63212, +63219, +63236, +63236, +63247, +63298, +63310, +63343, +63343, +63343, +63356, +63356, +63374, +63374, +63374, +63374, +63381, +63401, +63421, +63436, +63459, +63459, +63500, +63506, +63516, +63528, +63551, +63551, +63567, +63615, +63615, +63651, +63679, +63693, +63700, +63734, +63734, +63748, +63763, +63763, +63763, +63775, +63815, +63861, +63884, +63884, +63899, +63907, +63943, +63943, +63950, +63950, +63964, +63964, +63964, +63996, +64003, +64012, +64012, +64106, +64124, +64131, +64131, +64138, +64158, +64158, +64177, +64208, +64208, +64220, +64220, +64220, +64235, +64243, +64258, +64258, +64280, +64290, +64301, +64321, +64334, +64341, +64357, +64400, +64400, +64407, +64407, +64414, +64414, +64433, +64454, +64472, +64502, +64523, +64523, +64582, +64589, +64589, +64619, +64619, +64619, +64619, +64638, +64638, +64638, +64648, +64660, +64660, +64676, +64676, +64695, +64705, +64705, +64732, +64732, +64732, +64738, +64764, +64774, +64787, +64830, +64854, +64888, +64893, +64902, +64938, +64967, +64997, +64997, +65015, +65046, +65072, +65072, +65097, +65110, +65110, +65110, +65110, +65110, +65110, +65122, +65122, +65122, +65129, +65170, +65187, +65187, +65210, +65228, +65235, +65251, +65259, +65259, +65259, +65274, +65274, +65287, +65307, +65323, +65323, +65323, +65362, +65384, +65384, +65400, +65400, +65400, +65400, +65423, +65430, +65457, +65457, +65457, +65476, +65476, +65476, +65476, +65486, +65486, +65521, +65550, +65550, +65550, +65584, +65584, +65584, +65584, +65584, +65601, +65621, +65631, +65672, +65692, +65719, +65719, +65743, +65766, +65766, +65782, +65788, +65828, +65854, +65868, +65877, +65897, +65909, +65936, +65936, +65948, +65948, +65968, +65989, +65989, +65989, +65989, +66016, +66016, +66032, +66039, +66039, +66039, +66055, +66066, +66098, +66114, +66140, +66140, +66174, +66174, +66174, +66220, +66249, +66249, +66249, +66249, +66268, +66276, +66295, +66314, +66322, +66343, +66343, +66343, +66395, +66395, +66413, +66413, +66422, +66430, +66430, +66449, +66449, +66460, +66486, +66492, +66492, +66492, +66492, +66492, +66492, +66510, +66510, +66519, +66530, +66563, +66563, +66573, +66573, +66573, +66612, +66612, +66612, +66625, +66625, +66642, +66642, +66642, +66658, +66672, +66672, +66680, +66715, +66724, +66724, +66740, +66745, +66753, +66769, +66802, +66802, +66802, +66802, +66829, +66843, +66858, +66875, +66893, +66893, +66893, +66933, +66933, +66945, +66945, +66945, +66945, +66956, +66976, +66976, +66976, +66985, +67003, +67003, +67010, +67031, +67031, +67051, +67064, +67083, +67091, +67116, +67116, +67141, +67190, +67220, +67220, +67220, +67233, +67241, +67241, +67275, +67281, +67292, +67302, +67302, +67315, +67379, +67395, +67405, +67421, +67421, +67475, +67483, +67526, +67526, +67546, +67546, +67546, +67571, +67579, +67637, +67659, +67676, +67676, +67676, +67705, +67723, +67739, +67739, +67777, +67792, +67792, +67811, +67811, +67819, +67860, +67876, +67876, +67899, +67915, +67955, +67955, +67969, +67979, +67991, +67991, +67991, +68006, +68020, +68020, +68020, +68045, +68057, +68072, +68072, +68086, +68097, +68113, +68120, +68129, +68136, +68155, +68170, +68170, +68195, +68241, +68258, +68287, +68313, +68325, +68342, +68384, +68416, +68427, +68461, +68461, +68476, +68498, +68498, +68506, +68513, +68533, +68546, +68563, +68563, +68581, +68621, +68634, +68657, +68657, +68657, +68676, +68707, +68726, +68739, +68753, +68753, +68753, +68753, +68765, +68798, +68804, +68819, +68819, +68819, +68847, +68856, +68872, +68872, +68904, +68915, +68942, +68953, +68962, +68980, +69007, +69013, +69024, +69038, +69069, +69082, +69108, +69116, +69134, +69157, +69180, +69180, +69201, +69217, +69217, +69234, +69257, +69257, +69257, +69312, +69312, +69330, +69343, +69360, +69360, +69383, +69402, +69423, +69434, +69455, +69455, +69488, +69496, +69541, +69559, +69559, +69578, +69587, +69587, +69622, +69622, +69630, +69654, +69667, +69674, +69685, +69696, +69734, +69749, +69759, +69759, +69759, +69759, +69790, +69805, +69805, +69823, +69823, +69823, +69839, +69861, +69871, +69871, +69871, +69916, +69916, +69931, +69931, +69931, +69931, +69949, +70014, +70026, +70026, +70026, +70050, +70077, +70113, +70152, +70165, +70182, +70191, +70191, +70191, +70206, +70206, +70206, +70206, +70206, +70230, +70230, +70230, +70230, +70244, +70244, +70244, +70251, +70251, +70251, +70288, +70315, +70357, +70363, +70363, +70376, +70376, +70387, +70387, +70397, +70397, +70397, +70434, +70460, +70476, +70476, +70476, +70507, +70507, +70515, +70534, +70534, +70554, +70570, +70580, +70594, +70623, +70623, +70641, +70641, +70641, +70641, +70641, +70674, +70704, +70735, +70735, +70735, +70748, +70748, +70757, +70802, +70852, +70873, +70873, +70892, +70923, +70923, +70935, +70935, +70941, +70941, +70960, +70980, +70980, +71023, +71034, +71034, +71034, +71045, +71045, +71045, +71045, +71045, +71083, +71093, +71115, +71115, +71131, +71131, +71131, +71141, +71148, +71148, +71166, +71186, +71186, +71201, +71209, +71209, +71238, +71246, +71246, +71246, +71246, +71258, +71258, +71258, +71258, +71276, +71276, +71276, +71291, +71309, +71309, +71309, +71309, +71318, +71318, +71318, +71332, +71342, +71342, +71356, +71388, +71388, +71397, +71407, +71407, +71407, +71425, +71436, +71436, +71466, +71466, +71491, +71491, +71527, +71540, +71540, +71560, +71584, +71600, +71600, +71632, +71648, +71678, +71689, +71703, +71703, +71727, +71742, +71742, +71742, +71759, +71759, +71774, +71780, +71780, +71780, +71799, +71819, +71819, +71837, +71849, +71867, +71867, +71867, +71867, +71867, +71867, +71867, +71867, +71867, +71890, +71890, +71941, +71941, +71972, +72002, +72016, +72037, +72053, +72053, +72053, +72053, +72106, +72131, +72131, +72131, +72152, +72159, +72159, +72171, +72176, +72207, +72207, +72207, +72207, +72221, +72221, +72237, +72264, +72264, +72264, +72280, +72289, +72307, +72326, +72343, +72343, +72343, +72370, +72370, +72370, +72370, +72370, +72396, +72402, +72402, +72402, +72430, +72430, +72449, +72489, +72499, +72499, +72550, +72550, +72573, +72588, +72623, +72623, +72623, +72641, +72652, +72670, +72684, +72684, +72684, +72684, +72699, +72699, +72699, +72699, +72699, +72718, +72769, +72774, +72786, +72799, +72799, +72799, +72837, +72867, +72915, +72935, +72935, +72935, +72953, +72973, +72973, +72973, +72973, +73005, +73005, +73018, +73018, +73028, +73058, +73068, +73068, +73090, +73102, +73114, +73142, +73180, +73180, +73223, +73247, +73247, +73247, +73247, +73247, +73247, +73247, +73256, +73256, +73304, +73321, +73328, +73328, +73328, +73389, +73405, +73405, +73425, +73425, +73425, +73443, +73460, +73476, +73476, +73498, +73518, +73533, +73563, +73591, +73628, +73628, +73648, +73667, +73736, +73736, +73736, +73756, +73756, +73756, +73803, +73803, +73803, +73803, +73831, +73863, +73875, +73875, +73875, +73875, +73875, +73908, +73931, +73942, +73942, +73953, +73982, +74007, +74066, +74075, +74075, +74108, +74108, +74108, +74114, +74167, +74178, +74178, +74178, +74199, +74199, +74218, +74218, +74248, +74248, +74248, +74248, +74248, +74272, +74272, +74290, +74326, +74349, +74349, +74349, +74367, +74367, +74367, +74385, +74410, +74429, +74429, +74475, +74497, +74497, +74513, +74527, +74551, +74581, +74581, +74581, +74638, +74644, +74644, +74665, +74691, +74691, +74691, +74691, +74701, +74701, +74708, +74721, +74721, +74721, +74761, +74801, +74801, +74808, +74825, +74833, +74833, +74850, +74870, +74870, +74893, +74893, +74928, +74928, +74928, +74928, +74938, +74938, +74938, +74938, +74938, +74938, +74938, +74938, +74949, +74949, +74981, +75000, +75019, +75029, +75029, +75029, +75044, +75054, +75071, +75071, +75089, +75103, +75103, +75103, +75103, +75103, +75103, +75103, +75103, +75103, +75103, +75120, +75120, +75120, +75120, +75165, +75165, +75165, +75165, +75185, +75191, +75208, +75208, +75236, +75252, +75269, +75292, +75311, +75318, +75318, +75344, +75359, +75359, +75359, +75423, +75423, +75444, +75444, +75444, +75457, +75464, +75476, +75493, +75516, +75516, +75516, +75532, +75539}; -static const char tldData[] = { -"com.cn\0" -"com.co\0" -"hb.cn\0" -"med.br\0conf.lv\0wallonie.museum\0" -"namsos.no\0" -"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0farmers.museum\0rel.pl\0" -"com.cu\0" -"military.museum\0" -"*.jm\0convent.museum\0cymru.museum\0malvik.no\0" -"univ.sn\0" -"gliding.aero\0" -"wodzislaw.pl\0" -"com.dm\0!pref.iwate.jp\0tran\xc3\xb8y.no\0pila.pl\0" -"mb.it\0*.ke\0lib.ri.us\0" -"com.ec\0*.kh\0tr\xc3\xb8gstad.no\0" -"com.ee\0" -"mobi.gp\0" +static const char *tldData[] = { +"vgs.no\0ah.no\0" +"ma.us\0" +"mizunami.gifu.jp\0" +"saitama.jp\0kimino.wakayama.jp\0" +"int.bo\0cambridge.museum\0" +"andasuolo.no\0lardal.no\0" +"transport.museum\0" +"nishinomiya.hyogo.jp\0" +"is-into-cars.com\0" +"karlsoy.no\0" +"bungoono.oita.jp\0" +"int.ci\0" +"chikujo.fukuoka.jp\0" +"aisai.aichi.jp\0" +"os.hedmark.no\0" +"int.co\0" +"komaki.aichi.jp\0seki.gifu.jp\0" +"wanouchi.gifu.jp\0lib.ri.us\0" +"higashiosaka.osaka.jp\0" +"org\0cechire.com\0" +"satte.saitama.jp\0" +"berg.no\0" +"saitama.saitama.jp\0" +"cc.sd.us\0" +"act.gov.au\0mansion.museum\0" +"fe.it\0y.se\0" +"gunma.jp\0" +"otoyo.kochi.jp\0miyoshi.saitama.jp\0" +"sa.gov.au\0" +"online.museum\0" +"abiko.chiba.jp\0" +"!educ.ar\0" +"agematsu.nagano.jp\0" +"akiruno.tokyo.jp\0lund.no\0" +"kasuga.hyogo.jp\0" +"nakano.tokyo.jp\0homeunix.net\0" +"ambulance.aero\0sv.it\0" +"shiso.hyogo.jp\0" +"fuso.aichi.jp\0delmenhorst.museum\0" +"dali.museum\0" +"brindisi.it\0" +"midori.gunma.jp\0" +"nantan.kyoto.jp\0" +"takaishi.osaka.jp\0imizu.toyama.jp\0" +"tonsberg.no\0" +"countryestate.museum\0" +"rawa-maz.pl\0" +"yokoshibahikari.chiba.jp\0" +"ontario.museum\0" +"certification.aero\0" +"franziskaner.museum\0cc.nj.us\0" +"genkai.saga.jp\0" +"tysfjord.no\0" +"ra.it\0" +"air-traffic-control.aero\0ina.ibaraki.jp\0" +"in-the-band.net\0" +"ainan.ehime.jp\0oita.oita.jp\0!national-library-scotland.uk\0" +"kamiichi.toyama.jp\0" +"ogata.akita.jp\0smola.no\0" +"matsushima.miyagi.jp\0langev\xc3\xa5g.no\0" +"vard\xc3\xb8.no\0" +"limanowa.pl\0" +"is-a-bruinsfan.org\0" +"yufu.oita.jp\0berkeley.museum\0" +"torino.it\0per.la\0" +"noheji.aomori.jp\0koebenhavn.museum\0isa-geek.com\0" +"choyo.kumamoto.jp\0" +"s\xc3\xb8r-odal.no\0" +"int.is\0bir.ru\0" +"jefferson.museum\0" +"brasil.museum\0" +"sologne.museum\0" +"shimosuwa.nagano.jp\0setagaya.tokyo.jp\0" +"tokoname.aichi.jp\0lerdal.no\0" +"!retina.ar\0boston.museum\0" +"bologna.it\0kimobetsu.hokkaido.jp\0yuzawa.niigata.jp\0" +"obuse.nagano.jp\0gs.svalbard.no\0" +"furudono.fukushima.jp\0" +"isla.pr\0ny.us\0" +"5.bg\0" +"lt.ua\0" "gran.no\0" -"wa.gov.au\0" -"com.dz\0kg.kr\0" -"zoological.museum\0gjerstad.no\0haugesund.no\0kharkov.ua\0" -"walbrzych.pl\0" -"civilization.museum\0" -"ha.no\0" -"*.kw\0" -"med.ec\0com.es\0" -"med.ee\0otago.museum\0svelvik.no\0" -"art.ht\0amber.museum\0elvendrell.museum\0rost.no\0" -"jx.cn\0gratangen.no\0" -"association.aero\0ca.it\0" -"zaporizhzhe.ua\0" -"com.fr\0" -"szex.hu\0" -"e-burg.ru\0" -"com.ge\0bokn.no\0" +"per.nf\0" +"int.la\0" +"kumakogen.ehime.jp\0nasu.tochigi.jp\0" +"shirataka.yamagata.jp\0" +"vet.br\0graz.museum\0" +"int.lk\0" +"plc.co.im\0md.us\0k12.gu.us\0" +"wildlife.museum\0" +"stokke.no\0" +"stordal.no\0oskol.ru\0" +"kosaka.akita.jp\0" +"kitami.hokkaido.jp\0" +"higashimatsuyama.saitama.jp\0" +"s\xc3\xb8rreisa.no\0poznan.pl\0" +"\xd1\x81\xd1\x80\xd0\xb1\0" +"tokuyama.yamaguchi.jp\0" +"tosa.kochi.jp\0est-le-patron.com\0" +"hachijo.tokyo.jp\0" +"ibaraki.osaka.jp\0rindal.no\0" +"taishi.osaka.jp\0ol.no\0" +"int.mv\0lib.az.us\0" +"int.mw\0hjartdal.no\0" +"imb.br\0\xc3\xb8ksnes.no\0" +"ishikawa.jp\0osen.no\0" +"nakamura.kochi.jp\0" +"seiyo.ehime.jp\0mincom.tn\0" +"chieti.it\0sakado.saitama.jp\0" +"enebakk.no\0cc.ca.us\0from-hi.com\0" +"kokonoe.oita.jp\0auto.pl\0" +"venice.it\0shimada.shizuoka.jp\0" +"surrey.museum\0" +"audnedaln.no\0" +"minamifurano.hokkaido.jp\0axis.museum\0webhop.info\0" +"is-not-certified.com\0" +"volda.no\0" +"is-a-lawyer.com\0" +"oga.akita.jp\0" +"higashimatsushima.miyagi.jp\0" +"tonaki.okinawa.jp\0" +"somna.no\0rovno.ua\0" +"nt.gov.au\0" +"cc.pr.us\0" +"cs.it\0bieszczady.pl\0" +"per.sg\0" +"research.museum\0endoftheinternet.org\0" +"int.pt\0" +"costume.museum\0" +"eisenbahn.museum\0slask.pl\0" +"gdynia.pl\0" +"wa.au\0pol.dz\0fukui.jp\0higashishirakawa.gifu.jp\0botanicalgarden.museum\0" +"automotive.museum\0" +"sshn.se\0" +"nogata.fukuoka.jp\0cc.nm.us\0is-an-anarchist.com\0" +"dontexist.com\0" +"an.it\0" +"uenohara.yamanashi.jp\0" +"midtre-gauldal.no\0" +"hm.no\0komvux.se\0" +"hidaka.wakayama.jp\0hobby-site.org\0" +"giske.no\0" +"sund.no\0" +"troms\xc3\xb8.no\0" +"zagan.pl\0" +"chikusei.ibaraki.jp\0wlocl.pl\0" +"in-addr.arpa\0notaires.fr\0altai.ru\0" +"int.ru\0" +"aquila.it\0" +"int.rw\0" +"ito.shizuoka.jp\0" +"missoula.museum\0kolobrzeg.pl\0" +"assabu.hokkaido.jp\0" +"sld.do\0meloy.no\0" +"ak.us\0" +"k12.md.us\0" +"kawanishi.yamagata.jp\0is-lost.org\0" +"ochi.kochi.jp\0" +"amami.kagoshima.jp\0gamo.shiga.jp\0" +"yamazoe.nara.jp\0" +"shirako.chiba.jp\0matsuda.kanagawa.jp\0int.tj\0" +"ota.tokyo.jp\0" +"kicks-ass.net\0" +"yamato.fukushima.jp\0shinjo.okayama.jp\0baltimore.museum\0ushistory.museum\0pro\0" +"mallorca.museum\0hoyanger.no\0hobby-site.com\0" +"narvik.no\0olsztyn.pl\0warmia.pl\0" +"pol.ht\0int.tt\0" +"mizusawa.iwate.jp\0h\xc3\xb8yanger.no\0przeworsk.pl\0" +"matsuno.ehime.jp\0" +"folkebibl.no\0" +"pb.ao\0taranto.it\0nomi.ishikawa.jp\0chizu.tottori.jp\0alta.no\0" +"8.bg\0okazaki.aichi.jp\0" +"goshiki.hyogo.jp\0lib.wi.us\0" +"or.at\0" +"stateofdelaware.museum\0" +"modern.museum\0" +"\xd1\x80\xd1\x84\0" +"or.bi\0himi.toyama.jp\0" +"kitaaiki.nagano.jp\0toga.toyama.jp\0" +"kutchan.hokkaido.jp\0tamaki.mie.jp\0finnoy.no\0int.vn\0" +"fujisawa.iwate.jp\0" +"homebuilt.aero\0cranbrook.museum\0" +"kv\xc3\xa6""fjord.no\0" +"or.ci\0saigawa.fukuoka.jp\0kutno.pl\0" +"asuke.aichi.jp\0kanonji.kagawa.jp\0" +"higashikagawa.kagawa.jp\0" +"inashiki.ibaraki.jp\0matta-varjjat.no\0" +"lviv.ua\0" +"or.cr\0mitane.akita.jp\0" +"*.kitakyushu.jp\0fujikawa.shizuoka.jp\0" +"egersund.no\0" +"srv.br\0" +"belgorod.ru\0" +"v\xc3\xa5gs\xc3\xb8y.no\0fh.se\0" +"tsuruta.aomori.jp\0shibuya.tokyo.jp\0k12.va.us\0" +"kamishihoro.hokkaido.jp\0" +"sogne.no\0" +"turystyka.pl\0" +"gujo.gifu.jp\0" +"experts-comptables.fr\0" +"yame.fukuoka.jp\0" +"annaka.gunma.jp\0kawagoe.mie.jp\0" +"wakayama.jp\0" +"openair.museum\0operaunite.com\0" +"wakuya.miyagi.jp\0" +"bjarkoy.no\0ivano-frankivsk.ua\0dyndns.tv\0is-a-linux-user.org\0" +"olbiatempio.it\0" +"etne.no\0fosnes.no\0" +"ginoza.okinawa.jp\0" +"krager\xc3\xb8.no\0" +"vn.ua\0" +"jx.cn\0bill.museum\0home.dyndns.org\0" +"lecco.it\0bihoro.hokkaido.jp\0" +"asaka.saitama.jp\0" +"tagajo.miyagi.jp\0" +"maintenance.aero\0" +"nordreisa.no\0" +"kamogawa.chiba.jp\0nebraska.museum\0" +"lib.nm.us\0" +"r\xc3\xa1isa.no\0" +"historisch.museum\0" +"is-a-republican.com\0" +"prd.fr\0yonaguni.okinawa.jp\0" +"bristol.museum\0crafts.museum\0blogsite.org\0" +"kasamatsu.gifu.jp\0" +"fin.ec\0" +"slg.br\0seirou.niigata.jp\0cahcesuolo.no\0from-ma.com\0" +"ba.it\0aq.it\0exhibition.museum\0heimatunduhren.museum\0" +"rg.it\0dyndns.ws\0" +"homedns.org\0" +"kakogawa.hyogo.jp\0" +"chikushino.fukuoka.jp\0mito.ibaraki.jp\0" +"dc.us\0" +"terni.it\0" +"or.id\0yoshida.shizuoka.jp\0" +"fukaya.saitama.jp\0rost.no\0" +"aomori.jp\0" +"aeroport.fr\0sabae.fukui.jp\0geology.museum\0" +"yakage.okayama.jp\0rahkkeravju.no\0" +"kasama.ibaraki.jp\0" +"frana.no\0" +"hatoyama.saitama.jp\0za.org\0" +"kitayama.wakayama.jp\0" +"bilbao.museum\0" +"or.it\0" +"!nawrastelecom.om\0" +"nanjo.okinawa.jp\0k12.me.us\0" +"mobi.gp\0" +"daisen.akita.jp\0bizen.okayama.jp\0hembygdsforbund.museum\0salangen.no\0" +"yoshikawa.saitama.jp\0homelinux.com\0" +"or.jp\0farmers.museum\0from-ri.com\0" +"\xe1\x83\x92\xe1\x83\x94\0" +"\xc3\xa5snes.no\0" +"assisi.museum\0muos\xc3\xa1t.no\0kemerovo.ru\0" +"musashino.tokyo.jp\0" +"sld.pa\0" +"kushimoto.wakayama.jp\0virginia.museum\0is-a-financialadvisor.com\0" +"yuasa.wakayama.jp\0" +"yachimata.chiba.jp\0" +"\xc3\xa5seral.no\0klabu.no\0" +"onna.okinawa.jp\0" +"hikone.shiga.jp\0or.kr\0" +"tranby.no\0lib.vt.us\0" +"carrier.museum\0" +"isa-geek.net\0" +"orsta.no\0" +"toyone.aichi.jp\0fortmissoula.museum\0zoology.museum\0" +"historicalsociety.museum\0" +"prd.km\0" +"iheya.okinawa.jp\0" +"kongsberg.no\0" +"dreamhosters.com\0" +"chicago.museum\0gjerdrum.no\0" +"pe.ca\0" +"cpa.pro\0" +"makurazaki.kagoshima.jp\0mashiki.kumamoto.jp\0" +"sondrio.it\0masaki.ehime.jp\0" +"numazu.shizuoka.jp\0" +"kawanishi.nara.jp\0" +"futaba.fukushima.jp\0nachikatsuura.wakayama.jp\0" +"airguard.museum\0" +"society.museum\0" +"ulm.museum\0" +"or.na\0" +"tohma.hokkaido.jp\0" +"masoy.no\0" +"or.mu\0" +"prd.mg\0" +"!omanpost.om\0" +"izumizaki.fukushima.jp\0nishikatsura.yamanashi.jp\0" +"miyazu.kyoto.jp\0" +"unj\xc3\xa1rga.no\0" +"noshiro.akita.jp\0" +"ryokami.saitama.jp\0" +"carboniaiglesias.it\0homeunix.org\0" +"australia.museum\0" +"sowa.ibaraki.jp\0" +"urausu.hokkaido.jp\0" +"kaisei.kanagawa.jp\0" +"vt.it\0" +"virtual.museum\0" +"hs.kr\0brand.se\0" +"daejeon.kr\0seaport.museum\0" +"takaoka.toyama.jp\0" +"kitakata.fukushima.jp\0fribourg.museum\0" +"montreal.museum\0" +"higashiyama.kyoto.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0" +"chitose.hokkaido.jp\0" +"engine.aero\0" +"rome.it\0medical.museum\0" +"tjome.no\0" +"asti.it\0reggio-calabria.it\0" +"or.pw\0" +"to.it\0murayama.yamagata.jp\0" +"shiraoi.hokkaido.jp\0" +"joshkar-ola.ru\0" +"fetsund.no\0wa.us\0" +"nakaniikawa.toyama.jp\0wroclaw.pl\0lib.nh.us\0" +"ragusa.it\0nakanojo.gunma.jp\0r\xc3\xa5""de.no\0barrell-of-knowledge.info\0" +"yuza.yamagata.jp\0moareke.no\0cv.ua\0" +"anjo.aichi.jp\0" +"!omanmobile.om\0" +"fukuroi.shizuoka.jp\0space-to-rent.com\0" +"torahime.shiga.jp\0" +"gojome.akita.jp\0" +"at.it\0yawara.ibaraki.jp\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0" +"okutama.tokyo.jp\0naturbruksgymn.se\0est-mon-blogueur.com\0" +"gj\xc3\xb8vik.no\0" +"marylhurst.museum\0" +"ferrara.it\0" +"shimonita.gunma.jp\0" +"chernivtsi.ua\0" +"yusuhara.kochi.jp\0" +"indianmarket.museum\0from-nm.com\0" +"chambagri.fr\0" +"yono.saitama.jp\0romsa.no\0" +"lucerne.museum\0" +"pe.it\0" +"from-mn.com\0" +"kurgan.ru\0or.th\0" +"udmurtia.ru\0" +"k12.nj.us\0" +"c.bg\0atami.shizuoka.jp\0" +"herad.no\0" +"midatlantic.museum\0" +"\xd1\x83\xd0\xba\xd1\x80\0" +"inazawa.aichi.jp\0matsumoto.nagano.jp\0francaise.museum\0horten.no\0" +"isehara.kanagawa.jp\0" +"fuji.shizuoka.jp\0or.ug\0" +"oppdal.no\0" +"or.tz\0\xd9\x82\xd8\xb7\xd8\xb1\0" +"!nacion.ar\0shiroi.chiba.jp\0muncie.museum\0from-ct.com\0" +"television.museum\0doomdns.com\0" +"bod\xc3\xb8.no\0" +"seihi.nagasaki.jp\0" +"memorial.museum\0" +"slupsk.pl\0" +"arkhangelsk.ru\0or.us\0" +"pe.kr\0is-a-bulls-fan.com\0" +"matsubara.osaka.jp\0" +"ishigaki.okinawa.jp\0" +"nysa.pl\0from-nv.com\0" +"ishikawa.fukushima.jp\0" +"drobak.no\0" +"stpetersburg.museum\0" +"andria-trani-barletta.it\0" +"aibetsu.hokkaido.jp\0plants.museum\0silk.museum\0holtalen.no\0" +"lakas.hu\0" +"gs.of.no\0rauma.no\0" +"modena.it\0" +"kh.ua\0" +"togitsu.nagasaki.jp\0" +"newhampshire.museum\0" +"oirase.aomori.jp\0grajewo.pl\0fin.tn\0" +"depot.museum\0" +"nayoro.hokkaido.jp\0" +"forgot.her.name\0" +"sande.more-og-romsdal.no\0" +"reklam.hu\0" +"\xc3\xa5krehamn.no\0" +"ancona.it\0h\xc3\xa5.no\0" +"lib.as.us\0" +"marketplace.aero\0schweiz.museum\0" +"eu.int\0" +"urasoe.okinawa.jp\0" +"kaluga.ru\0" +"godo.gifu.jp\0" +"kitagawa.kochi.jp\0kr.com\0" +"pvt.ge\0" +"usuki.oita.jp\0" +"mino.gifu.jp\0" +"rovigo.it\0" +"yamada.fukuoka.jp\0amakusa.kumamoto.jp\0lajolla.museum\0uzhgorod.ua\0" +"shimane.jp\0workshop.museum\0" +"aero\0" +"shikatsu.aichi.jp\0warszawa.pl\0" +"wegrow.pl\0" +"koga.fukuoka.jp\0" +"funabashi.chiba.jp\0moriya.ibaraki.jp\0yamaga.kumamoto.jp\0" +"act.edu.au\0mbone.pl\0" +"ikaruga.nara.jp\0" +"shinichi.hiroshima.jp\0gjesdal.no\0" +"hanawa.fukushima.jp\0" +"tr.it\0wakasa.fukui.jp\0" +"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0" +"olbia-tempio.it\0" +"aizumisato.fukushima.jp\0convent.museum\0bd.se\0" +"fukuchi.fukuoka.jp\0takino.hyogo.jp\0vt.us\0" +"yazu.tottori.jp\0" +"kagoshima.jp\0loyalist.museum\0" +"kitahiroshima.hokkaido.jp\0fed.us\0" +"sandnessj\xc3\xb8""en.no\0varoy.no\0" +"hurdal.no\0" +"salem.museum\0jar.ru\0" +"yaizu.shizuoka.jp\0" +"cc.nv.us\0" +"airtraffic.aero\0" +"bg.it\0sukumo.kochi.jp\0" +"rm.it\0nishiokoppe.hokkaido.jp\0" +"house.museum\0" +"aizumi.tokushima.jp\0" +"hitachinaka.ibaraki.jp\0kicks-ass.org\0" +"hokuryu.hokkaido.jp\0k12.or.us\0" +"geisei.kochi.jp\0tatarstan.ru\0" +"toyotsu.fukuoka.jp\0meguro.tokyo.jp\0" +"myoko.niigata.jp\0" +"bronnoy.no\0" +"nishikawa.yamagata.jp\0" +"minamata.kumamoto.jp\0" +"gd.cn\0" +"trana.no\0" +"takasaki.gunma.jp\0cc.ma.us\0" +"trani-barletta-andria.it\0" +"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0c.la\0" +"hanno.saitama.jp\0" +"ami.ibaraki.jp\0kurotaki.nara.jp\0" +"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0boldlygoingnowhere.org\0" +"f.bg\0unjarga.no\0lib.ia.us\0" +"\xc3\xb8rskog.no\0tingvoll.no\0" +"webhop.org\0" +"grue.no\0dyndns-blog.com\0" +"dyndns-web.com\0" +"zakopane.pl\0" +"britishcolumbia.museum\0turek.pl\0" +"omi.nagano.jp\0is-an-actor.com\0" +"ms.it\0gov.nc.tr\0" +"kijo.miyazaki.jp\0" +"starostwo.gov.pl\0mobi.tt\0" +"gs.ah.no\0" +"minobu.yamanashi.jp\0tr.no\0" +"mobi.tz\0" +"rakkestad.no\0" +"org.ac\0from-az.net\0" +"org.ae\0" +"org.af\0bj.cn\0" +"org.ag\0" +"org.ai\0" +"nanae.hokkaido.jp\0oshino.yamanashi.jp\0" +"org.al\0takashima.shiga.jp\0" +"org.an\0naha.okinawa.jp\0matsuzaki.shizuoka.jp\0bahn.museum\0" +"chungbuk.kr\0biev\xc3\xa1t.no\0homelinux.net\0" +"org.ba\0umi.fukuoka.jp\0" +"org.bb\0" +"mihama.wakayama.jp\0cyber.museum\0" +"org.au\0yorii.saitama.jp\0hagi.yamaguchi.jp\0" +"ms.kr\0" +"org.bh\0fujikawa.yamanashi.jp\0floro.no\0oryol.ru\0" +"org.bi\0sakahogi.gifu.jp\0" +"org.az\0niimi.okayama.jp\0" +"aguni.okinawa.jp\0sells-for-less.com\0" +"org.bm\0tsukuba.ibaraki.jp\0" +"org.bo\0" +"org.br\0r\xc3\xa6lingen.no\0" +"org.bs\0kuriyama.hokkaido.jp\0" +"org.bt\0" +"org.bw\0" +"nf.ca\0" +"org.ci\0" +"org.bz\0" +"hirogawa.wakayama.jp\0" "mordovia.ru\0" -"com.gh\0*.mm\0" -"com.gi\0z.se\0" -"cahcesuolo.no\0" -"hurdal.no\0joshkar-ola.ru\0" -"cadaques.museum\0ma.us\0" -"a.bg\0" -"com.gn\0bozen.it\0tambov.ru\0" -"*.gifu.jp\0*.tokyo.jp\0*.mt\0" -"com.gp\0travel\0cc.tx.us\0" -"com.gr\0hemne.no\0" -"*.ni\0" -"*.mz\0" -"cc.il.us\0" -"com.gy\0" -"zj.cn\0oksnes.no\0museum.tt\0" -"com.hk\0*.np\0" -"rc.it\0baseball.museum\0" -"com.hn\0exhibition.museum\0" -"h\xc3\xa1""bmer.no\0" +"org.cn\0k12.vt.us\0" +"org.co\0" +"if.ua\0" +"org.cu\0" +"futsu.nagasaki.jp\0hu.net\0" +"dyndns-pics.com\0" +"karumai.iwate.jp\0" +"org.dm\0" +"org.do\0" +"risor.no\0" +"kujukuri.chiba.jp\0abashiri.hokkaido.jp\0novosibirsk.ru\0" +"org.ec\0" +"ballangen.no\0k12.co.us\0" +"org.ee\0" +"navuotna.no\0pisz.pl\0" +"org.eg\0" +"mobi.na\0" +"tonami.toyama.jp\0" +"org.dz\0sci.eg\0\xc3\xa5rdal.no\0" +"environmentalconservation.museum\0edunet.tn\0" +"murakami.niigata.jp\0usarts.museum\0" +"eidfjord.no\0e-burg.ru\0from-mt.com\0from-nd.com\0" +"karasuyama.tochigi.jp\0utah.museum\0" +"maritimo.museum\0" +"union.aero\0org.es\0" +"esan.hokkaido.jp\0" +"namegawa.saitama.jp\0c.se\0" +"anamizu.ishikawa.jp\0kitakami.iwate.jp\0" +"ga.us\0" +"qld.au\0gjemnes.no\0" +"ichinoseki.iwate.jp\0makinohara.shizuoka.jp\0" +"bahccavuotna.no\0" +"is-an-actress.com\0" +"karm\xc3\xb8y.no\0" +"org.ge\0cesena-forli.it\0" +"vantaa.museum\0gaular.no\0" +"org.gg\0" +"org.gh\0cc.ny.us\0" +"org.gi\0" +"from-dc.com\0" +"fitjar.no\0vyatka.ru\0" +"org.gn\0museum\0" +"org.gp\0" +"org.gr\0beppu.oita.jp\0" +"groundhandling.aero\0org.gt\0okegawa.saitama.jp\0lib.ky.us\0" +"org.hk\0" +"org.hn\0" +"presidio.museum\0cc.md.us\0" +"bolzano.it\0" +"sosa.chiba.jp\0koenig.ru\0iki.fi\0" +"org.ht\0ebetsu.hokkaido.jp\0" +"fuel.aero\0org.hu\0" +"hole.no\0" +"blog.br\0tosu.saga.jp\0" +"k12.nh.us\0" +"i.bg\0" +"rs.ba\0" +"org.im\0" +"org.in\0" +"org.iq\0" +"lel.br\0org.ir\0kasahara.gifu.jp\0" +"org.is\0chofu.tokyo.jp\0notodden.no\0" +"org.je\0spjelkavik.no\0" +"vefsn.no\0" +"fukuoka.jp\0yamanobe.yamagata.jp\0yamanakako.yamanashi.jp\0" +"yaese.okinawa.jp\0" +"baikal.ru\0" +"from-me.org\0" +"kanazawa.ishikawa.jp\0nowaruda.pl\0" +"swidnica.pl\0" +"org.jo\0!city.yokohama.jp\0olkusz.pl\0" +"higashiura.aichi.jp\0mosjoen.no\0" +"vestv\xc3\xa5g\xc3\xb8y.no\0" +"takahama.aichi.jp\0dyn-o-saur.com\0" +"shimabara.nagasaki.jp\0" +"ebiz.tw\0" +"caserta.it\0org.kg\0" +"sc.cn\0org.ki\0" +"aizuwakamatsu.fukushima.jp\0is-a-teacher.com\0" +"sado.niigata.jp\0org.km\0resistance.museum\0" +"togo.aichi.jp\0org.kn\0skien.no\0" +"org.kp\0" +"org.la\0kommune.no\0" +"vic.edu.au\0miyoshi.aichi.jp\0org.lb\0" +"org.lc\0" +"cagliari.it\0" +"uscountryestate.museum\0h\xc3\xb8nefoss.no\0" +"gs.ol.no\0" +"riik.ee\0" +"g12.br\0ms.us\0nc.us\0" +"org.ky\0agro.pl\0" +"org.kz\0landes.museum\0doesntexist.com\0" +"org.lk\0" +"holt\xc3\xa5len.no\0" +"nedre-eiker.no\0" +"org.ma\0naroy.no\0" +"org.lr\0" +"org.ls\0" +"tagawa.fukuoka.jp\0" +"org.me\0" +"nonoichi.ishikawa.jp\0org.lv\0" +"org.mg\0horology.museum\0" +"utazas.hu\0ako.hyogo.jp\0" +"org.ly\0" +"org.mk\0sandnes.no\0" +"ayabe.kyoto.jp\0org.ml\0" +"office-on-the.net\0" +"minato.tokyo.jp\0org.mn\0" +"org.mo\0" +"koryo.nara.jp\0" +"org.na\0balsfjord.no\0" +"org.mu\0" +"hyuga.miyazaki.jp\0org.mv\0" +"perso.ht\0org.mw\0org.ng\0" +"org.mx\0" +"org.my\0" +"powiat.pl\0" +"kinokawa.wakayama.jp\0" +"shichinohe.aomori.jp\0" +"ru.com\0se.com\0" +"org.nr\0" +"environment.museum\0planetarium.museum\0" +"niigata.niigata.jp\0" +"name.hr\0" +"asago.hyogo.jp\0is-very-nice.org\0" +"hirata.fukushima.jp\0" +"sera.hiroshima.jp\0shizuoka.shizuoka.jp\0" +"nrw.museum\0" +"palace.museum\0" +"org.pa\0" +"cc.ak.us\0" +"wiki.br\0" +"shimotsuke.tochigi.jp\0org.pe\0press.se\0" +"org.pf\0" +"nishiizu.shizuoka.jp\0f.se\0" +"org.ph\0" +"is-a-llama.com\0" +"kamikawa.saitama.jp\0elblag.pl\0" +"kochi.jp\0gs.hm.no\0org.pk\0" +"org.pl\0" +"paleo.museum\0" +"org.pn\0" +"torsken.no\0" +"iwafune.tochigi.jp\0org.qa\0" +"org.pr\0" +"org.ps\0" +"bato.tochigi.jp\0org.pt\0" +"isumi.chiba.jp\0and\xc3\xb8y.no\0" +"tatsuno.nagano.jp\0org.py\0" +"pub.sa\0" +"portal.museum\0is-into-cartoons.com\0" +"sasayama.hyogo.jp\0" +"ibigawa.gifu.jp\0" +"uruma.okinawa.jp\0" +"orskog.no\0" +"cincinnati.museum\0" +"farmstead.museum\0" +"ftpaccess.cc\0" +"castres.museum\0org.ro\0" +"org.sa\0" +"sassari.it\0saka.hiroshima.jp\0org.sb\0" +"higashihiroshima.hiroshima.jp\0org.rs\0org.sc\0" +"org.sd\0" +"tokai.aichi.jp\0org.ru\0org.se\0" +"games.hu\0pn.it\0v\xc3\xa6r\xc3\xb8y.no\0" +"amsterdam.museum\0org.sg\0" +"campobasso.it\0org.sh\0" +"forli-cesena.it\0corvette.museum\0ath.cx\0" +"yokawa.hyogo.jp\0is-a-socialist.com\0" +"tjeldsund.no\0az.us\0" +"student.aero\0name.eg\0org.sl\0" +"l.bg\0sc.kr\0" +"org.sn\0" +"frankfurt.museum\0org.so\0" +"barcelona.museum\0from-wy.com\0" +"is-an-artist.com\0" +"dvrdns.org\0" +"ikata.ehime.jp\0" +"dr.na\0steinkjer.no\0org.st\0" +"yao.osaka.jp\0british.museum\0" +"grosseto.it\0gemological.museum\0lipetsk.ru\0" +"civilization.museum\0iron.museum\0org.sy\0" +"org.sz\0org.tj\0" +"tel\0" +"org.tm\0" +"honbetsu.hokkaido.jp\0minamioguni.kumamoto.jp\0org.tn\0" +"name.az\0ohira.miyagi.jp\0s\xc3\xb8ndre-land.no\0org.to\0" +"intl.tn\0" +"schlesisches.museum\0org.ua\0" +"cesenaforli.it\0" +"org.tt\0" +"org.tw\0org.ug\0" +"takehara.hiroshima.jp\0" +"bible.museum\0" +"narashino.chiba.jp\0" +"tsubame.niigata.jp\0hinohara.tokyo.jp\0" +"minamiawaji.hyogo.jp\0" +"is-into-anime.com\0" +"press.ma\0" +"nishihara.okinawa.jp\0" +"kita.osaka.jp\0kazo.saitama.jp\0org.vc\0" +"tagami.niigata.jp\0org.ve\0" +"lebork.pl\0" +"chuo.osaka.jp\0" +"kashiwa.chiba.jp\0turen.tn\0org.uy\0org.vi\0" +"flakstad.no\0org.uz\0isa-hockeynut.com\0" +"kyuragi.saga.jp\0" +"ichikai.tochigi.jp\0" +"aoste.it\0" +"org.vn\0" +"mishima.fukushima.jp\0" +"funagata.yamagata.jp\0" +"from-ms.com\0from-nc.com\0" +"psc.br\0" +"gorlice.pl\0" +"nl.ca\0chippubetsu.hokkaido.jp\0tone.ibaraki.jp\0i.ph\0" +"etajima.hiroshima.jp\0" +"uji.kyoto.jp\0sakai.osaka.jp\0la.us\0" +"aukra.no\0stranda.no\0stryn.no\0org.ws\0" +"tromsa.no\0" +"ind.br\0yoichi.hokkaido.jp\0" +"sayama.osaka.jp\0usenet.pl\0" +"amusement.aero\0maniwa.okayama.jp\0" +"katowice.pl\0is-a-nascarfan.com\0" +"okawa.kochi.jp\0" +"tomisato.chiba.jp\0cadaques.museum\0cc.dc.us\0" +"space.museum\0" +"afjord.no\0" +"oharu.aichi.jp\0" +"koriyama.fukushima.jp\0" +"il.us\0" +"n\xc3\xa1vuotna.no\0" +"satx.museum\0" +"misato.akita.jp\0" +"katsuragi.wakayama.jp\0history.museum\0" +"pharmacien.fr\0rieti.it\0" +"assassination.museum\0" +"j\xc3\xb8rpeland.no\0r\xc3\xb8yken.no\0" +"i.se\0" +"miyoshi.hiroshima.jp\0" +"computer.museum\0" +"tsubata.ishikawa.jp\0" +"kawakita.ishikawa.jp\0for-the.biz\0" +"fortworth.museum\0" +"akita.akita.jp\0storfjord.no\0" +"b\xc3\xa1hccavuotna.no\0" +"andebu.no\0" +"taketomi.okinawa.jp\0" +"isshiki.aichi.jp\0" +"taiji.wakayama.jp\0" +"haebaru.okinawa.jp\0" +"dell-ogliastra.it\0historichouses.museum\0trogstad.no\0" +"tx.us\0k12.pa.us\0" +"lib.ks.us\0" +"kherson.ua\0" +"uonuma.niigata.jp\0" +"bifuka.hokkaido.jp\0kouhoku.saga.jp\0luster.no\0" +"gotsu.shimane.jp\0r\xc3\xb8""d\xc3\xb8y.no\0" +"skiptvet.no\0" +"press.aero\0" +"sc.ug\0" +"sc.tz\0" +"hekinan.aichi.jp\0kariya.aichi.jp\0kounosu.saitama.jp\0quebec.museum\0" +"ind.gt\0kuromatsunai.hokkaido.jp\0" +"money.museum\0" +"historical.museum\0sc.us\0k12.mn.us\0" +"o.bg\0" +"chesapeakebay.museum\0ringerike.no\0" +"fst.br\0shitara.aichi.jp\0" +"urn.arpa\0" +"homelinux.org\0" +"ina.nagano.jp\0" +"its.me\0" +"kawakami.nagano.jp\0miyada.nagano.jp\0" +"ishikari.hokkaido.jp\0" +"national.museum\0" +"imabari.ehime.jp\0" +"akaiwa.okayama.jp\0rhcloud.com\0" +"kamaishi.iwate.jp\0" +"joyo.kyoto.jp\0" +"ind.in\0school.na\0" +"kiso.nagano.jp\0sevastopol.ua\0" +"shimoichi.nara.jp\0loten.no\0" +"selfip.net\0" +"a\xc3\xa9roport.ci\0ascoli-piceno.it\0" +"nuremberg.museum\0" +"otaki.saitama.jp\0chuvashia.ru\0defense.tn\0" +"mibu.tochigi.jp\0mitaka.tokyo.jp\0" +"odo.br\0" +"koori.fukushima.jp\0" +"omuta.fukuoka.jp\0med.pro\0" +"tomioka.gunma.jp\0kitakata.miyazaki.jp\0arteducation.museum\0" +"yamatotakada.nara.jp\0" +"brunel.museum\0" +"vik.no\0" +"sf.no\0" +"is-a-designer.com\0" +"perso.sn\0" +"lg.jp\0" +"hayashima.okayama.jp\0name.vn\0" +"gangwon.kr\0" +"atlanta.museum\0" +"coop.ht\0" +"veterinaire.km\0" +"gda.pl\0cc.wa.us\0" +"qsl.br\0mitsue.nara.jp\0" +"oumu.hokkaido.jp\0" +"zarow.pl\0" +"kisarazu.chiba.jp\0" +"perso.tn\0" +"ono.fukushima.jp\0" +"tas.au\0nordre-land.no\0" +"kanagawa.jp\0" +"pasadena.museum\0" +"uto.kumamoto.jp\0" +"sport.hu\0" +"yamatokoriyama.nara.jp\0stj\xc3\xb8rdal.no\0name.tj\0" +"nishigo.fukushima.jp\0" +"nikko.tochigi.jp\0" +"tsushima.nagasaki.jp\0" +"palmsprings.museum\0" +"coop.br\0yaroslavl.ru\0" +"meldal.no\0" +"takasago.hyogo.jp\0" +"name.tt\0" +"nl.no\0" +"webhop.net\0" +"nic.im\0sayama.saitama.jp\0" +"nic.in\0" +"tomakomai.hokkaido.jp\0" +"agano.niigata.jp\0" +"\xd9\x85\xd8\xb5\xd8\xb1\0go.dyndns.org\0" +"savona.it\0" +"kodaira.tokyo.jp\0" +"qld.gov.au\0" +"kashiwara.osaka.jp\0l.se\0" +"veterinaire.fr\0" +"university.museum\0" +"haugesund.no\0" +"hokuto.yamanashi.jp\0" +"lib.ok.us\0" +"pesarourbino.it\0n\xc3\xb8tter\xc3\xb8y.no\0" +"2000.hu\0froya.no\0" +"genova.it\0saskatchewan.museum\0" +"isleofman.museum\0" +"video.hu\0smolensk.ru\0" +"taira.toyama.jp\0" +"masfjorden.no\0" +"jessheim.no\0" +"science.museum\0" +"cc.or.us\0from-pa.com\0" +"muroran.hokkaido.jp\0" +"bs.it\0ube.yamaguchi.jp\0" +"si.it\0" +"catering.aero\0esashi.hokkaido.jp\0newmexico.museum\0tana.no\0" +"opole.pl\0" +"iruma.saitama.jp\0" +"hiroo.hokkaido.jp\0ogawa.ibaraki.jp\0rv.ua\0" +"nakatsugawa.gifu.jp\0\xc3\xa1k\xc5\x8boluokta.no\0" +"naie.hokkaido.jp\0kvinnherad.no\0" +"pilot.aero\0ws.na\0" +"yahaba.iwate.jp\0" +"birthplace.museum\0" +"name.qa\0" +"tahara.aichi.jp\0hashikami.aomori.jp\0name.pr\0" +"filatelia.museum\0" +"pt.it\0" +"chattanooga.museum\0" +"*.yokohama.jp\0" +"k12.mo.us\0" +"r.bg\0yugawara.kanagawa.jp\0" +"geometre-expert.fr\0koka.shiga.jp\0fundacio.museum\0hamar.no\0" +"yamanouchi.nagano.jp\0\xc3\xa5lesund.no\0" +"name.na\0" +"village.museum\0" +"shinkamigoto.nagasaki.jp\0name.mv\0" +"orkanger.no\0" +"mikasa.hokkaido.jp\0name.my\0balestrand.no\0kr\xc3\xa5""anghke.no\0" +"no.it\0pesaro-urbino.it\0" +"kamikawa.hyogo.jp\0" +"\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0" +"botany.museum\0" +"cc.na\0" +"ntr.br\0sango.nara.jp\0masuda.shimane.jp\0" +"ind.tn\0" +"trondheim.no\0" +"fermo.it\0kagamino.okayama.jp\0odda.no\0" +"askvoll.no\0" +"tottori.tottori.jp\0bronnoysund.no\0" +"ena.gifu.jp\0" +"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" +"evenes.no\0" +"shiriuchi.hokkaido.jp\0hino.tokyo.jp\0lib.vi.us\0" +"iide.yamagata.jp\0" +"sande.m\xc3\xb8re-og-romsdal.no\0" +"shibata.niigata.jp\0botanicgarden.museum\0lg.ua\0" +"\xc3\xa5s.no\0" +"namegata.ibaraki.jp\0" +"architecture.museum\0fineart.museum\0ostrowwlkp.pl\0" +"sorreisa.no\0" +"psi.br\0cc.vt.us\0" +"barrel-of-knowledge.info\0" +"kunitomi.miyazaki.jp\0name.mk\0" +"stor-elvdal.no\0uy.com\0" +"bonn.museum\0budejju.no\0rnu.tn\0" +"chiyoda.gunma.jp\0" +"yoro.gifu.jp\0" +"yasu.shiga.jp\0" +"amagasaki.hyogo.jp\0" +"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0" +"jur.pro\0" +"mukawa.hokkaido.jp\0narviika.no\0" +"name.jo\0" +"marburg.museum\0tysv\xc3\xa6r.no\0" +"lorenskog.no\0" +"aland.fi\0yonezawa.yamagata.jp\0" +"gyeongnam.kr\0" +"maebashi.gunma.jp\0" +"tateshina.nagano.jp\0" +"yamato.kanagawa.jp\0dyndns.info\0" +"mosvik.no\0" +"crimea.ua\0" +"laakesvuemie.no\0" +"her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0" +"embetsu.hokkaido.jp\0chiyoda.tokyo.jp\0kudamatsu.yamaguchi.jp\0gop.pk\0nic.tj\0" +"yalta.ua\0" +"oregon.museum\0" +"naples.it\0ginan.gifu.jp\0o.se\0" +"va.it\0tamayu.shimane.jp\0" +"ninomiya.kanagawa.jp\0" +"orenburg.ru\0" +"academy.museum\0" +"miyakonojo.miyazaki.jp\0appspot.com\0" +"moma.museum\0" +"lib.nv.us\0readmyblog.org\0" +"wake.okayama.jp\0" +"kusu.oita.jp\0ing.pa\0" +"blogdns.org\0" +"is-a-doctor.com\0" +"london.museum\0" +"group.aero\0fukumitsu.toyama.jp\0" +"osaki.miyagi.jp\0" +"is-a-techie.com\0" +"!nel.uk\0" +"otake.hiroshima.jp\0shinonsen.hyogo.jp\0" +"oshima.yamaguchi.jp\0mari-el.ru\0" +"obu.aichi.jp\0" +"bykle.no\0" +"yasuoka.nagano.jp\0" +"gs.cn\0" +"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" +"chuo.fukuoka.jp\0" +"aero.tt\0" +"tokai.ibaraki.jp\0" +"nsw.edu.au\0" +"suzu.ishikawa.jp\0kitagawa.miyazaki.jp\0" +"kawaminami.miyazaki.jp\0aisho.shiga.jp\0gs.tr.no\0" +"bungotakada.oita.jp\0" +"center.museum\0maritime.museum\0timekeeping.museum\0" +"u.bg\0ecn.br\0" +"yamal.ru\0" +"aero.mv\0" +"botanical.museum\0at-band-camp.net\0" +"isa.us\0" +"kasumigaura.ibaraki.jp\0" +"ogawa.nagano.jp\0oppegard.no\0" +"avellino.it\0" +"samukawa.kanagawa.jp\0nat.tn\0" +"b\xc3\xb8mlo.no\0" +"gov.ac\0asso.fr\0" +"gov.ae\0konan.aichi.jp\0" +"gov.af\0" +"research.aero\0omitama.ibaraki.jp\0kita.tokyo.jp\0va.no\0" +"okaya.nagano.jp\0" +"zhitomir.ua\0" +"communication.museum\0" +"gov.al\0" +"kanra.gunma.jp\0kamisu.ibaraki.jp\0googlecode.com\0" +"sandefjord.no\0astrakhan.ru\0kamchatka.ru\0" +"gov.ba\0asso.gp\0" +"gov.bb\0" +"gov.as\0" +"okinawa.okinawa.jp\0" +"gov.au\0" +"gov.bf\0" +"gov.bh\0" +"gov.az\0bv.nl\0" +"pisa.it\0showa.yamanashi.jp\0" +"kawajima.saitama.jp\0uw.gov.pl\0" +"gov.bm\0" +"kunimi.fukushima.jp\0" +"gov.bo\0vologda.ru\0servebbs.net\0" +"lib.ut.us\0" +"gov.br\0naval.museum\0" +"gov.bs\0" +"gov.bt\0gov.cd\0minakami.gunma.jp\0" +"asso.ht\0ovre-eiker.no\0coop.tt\0" +"nt.edu.au\0mat.br\0" +"gov.by\0bale.museum\0" +"gov.bz\0cc.ga.us\0" +"aga.niigata.jp\0" +"gov.cl\0fredrikstad.no\0" +"gov.cm\0" +"gov.cn\0bushey.museum\0" +"gov.co\0" +"nu.ca\0" +"kamiamakusa.kumamoto.jp\0" +"aa.no\0" +"gov.cu\0" +"omachi.saga.jp\0k12.wy.us\0lib.ca.us\0" +"coop.mv\0" +"gov.cx\0coop.mw\0" +"asso.bj\0venezia.it\0windmill.museum\0" +"ac\0likes-pie.com\0" +"ad\0gov.dm\0kepno.pl\0" +"ae\0" +"af\0gov.do\0" +"aerodrome.aero\0ag\0" +"ai\0" +"gov.ec\0" +"milano.it\0" +"al\0gov.ee\0oguni.kumamoto.jp\0" +"am\0" +"an\0gov.eg\0" +"ao\0" +"kumiyama.kyoto.jp\0" +"aq\0ba\0asso.ci\0gov.dz\0hidaka.hokkaido.jp\0" +"bb\0hongo.hiroshima.jp\0shishikui.tokushima.jp\0" +"as\0blogdns.com\0" +"at\0" +"be\0idv.hk\0" +"agents.aero\0bf\0" +"aw\0bg\0notteroy.no\0" +"ax\0bh\0" +"bi\0" +"az\0bj\0" +"higashiizu.shizuoka.jp\0" +"bm\0norilsk.ru\0" +"bo\0" +"gos.pk\0" +"ca\0yawatahama.ehime.jp\0" +"br\0" +"bs\0cc\0chiropractic.museum\0" +"bt\0cd\0\xe7\xae\x87\xe4\xba\xba.hk\0en.it\0clock.museum\0r.se\0" +"cf\0" +"bw\0cg\0kobayashi.miyazaki.jp\0aurskog-h\xc3\xb8land.no\0valer.hedmark.no\0" +"ch\0" +"by\0ci\0" +"gv.ao\0bz\0" +"osakasayama.osaka.jp\0wv.us\0" +"cl\0gov.ge\0tozsde.hu\0nakagyo.kyoto.jp\0homeftp.org\0" +"cm\0" +"cn\0gov.gg\0bus.museum\0" +"gv.at\0co\0gov.gh\0" +"consultant.aero\0gov.gi\0kahoku.ishikawa.jp\0" +"shobara.hiroshima.jp\0coop.py\0" +"cr\0asso.dz\0" +"cu\0de\0gov.gn\0getmyip.com\0" +"cv\0" +"kasai.hyogo.jp\0amur.ru\0" +"cx\0" +"gov.gr\0" +"cz\0dj\0" +"dk\0ci.it\0" +"so.it\0" +"express.aero\0dm\0" +"do\0tomigusuku.okinawa.jp\0" +"oseto.nagasaki.jp\0" +"gov.hk\0va.us\0" +"ec\0" +"izumozaki.niigata.jp\0" +"ee\0" +"principe.st\0" +"eg\0" +"is-a-bookkeeper.com\0" +"dz\0" +"gov.ie\0" +"showa.fukushima.jp\0" +"noboribetsu.hokkaido.jp\0tourism.tn\0cc.ms.us\0cc.nc.us\0" +"es\0pz.it\0" +"gov.im\0" +"eu\0gov.in\0coop.km\0!british-library.uk\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0" +"artcenter.museum\0" +"suwa.nagano.jp\0" +"gov.iq\0nationalfirearms.museum\0lubin.pl\0" +"fi\0gov.ir\0aver\xc3\xb8y.no\0" +"x.bg\0gov.is\0" +"gov.it\0" +"radio.br\0gov.je\0sasebo.nagasaki.jp\0" +"fm\0monzaedellabrianza.it\0" +"ad.jp\0" +"fo\0" +"ga\0" +"fr\0" +"from-nj.com\0" +"gd\0" +"ge\0" +"gf\0gov.jo\0" +"gg\0" +"gh\0eiheiji.fukui.jp\0shintomi.miyazaki.jp\0odesa.ua\0" +"gi\0gifu.jp\0rockart.museum\0homeunix.com\0" +"nu.it\0" +"gl\0" +"gm\0publ.pt\0forgot.his.name\0" +"gov.kg\0" +"gp\0gov.ki\0karmoy.no\0" +"gq\0kr\xc3\xb8""dsherad.no\0" +"far.br\0gr\0roma.museum\0endofinternet.net\0" +"gs\0" +"gt\0gov.km\0inder\xc3\xb8y.no\0" +"nakama.fukuoka.jp\0gov.kn\0kvanangen.no\0" +"gw\0taiki.hokkaido.jp\0gov.kp\0" +"gov.la\0" +"gy\0haga.tochigi.jp\0gov.lb\0" +"gobo.wakayama.jp\0gov.lc\0" +"hk\0" +"natori.miyagi.jp\0" +"hm\0crotone.it\0snillfjord.no\0" +"hn\0" +"chiryu.aichi.jp\0gov.ky\0" +"gov.kz\0" +"hr\0gov.lk\0" +"ht\0id\0" +"hu\0ie\0nanbu.yamanashi.jp\0nesseby.no\0" +"ono.fukui.jp\0" +"vikna.no\0" +"gov.ma\0bashkiria.ru\0" +"gov.lr\0" +"niihama.ehime.jp\0" +"gov.lt\0" +"gov.me\0" +"im\0shonai.fukuoka.jp\0gov.lv\0" +"in\0gov.mg\0gorge.museum\0dyndns.org\0" +"io\0" +"gov.ly\0" +"iq\0" +"ir\0campidanomedio.it\0nichinan.miyazaki.jp\0gov.mk\0" +"is\0minamitane.kagoshima.jp\0gov.ml\0" +"it\0" +"je\0gov.mn\0" +"gov.mo\0" +"*.nagoya.jp\0" +"gov.mr\0est.pr\0" +"kinko.kagoshima.jp\0" +"gov.mu\0dudinka.ru\0" +"kouyama.kagoshima.jp\0gov.mv\0rnrt.tn\0" +"gov.mw\0gov.ng\0swiebodzin.pl\0" +"jo\0" +"jp\0gov.my\0" +"columbia.museum\0" +"udono.mie.jp\0" +"nx.cn\0oristano.it\0" +"kg\0" +"ki\0bygland.no\0gov.nr\0" +"toyoura.hokkaido.jp\0" +"\xe6\x94\xbf\xe5\xba\x9c.hk\0" +"taishi.hyogo.jp\0km\0" +"miyako.iwate.jp\0kn\0" +"hamatama.saga.jp\0" +"la\0stavropol.ru\0" +"kr\0" +"lc\0" +"cn.com\0" +"tarumizu.kagoshima.jp\0" +"ky\0li\0" +"kz\0" +"lk\0" +"tver.ru\0" +"uvic.museum\0" +"gov.ph\0" +"lyngen.no\0" +"koto.tokyo.jp\0ma\0cc.az.us\0" +"sannan.hyogo.jp\0gov.pk\0sells-it.net\0" +"ls\0mc\0gov.pl\0" +"lt\0md\0" +"lu\0me\0gov.pn\0" +"lv\0meland.no\0u.se\0servegame.org\0" +"mg\0" +"mh\0other.nf\0gov.qa\0" +"ly\0gov.pr\0" +"gov.ps\0" +"\xe7\xbb\x84\xe7\xbb\x87.hk\0nishio.aichi.jp\0mk\0gov.pt\0" +"ml\0miasta.pl\0" +"iwamizawa.hokkaido.jp\0ikeda.osaka.jp\0sejny.pl\0wy.us\0" +"kesennuma.miyagi.jp\0mn\0" +"mo\0" +"mp\0gov.py\0" +"mq\0na\0" +"mr\0selfip.org\0" +"tsuruoka.yamagata.jp\0ms\0touch.museum\0nc\0" +"matsumoto.kagoshima.jp\0mu\0ne\0" +"lecce.it\0wassamu.hokkaido.jp\0mv\0nf\0" +"hirono.fukushima.jp\0mw\0" +"mx\0" +"my\0" +"hamamatsu.shizuoka.jp\0" +"rikubetsu.hokkaido.jp\0jamal.ru\0" +"nl\0nieruchomosci.pl\0" +"cl.it\0hisayama.fukuoka.jp\0minami.kyoto.jp\0arai.shizuoka.jp\0" +"sr.it\0kikonai.hokkaido.jp\0" +"no\0" +"yakumo.hokkaido.jp\0" +"keisen.fukuoka.jp\0idv.tw\0" +"nr\0" +"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0" +"ut.us\0" +"nu\0" +"gov.sa\0" +"gov.sb\0" +"gov.rs\0gov.sc\0" +"hi.cn\0gov.sd\0" +"orkdal.no\0gov.ru\0" +"fuoisku.no\0" +"shiraoka.saitama.jp\0building.museum\0gov.rw\0gov.sg\0" +"gov.sh\0" +"co.ae\0aeroclub.aero\0" +"pa\0" +"co.ag\0" +"gov.sl\0" +"ag.it\0higashi.okinawa.jp\0lancashire.museum\0" +"pe\0" +"pf\0" +"oygarden.no\0" +"!siemens.om\0ph\0" +"aikawa.kanagawa.jp\0" +"co.ao\0tempioolbia.it\0" +"lierne.no\0pk\0gov.st\0" +"co.ba\0force.museum\0pl\0" +"pm\0asso.re\0" +"pn\0" +"co.at\0dep.no\0irkutsk.ru\0gov.sx\0" +"gov.sy\0" +"qa\0gov.tj\0" +"pr\0" +"historyofscience.museum\0ps\0gov.tl\0" +"co.bi\0pt\0gov.tm\0" +"higashinaruse.akita.jp\0madrid.museum\0gov.tn\0" +"gov.to\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"pw\0cc.la.us\0" +"tarui.gifu.jp\0gov.ua\0" +"py\0" +"kyotango.kyoto.jp\0gov.tt\0" +"tourism.pl\0co.ca\0" +"leirfjord.no\0" +"gov.tw\0" +"tenkawa.nara.jp\0" +"minowa.nagano.jp\0" +"co.bw\0takazaki.miyazaki.jp\0ullensvang.no\0" +"andoy.no\0" +"co.ci\0" +"finland.museum\0tysnes.no\0re\0" +"e12.ve\0" +"co.cl\0austevoll.no\0wolomin.pl\0" +"kunstunddesign.museum\0" +"k\xc3\xa5""fjord.no\0gov.vc\0" +"gov.ve\0" +"co.cr\0kasuga.fukuoka.jp\0" +"iris.arpa\0cc.il.us\0" +"latina.it\0copenhagen.museum\0ro\0" +"sa\0" +"sb\0" +"mc.it\0um.gov.pl\0rs\0sc\0" +"futtsu.chiba.jp\0incheon.kr\0sd\0" +"ru\0se\0gov.vn\0" +"oppeg\xc3\xa5rd.no\0" +"rw\0sg\0" +"sh\0" +"cnt.br\0harima.hyogo.jp\0si\0" +"1.bg\0" +"sk\0" +"sl\0" +"sm\0" +"plaza.museum\0sn\0" +"so\0" +"sr\0" +"tc\0" +"st\0td\0" +"su\0" +"tf\0" +"nishiawakura.okayama.jp\0tg\0" +"sx\0th\0" +"unbi.ba\0sumita.iwate.jp\0forsand.no\0sy\0" +"sz\0tj\0gov.ws\0" +"asso.nc\0tk\0" +"artgallery.museum\0tl\0" +"tm\0" +"tn\0" +"toda.saitama.jp\0to\0" +"for-some.biz\0" +"ua\0" +"yatsushiro.kumamoto.jp\0" +"!rakpetroleum.om\0tt\0" +"taishin.fukushima.jp\0beeldengeluid.museum\0" +"hellas.museum\0tv\0gr.com\0" +"fujimi.nagano.jp\0tw\0ug\0" +"rennesoy.no\0" +"asahi.nagano.jp\0" +"ogano.saitama.jp\0mjondalen.no\0loabat.no\0cc.tx.us\0" +"kikuchi.kumamoto.jp\0gniezno.pl\0" +"iwaizumi.iwate.jp\0" +"va\0" +"co.gg\0" +"nesset.no\0us\0vc\0" +"parma.it\0hasama.oita.jp\0b\xc3\xa1l\xc3\xa1t.no\0ve\0" +"kashima.ibaraki.jp\0vg\0" +"k12.ut.us\0" +"uy\0vi\0" +"monza-e-della-brianza.it\0ebina.kanagawa.jp\0uz\0" +"kosa.kumamoto.jp\0nagi.okayama.jp\0" +"yomitan.okinawa.jp\0" +"vn\0" +"ouda.nara.jp\0" +"ogliastra.it\0" +"co.gy\0cc.sc.us\0" +"vu\0" +"wf\0" +"webhop.biz\0" +"x.se\0" +"farm.museum\0" +"nord-fron.no\0" +"co.id\0" +"mil.ac\0co.hu\0" +"suzuka.mie.jp\0sigdal.no\0" +"mil.ae\0" +"forde.no\0ws\0" +"ivgu.no\0" +"co.im\0" +"mil.al\0co.in\0uchiko.ehime.jp\0mer\xc3\xa5ker.no\0s\xc3\xb8rum.no\0" +"vibo-valentia.it\0" +"nango.fukushima.jp\0" +"co.ir\0" +"mil.ba\0\xc3\xa5mot.no\0" +"co.it\0" +"te.it\0co.je\0" +"ostre-toten.no\0" +"engineer.aero\0kumamoto.jp\0nativeamerican.museum\0" +"miyama.mie.jp\0" +"mil.az\0nagawa.nagano.jp\0" +"eng.pro\0" +"co.jp\0" +"mil.bo\0" +"hl.cn\0" +"sk\xc3\xa1nit.no\0" +"mil.br\0uda.nara.jp\0" +"pvt.k12.ma.us\0" +"medio-campidano.it\0columbus.museum\0" +"sakaiminato.tottori.jp\0yt\0" +"asso.km\0" +"mil.by\0higashiyodogawa.osaka.jp\0nanbu.tottori.jp\0" +"intelligence.museum\0" +"mil.cl\0aioi.hyogo.jp\0" +"mil.cn\0" +"mil.co\0levanger.no\0" +"co.kr\0" +"co.lc\0from-wi.com\0" +"kawai.iwate.jp\0" +"b\xc3\xb8.telemark.no\0" +"tsurugi.ishikawa.jp\0" +"flekkefjord.no\0" +"furniture.museum\0newyork.museum\0" +"asso.mc\0" +"mil.do\0co.ma\0" +"nagara.chiba.jp\0co.ls\0" +"mil.ec\0bolt.hu\0co.me\0" +"uhren.museum\0" +"joso.ibaraki.jp\0niyodogawa.kochi.jp\0gs.sf.no\0" +"mil.eg\0" +"lib.il.us\0" +"umaji.kochi.jp\0kurashiki.okayama.jp\0" +"kakinoki.shimane.jp\0oishida.yamagata.jp\0" +"bearalv\xc3\xa1hki.no\0sokndal.no\0" +"wa.gov.au\0sx.cn\0co.na\0" +"art.museum\0" +"mo-i-rana.no\0" +"co.mu\0" +"co.mw\0" +"design.aero\0" +"vadso.no\0" +"am.br\0" +"co.nl\0" +"hidaka.kochi.jp\0" +"tokushima.jp\0communications.museum\0" +"co.no\0" +"oh.us\0blogdns.net\0" +"4.bg\0nord-odal.no\0" +"kumamoto.kumamoto.jp\0" +"altoadige.it\0koto.shiga.jp\0" +"yasaka.nagano.jp\0" +"mil.ge\0" +"jaworzno.pl\0" +"saito.miyazaki.jp\0" +"mil.gh\0toyoake.aichi.jp\0" +"mombetsu.hokkaido.jp\0" +"fauske.no\0" +"nishi.fukuoka.jp\0alaska.museum\0" +"marnardal.no\0" +"on.ca\0" +"higashikurume.tokyo.jp\0" +"gs.nl.no\0" +"mil.gt\0reggioemilia.it\0r\xc3\xb8st.no\0" +"fnd.br\0bjark\xc3\xb8y.no\0l\xc3\xa6rdal.no\0tromso.no\0krakow.pl\0" +"takahashi.okayama.jp\0hasvik.no\0" +"co.pl\0" +"zt.ua\0" +"katsuyama.fukui.jp\0co.pn\0homeftp.net\0" +"mil.hn\0fuchu.tokyo.jp\0omaha.museum\0" +"date.hokkaido.jp\0shimokawa.hokkaido.jp\0" +"tyumen.ru\0" +"mil.id\0philadelphiaarea.museum\0sanfrancisco.museum\0" +"honjo.akita.jp\0living.museum\0co.pw\0" +"beiarn.no\0" +"ullensaker.no\0" +"tozawa.yamagata.jp\0" +"aya.miyazaki.jp\0uk.net\0" +"sklep.pl\0" +"hokuto.hokkaido.jp\0" +"mil.in\0" +"tsaritsyn.ru\0" +"mil.iq\0" +"minami.fukuoka.jp\0" +"naklo.pl\0" +"susaki.kochi.jp\0" +"karatsu.saga.jp\0" +"fg.it\0badajoz.museum\0" +"for-better.biz\0" +"mil.jo\0" +"midsund.no\0co.rs\0" +"shimane.shimane.jp\0" +"hi.us\0" +"d\xc3\xb8nna.no\0" +"york.museum\0spydeberg.no\0co.rw\0" +"hamatonbetsu.hokkaido.jp\0" +"mil.kg\0" +"!nic.ar\0kagami.kochi.jp\0dynalias.com\0" +"civilaviation.aero\0modelling.aero\0uz.ua\0" +"nanao.ishikawa.jp\0" +"mil.km\0" +"modum.no\0" +"badaddja.no\0" +"mil.kr\0co.st\0" +"oi.kanagawa.jp\0" +"author.aero\0cr.it\0" +"co.th\0" +"versailles.museum\0co.sz\0co.tj\0" +"encyclopedic.museum\0" +"mil.kz\0grong.no\0" +"co.tm\0" +"minamiboso.chiba.jp\0lib.ma.us\0servebbs.org\0" +"kiev.ua\0" +"journalist.aero\0co.ua\0" +"te.ua\0" +"co.tt\0" +"co.ug\0" +"mil.lv\0" +"mil.mg\0" +"co.tz\0" +"council.aero\0ibaraki.jp\0" +"family.museum\0" +"rc.it\0" +"hl.no\0ostrowiec.pl\0co.us\0" +"!statecouncil.om\0co.ve\0" +"!congresodelalengua3.ar\0nalchik.ru\0" +"mil.mv\0halsa.no\0" +"co.vi\0" +"takayama.gifu.jp\0fujishiro.ibaraki.jp\0os.hordaland.no\0sirdal.no\0co.uz\0" +"fj.cn\0mil.my\0" +"kazuno.akita.jp\0" +"unzen.nagasaki.jp\0mizuho.tokyo.jp\0indianapolis.museum\0" +"from-id.com\0" +"hurum.no\0" +"mil.no\0" +"pordenone.it\0" +"kvam.no\0" +"mutsuzawa.chiba.jp\0artdeco.museum\0" +"hamada.shimane.jp\0philadelphia.museum\0" +"kudoyama.wakayama.jp\0" +"mishima.shizuoka.jp\0minami-alps.yamanashi.jp\0k12.mi.us\0" +"nanmoku.gunma.jp\0" +"ashikaga.tochigi.jp\0" +"from-wv.com\0" +"\xe5\x8f\xb0\xe6\xb9\xbe\0" +"kawatana.nagasaki.jp\0" +"oslo.no\0" +"fukuchiyama.kyoto.jp\0" +"kisofukushima.nagano.jp\0" +"okayama.jp\0mil.pe\0" +"mil.ph\0" +"mi.it\0" +"russia.museum\0" +"abo.pa\0mil.pl\0" +"nobeoka.miyazaki.jp\0shinjuku.tokyo.jp\0" +"ok.us\0" +"7.bg\0mil.qa\0" +"verran.no\0suwalki.pl\0" +"onjuku.chiba.jp\0szczytno.pl\0lv.ua\0" +"mitou.yamaguchi.jp\0mil.py\0" +"chita.ru\0" +"hirono.iwate.jp\0" +"embroidery.museum\0" +"mad.museum\0" +"kawaue.gifu.jp\0" +"shiiba.miyazaki.jp\0" +"asnes.no\0" +"media.hu\0sande.vestfold.no\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0" +"lib.de.us\0" +"erotika.hu\0ski.museum\0" +"parti.se\0on-the-web.tv\0" +"works.aero\0gb.com\0dyndns-free.com\0" +"biz.bb\0firm.ht\0rifu.miyagi.jp\0watari.miyagi.jp\0" +"takagi.nagano.jp\0biz.at\0" +"surgeonshall.museum\0skanit.no\0" +"florida.museum\0" +"kani.gifu.jp\0" +"biz.az\0mil.ru\0" +"isesaki.gunma.jp\0" +"firm.in\0yusui.kagoshima.jp\0mil.rw\0" +"mil.sh\0" +"inderoy.no\0" +"software.aero\0kushiro.hokkaido.jp\0pyatigorsk.ru\0" +"bindal.no\0" +"sakegawa.yamagata.jp\0" +"ninohe.iwate.jp\0yonago.tottori.jp\0" +"mil.st\0" +"galsa.no\0" +"mil.sy\0" +"salvadordali.museum\0mil.tj\0" +"mil.tm\0" +"for-our.info\0" +"shikama.miyagi.jp\0mil.to\0" +"yaotsu.gifu.jp\0" +"niki.hokkaido.jp\0" +"hikawa.shimane.jp\0stat.no\0" +"joetsu.niigata.jp\0mil.tw\0" +"firm.co\0bruxelles.museum\0endofinternet.org\0" +"asahi.mie.jp\0mil.tz\0" +"sor-varanger.no\0dynathome.net\0" +"skoczow.pl\0" +"shonai.yamagata.jp\0" +"stadt.museum\0" +"roma.it\0" +"shijonawate.osaka.jp\0" +"mil.vc\0" +"mil.ve\0" +"honai.ehime.jp\0" +"muko.kyoto.jp\0" +"karpacz.pl\0mil.uy\0us.com\0" +"k12.az.us\0" +"\xe6\x95\x99\xe8\x82\xb2.hk\0" +"monza-brianza.it\0shingo.aomori.jp\0toshima.tokyo.jp\0prochowice.pl\0" +"kuju.oita.jp\0cr.ua\0" +"eid.no\0" +"kyowa.hokkaido.jp\0" +"higashikagura.hokkaido.jp\0otari.nagano.jp\0kiyama.saga.jp\0" +"rochester.museum\0" +"fuchu.hiroshima.jp\0" +"hasuda.saitama.jp\0" +"ap.it\0" +"fm.br\0dagestan.ru\0" +"gs.va.no\0" +"shinshiro.aichi.jp\0lowicz.pl\0" +"taiwa.miyagi.jp\0yekaterinburg.ru\0" +"wielun.pl\0" +"geelvinck.museum\0" +"slattum.no\0" +"utsunomiya.tochigi.jp\0" +"bern.museum\0rivne.ua\0" +"miners.museum\0" +"com.ac\0kraanghke.no\0" +"pa.it\0davvenj\xc3\xa1rga.no\0" +"com.af\0tsushima.aichi.jp\0" +"com.ag\0asmatart.museum\0" +"com.ai\0" +"etnedal.no\0" +"com.al\0snaase.no\0media.pl\0" +"sula.no\0vanylven.no\0" +"com.an\0" +"torino.museum\0" +"helsinki.museum\0" +"com.ba\0" +"com.bb\0" +"kimitsu.chiba.jp\0" +"tarama.okinawa.jp\0" +"com.au\0" +"com.aw\0\xe4\xb8\xaa\xe4\xba\xba.hk\0aremark.no\0" +"com.bh\0vestre-slidre.no\0" +"com.bi\0goto.nagasaki.jp\0higashisumiyoshi.osaka.jp\0" +"com.az\0" +"rollag.no\0" +"bc.ca\0" +"com.bm\0oceanographique.museum\0" +"mesaverde.museum\0mi.th\0" +"com.bo\0gs.aa.no\0" +"jerusalem.museum\0" +"com.br\0is-a-green.com\0" +"com.bs\0nagasaki.jp\0" +"com.bt\0" +"nishiwaki.hyogo.jp\0" +"verbania.it\0takarazuka.hyogo.jp\0georgia.museum\0" +"com.by\0com.ci\0" +"com.bz\0uchinomi.kagawa.jp\0" +"ehime.jp\0" +"shinjo.nara.jp\0" +"com.cn\0shiki.saitama.jp\0" +"com.co\0cc.wv.us\0" +"xxx\0" +"tychy.pl\0nkz.ru\0" +"tobe.ehime.jp\0" +"strand.no\0" +"biz.ki\0ivanovo.ru\0" +"com.cu\0com.de\0" +"s\xc3\xa1l\xc3\xa1t.no\0" +"hichiso.gifu.jp\0nirasaki.yamanashi.jp\0flesberg.no\0" +"mi.us\0k12.il.us\0" +"jgora.pl\0sumy.ua\0" +"com.dm\0izumo.shimane.jp\0" +"com.do\0hiranai.aomori.jp\0" +"jor.br\0!city.sendai.jp\0" +"omaezaki.shizuoka.jp\0" +"turin.it\0nissedal.no\0skierva.no\0" +"com.ec\0" +"com.ee\0" +"cc.va.us\0" +"com.eg\0nagano.nagano.jp\0" +"halloffame.museum\0leka.no\0" +"com.dz\0morioka.iwate.jp\0" +"lesja.no\0" +"vibovalentia.it\0nishi.osaka.jp\0kg.kr\0" +"!city.kawasaki.jp\0flanders.museum\0" +"com.es\0florence.it\0" +"kumano.hiroshima.jp\0from-sd.com\0" +"mo.cn\0yamagata.nagano.jp\0!nic.tr\0" +"yamanashi.jp\0" +"is-with-theband.com\0" +"canada.museum\0" +"bardu.no\0tr\xc3\xb8gstad.no\0" +"fm.it\0biz.mv\0bialowieza.pl\0!nic.uk\0" +"com.fr\0vs.it\0kunohe.iwate.jp\0aoki.nagano.jp\0biz.mw\0" +"izumi.osaka.jp\0koeln.museum\0" +"gulen.no\0ruovat.no\0" +"agr.br\0com.ge\0nes.buskerud.no\0" +"fukudomi.saga.jp\0" +"dnsdojo.com\0" +"com.gh\0hitachi.ibaraki.jp\0selfip.biz\0" +"com.gi\0nakagawa.nagano.jp\0" +"biz.nr\0" +"com.gn\0nishiaizu.fukushima.jp\0" +"com.gp\0bearalvahki.no\0" +"m\xc3\xa5lselv.no\0kchr.ru\0" +"com.gr\0tosashimizu.kochi.jp\0" +"tas.gov.au\0nosegawa.nara.jp\0" +"com.gt\0kanan.osaka.jp\0oyer.no\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0" +"shinagawa.tokyo.jp\0" +"com.gy\0tn.it\0kyoto.jp\0kurume.fukuoka.jp\0" +"yk.ca\0" +"com.hk\0itako.ibaraki.jp\0" +"hammarfeasta.no\0" +"broker.aero\0com.hn\0shinshinotsu.hokkaido.jp\0" +"k12.ri.us\0" +"czeladz.pl\0" +"dovre.no\0" "com.hr\0" -"fg.it\0stathelle.no\0defense.tn\0" -"com.ht\0" -"qld.gov.au\0*.nz\0" -"davvenj\xc3\xa1rga.no\0*.om\0" -"vang.no\0" -"*.kumamoto.jp\0" -"vercelli.it\0usenet.pl\0" -"com.io\0stalbans.museum\0" -"com.iq\0" -"*.pg\0" -"com.is\0klabu.no\0skiptvet.no\0" -"med.ht\0field.museum\0" -"gr.it\0gj\xc3\xb8vik.no\0tromsa.no\0lib.mi.us\0" -"ca.na\0" -"hagebostad.no\0k12.ma.us\0" -"*.qa\0" -"*.niigata.jp\0" -"monzaebrianza.it\0com.jo\0comunica\xc3\xa7\xc3\xb5""es.museum\0" -"gr.jp\0" -"ballangen.no\0*.py\0" -"scienceandindustry.museum\0" -"nuoro.it\0com.kg\0" +"com.ht\0ebino.miyazaki.jp\0" +"celtic.museum\0" +"fujimi.saitama.jp\0biz.pk\0dyndns-at-home.com\0" +"asn.au\0biz.pl\0" +"kanzaki.saga.jp\0" +"nannestad.no\0" +"yachiyo.ibaraki.jp\0" +"kaizuka.osaka.jp\0r\xc3\xa5holt.no\0biz.pr\0is-into-games.com\0" +"\xe9\xa6\x99\xe6\xb8\xaf\0" +"com.io\0" +"ri.it\0komoro.nagano.jp\0" +"com.iq\0gyokuto.kumamoto.jp\0googleapis.com\0" +"com.is\0" +"issmarterthanyou.com\0" +"de.us\0" +"castle.museum\0!parliament.uk\0" +"shimodate.ibaraki.jp\0" +"g\xc3\xa1ivuotna.no\0" +"kviteseid.no\0" +"yabu.hyogo.jp\0naamesjevuemie.no\0" +"com.jo\0science-fiction.museum\0zaporizhzhe.ua\0" +"tanabe.kyoto.jp\0" +"aejrie.no\0" +"sakae.nagano.jp\0is-a-nurse.com\0" +"moriguchi.osaka.jp\0stjordalshalsen.no\0" +"pd.it\0ot.it\0com.kg\0tokke.no\0" "com.ki\0" -"im.it\0idv.tw\0" -"*.akita.jp\0com.km\0r\xc3\xb8ros.no\0sopot.pl\0" -"!pref.yamanashi.jp\0" +"bibai.hokkaido.jp\0tsk.ru\0" +"fm.no\0" +"com.km\0kirovograd.ua\0" +"b.bg\0tomi.nagano.jp\0" "com.kp\0" -"!pref.kochi.jp\0com.la\0" +"ballooning.aero\0com.la\0" "com.lb\0" -"com.lc\0stjordalshalsen.no\0sigdal.no\0cc.nm.us\0" -"samnanger.no\0" -"drobak.no\0" -"vt.it\0" -"catering.aero\0com.ky\0" -"com.kz\0cc.ca.us\0" -"com.lk\0" -"grosseto.it\0mosvik.no\0" -"namsskogan.no\0" -"loten.no\0" -"chirurgiens-dentistes.fr\0" -"com.lr\0bremanger.no\0" -"gs.cn\0" -"com.lv\0lib.co.us\0" -"com.mg\0" -"passenger-association.aero\0" -"com.ly\0yekaterinburg.ru\0" -"vladivostok.ru\0" -"com.mk\0beeldengeluid.museum\0" +"com.lc\0lutsk.ua\0" +"yatomi.aichi.jp\0" +"virtuel.museum\0firm.ro\0" +"navigation.aero\0b.br\0com.ky\0" +"com.kz\0" +"tenei.fukushima.jp\0chungnam.kr\0com.lk\0" +"mo.it\0" +"dnsdojo.org\0" +"com.lr\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0" +"opoczno.pl\0" +"pa.us\0" +"saga.jp\0kvinesdal.no\0biz.tj\0" +"com.lv\0" +"gose.nara.jp\0com.mg\0" +"nagaokakyo.kyoto.jp\0tcm.museum\0" +"com.ly\0" +"kawasaki.miyagi.jp\0cieszyn.pl\0" +"com.mk\0" "com.ml\0" -"art.pl\0" -"com.mo\0" -"britishcolumbia.museum\0tx.us\0" -"com.na\0sakhalin.ru\0*.sv\0" -"mc.it\0" -"amsterdam.museum\0udm.ru\0" +"com.mo\0siljan.no\0biz.tt\0" +"akita.jp\0" +"com.na\0cc.wy.us\0" +"riodejaneiro.museum\0marine.ru\0" +"averoy.no\0" "com.mu\0" -"com.mv\0com.nf\0" -"com.mw\0com.ng\0il.us\0" -"geometre-expert.fr\0com.mx\0" -"med.ly\0com.my\0" -"ag.it\0" -"*.tr\0" -"!pref.oita.jp\0" -"hoyanger.no\0skedsmo.no\0" -"com.nr\0turystyka.pl\0" -"koebenhavn.museum\0" -"quebec.museum\0" -"stord.no\0*.uk\0" -"act.au\0" -"br.it\0cb.it\0gyeonggi.kr\0jobs.tt\0lib.hi.us\0" -"*.ve\0" -"*.saga.jp\0wildlife.museum\0com.pa\0" -"monzabrianza.it\0sciencehistory.museum\0stange.no\0oskol.ru\0principe.st\0*.uy\0" -"plaza.museum\0com.pe\0" -"com.pf\0" -"eigersund.no\0" +"com.mv\0com.nf\0tolga.no\0" +"com.mw\0com.ng\0vladimir.ru\0" +"com.mx\0deatnu.no\0" +"com.my\0" +"mihara.kochi.jp\0" +"hyllestad.no\0melhus.no\0lib.co.us\0" +"eng.br\0" +"mashike.hokkaido.jp\0com.nr\0" +"minamiminowa.nagano.jp\0" +"moroyama.saitama.jp\0moscow.museum\0" +"phoenix.museum\0vladikavkaz.ru\0from-nh.com\0" +"jan-mayen.no\0" +"granvin.no\0khv.ru\0" +"cc.ut.us\0" +"mj\xc3\xb8ndalen.no\0biz.vn\0" +"accident-investigation.aero\0v\xc3\xa5ler.hedmark.no\0" +"kisosaki.mie.jp\0" +"nb.ca\0" +"firm.nf\0" +"biz\0doshi.yamanashi.jp\0com.pa\0" +"lib.ar.us\0dyndns-ip.com\0" +"fukushima.fukushima.jp\0" +"com.pe\0" +"misasa.tottori.jp\0fuossko.no\0com.pf\0" "com.ph\0" -"manx.museum\0marylhurst.museum\0" -"md.ci\0pi.it\0schweiz.museum\0com.pk\0" -"grp.lk\0fr\xc3\xb8ya.no\0com.pl\0press.se\0" -"us.com\0" -"b.bg\0cremona.it\0communication.museum\0art.sn\0" -"med.pa\0" -"com.pr\0" +"tokashiki.okinawa.jp\0\xc4\x8d\xc3\xa1hcesuolo.no\0" +"moriyama.shiga.jp\0museumcenter.museum\0hof.no\0vegarshei.no\0com.pk\0" +"com.pl\0" +"com.qa\0" +"imperia.it\0com.pr\0" "com.ps\0" -"com.pt\0" -"k12.in.us\0" -"ah.cn\0bahcavuotna.no\0" -"sondrio.it\0arkhangelsk.ru\0" -"cargo.aero\0" -"council.aero\0" -"museum.mv\0hattfjelldal.no\0spydeberg.no\0med.pl\0" -"niepce.museum\0museum.mw\0" -"anthropology.museum\0" -"pharmacien.fr\0smola.no\0" -"fin.ec\0" -"selbu.no\0" -"workinggroup.aero\0nm.us\0" -"museum.no\0com.re\0" -"cc.vt.us\0" -"village.museum\0" -"ca.us\0" -"*.sapporo.jp\0" -"teramo.it\0" +"vv.it\0com.pt\0" +"ayagawa.kagawa.jp\0davvenjarga.no\0" +"iwakuni.yamaguchi.jp\0com.py\0k12.dc.us\0" +"royken.no\0" +"pri.ee\0nishikata.tochigi.jp\0" +"urawa.saitama.jp\0" +"equipment.aero\0sweden.museum\0" +"kyowa.akita.jp\0guovdageaidnu.no\0" +"ogaki.gifu.jp\0" +"com.re\0" +"emergency.aero\0" +"ikusaka.nagano.jp\0" +"hirosaki.aomori.jp\0" +"jobs.tt\0" +"maryland.museum\0" "com.ro\0" -"*.ye\0" -"com.sa\0" -"com.sb\0" -"so.it\0com.sc\0" -"jolster.no\0com.sd\0" +"com.sa\0is-found.org\0" +"usa.oita.jp\0com.sb\0" +"frogn.no\0com.sc\0" +"com.sd\0" "com.ru\0" "com.rw\0com.sg\0" -"sydney.museum\0" -"sa.edu.au\0" -"tom.ru\0" -"com.sl\0*.za\0" -"\xe7\xbd\x91\xe7\xb5\xa1.hk\0naturbruksgymn.se\0com.sn\0" -"assedic.fr\0com.so\0" -"!pref.mie.jp\0*.yu\0" -"med.sa\0" -"newspaper.museum\0holmestrand.no\0dnepropetrovsk.ua\0" -"christiansburg.museum\0roan.no\0" -"pesaro-urbino.it\0med.sd\0com.st\0" -"s\xc3\xb8gne.no\0" -"nuernberg.museum\0" -"*.zm\0" -"com.sy\0" -"*.nagano.jp\0com.tj\0" -"nt.gov.au\0news.hu\0paderborn.museum\0" -"boston.museum\0" -"com.tn\0" +"inawashiro.fukushima.jp\0com.sh\0" +"yn.cn\0" +"com.sl\0" +"togakushi.nagano.jp\0unazuki.toyama.jp\0com.sn\0" +"porsanger.no\0com.so\0" +"av.it\0" +"gc.ca\0okinawa.jp\0" +"com.st\0" +"asn.lv\0namdalseid.no\0tn.us\0" +"amber.museum\0com.sy\0broke-it.net\0podzone.net\0" +"net.ac\0com.tj\0" +"selfip.com\0" +"net.ae\0ofunato.iwate.jp\0shichikashuku.miyagi.jp\0" +"net.af\0yoita.niigata.jp\0com.tm\0" +"net.ag\0com.tn\0dynalias.net\0" "com.to\0" -"broadcast.museum\0" +"net.ai\0eidsberg.no\0" "com.ua\0" -"*.zw\0" -"baikal.ru\0" -"bykle.no\0com.tt\0" -"verdal.no\0" -"roros.no\0" -"fi.cr\0carboniaiglesias.it\0chuvashia.ru\0com.tw\0" -"k12.ca.us\0" -"eidsvoll.no\0" -"*.ishikawa.jp\0" -"dolls.museum\0" -"naval.museum\0" -"karasjok.no\0tysvar.no\0" -"bielawa.pl\0com.vc\0" -"svalbard.no\0deatnu.no\0rnd.ru\0" -"grandrapids.museum\0" -"bauern.museum\0k12.pr.us\0" -"press.ma\0" -"*.kagawa.jp\0fribourg.museum\0przeworsk.pl\0com.vi\0" -"com.uz\0" -"babia-gora.pl\0" -"com.vn\0" -"med.pro\0" -"suedtirol.it\0kursk.ru\0" -"bonn.museum\0" -"lt.it\0" -"design.aero\0microlight.aero\0americanantiques.museum\0meland.no\0" -"insurance.aero\0aarborte.no\0" -"kh.ua\0" -"macerata.it\0architecture.museum\0" -"rovigo.it\0rawa-maz.pl\0" -"store.nf\0levanger.no\0" -"b\xc3\xa1jddar.no\0" -"not.br\0" -"com.ws\0" -"!pref.kagawa.jp\0" -"!omanpost.om\0" -"vt.us\0" -"gs.ah.no\0vladikavkaz.ru\0" -"no.it\0" -"in.na\0szkola.pl\0a.se\0" -"aid.pl\0" -"workshop.museum\0vegarshei.no\0" -"sund.no\0" -"bs.it\0flora.no\0" -"agriculture.museum\0" -"koeln.museum\0" -"minnesota.museum\0k12.il.us\0" -"froya.no\0" -"aeroport.fr\0" -"davvenjarga.no\0zgora.pl\0ivano-frankivsk.ua\0" -"*.gunma.jp\0" -"amot.no\0" -"mus.br\0chungbuk.kr\0" -"ggf.br\0lorenskog.no\0" -"jeonbuk.kr\0" -"k12.vi.us\0" -"c.bg\0sande.more-og-romsdal.no\0" -"perugia.it\0" -"massa-carrara.it\0" -"michigan.museum\0" -"archaeology.museum\0mosj\xc3\xb8""en.no\0czest.pl\0koenig.ru\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" -"mobi.tt\0" -"kraanghke.no\0" -"cc.in.us\0" -"re.it\0lib.vt.us\0" -"dell-ogliastra.it\0" -"s\xc3\xb8mna.no\0" -"k12.wv.us\0" -"gok.pk\0fh.se\0" -"luzern.museum\0" -"fi.it\0swidnica.pl\0" -"cbg.ru\0" -"latina.it\0" -"vibovalentia.it\0" -"modum.no\0" -"safety.aero\0" -"sp.it\0" -"science.museum\0ah.no\0" -"norddal.no\0" -"cc.na\0" -"re.kr\0" -"dielddanuorri.no\0" -"force.museum\0" -"torino.it\0cc.md.us\0" -"artanddesign.museum\0pisz.pl\0" -"olsztyn.pl\0" -"unsa.ba\0rade.no\0vinnica.ua\0" -"in.rs\0astrakhan.ru\0" -"sogne.no\0" -"homebuilt.aero\0" -"polkowice.pl\0" -"hole.no\0health.vn\0" -"fj.cn\0" -"davvesiida.no\0" -"vic.au\0" -"kongsberg.no\0" -"pub.sa\0" -"vv.it\0" -"!pref.tottori.jp\0" -"*.sendai.jp\0in.th\0" -"lib.pa.us\0" -"chiropractic.museum\0" -"mobi.na\0aca.pro\0" -"konyvelo.hu\0sciencecenters.museum\0" -"he.cn\0" -"in.ua\0" -"!city.nagoya.jp\0" -"muenchen.museum\0" -"psi.br\0" -"maryland.museum\0" -"!statecouncil.om\0" -"tr\xc3\xa6na.no\0" -"!pref.yamagata.jp\0jewishart.museum\0" -"lu.it\0me.it\0" -"chel.ru\0" -"tatarstan.ru\0" -"adult.ht\0in.us\0" -"kafjord.no\0" -"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0" -"net.ac\0k12.ec\0" -"net.ae\0bashkiria.ru\0" -"net.af\0!omantel.om\0" -"net.ag\0" -"net.ai\0" -"!pref.toyama.jp\0" -"net.al\0timekeeping.museum\0" -"net.an\0design.museum\0fin.tn\0" -"ethnology.museum\0" -"perso.ht\0asker.no\0b.se\0" -"net.ba\0" -"net.bb\0flanders.museum\0" -"mincom.tn\0" -"frana.no\0" -"bt.it\0" -"net.bh\0" -"auto.pl\0" +"lugansk.ua\0" +"net.al\0" +"nishihara.kumamoto.jp\0com.tt\0" +"net.an\0cymru.museum\0heritage.museum\0" +"sarpsborg.no\0com.tw\0com.ug\0" +"net.ba\0higashiyamato.tokyo.jp\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" +"net.bb\0pg.it\0" +"net.au\0" +"meiwa.gunma.jp\0" +"as.us\0" +"net.bh\0ri.us\0" +"e.bg\0" "net.az\0" -"treviso.it\0" -"war.museum\0" +"roan.no\0" +"com.vc\0\xe5\x8f\xb0\xe7\x81\xa3\0" "net.bm\0" -"langevag.no\0m\xc3\xa5lselv.no\0" +"com.ve\0" "net.bo\0" -"gol.no\0" -"folkebibl.no\0" -"net.br\0" -"net.bs\0troandin.no\0saotome.st\0lib.tn.us\0" -"md.us\0k12.ut.us\0" -"d.bg\0cambridge.museum\0\xc3\xa5s.no\0" +"net.br\0com.uy\0com.vi\0fuettertdasnetz.de\0" +"net.bs\0tran\xc3\xb8y.no\0com.uz\0" +"net.bt\0higashiomi.shiga.jp\0kms.ru\0" +"accident-prevention.aero\0from-ca.com\0" +"ozora.hokkaido.jp\0com.vn\0dyndns-server.com\0" "net.ci\0" "net.bz\0" -"sch.ae\0undersea.museum\0odda.no\0" +"livinghistory.museum\0" "net.cn\0" -"net.co\0c.la\0" -"gliwice.pl\0" -"aurskog-h\xc3\xb8land.no\0" -"andria-trani-barletta.it\0" -"net.cu\0loab\xc3\xa1t.no\0" -"rep.kp\0" -"\xe7\xbb\x84\xe7\xb9\x94.hk\0" -"gallery.museum\0" -"\xc3\xb8rland.no\0" -"store.ro\0" -"net.dm\0" -"somna.no\0" -"hemnes.no\0" -"ringebu.no\0k12.ky.us\0" -"net.ec\0" -"dn.ua\0" -"tarnobrzeg.pl\0" -"soc.lk\0" -"romsa.no\0" -"bamble.no\0" -"net.dz\0lutsk.ua\0" -"barlettatraniandria.it\0ta.it\0countryestate.museum\0" -"kaszuby.pl\0" -"*.yamaguchi.jp\0cranbrook.museum\0store.st\0" -"southcarolina.museum\0lib.md.us\0" -"textile.museum\0" -"cheltenham.museum\0hurum.no\0" -"*.oita.jp\0" -"shop.ht\0cc.me.us\0" -"shop.hu\0turin.it\0" -"louvre.museum\0" -"k12.ar.us\0" -"consulting.aero\0" -"gv.ao\0" -"sauherad.no\0" -"gv.at\0net.ge\0" -"ostre-toten.no\0lib.ok.us\0" -"net.gg\0pilots.museum\0" -"2000.hu\0geology.museum\0" -"net.gn\0" -"mazowsze.pl\0bir.ru\0" +"net.co\0ryuoh.shiga.jp\0" +"krokstadelva.no\0" +"lib.wa.us\0" +"cat\0" +"oz.au\0net.cu\0from-sc.com\0" +"chocolate.museum\0" +"sch.ae\0" +"iwate.jp\0" +"museum.tt\0com.ws\0" +"net.dm\0selje.no\0is-very-good.org\0" +"net.do\0" +"net.ec\0gildesk\xc3\xa5l.no\0" +"moriyoshi.akita.jp\0rl.no\0mo.us\0blogspot.re\0" +"net.eg\0" +"hachioji.tokyo.jp\0childrens.museum\0" +"shizuoka.jp\0" +"net.dz\0" +"minamiizu.shizuoka.jp\0" +"is-a-patsfan.org\0" +"inagawa.hyogo.jp\0blogspot.ro\0" +"yamagata.jp\0gsm.pl\0" +"suldal.no\0dlugoleka.pl\0blogspot.se\0" +"blogspot.sg\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0dnsalias.com\0" +"kamikawa.hokkaido.jp\0kamoenai.hokkaido.jp\0" +"blogspot.sk\0" +"siracusa.it\0k12.wi.us\0" +"oksnes.no\0\xed\x95\x9c\xea\xb5\xad\0" +"vardo.no\0starachowice.pl\0" +"net.ge\0ishinomaki.miyagi.jp\0oji.nara.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0blogspot.td\0" +"trustee.museum\0" +"net.gg\0" +"misato.saitama.jp\0" +"ppg.br\0" +"net.gn\0chikuho.fukuoka.jp\0" "net.gp\0" -"net.gr\0" -"oxford.museum\0" -"per.la\0" -"eastafrica.museum\0" -"meeres.museum\0" -"net.gy\0*.shizuoka.jp\0" -"\xe5\x95\x86\xe6\xa5\xad.tw\0" -"net.hk\0" +"osoyro.no\0dyndns-office.com\0" +"net.gr\0higashikawa.hokkaido.jp\0" +"net.gt\0monzabrianza.it\0mr.no\0eidsvoll.no\0" +"aridagawa.wakayama.jp\0" +"sykkylven.no\0" +"minamiaiki.nagano.jp\0blogspot.tw\0" +"net.gy\0naturhistorisches.museum\0" +"net.hk\0zaporizhzhia.ua\0" +"mifune.kumamoto.jp\0" "net.hn\0" -"philadelphiaarea.museum\0" -"osen.no\0" +"kahoku.yamagata.jp\0" +"asakawa.fukushima.jp\0" +"barlettatraniandria.it\0blogspot.mr\0" "net.ht\0net.id\0" -"fundacio.museum\0" -"j\xc3\xb8rpeland.no\0" -"\xe6\x95\x99\xe8\x82\xb2.hk\0" -"divtasvuodna.no\0" -"student.aero\0sch.gg\0net.im\0" -"\xe7\xbd\x91\xe7\xbb\x9c.cn\0net.in\0" +"b.se\0" +"ud.it\0tsuchiura.ibaraki.jp\0naturalhistory.museum\0" +"matsushige.tokushima.jp\0nanto.toyama.jp\0from-al.com\0" +"blogspot.mx\0" +"nagakute.aichi.jp\0zamami.okinawa.jp\0" +"net.im\0ikawa.akita.jp\0lib.ne.us\0blogspot.nl\0" +"net.in\0" +"yokkaichi.mie.jp\0" +"blogspot.no\0" "net.iq\0" "net.ir\0" "net.is\0" "net.je\0" -"kepno.pl\0lapy.pl\0" -"per.nf\0" -"gov\0*.shimane.jp\0" -"artcenter.museum\0" -"k\xc3\xa5""fjord.no\0" -"net.jo\0" -"eu.int\0" -"c.se\0" +"from.hr\0cc.oh.us\0" +"biratori.hokkaido.jp\0" +"sch.gg\0" +"taxi.aero\0" +"bi.it\0treviso.it\0" +"ro.it\0" +"mine.nu\0" +"net.jo\0tenri.nara.jp\0alvdal.no\0" +"ikeda.hokkaido.jp\0here-for-more.info\0" +"owani.aomori.jp\0" +"uri.arpa\0" +"tsukui.kanagawa.jp\0bryne.no\0" +"shibetsu.hokkaido.jp\0grozny.ru\0" +"jewelry.museum\0" "net.kg\0" -"ce.it\0net.ki\0" -"sch.id\0os.hedmark.no\0" -"columbus.museum\0" -"arteducation.museum\0" +"net.ki\0" +"sakura.chiba.jp\0nittedal.no\0" +"kawazu.shizuoka.jp\0" "net.kn\0" -"kr.com\0" -"net.la\0bushey.museum\0cc.gu.us\0" -"net.lb\0" +"net.la\0hoylandet.no\0" +"net.lb\0\xc3\xa5mli.no\0" "net.lc\0" -"gs.bu.no\0" -"e164.arpa\0" -"chieti.it\0labour.museum\0" -"sch.ir\0creation.museum\0krodsherad.no\0" -"net.ky\0" -"net.kz\0me.us\0" -"e.bg\0sch.je\0net.lk\0" -"zlg.br\0suwalki.pl\0" -"\xe5\x80\x8b\xe4\xba\xba.hk\0net.ma\0" -"net.lr\0" -"sch.jo\0notaires.km\0net.me\0" -"net.lv\0karate.museum\0" -"net.ly\0karm\xc3\xb8y.no\0" -"rg.it\0" +"mihama.fukui.jp\0yamagata.gifu.jp\0blogspot.pt\0" +"sch.id\0" +"aca.pro\0" +"sanjo.niigata.jp\0net.ky\0" +"tsukumi.oita.jp\0net.kz\0oceanographic.museum\0k12.nm.us\0" +"h.bg\0net.lk\0" +"miharu.fukushima.jp\0" +"aknoluokta.no\0" +"net.ma\0" +"tw.cn\0net.lr\0" +"kamikitayama.nara.jp\0miyashiro.saitama.jp\0chernihiv.ua\0" +"ichikawa.hyogo.jp\0comunica\xc3\xa7\xc3\xb5""es.museum\0" +"sch.ir\0oki.fukuoka.jp\0yoshioka.gunma.jp\0akkeshi.hokkaido.jp\0net.me\0kazimierz-dolny.pl\0blogspot.it\0" +"net.lv\0" +"sch.je\0yoshida.saitama.jp\0" +"net.ly\0" "net.mk\0" -"net.ml\0evenes.no\0" -"ngo.lk\0net.mo\0egyptian.museum\0" -"marine.ru\0" -"realestate.pl\0" +"net.ml\0" +"museum.mv\0" +"hokkaido.jp\0net.mo\0museum.mw\0" +"\xc3\xa1lt\xc3\xa1.no\0vestnes.no\0" +"blogspot.jp\0" +"sch.jo\0" +"yokoze.saitama.jp\0stathelle.no\0blogspot.com.ar\0" "net.mu\0" "net.mv\0net.nf\0" -"net.mw\0net.ng\0gda.pl\0" +"adult.ht\0ne.jp\0coldwar.museum\0net.mw\0net.ng\0museum.no\0blogspot.com.au\0" "net.mx\0" -"freemasonry.museum\0net.my\0enebakk.no\0" -"karlsoy.no\0" -"\xe7\xbd\x91\xe7\xbb\x9c.hk\0\xc3\xb8rskog.no\0" -"randaberg.no\0" -"club.aero\0" -"certification.aero\0sr.it\0" -"center.museum\0so.gov.pl\0" -"caa.aero\0" -"sch.lk\0tvedestrand.no\0" +"skydiving.aero\0net.my\0" +"nakasatsunai.hokkaido.jp\0" +"undersea.museum\0" +"kainan.wakayama.jp\0sebastopol.ua\0cc.hi.us\0" +"gamagori.aichi.jp\0" +"gyeongbuk.kr\0" "net.nr\0" -"luroy.no\0" -"aukra.no\0s\xc3\xa1lat.no\0lib.me.us\0" -"ddr.museum\0" -"york.museum\0stryn.no\0k12.nm.us\0" -"per.sg\0" -"judaica.museum\0" -"verona.it\0" -"agdenes.no\0" -"cng.br\0sch.ly\0" -"net.pa\0" -"author.aero\0" -"naturalhistory.museum\0steiermark.museum\0bu.no\0" -"sn\xc3\xa5sa.no\0net.pe\0" -"net.ph\0" -"savannahga.museum\0batsfjord.no\0lib.oh.us\0" +"jorpeland.no\0blogspot.kr\0" +"bellevue.museum\0blogspot.com.br\0" +"kanegasaki.iwate.jp\0" +"ne.kr\0" +"aosta.it\0mima.tokushima.jp\0" +"pro.az\0km.ua\0" +"nakanoto.ishikawa.jp\0sch.lk\0" +"nome.pt\0" +"nagareyama.chiba.jp\0himeji.hyogo.jp\0denmark.museum\0" +"echizen.fukui.jp\0net.pa\0\xe4\xb8\xad\xe5\x9b\xbd\0from-oh.com\0" +"kongsvinger.no\0ringebu.no\0" +"tsukigata.hokkaido.jp\0m\xc3\xa5s\xc3\xb8y.no\0" +"pro.br\0net.pe\0bar.pro\0" +"viterbo.it\0heroy.more-og-romsdal.no\0" +"omihachiman.shiga.jp\0labor.museum\0" +"toho.fukuoka.jp\0tome.miyagi.jp\0net.ph\0" "net.pk\0" -"net.pl\0" -"net.pn\0" -"washingtondc.museum\0" +"sch.ly\0net.pl\0" +"saijo.ehime.jp\0" +"shiojiri.nagano.jp\0net.pn\0" +"newport.museum\0\xe4\xb8\xad\xe5\x9c\x8b\0" +"\xe6\x95\x8e\xe8\x82\xb2.hk\0net.qa\0" "net.pr\0" "net.ps\0" "net.pt\0" -"nordkapp.no\0" -"emergency.aero\0krokstadelva.no\0" -"satx.museum\0ngo.ph\0omsk.ru\0" -"texas.museum\0" -"ngo.pl\0" -"mantova.it\0gu.us\0" -"!pref.shiga.jp\0isa.us\0" -"usa.museum\0" -"gb.net\0k12.vi\0" -"iveland.no\0" -"tempio-olbia.it\0" +"akrehamn.no\0" +"oshu.iwate.jp\0lincoln.museum\0fjell.no\0" +"selfip.info\0" +"hol.no\0" +"net.py\0" +"blogspot.fi\0" +"kakegawa.shizuoka.jp\0cc.co.us\0" +"com\0schoenbrunn.museum\0" +"microlight.aero\0" +"shimogo.fukushima.jp\0" +"leirvik.no\0" +"veg\xc3\xa5rshei.no\0blogspot.fr\0" +"blogspot.com.es\0" +"pro.ec\0" +"civilisation.museum\0" +"g\xc3\xa1\xc5\x8bgaviika.no\0" +"nago.okinawa.jp\0" +"station.museum\0" +"akashi.hyogo.jp\0ichinohe.iwate.jp\0" +"tsukiyono.gunma.jp\0" +"b\xc3\xa1hcavuotna.no\0" +"notogawa.shiga.jp\0sciencehistory.museum\0s\xc3\xb8r-fron.no\0" "net.sa\0" "net.sb\0" -"works.aero\0net.sc\0komvux.se\0" +"net.sc\0blogspot.gr\0" "net.sd\0" -"net.ru\0" -"0.bg\0" -"forlicesena.it\0net.rw\0net.sg\0" -"klodzko.pl\0" -"detroit.museum\0wegrow.pl\0" -"net.sl\0" -"glogow.pl\0" -"store.bb\0air.museum\0" -"net.so\0" -"katowice.pl\0" -"nsk.ru\0" -"pisa.it\0eid.no\0" -"net.st\0" -"film.hu\0" -"tuva.ru\0d.se\0" +"mandal.no\0net.ru\0" +"net.rw\0e.se\0net.sg\0" +"flight.aero\0alabama.museum\0net.sh\0" +"dgca.aero\0dominic.ua\0" +"vestby.no\0" +"kuroishi.aomori.jp\0gs.hl.no\0" +"sorfold.no\0net.sl\0blogspot.hk\0" +"nemuro.hokkaido.jp\0l\xc3\xa1hppi.no\0wi.us\0" +"tsuno.miyazaki.jp\0net.so\0" +"giessen.museum\0" +"l\xc3\xb8ten.no\0dn.ua\0" +"wada.nagano.jp\0" +"sch.qa\0net.st\0" +"shiroishi.saga.jp\0" +"blogspot.hu\0blogspot.ie\0" +"teramo.it\0kuzumaki.iwate.jp\0" "net.th\0" "net.sy\0" -"viterbo.it\0tsaritsyn.ru\0perso.sn\0net.tj\0" -"lib.gu.us\0" -"plc.co.im\0sec.ps\0" -"r\xc3\xa1hkker\xc3\xa1vju.no\0kazimierz-dolny.pl\0net.tn\0" -"net.to\0" -"veterinaire.km\0" +"net.tj\0cc.ok.us\0" +"uozu.toyama.jp\0net.tm\0" +"bl.it\0naoshima.kagawa.jp\0ne.pw\0net.tn\0" +"ohi.fukui.jp\0fusa.no\0net.to\0blogspot.in\0" +"hirakata.osaka.jp\0" "net.ua\0" -"info.ht\0net.tt\0" -"info.hu\0" -"exchange.aero\0" -"sch.sa\0net.tw\0" -"andriatranibarletta.it\0perso.tn\0" -"f.bg\0malselv.no\0" +"fujiyoshida.yamanashi.jp\0beskidy.pl\0" +"ed.ao\0net.tt\0" +"kochi.kochi.jp\0" +"southcarolina.museum\0valle.no\0blogspot.be\0dnsdojo.net\0" +"tomika.gifu.jp\0muosat.no\0net.tw\0" +"minamiyamashiro.kyoto.jp\0" +"itano.tokushima.jp\0blogspot.bj\0" +"tainai.niigata.jp\0zachpomor.pl\0" +"komono.mie.jp\0project.museum\0" +"blogspot.ca\0" "net.vc\0" -"trana.no\0" -"ns.ca\0" -"net.vi\0" -"lucca.it\0oristano.it\0" -"usarts.museum\0net.vn\0" -"gon.pk\0" -"pl.ua\0" -"eastcoast.museum\0" -"novara.it\0" -"k12.ks.us\0" -"dp.ua\0" -"nesseby.no\0" -"!pref.wakayama.jp\0" -"repbody.aero\0" -"jamison.museum\0lugansk.ua\0" -"ss.it\0" -"alessandria.it\0" -"hadsel.no\0net.ws\0" -"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0" -"veterinaire.fr\0leirfjord.no\0" -"massacarrara.it\0north.museum\0" -"project.museum\0" -"other.nf\0" -"k12.nh.us\0" -"mat.br\0artgallery.museum\0" -"sr.gov.pl\0" -"gamvik.no\0" -"info.ec\0lancashire.museum\0" -"fm.br\0ltd.co.im\0" -"americana.museum\0southwest.museum\0cc.ak.us\0" -"enna.it\0lunner.no\0" -"v\xc3\xa5gan.no\0" -"mari.ru\0" -"accident-investigation.aero\0" -"sor-aurdal.no\0lib.ny.us\0" -"novosibirsk.ru\0" -"bjugn.no\0" -"n\xc3\xa6r\xc3\xb8y.no\0ostrowwlkp.pl\0" -"info.bb\0foundation.museum\0" -"brand.se\0" -"info.at\0!pref.akita.jp\0l\xc3\xb8ten.no\0" -"coal.museum\0miners.museum\0" -"glass.museum\0" -"info.az\0" -"frog.museum\0szczytno.pl\0nov.ru\0" -"sunndal.no\0" -"gen.in\0" -"gx.cn\0" -"web.co\0*.mie.jp\0hobol.no\0\xe5\x8f\xb0\xe6\xb9\xbe\0" -"logistics.aero\0plo.ps\0" -"erotika.hu\0" -"torsken.no\0" -"exeter.museum\0" -"info.co\0" -"selje.no\0" -"storfjord.no\0" -"barum.no\0lind\xc3\xa5s.no\0" +"aerobatic.aero\0benevento.it\0sch.sa\0" +"nakadomari.aomori.jp\0ibara.okayama.jp\0net.ve\0" +"elvendrell.museum\0" +"pro.ht\0tomari.hokkaido.jp\0blogspot.cf\0" +"hikimi.shimane.jp\0" +"net.uy\0net.vi\0blogspot.ch\0" +"net.uz\0" +"servebbs.com\0" +"k.bg\0" +"ed.ci\0net.vn\0" +"paragliding.aero\0otobe.hokkaido.jp\0" +"sakai.fukui.jp\0" +"rikuzentakata.iwate.jp\0" +"journalism.museum\0" +"news.hu\0" +"susono.shizuoka.jp\0blogspot.de\0" +"ed.cr\0mediocampidano.it\0blogspot.cv\0" +"soma.fukushima.jp\0blogspot.com\0" +"blogspot.cz\0is-a-player.com\0" +"blogspot.dk\0" +"consulado.st\0" +"shingu.fukuoka.jp\0" +"inami.wakayama.jp\0" +"education.museum\0" +"sciencecenters.museum\0net.ws\0" +"lib.ga.us\0" +"bergen.no\0" +"prato.it\0shiwa.iwate.jp\0" +"bo.nordland.no\0" +"foggia.it\0" +"pp.az\0ne.ug\0" +"chirurgiens-dentistes.fr\0" +"toyama.jp\0ne.tz\0" +"forum.hu\0chita.aichi.jp\0" +"nisshin.aichi.jp\0" +"lc.it\0mitake.gifu.jp\0solund.no\0" +"ogose.saitama.jp\0" +"kunst.museum\0" +"ne.us\0" +"furukawa.miyagi.jp\0" +"nakatombetsu.hokkaido.jp\0lib.tn.us\0" +"\xc3\xa5l.no\0" +"fareast.ru\0" +"railroad.museum\0" +"yamaguchi.jp\0sakae.chiba.jp\0" +"atsuma.hokkaido.jp\0minamimaki.nagano.jp\0" +"marker.no\0" +"yabuki.fukushima.jp\0from-ak.com\0" +"settlers.museum\0rubtsovsk.ru\0" +"akabira.hokkaido.jp\0" +"pro.na\0" +"yurihonjo.akita.jp\0" +"kuji.iwate.jp\0" +"morotsuka.miyazaki.jp\0pro.mv\0" +"mx.na\0" +"cargo.aero\0ohira.tochigi.jp\0" +"fyresdal.no\0" +"trieste.it\0tokyo.jp\0" +"midori.chiba.jp\0" +"manx.museum\0" +"soo.kagoshima.jp\0kunstsammlung.museum\0rzeszow.pl\0" +"samegawa.fukushima.jp\0" "leasing.aero\0" -"championship.aero\0fst.br\0" -"lierne.no\0" -"!gobiernoelectronico.ar\0""1.bg\0" -"corporation.museum\0" -"al.it\0*.miyagi.jp\0" -"*.aomori.jp\0" -"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" -"amursk.ru\0" -"vestvagoy.no\0" -"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0cc.fl.us\0" -"os.hordaland.no\0" -"pistoia.it\0" -"tver.ru\0e.se\0" -"res.in\0*.yamagata.jp\0syzran.ru\0" -"capebreton.museum\0sandnessj\xc3\xb8""en.no\0" -"ternopil.ua\0" -"shop.pl\0" -"tank.museum\0" -"m\xc3\xa5s\xc3\xb8y.no\0" -"potenza.it\0time.museum\0" -"mjondalen.no\0" -"eng.br\0nedre-eiker.no\0" -"air-surveillance.aero\0" -"nt.au\0am.br\0pn.it\0" -"oystre-slidre.no\0ug.gov.pl\0" -"g.bg\0nesodden.no\0vologda.ru\0" -"parma.it\0tula.ru\0" -"*.nara.jp\0ak.us\0" -"nt.ca\0konin.pl\0" -"kiev.ua\0" -"skierv\xc3\xa1.no\0vestre-toten.no\0" -"ri.it\0botanical.museum\0farsund.no\0veg\xc3\xa5rshei.no\0dagestan.ru\0" -"ind.br\0k-uralsk.ru\0" -"rahkkeravju.no\0cmw.ru\0" -"canada.museum\0" -"fm.it\0" -"cc.wi.us\0" -"web.id\0aver\xc3\xb8y.no\0" -"dudinka.ru\0" -"baghdad.museum\0fitjar.no\0grane.no\0" -"gs.fm.no\0" -"sumy.ua\0" -"al.no\0" -"westfalen.museum\0" -"oregon.museum\0" -"bruxelles.museum\0elk.pl\0" -"planetarium.museum\0sn\xc3\xa5""ase.no\0" -"s\xc3\xb8rreisa.no\0" -"gs.st.no\0skien.no\0" -"bible.museum\0ivanovo.ru\0" -"avellino.it\0" -"tgory.pl\0" -"family.museum\0" -"ppg.br\0k12.as.us\0" -"trader.aero\0gorlice.pl\0" -"cc.al.us\0" -"ogliastra.it\0" -"is.it\0lib.nv.us\0" -"dr.na\0" -"media.hu\0nesna.no\0fl.us\0" -"uri.arpa\0" -"bjerkreim.no\0" -"charter.aero\0" -"genova.it\0" -"it.ao\0botany.museum\0hapmir.no\0" -"educational.museum\0" -"helsinki.museum\0" -"memorial.museum\0" -"web.lk\0pharmacy.museum\0" -"aircraft.aero\0appspot.com\0" -"ferrara.it\0beskidy.pl\0" -"hi.cn\0" -"taxi.aero\0flekkefjord.no\0" -"varoy.no\0" -"ragusa.it\0ambulance.museum\0" -"can.museum\0" -"*.osaka.jp\0isleofman.museum\0fm.no\0warmia.pl\0" -"educator.aero\0asmatart.museum\0" -"mi.it\0" -"kutno.pl\0" -"skedsmokorset.no\0" -"2.bg\0" -"*.kagoshima.jp\0km.ua\0" -"!city.sendai.jp\0" -"web.nf\0st.no\0cc.ri.us\0" -"reggiocalabria.it\0" -"wi.us\0" -"ancona.it\0newjersey.museum\0nnov.ru\0" -"f.se\0" -"ind.in\0" -"info.vn\0" -"andoy.no\0" -"ch.it\0fredrikstad.no\0guovdageaidnu.no\0" -"fjaler.no\0" -"sa.com\0" -"gs.nt.no\0" -"masfjorden.no\0" -"pordenone.it\0" -"po.it\0basel.museum\0" -"chambagri.fr\0" -"h.bg\0web.pk\0" -"london.museum\0" -"sciencecenter.museum\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"unbi.ba\0augustow.pl\0" -"wolomin.pl\0" -"notaires.fr\0tcm.museum\0al.us\0" -"nu.ca\0!pref.nagano.jp\0" -"info.tn\0" -"lib.wa.us\0" -"ed.ao\0info.tt\0" -"barreau.bj\0" -"k12.wy.us\0" -"pp.az\0gop.pk\0" -"int\0" -"l\xc3\xb8renskog.no\0podhale.pl\0" -"voagat.no\0" -"telekommunikation.museum\0" -"qld.au\0" -"te.it\0freiburg.museum\0snasa.no\0" -"gjemnes.no\0" -"sejny.pl\0" -"media.pl\0" -"skjak.no\0" -"watchandclock.museum\0" -"ed.ci\0pacific.museum\0" -"theater.museum\0info.ro\0" -"uk.com\0" -"campobasso.it\0aquarium.museum\0tysv\xc3\xa6r.no\0" -"kragero.no\0" -"windmill.museum\0info.sd\0" -"sologne.museum\0sande.m\xc3\xb8re-og-romsdal.no\0" -"nt.no\0cc.mi.us\0" -"ed.cr\0" -"academy.museum\0zachpomor.pl\0" -"tananger.no\0v\xc3\xa1rgg\xc3\xa1t.no\0ri.us\0" +"higashi.fukuoka.jp\0kids.us\0" +"assedic.fr\0" +"state.museum\0czest.pl\0" +"wallonie.museum\0podzone.org\0" +"hitoyoshi.kumamoto.jp\0" +"hamura.tokyo.jp\0" +"h.se\0" +"minoh.osaka.jp\0" +"tako.chiba.jp\0kafjord.no\0" +"freemasonry.museum\0" +"lib.mo.us\0" +"ed.jp\0pro.pr\0" +"film.hu\0" +"act.au\0" +"in.na\0" +"no.com\0" +"higashiizumo.shimane.jp\0elburg.museum\0" +"siedlce.pl\0" +"bo.it\0" +"chikugo.fukuoka.jp\0from-mo.com\0" +"!city.kitakyushu.jp\0sopot.pl\0" +"togura.nagano.jp\0" +"handson.museum\0sb.ua\0" +"rennebu.no\0" +"milan.it\0" +"kamioka.akita.jp\0" +"cc.mi.us\0" +"from-de.com\0" +"urayasu.chiba.jp\0" +"varggat.no\0" +"takatsuki.shiga.jp\0k12.ms.us\0k12.nc.us\0" +"n.bg\0sakaki.nagano.jp\0" +"uwajima.ehime.jp\0skaun.no\0" +"kursk.ru\0" +"tabayama.yamanashi.jp\0" +"ryazan.ru\0" +"oyabe.toyama.jp\0health.vn\0" +"higashiyoshino.nara.jp\0" +"isen.kagoshima.jp\0nogi.tochigi.jp\0broadcast.museum\0" +"iitate.fukushima.jp\0yawata.kyoto.jp\0daegu.kr\0" +"obihiro.hokkaido.jp\0rebun.hokkaido.jp\0kamo.niigata.jp\0" +"vrn.ru\0" +"higashimurayama.tokyo.jp\0" +"ora.gunma.jp\0shimoji.okinawa.jp\0pro.tt\0lib.wv.us\0" +"odate.akita.jp\0" +"shoo.okayama.jp\0" +"tula.ru\0" +"uchinada.ishikawa.jp\0" +"sh.cn\0kawahara.tottori.jp\0" +"ingatlan.hu\0chikuma.nagano.jp\0vaksdal.no\0" +"foundation.museum\0" +"lewismiller.museum\0" +"trentino.it\0" +"qc.ca\0piacenza.it\0bokn.no\0" +"in.rs\0tom.ru\0" +"cng.br\0lebesby.no\0nh.us\0k12.ia.us\0" +"noto.ishikawa.jp\0arita.saga.jp\0" +"svizzera.museum\0ask\xc3\xb8y.no\0" +"kiyose.tokyo.jp\0frosta.no\0" +"ks.ua\0pro.vn\0" +"namsos.no\0" "federation.aero\0" -"web.tj\0" -"matta-varjjat.no\0" -"steigen.no\0" -"local\0akrehamn.no\0" -"!pref.chiba.jp\0info.pk\0" -"info.pl\0""6bone.pl\0" -"klepp.no\0kherson.ua\0" -"ketrzyn.pl\0info.pr\0" -"sweden.museum\0" -"lardal.no\0" -"!retina.ar\0gz.cn\0" -"barletta-trani-andria.it\0vikna.no\0" -"bearalv\xc3\xa1hki.no\0" -"broker.aero\0gov.nc.tr\0" -"info.na\0k12.fl.us\0" -"hembygdsforbund.museum\0" -"entertainment.aero\0jerusalem.museum\0l\xc3\xa6rdal.no\0" -"hitra.no\0sogndal.no\0" -"farmequipment.museum\0info.mv\0info.nf\0\xc3\xa5lg\xc3\xa5rd.no\0" -"la-spezia.it\0" -"skanland.no\0fam.pk\0" -"skole.museum\0" -"art.museum\0" -"presidio.museum\0" -"3.bg\0public.museum\0" -"h\xc3\xb8yanger.no\0zagan.pl\0" -"an.it\0" -"philadelphia.museum\0info.nr\0" -"pesarourbino.it\0g\xc3\xa1ivuotna.no\0" +"naumburg.museum\0" +"szczecin.pl\0" +"koza.wakayama.jp\0" "poltava.ua\0" -"nt.ro\0" -"station.museum\0" -"mi.th\0" -"altoadige.it\0" -"nu.it\0" -"usculture.museum\0g.se\0" -"h\xc3\xa1mm\xc3\xa1rfeasta.no\0" -"daegu.kr\0info.la\0" -"dovre.no\0" -"ci.it\0horology.museum\0" -"bergbau.museum\0" -"press.museum\0" -"gangwon.kr\0" -"!city.kitakyushu.jp\0sor-varanger.no\0cc.hi.us\0" -"fuossko.no\0" -"zp.ua\0" -"american.museum\0" -"fl\xc3\xa5.no\0mi.us\0" -"i.bg\0" -"od.ua\0" -"encyclopedic.museum\0" -"ind.tn\0" -"midatlantic.museum\0" -"newyork.museum\0" -"castres.museum\0" -"act.edu.au\0" -"topology.museum\0" -"ed.jp\0" -"of.by\0" -"iris.arpa\0inf.br\0askim.no\0pyatigorsk.ru\0" -"nord-fron.no\0nsn.us\0" -"beardu.no\0" -"agrar.hu\0corvette.museum\0chtr.k12.ma.us\0" +"sorum.no\0ed.pw\0from-ky.com\0" +"nishiazai.shiga.jp\0" +"in.th\0" +"moseushi.hokkaido.jp\0sn\xc3\xa5sa.no\0" +"nankoku.kochi.jp\0" +"orland.no\0" +"miyoshi.tokushima.jp\0larvik.no\0ks.us\0" +"loppa.no\0" +"*.kobe.jp\0childrensgarden.museum\0" +"sakai.ibaraki.jp\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0" +"in.ua\0" +"inf.br\0\xe7\xbd\x91\xe7\xb5\xa1.hk\0h\xc3\xb8ylandet.no\0skedsmo.no\0" +"dynalias.org\0" +"kurobe.toyama.jp\0gol.no\0" +"not.br\0shingu.wakayama.jp\0" +"nakai.kanagawa.jp\0cc.de.us\0" +"azumino.nagano.jp\0rade.no\0" +"dyndns-at-work.com\0" +"travel.pl\0" +"katsuura.chiba.jp\0" +"oiso.kanagawa.jp\0" +"it.ao\0cim.br\0in.us\0" +"bamble.no\0" +"inf.cu\0mimata.miyazaki.jp\0" +"bo.telemark.no\0" +"karasjohka.no\0" +"hanyu.saitama.jp\0artanddesign.museum\0" +"padua.it\0" +"health.museum\0" +"edu\0aseral.no\0" +"carbonia-iglesias.it\0nikaho.akita.jp\0" +"r\xc3\xb8ros.no\0" +"matsudo.chiba.jp\0yoshinogari.saga.jp\0" +"\xc3\xb8ystre-slidre.no\0k.se\0" +"bodo.no\0holmestrand.no\0vestvagoy.no\0" +"horokanai.hokkaido.jp\0matsue.shimane.jp\0" +"oyodo.nara.jp\0dnsalias.net\0" +"fr\xc3\xb8ya.no\0" +"monzaebrianza.it\0katagami.akita.jp\0istmein.de\0" +"tochigi.tochigi.jp\0lea\xc5\x8bgaviika.no\0komforb.se\0" +"design.museum\0" +"hanamigawa.chiba.jp\0" +"zj.cn\0nahari.kochi.jp\0discovery.museum\0" +"carraramassa.it\0elk.pl\0" +"cc.pa.us\0" +"kaga.ishikawa.jp\0tokamachi.niigata.jp\0" +"br.it\0cb.it\0" +"plc.ly\0agrinet.tn\0" +"gs.fm.no\0surgut.ru\0" +"usa.museum\0pp.ru\0pp.se\0" +"lib.la.us\0" +"go.ci\0\xe8\x87\xba\xe7\x81\xa3\0" +"rodoy.no\0" +"niikappu.hokkaido.jp\0" +"kure.hiroshima.jp\0fudai.iwate.jp\0maizuru.kyoto.jp\0" +"passenger-association.aero\0iveland.no\0" +"go.cr\0takayama.nagano.jp\0" +"game.tw\0" +"tvedestrand.no\0chernovtsy.ua\0" +"entertainment.aero\0trader.aero\0" +"shikaoi.hokkaido.jp\0komagane.nagano.jp\0travel.tt\0" +"katsushika.tokyo.jp\0" +"suita.osaka.jp\0" +"nasushiobara.tochigi.jp\0za.com\0" +"q.bg\0cody.museum\0" +"esp.br\0sagamihara.kanagawa.jp\0" +"pp.ua\0" +"andriatranibarletta.it\0mikawa.yamagata.jp\0naustdal.no\0" +"takinoue.hokkaido.jp\0gs.oslo.no\0" +"shiroishi.miyagi.jp\0community.museum\0bievat.no\0" +"from-ia.com\0" +"rep.kp\0luxembourg.museum\0" +"sk.ca\0" +"vic.gov.au\0" +"yamanashi.yamanashi.jp\0hemne.no\0" +"ulsan.kr\0k12.ky.us\0" +"is-a-caterer.com\0" +"kozagawa.wakayama.jp\0" +"capebreton.museum\0" +"is-a-musician.com\0" +"kaita.hiroshima.jp\0" +"seto.aichi.jp\0" +"yoshino.nara.jp\0" +"muenster.museum\0os\xc3\xb8yro.no\0" +"li.it\0" +"hokksund.no\0" +"snz.ru\0" +"hannan.osaka.jp\0brumunddal.no\0" +"fukushima.jp\0" +"tgory.pl\0kv.ua\0" +"hachinohe.aomori.jp\0media.museum\0" +"hidaka.saitama.jp\0" +"oto.fukuoka.jp\0" +"kozaki.chiba.jp\0" +"sandnessjoen.no\0" +"christiansburg.museum\0" +"res.aero\0" +"ashiya.hyogo.jp\0" +"soeda.fukuoka.jp\0" +"nuernberg.museum\0" +"sakhalin.ru\0" +"go.id\0soundandvision.museum\0" +"tajimi.gifu.jp\0tonosho.kagawa.jp\0" +"from-ut.com\0" +"aki.kochi.jp\0" +"niiza.saitama.jp\0" +"stalowa-wola.pl\0" +"from-ne.com\0" +"tado.mie.jp\0abeno.osaka.jp\0bergbau.museum\0dallas.museum\0" +"inf.mk\0cc.tn.us\0" +"onomichi.hiroshima.jp\0saga.saga.jp\0" +"go.it\0motoyama.kochi.jp\0" +"iwakura.aichi.jp\0" +"kashihara.nara.jp\0inagi.tokyo.jp\0" +"\xe7\xbd\x91\xe7\xbb\x9c.cn\0judaica.museum\0" +"ilawa.pl\0" +"lib.pr.us\0" +"buryatia.ru\0" +"go.jp\0" +"snasa.no\0" +"otaki.chiba.jp\0" +"mielno.pl\0" +"tachiarai.fukuoka.jp\0settsu.osaka.jp\0" +"hikari.yamaguchi.jp\0" +"cc.as.us\0" +"cc.ri.us\0" +"jobs\0" +"mail.pl\0" +"santacruz.museum\0n.se\0" +"hapmir.no\0" +"go.kr\0k12.sc.us\0" +"lib.ny.us\0" +"nuoro.it\0" +"sogndal.no\0sosnowiec.pl\0" +"asaminami.hiroshima.jp\0" +"isernia.it\0froland.no\0vang.no\0" +"nanporo.hokkaido.jp\0" +"dyndns-wiki.com\0" +"bari.it\0bahcavuotna.no\0" +"panama.museum\0santafe.museum\0" +"ce.it\0shirakawa.gifu.jp\0" +"aircraft.aero\0ptz.ru\0iamallama.com\0" +"takayama.gunma.jp\0" +"ama.aichi.jp\0" +"yakumo.shimane.jp\0taito.tokyo.jp\0" +"cmw.ru\0" +"res.in\0" +"hb.cn\0tohnosho.chiba.jp\0kashiba.nara.jp\0soni.nara.jp\0ostroleka.pl\0" +"aogashima.tokyo.jp\0" +"minano.saitama.jp\0lur\xc3\xb8y.no\0cc.mo.us\0" +"gjerstad.no\0" +"yashiro.hyogo.jp\0hitachiomiya.ibaraki.jp\0hakone.kanagawa.jp\0watch-and-clock.museum\0" +"pv.it\0toyohashi.aichi.jp\0okuizumo.shimane.jp\0" +"shop.ht\0olawa.pl\0" +"shop.hu\0sukagawa.fukushima.jp\0marugame.kagawa.jp\0v\xc3\xa5g\xc3\xa5.no\0" +"\xe7\xb5\x84\xe7\xbb\x87.hk\0usantiques.museum\0udm.ru\0" +"railway.museum\0" +"t.bg\0tsubetsu.hokkaido.jp\0kariwa.niigata.jp\0tsurugashima.saitama.jp\0" +"etc.br\0" +"obira.hokkaido.jp\0ide.kyoto.jp\0educational.museum\0bydgoszcz.pl\0" "figueres.museum\0" -"!pref.gunma.jp\0medizinhistorisches.museum\0" -"tjeldsund.no\0" -"nebraska.museum\0" -"bellevue.museum\0" -"abo.pa\0k12.al.us\0" -"info.ki\0" -"inf.cu\0sv.it\0" -"jfk.museum\0" -"!city.osaka.jp\0swinoujscie.pl\0" -"bydgoszcz.pl\0" -"!city.kyoto.jp\0" -"uvic.museum\0" -"madrid.museum\0steinkjer.no\0" -"lib.ma.us\0" -"sirdal.no\0" -"n\xc3\xb8tter\xc3\xb8y.no\0" -"taranto.it\0starnberg.museum\0" -"vic.gov.au\0pvt.ge\0pors\xc3\xa1\xc5\x8bgu.no\0" -"naroy.no\0ris\xc3\xb8r.no\0" -"va.it\0salem.museum\0starachowice.pl\0" -"!nawrastelecom.om\0" -"town.museum\0te.ua\0" -"se.net\0" -"kemerovo.ru\0" -"lerdal.no\0" -"gs.va.no\0" -"kms.ru\0" -"consulado.st\0" +"langevag.no\0" +"tinn.no\0" +"\xe7\xbd\x91\xe7\xbb\x9c.hk\0" +"ens.tn\0" +"vercelli.it\0" +"ac.ae\0" +"newspaper.museum\0" +"potenza.it\0" +"komatsushima.tokushima.jp\0" +"gs.rl.no\0" +"nakayama.yamagata.jp\0abu.yamaguchi.jp\0" +"lind\xc3\xa5s.no\0pila.pl\0" +"ac.at\0tamatsukuri.ibaraki.jp\0" +"ac.be\0" +"durham.museum\0" +"sn.cn\0kadena.okinawa.jp\0atm.pl\0" "haram.no\0" -"tysnes.no\0" -"!pref.ibaraki.jp\0hamburg.museum\0" -"\xc3\xa5rdal.no\0" -"airline.aero\0" -"crew.aero\0newhampshire.museum\0" -"muenster.museum\0" -"aerodrome.aero\0" -"heroy.nordland.no\0belau.pw\0" -"kamchatka.ru\0" -"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0lillehammer.no\0hi.us\0" -"hk.cn\0" -"!city.kobe.jp\0berlevag.no\0" -"ardal.no\0" -"askoy.no\0" -"vardo.no\0" -"fyresdal.no\0" -"sassari.it\0" -"video.hu\0drammen.no\0" -"lyngen.no\0nakhodka.ru\0" -"ip6.arpa\0games.hu\0" -"online.museum\0" -"k12.sd.us\0" -"4.bg\0sebastopol.ua\0" -"ao.it\0atlanta.museum\0" -"lebork.pl\0" -"ravenna.it\0" -"railway.museum\0songdalen.no\0" -"!pref.shimane.jp\0delaware.museum\0ed.pw\0" -"f\xc3\xb8rde.no\0" -"living.museum\0" -"juif.museum\0" -"lomza.pl\0" -"h.se\0" -"!bl.uk\0" -"portland.museum\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" -"stj\xc3\xb8rdal.no\0" -"lecce.it\0" -"bz.it\0" -"farmstead.museum\0va.no\0" -"express.aero\0!nacion.ar\0" -"presse.km\0gs.of.no\0" -"\xe5\x8f\xb0\xe7\x81\xa3\0" -"og.ao\0gyeongbuk.kr\0vestv\xc3\xa5g\xc3\xb8y.no\0" -"prd.fr\0" -"pp.ru\0pp.se\0" -"forum.hu\0!pref.saga.jp\0" -"kvalsund.no\0" -"!city.kawasaki.jp\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0" -"j.bg\0" -"vlaanderen.museum\0" -"cc.va.us\0" -"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0alabama.museum\0" -"school.museum\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0" -"\xc3\xa5seral.no\0" -"traniandriabarletta.it\0" -"flog.br\0" -"presse.ml\0" -"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" -"historisch.museum\0" -"farm.museum\0palmsprings.museum\0oslo.no\0dyroy.no\0stranda.no\0" -"gs.rl.no\0r\xc3\xa5""de.no\0" -"bomlo.no\0s\xc3\xb8rum.no\0" -"jan-mayen.no\0ivgu.no\0" -"coop\0" -"agr.br\0k12.ak.us\0" -"!nic.ar\0catanzaro.it\0fusa.no\0" -"hu.com\0" -"inf.mk\0" -"vet.br\0" -"k12.mt.us\0k12.nd.us\0" -"vlog.br\0\xe5\x85\xac\xe5\x8f\xb8.cn\0sandnessjoen.no\0" -"lib.az.us\0" -"nsw.edu.au\0of.no\0\xc3\xb8stre-toten.no\0" -"*.okinawa.jp\0" -"vb.it\0" -"asso.fr\0firenze.it\0" -"trieste.it\0" -"\xe5\x85\xac\xe5\x8f\xb8.hk\0" -"museet.museum\0" -"prd.km\0" -"navuotna.no\0lib.ca.us\0" -"cc.nv.us\0" -"asso.gp\0" -"meraker.no\0" -"h\xc3\xa1pmir.no\0" -"i.ph\0" -"sx.cn\0jeonnam.kr\0" -"halden.no\0" -"fed.us\0" -"medio-campidano.it\0tsk.ru\0" -"barcelona.museum\0" -"giessen.museum\0roma.museum\0" -"hl.cn\0" -"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0" -"biz.bb\0benevento.it\0rl.no\0bygland.no\0" -"port.fr\0asso.ht\0prd.mg\0" -"biz.at\0" -"tra.kp\0" -"*.aichi.jp\0khabarovsk.ru\0" -"campidano-medio.it\0" -"biz.az\0" -"newmexico.museum\0va.us\0" +"aichi.jp\0" +"mihama.aichi.jp\0" +"mizumaki.fukuoka.jp\0serveftp.net\0" +"portland.museum\0from-in.com\0" +"hagebostad.no\0" +"nara.jp\0go.pw\0" +"sa.edu.au\0ukiha.fukuoka.jp\0" +"*.ar\0nyny.museum\0" +"media.aero\0*.bd\0" +"ine.kyoto.jp\0bu.no\0" +"br.com\0" +"ac.ci\0" +"onagawa.miyagi.jp\0" +"nt.au\0" +"ac.cn\0from-tx.com\0" +"*.bn\0" +"sor-odal.no\0" +"ac.cr\0ikeda.gifu.jp\0" +"sobetsu.hokkaido.jp\0culture.museum\0zgrad.ru\0" +"tadotsu.kagawa.jp\0" +"machida.tokyo.jp\0chernigov.ua\0" +"kembuchi.hokkaido.jp\0from-mi.com\0" +"sor-aurdal.no\0" +"pippu.hokkaido.jp\0" +"nt.ca\0" +"mitoyo.kagawa.jp\0" +"*.ck\0tsuwano.shimane.jp\0gs.mr.no\0" +"toyo.kochi.jp\0" +"ky.us\0" +"tranoy.no\0" +"br\xc3\xb8nn\xc3\xb8ysund.no\0" +"hemsedal.no\0" +"rendalen.no\0" +"*.cy\0utsira.no\0" +"takasu.hokkaido.jp\0" +"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" +"tsuyama.okayama.jp\0beauxarts.museum\0" +"gr.it\0" +"firenze.it\0misugi.mie.jp\0and.museum\0" +"go.th\0" +"semboku.akita.jp\0" +"tokushima.tokushima.jp\0go.tj\0" +"buzen.fukuoka.jp\0" +"land-4-sale.us\0" +"nyc.museum\0" +"mobi\0" +"gr.jp\0" +"raisa.no\0" +"go.ug\0" +"*.er\0go.tz\0" +"*.et\0" +"vc.it\0h\xc3\xa1pmir.no\0" +"*.fj\0" +"scientist.aero\0*.fk\0yamato.kumamoto.jp\0modalen.no\0stargard.pl\0" +"ac.gn\0sumida.tokyo.jp\0" +"historisches.museum\0" +"kvits\xc3\xb8y.no\0" +"store.nf\0" +"yoka.hyogo.jp\0omachi.nagano.jp\0" +"ch.it\0" +"overhalla.no\0likescandy.com\0" +"www.ro\0se.net\0" +"nakamichi.yamanashi.jp\0" +"adm.br\0dnipropetrovsk.ua\0" +"vindafjord.no\0k12.ak.us\0is-a-rockstar.com\0" +"ac.id\0minamiechizen.fukui.jp\0" +"*.gu\0children.museum\0" +"tsu.mie.jp\0" +"fr\xc3\xa6na.no\0" +"gliwice.pl\0" +"he.cn\0aid.pl\0" +"ac.im\0kishiwada.osaka.jp\0" +"ac.in\0" "finearts.museum\0" -"murmansk.ru\0" -"\xc3\xb8rsta.no\0radom.pl\0k12.sc.us\0" -"5.bg\0kvinesdal.no\0" -"ap.it\0" -"*.fukushima.jp\0" -"asso.bj\0" -"mad.museum\0" -"lebesby.no\0" -"og.it\0glas.museum\0sauda.no\0" -"i.se\0" -"k12.tx.us\0" -"asso.ci\0mk.ua\0" -"cesena-forli.it\0" -"lowicz.pl\0" -"k12.id.us\0" -"tas.gov.au\0" -"lukow.pl\0" -"utazas.hu\0" -"maritimo.museum\0bjark\xc3\xb8y.no\0" -"adm.br\0" -"pr.it\0lib.vi.us\0" -"bergamo.it\0k12.va.us\0" -"k.bg\0" -"railroad.museum\0" -"!british-library.uk\0" -"cincinnati.museum\0" -"sorreisa.no\0" -"asso.dz\0!nel.uk\0" -"rm.it\0" -"nv.us\0" -"nx.cn\0gos.pk\0" -"vic.edu.au\0" -"biella.it\0tjome.no\0" -"r\xc3\xb8yken.no\0" -"beiarn.no\0" -"qc.ca\0" -"georgia.museum\0square.museum\0" -"labor.museum\0omasvuotna.no\0cc.la.us\0" -"br.com\0reggioemilia.it\0" -"kristiansund.no\0" -"sorum.no\0" -"orsta.no\0" -"furniture.museum\0surrey.museum\0eng.pro\0" -"asn.lv\0balat.no\0" -"lavangen.no\0sld.pa\0" -"fla.no\0k12.ms.us\0k12.nc.us\0" -"bardu.no\0" +"ac.ir\0" +"\xe5\x80\x8b\xe4\xba\xba.hk\0lucca.it\0odessa.ua\0" +"massa-carrara.it\0" +"happou.akita.jp\0colonialwilliamsburg.museum\0k12.nv.us\0" +"w.bg\0lib.in.us\0" +"*.il\0" +"scotland.museum\0" +"ac.jp\0" +"shimoda.shizuoka.jp\0is-by.us\0" +"kui.hiroshima.jp\0" +"us.na\0" +"reggio-emilia.it\0asahi.ibaraki.jp\0saintlouis.museum\0" +"kashima.saga.jp\0arboretum.museum\0" +"bandai.fukushima.jp\0" +"chikuhoku.nagano.jp\0hayakawa.yamanashi.jp\0" +"*.jm\0namikata.ehime.jp\0haibara.shizuoka.jp\0bytom.pl\0" +"furano.hokkaido.jp\0zushi.kanagawa.jp\0" +"\xe7\xbb\x84\xe7\xb9\x94.hk\0*.sendai.jp\0" +"ulan-ude.ru\0" +"ac.kr\0beardu.no\0" +"lib.gu.us\0" +"*.ke\0" +"*.kh\0" +"vinnica.ua\0" +"takahata.yamagata.jp\0" +"honjyo.akita.jp\0scienceandindustry.museum\0" +"tokorozawa.saitama.jp\0" +"meraker.no\0" +"katsuragi.nara.jp\0h\xc3\xa1mm\xc3\xa1rfeasta.no\0bialystok.pl\0" +"ac.ma\0" +"lo.it\0akagi.shimane.jp\0" +"tawaramoto.nara.jp\0obanazawa.yamagata.jp\0ac.me\0" +"genoa.it\0" +"iz.hr\0*.kw\0" +"og.ao\0yakutia.ru\0" +"taku.saga.jp\0" +"heguri.nara.jp\0" +"mansions.museum\0folldal.no\0omasvuotna.no\0" +"cherkassy.ua\0" +"trainer.aero\0" +"ac.mu\0" +"cc.wi.us\0" +"ac.mw\0ac.ng\0" +"cartoonart.museum\0" +"*.mm\0" +"paris.museum\0" +"can.museum\0" +"juedisches.museum\0from-vt.com\0" +"*.mt\0" +"narita.chiba.jp\0fukushima.hokkaido.jp\0" +"awaji.hyogo.jp\0" +"lodi.it\0is-uberleet.com\0" +"*.ni\0" +"*.mz\0" +"engerdal.no\0" +"square.museum\0" +"saroma.hokkaido.jp\0neues.museum\0" +"reggiocalabria.it\0" +"*.np\0ac.pa\0" +"mb.ca\0seika.kyoto.jp\0" +"higashiagatsuma.gunma.jp\0iizuna.nagano.jp\0nesoddtangen.no\0" +"nakatane.kagoshima.jp\0" +"nt.no\0" +"tendo.yamagata.jp\0brandywinevalley.museum\0" +"*.nz\0" +"kunitachi.tokyo.jp\0" +"b\xc3\xa6rum.no\0" +"*.om\0tuva.ru\0" +"balat.no\0" +"sue.fukuoka.jp\0" +"iwata.shizuoka.jp\0tysvar.no\0ac.pr\0" +"skodje.no\0" +"ama.shimane.jp\0illustration.museum\0idrett.no\0" +"better-than.tv\0" +"ashiya.fukuoka.jp\0leksvik.no\0" +"*.pg\0wloclawek.pl\0t.se\0" +"mie.jp\0" +"kawamata.fukushima.jp\0" "donostia.museum\0" -"club.tw\0" -"elburg.museum\0" -"gs.hl.no\0lodingen.no\0" -"samara.ru\0" -"vc.it\0*.nagasaki.jp\0" -"fosnes.no\0" -"fuel.aero\0" +"is-a-chef.org\0" +"guernsey.museum\0" +"saku.nagano.jp\0" +"minamisanriku.miyagi.jp\0" +"penza.ru\0" +"ta.it\0" +"kawanabe.kagoshima.jp\0" +"ac.rs\0" +"okayama.okayama.jp\0kamiizumi.saitama.jp\0annefrank.museum\0" +"association.aero\0gushikami.okinawa.jp\0ac.ru\0ac.se\0" +"zentsuji.kagawa.jp\0" +"ac.rw\0" +"nagahama.shiga.jp\0narusawa.yamanashi.jp\0" +"telekommunikation.museum\0" +"crew.aero\0" +"services.aero\0" +"gx.cn\0konan.shiga.jp\0" +"misaki.osaka.jp\0" +"fukui.fukui.jp\0toya.hokkaido.jp\0toyonaka.osaka.jp\0" +"sugito.saitama.jp\0" +"cc.ne.us\0" +"hornindal.no\0" +"noda.iwate.jp\0" +"wakkanai.hokkaido.jp\0nt.ro\0" +"ac.th\0" +"ringsaker.no\0" +"ac.sz\0ac.tj\0" +"arq.br\0nnov.ru\0" +"itami.hyogo.jp\0kashiwazaki.niigata.jp\0" +"z.bg\0" +"eti.br\0showa.gunma.jp\0unnan.shimane.jp\0sos.pl\0" +"rishiri.hokkaido.jp\0" +"aso.kumamoto.jp\0" +"store.ro\0" +"otofuke.hokkaido.jp\0" +"*.sv\0ac.ug\0" +"ae.org\0" +"iida.nagano.jp\0kitanakagusuku.okinawa.jp\0ac.tz\0teaches-yoga.com\0" +"shimokitayama.nara.jp\0arakawa.saitama.jp\0" +"og.it\0joboji.iwate.jp\0kainan.tokushima.jp\0" +"ski.no\0" +"lib.ee\0" +"itakura.gunma.jp\0sor-fron.no\0*.tr\0" +"vf.no\0" +"astronomy.museum\0" +"takatsuki.osaka.jp\0" +"store.st\0" +"rokunohe.aomori.jp\0" +"kiyokawa.kanagawa.jp\0od.ua\0" +"kvalsund.no\0" +"ashoro.hokkaido.jp\0utazu.kagawa.jp\0ibestad.no\0*.uk\0" +"urbinopesaro.it\0lyngdal.no\0ac.vn\0" +"koshu.yamanashi.jp\0michigan.museum\0r\xc3\xb8mskog.no\0" +"kitagata.saga.jp\0omsk.ru\0" +"mashiko.tochigi.jp\0" +"kofu.yamanashi.jp\0" +"mb.it\0" +"medizinhistorisches.museum\0" +"inuyama.aichi.jp\0dnsalias.org\0is-a-chef.com\0" +"otaki.nagano.jp\0austrheim.no\0" +"ar.com\0" +"0.bg\0anthropology.museum\0hvaler.no\0shop.pl\0" +"lib.va.us\0" +"fukusaki.hyogo.jp\0baths.museum\0culturalcenter.museum\0" +"show.aero\0iraq.museum\0r\xc3\xa1hkker\xc3\xa1vju.no\0" +"kamakura.kanagawa.jp\0toyono.osaka.jp\0" +"vega.no\0" +"sumoto.hyogo.jp\0film.museum\0" +"kadogawa.miyazaki.jp\0garden.museum\0" +"schokoladen.museum\0!nls.uk\0" +"konskowola.pl\0" +"legnica.pl\0" +"caltanissetta.it\0wajima.ishikawa.jp\0" +"mragowo.pl\0" +"hattfjelldal.no\0" +"kuwana.mie.jp\0" +"tsuga.tochigi.jp\0" +"itayanagi.aomori.jp\0v\xc3\xa5gan.no\0" +"museumvereniging.museum\0zp.ua\0" +"kawanehon.shizuoka.jp\0" +"american.museum\0" +"dolls.museum\0" +"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0" +"hiroshima.jp\0betainabox.com\0" +"kawaba.gunma.jp\0" +"*.ye\0" +"law.pro\0" +"kin.okinawa.jp\0skj\xc3\xa5k.no\0" +"is-a-conservative.com\0" +"americana.museum\0k12.vi.us\0" +"yamada.toyama.jp\0" +"miasa.nagano.jp\0" +"conf.au\0" +"aure.no\0*.za\0" +"oizumi.gunma.jp\0lodingen.no\0" +"from-or.com\0" "qc.com\0" -"skjervoy.no\0" -"bill.museum\0kv\xc3\xa6""fjord.no\0" -"skydiving.aero\0*.tokushima.jp\0" -"!congresodelalengua3.ar\0laquila.it\0k12.ct.us\0" -"gorge.museum\0linz.museum\0sherbrooke.museum\0" -"tranoy.no\0ing.pa\0" -"ptz.ru\0" -"kr.it\0prato.it\0stat.no\0" +"fc.it\0farmequipment.museum\0w.se\0" +"vi.it\0" +"archaeological.museum\0moss.no\0" +"khakassia.ru\0*.zm\0isteingeek.de\0" +"izumi.kagoshima.jp\0imageandsound.museum\0" +"suisse.museum\0gu.us\0" +"tajiri.osaka.jp\0" +"*.zw\0" +"kiyosato.hokkaido.jp\0" +"takaharu.miyazaki.jp\0" +"takanabe.miyazaki.jp\0" +"paroch.k12.ma.us\0" +"hatsukaichi.hiroshima.jp\0" +"cn.it\0" +"ranzan.saitama.jp\0" +"murmansk.ru\0" +"hamburg.museum\0" +"es.kr\0heroy.nordland.no\0" +"barletta-trani-andria.it\0lib.me.us\0" +"hob\xc3\xb8l.no\0" +"ck.ua\0" +"gov\0" +"city.hu\0fhs.no\0" +"hk.cn\0" +"ascolipiceno.it\0motorcycle.museum\0skanland.no\0" +"qld.edu.au\0" +"cc.nh.us\0" +"gub.uy\0" +"trani-andria-barletta.it\0birkenes.no\0is-a-cpa.com\0" +"trapani.it\0" +"art.br\0kibichuo.okayama.jp\0tananger.no\0" +"otama.fukushima.jp\0kiho.mie.jp\0" +"nose.osaka.jp\0nakagawa.tokushima.jp\0" +"is-slick.com\0" +"assn.lk\0\xe5\x95\x86\xe6\xa5\xad.tw\0" +"from-ga.com\0" +"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0" +"cc.ks.us\0" +"kamagaya.chiba.jp\0grp.lk\0" +"hioki.kagoshima.jp\0" +"nagato.yamaguchi.jp\0" +"control.aero\0gliding.aero\0tsumagoi.gunma.jp\0nishitosa.kochi.jp\0" +"kitadaito.okinawa.jp\0" +"art.do\0zoological.museum\0" +"toyako.hokkaido.jp\0plo.ps\0" +"cq.cn\0kadoma.osaka.jp\0basel.museum\0" +"osakikamijima.hiroshima.jp\0" +"elverum.no\0cc.in.us\0" +"shingu.hyogo.jp\0" +"art.dz\0" +"avoues.fr\0lu.it\0me.it\0nerima.tokyo.jp\0" +"military.museum\0" +"satosho.okayama.jp\0" +"st.no\0" +"3.bg\0yamagata.ibaraki.jp\0humanities.museum\0" +"championship.aero\0" +"does-it.net\0" +"higashi.fukushima.jp\0" +"taxi.br\0" +"kharkiv.ua\0" +"ushuaia.museum\0" +"kumano.mie.jp\0" +"unsa.ba\0shimamoto.osaka.jp\0wodzislaw.pl\0" +"yokosuka.kanagawa.jp\0is-leet.com\0" +"jevnaker.no\0" +"minamiashigara.kanagawa.jp\0" +"ryugasaki.ibaraki.jp\0" +"tsuno.kochi.jp\0flora.no\0kuzbass.ru\0" +"nesna.no\0" +"yachiyo.chiba.jp\0civilwar.museum\0" +"matsumae.hokkaido.jp\0" +"kumatori.osaka.jp\0namsskogan.no\0" +"knowsitall.info\0" +"linz.museum\0" +"sakuragawa.ibaraki.jp\0" +"toride.ibaraki.jp\0traeumtgerade.de\0" +"store.bb\0jolster.no\0" +"pilots.museum\0" +"asia\0" +"kustanai.ru\0" +"art.ht\0" +"pubol.museum\0" +"england.museum\0" +"shimizu.shizuoka.jp\0kartuzy.pl\0" +"volgograd.ru\0" +"tateyama.toyama.jp\0" +"augustow.pl\0" +"askoy.no\0z.se\0" +"obama.nagasaki.jp\0k12.ca.us\0" +"higashine.yamagata.jp\0wales.museum\0" +"kiwa.mie.jp\0izena.okinawa.jp\0" +"js.cn\0kanna.gunma.jp\0from-tn.com\0" +"brescia.it\0" +"aip.ee\0otoineppu.hokkaido.jp\0" +"sakyo.kyoto.jp\0kami.miyagi.jp\0" +"serveftp.org\0" +"miyama.fukuoka.jp\0hakui.ishikawa.jp\0" +"adv.br\0" +"exeter.museum\0" +"nichinan.tottori.jp\0vi.us\0" +"enna.it\0" +"flor\xc3\xb8.no\0" +"cn.ua\0" +"from-co.net\0" +"hn.cn\0" +"andria-barletta-trani.it\0" +"himeshima.oita.jp\0" +"boleslawiec.pl\0" +"nishiarita.saga.jp\0" +"al.it\0sydney.museum\0" +"washingtondc.museum\0" +"iglesiascarbonia.it\0kanuma.tochigi.jp\0" +"educator.aero\0" +"from-ny.net\0" +"watchandclock.museum\0" +"frog.museum\0" +"takamori.kumamoto.jp\0" +"is-a-blogger.com\0" +"habmer.no\0" +"consulting.aero\0" +"ogawa.saitama.jp\0" +"fi.cr\0" +"hanggliding.aero\0" +"minamiise.mie.jp\0\xc3\xa5lg\xc3\xa5rd.no\0" +"ueda.nagano.jp\0lebtimnetz.de\0" +"karelia.ru\0" +"zlg.br\0koge.tottori.jp\0" +"kvitsoy.no\0" +"vagsoy.no\0" +"time.no\0" +"toyotomi.hokkaido.jp\0" +"tj.cn\0nes.akershus.no\0" +"med.br\0fujioka.gunma.jp\0" +"imakane.hokkaido.jp\0" +"yamakita.kanagawa.jp\0" +"okinoshima.shimane.jp\0" +"gs.jan-mayen.no\0" +"kasugai.aichi.jp\0" +"texas.museum\0" +"tsugaru.aomori.jp\0miyawaka.fukuoka.jp\0otsuki.yamanashi.jp\0" +"6.bg\0suedtirol.it\0" +"koya.wakayama.jp\0" +"shikokuchuo.ehime.jp\0" "\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" -"cosenza.it\0" -"stj\xc3\xb8rdalshalsen.no\0" -"finland.museum\0leka.no\0cc.pr.us\0" -"historichouses.museum\0s\xc3\xa1l\xc3\xa1t.no\0" -"venice.it\0" -"biz.ki\0" -"g\xc3\xa1ls\xc3\xa1.no\0" -"\xe7\xbb\x84\xe7\xbb\x87.hk\0" -"*.yamanashi.jp\0" -"rad\xc3\xb8y.no\0" -"6.bg\0" -"fareast.ru\0" -"paragliding.aero\0ba.it\0aq.it\0" -"sk\xc3\xa5nland.no\0" -"its.me\0" -"us.na\0" -"hl.no\0cc.ga.us\0" -"ac\0granvin.no\0" -"ad\0qld.edu.au\0!city.sapporo.jp\0" -"ae\0" -"af\0" -"ag\0crotone.it\0" -"dallas.museum\0" -"ai\0brussels.museum\0" -"dali.museum\0" -"la.us\0" -"al\0salzburg.museum\0" -"am\0" -"an\0cl.it\0" -"ao\0" -"aq\0ba\0" -"bb\0" -"as\0lajolla.museum\0" -"at\0" -"be\0" -"bf\0inderoy.no\0snz.ru\0" -"aw\0bg\0" -"ax\0bh\0cim.br\0ltd.gi\0biz.mv\0" -"bi\0xz.cn\0\xe7\xb5\x84\xe7\xb9\x94.hk\0biz.mw\0" -"az\0bj\0" -"bm\0tranibarlettaandria.it\0naamesjevuemie.no\0" -"chattanooga.museum\0" -"bo\0" -"l.bg\0" -"ca\0" -"br\0stateofdelaware.museum\0" -"bs\0cc\0" -"cd\0biz.nr\0" -"cf\0berlev\xc3\xa5g.no\0" -"bw\0cg\0snaase.no\0" -"ch\0harvestcelebration.museum\0ck.ua\0" -"by\0ci\0" -"bz\0bahccavuotna.no\0" -"cl\0yuzhno-sakhalinsk.ru\0" -"cm\0halsa.no\0lyngdal.no\0" -"cn\0" -"co\0rn.it\0childrens.museum\0frankfurt.museum\0" -"cr\0" -"pskov.ru\0" -"cu\0de\0" -"cv\0fr.it\0lib.ky.us\0" -"aseral.no\0kvam.no\0" -"cx\0hellas.museum\0" -"hof.no\0" -"cz\0dj\0k12.la.us\0" -"dk\0moscow.museum\0" -"sosnowiec.pl\0" -"dm\0biz.pk\0" -"schokoladen.museum\0biz.pl\0" -"far.br\0arna.no\0tynset.no\0" -"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0" -"ec\0" -"biz.pr\0" -"ee\0celtic.museum\0" -"scientist.aero\0modern.museum\0" -"pr.us\0" -"dz\0" -"mj\xc3\xb8ndalen.no\0s\xc3\xb8r-odal.no\0" -"!nic.tr\0" -"conference.aero\0vestnes.no\0k12.mn.us\0" -"!pref.hiroshima.jp\0" -"es\0trapani.it\0" -"fermo.it\0vard\xc3\xb8.no\0" -"eu\0gs.hm.no\0r\xc3\xb8""d\xc3\xb8y.no\0stordal.no\0" -"gc.ca\0!nhs.uk\0" -"jgora.pl\0" -"fi\0stjordal.no\0" -"fm\0!mediaphone.om\0" -"kirov.ru\0pvt.k12.ma.us\0" -"fo\0" -"ga\0hyllestad.no\0" -"gov.ac\0fr\0andriabarlettatrani.it\0ga.us\0" -"gov.ae\0gd\0estate.museum\0" -"gov.af\0ge\0tolga.no\0" -"gf\0asso.re\0cc.oh.us\0" -"gg\0florida.museum\0" -"presse.ci\0gh\0" -"gi\0k12.dc.us\0" -"ltd.lk\0orland.no\0" -"gov.al\0" -"gl\0tokke.no\0" -"hanggliding.aero\0gm\0" -"hareid.no\0" -"gov.ba\0tj.cn\0gp\0" -"gov.bb\0gq\0" -"gov.as\0gr\0agrigento.it\0lc.it\0" -"gs\0kalmykia.ru\0aero.tt\0" -"gov.bf\0" -"county.museum\0" -"gov.bh\0hn.cn\0gw\0" -"gov.az\0gy\0assn.lk\0guernsey.museum\0" -"hk\0" -"gov.bm\0h\xc3\xa6gebostad.no\0biz.tj\0" -"hm\0computer.museum\0" -"gov.bo\0hn\0kl\xc3\xa6""bu.no\0" -"pulawy.pl\0" -"gov.br\0" -"trd.br\0gov.bs\0hr\0reggio-calabria.it\0historyofscience.museum\0lipetsk.ru\0" -"gov.cd\0*.nagoya.jp\0" -"ht\0id\0spjelkavik.no\0" -"hu\0ie\0aero.mv\0" -"marketplace.aero\0mn.it\0biz.tt\0" -"gov.by\0saintlouis.museum\0mer\xc3\xa5ker.no\0" -"gov.bz\0" -"7.bg\0gov.cl\0virtual.museum\0" -"gov.cm\0vennesla.no\0kr.ua\0" -"gov.cn\0im\0ar.it\0galsa.no\0rovno.ua\0" -"gov.co\0in\0" -"io\0limanowa.pl\0" -"iq\0k12.ga.us\0" -"ir\0" -"riik.ee\0is\0\xc3\xa1laheadju.no\0" -"gov.cu\0it\0hawaii.museum\0seaport.museum\0" -"je\0pubol.museum\0hm.no\0" -"gov.cx\0" -"*.chiba.jp\0" -"*.kawasaki.jp\0" -"k.se\0" -"gov.dm\0" -"aland.fi\0vik.no\0" -"yk.ca\0jo\0kobierzyce.pl\0" -"jp\0biz.vn\0" -"presse.fr\0lib.il.us\0\xe9\xa6\x99\xe6\xb8\xaf\0" -"gov.ec\0" -"transport.museum\0bronnoy.no\0" -"slg.br\0gov.ee\0asso.nc\0bievat.no\0" -"nyny.museum\0" -"kg\0" -"mo-i-rana.no\0" -"gov.dz\0ki\0" +"kameyama.mie.jp\0missile.museum\0" +"fhv.se\0hu.com\0" +"art.pl\0" +"tamano.okayama.jp\0" +"taketa.oita.jp\0" +"\xc3\xb8yer.no\0oystre-slidre.no\0rad\xc3\xb8y.no\0" +"me.tz\0" +"takahagi.ibaraki.jp\0steam.museum\0" +"technology.museum\0" +"med.ec\0asakuchi.okayama.jp\0" +"med.ee\0stavanger.no\0merseine.nu\0" +"al.no\0porsangu.no\0" +"stavern.no\0me.us\0" +"lib.ct.us\0" +"emp.br\0tr\xc3\xa6na.no\0" +"kayabe.hokkaido.jp\0" +"sekigahara.gifu.jp\0" +"udine.it\0shacknet.nu\0" +"presse.km\0posts-and-telecommunications.museum\0" +"is-a-chef.net\0" +"gokase.miyazaki.jp\0" +"choshi.chiba.jp\0podhale.pl\0" +"archaeology.museum\0" +"localhistory.museum\0" +"krasnoyarsk.ru\0" +"minamidaito.okinawa.jp\0yorkshire.museum\0" +"lavangen.no\0" +"oyamazaki.kyoto.jp\0" +"nagasaki.nagasaki.jp\0" +"\xc3\xa1laheadju.no\0" +"kameoka.kyoto.jp\0" +"bielawa.pl\0\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0" +"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0art.sn\0from-pr.com\0" +"takata.fukuoka.jp\0dielddanuorri.no\0" +"fujisato.akita.jp\0association.museum\0" +"gouv.fr\0fi.it\0presse.ml\0" +"nakagawa.hokkaido.jp\0" +"tanabe.wakayama.jp\0" "monmouth.museum\0" -"suldal.no\0" -"bc.ca\0km\0zt.ua\0" -"pt.it\0kn\0" -"fineart.museum\0" -"la\0" -"kr\0gulen.no\0" -"m.bg\0mo.cn\0lc\0alaheadju.no\0g\xc3\xa1\xc5\x8bgaviika.no\0" -"nowaruda.pl\0cc.ut.us\0" -"br\xc3\xb8nn\xc3\xb8y.no\0" -"ky\0li\0overhalla.no\0" -"kz\0khv.ru\0" -"lk\0" -"artdeco.museum\0" -"ma\0fortworth.museum\0kostroma.ru\0" -"ro.it\0kirkenes.no\0vestby.no\0" -"urbino-pesaro.it\0ls\0mc\0alstahaug.no\0" -"blog.br\0gov.ge\0lt\0md\0" -"lu\0me\0botanicgarden.museum\0" -"gov.gg\0lv\0oh.us\0" -"gov.gh\0mg\0valley.museum\0" -"gov.gi\0mh\0" -"ly\0sandiego.museum\0" -"mk\0" -"ml\0" -"gov.gn\0rollag.no\0naklo.pl\0" -"mn\0" -"mo\0" -"mp\0leirvik.no\0" -"gov.gr\0mq\0na\0cc.ks.us\0" -"mr\0" -"ms\0nc\0" -"valer.hedmark.no\0" -"mu\0ne\0" -"mv\0nf\0" -"mw\0" -"mx\0nord-odal.no\0jur.pro\0" -"my\0" -"gov.hk\0name.hr\0" -"nl\0" -"astronomy.museum\0lib.nm.us\0" -"catania.it\0" -"no\0" -"skjerv\xc3\xb8y.no\0" -"k12.ne.us\0" -"monza-e-della-brianza.it\0!pref.fukushima.jp\0nr\0" -"gov.ie\0" -"stuttgart.museum\0nu\0cc.mn.us\0" -"karasjohka.no\0" -"engine.aero\0bearalvahki.no\0" -"oyer.no\0" -"ve.it\0" -"gov.im\0froland.no\0cc.ar.us\0" -"gov.in\0magadan.ru\0" -"pescara.it\0" -"gov.iq\0usdecorativearts.museum\0" -"gov.ir\0pa\0" -"gov.is\0" -"gov.it\0lavagis.no\0" -"gov.je\0" -"naustdal.no\0pe\0k12.or.us\0" -"gd.cn\0carraramassa.it\0pf\0" -"ph\0" -"cc.ny.us\0" -"rissa.no\0" -"info\0pk\0pomorze.pl\0" -"pl\0" -"gov.jo\0asso.km\0pn\0" -"*.okayama.jp\0cieszyn.pl\0" -"freight.aero\0" -"pr\0" -"narvik.no\0ps\0" -"!pref.aichi.jp\0elverum.no\0pt\0" -"edunet.tn\0" -"gov.kg\0" -"flatanger.no\0marker.no\0pw\0" -"gov.ki\0nuremberg.museum\0" -"aip.ee\0" -"gov.km\0" -"gov.kn\0" -"gov.kp\0" -"rieti.it\0gov.la\0bajddar.no\0" -"gov.lb\0aviation.museum\0" -"gov.lc\0" -"asso.mc\0" -"re\0" -"ut.us\0" -"sa.gov.au\0gov.ky\0" -"mo.it\0gov.kz\0" -"gov.lk\0" -"iraq.museum\0" -"badajoz.museum\0" -"8.bg\0inder\xc3\xb8y.no\0" -"monticello.museum\0ro\0ks.ua\0" -"gov.ma\0svizzera.museum\0" -"gov.lr\0sa\0" -"matera.it\0sb\0" -"gov.lt\0rs\0sc\0" -"gov.me\0sd\0" -"gov.lv\0ru\0se\0" -"gov.mg\0" -"rw\0sg\0" -"gov.ly\0assisi.museum\0kids.museum\0sh\0" -"si\0" -"gov.mk\0" -"gov.ml\0sk\0" -"sl\0" -"gov.mn\0airguard.museum\0sm\0" -"gov.mo\0l.se\0sn\0" -"so\0" -"gov.mr\0ks.us\0" -"name.az\0sr\0" -"naturhistorisches.museum\0tc\0" -"trainer.aero\0cn.it\0urbinopesaro.it\0gov.mu\0nativeamerican.museum\0st\0td\0" -"gov.mv\0su\0" -"trentino.it\0gov.mw\0gov.ng\0tf\0" -"tg\0" -"co.ae\0venezia.it\0gov.my\0th\0" -"!pref.ehime.jp\0sy\0" -"co.ag\0lewismiller.museum\0ostrowiec.pl\0sz\0tj\0" -"tk\0" -"motorcycle.museum\0tl\0" -"birdart.museum\0trogstad.no\0tm\0" -"tn\0" -"humanities.museum\0to\0" -"pu.it\0gov.nr\0ua\0lib.ut.us\0" -"co.ao\0" -"co.ba\0trondheim.no\0tt\0" -"in-addr.arpa\0tempioolbia.it\0!city.yokohama.jp\0mn.us\0" -"n.bg\0schoenbrunn.museum\0tv\0" -"co.at\0aremark.no\0tw\0ug\0" -"jus.br\0" -"co.bi\0bialowieza.pl\0ar.us\0" -"audnedaln.no\0kustanai.ru\0" -"va\0" -"us\0vc\0" -"newport.museum\0" -"kopervik.no\0gov.ph\0vg\0" -"ny.us\0vi\0" -"co.bw\0finn\xc3\xb8y.no\0gov.pk\0uz\0" -"honefoss.no\0gov.pl\0lanbib.se\0" -"co.ci\0" -"gov.pn\0intl.tn\0" -"act.gov.au\0vn\0" -"television.museum\0gov.pr\0" -"sykkylven.no\0v\xc3\xa5ler.hedmark.no\0gov.ps\0" -"gov.pt\0" -"co.cr\0vu\0" -"legnica.pl\0" -"sa.au\0" -"bjarkoy.no\0" -"openair.museum\0birkenes.no\0lib.nj.us\0" -"fylkesbibl.no\0holt\xc3\xa5len.no\0" -"iz.hr\0" -"ws\0" -"oceanographique.museum\0" -"b\xc3\xa1id\xc3\xa1r.no\0cc.mo.us\0" -"\xc3\xb8ygarden.no\0" -"contemporary.museum\0" -"gb.com\0cc.as.us\0" -"belluno.it\0gov.sa\0" -"gov.sb\0" -"gov.rs\0gov.sc\0" -"gov.sd\0" -"!pref.nagasaki.jp\0gov.ru\0" -"asia\0" -"sa.cr\0gov.rw\0gov.sg\0" -"kuzbass.ru\0" -"gs.vf.no\0" -"gov.sl\0" -"norfolk.museum\0" -"k12.de.us\0" -"mil\0" -"rendalen.no\0" -"gov.st\0" -"agro.pl\0" -"orkdal.no\0" -"le.it\0gov.sy\0" -"gov.tj\0" -"co.gg\0nore-og-uvdal.no\0v\xc3\xa5ler.\xc3\xb8stfold.no\0" -"gov.tl\0" -"gov.tn\0" -"gov.to\0" -"kids.us\0" -"equipment.aero\0gov.ua\0" -"!city.niigata.jp\0gov.tt\0" -"sel.no\0" -"l\xc3\xa4ns.museum\0" -"gov.tw\0" -"rennebu.no\0" -"egersund.no\0" -"medecin.km\0" -"co.gy\0" -"!mecon.ar\0" -"berlin.museum\0" -"carrara-massa.it\0" -"9.bg\0" -"pri.ee\0gov.vc\0" -"at.it\0" -"muosat.no\0" -"co.id\0" -"co.hu\0" -"etne.no\0" -"\xc3\xa1lt\xc3\xa1.no\0" -"gov.vn\0" -"modelling.aero\0" -"co.im\0" -"co.in\0\xc3\xa5krehamn.no\0m.se\0" -"gouv.fr\0*.kitakyushu.jp\0" -"narviika.no\0" -"rennes\xc3\xb8y.no\0" -"co.ir\0afjord.no\0" -"lea\xc5\x8bgaviika.no\0buryatia.ru\0" -"co.it\0coastaldefence.museum\0" -"co.je\0vf.no\0" -"osteroy.no\0" -"uslivinghistory.museum\0" -"aerobatic.aero\0" -"mesaverde.museum\0mining.museum\0" -"a\xc3\xa9roport.ci\0gov.ws\0" -"co.jp\0copenhagen.museum\0" -"pv.it\0" -"r\xc3\xb8mskog.no\0" -"vossevangen.no\0porsanger.no\0" -"salat.no\0mo.us\0" -"o.bg\0imperia.it\0carrier.museum\0" -"carbonia-iglesias.it\0" -"as.us\0" -"alvdal.no\0" -"state.museum\0mandal.no\0cn.ua\0" -"cuneo.it\0" +"dyr\xc3\xb8y.no\0" +"takikawa.hokkaido.jp\0urakawa.hokkaido.jp\0" +"shibecha.hokkaido.jp\0" +"sand\xc3\xb8y.no\0" +"collection.museum\0" +"kusatsu.gunma.jp\0" +"pulawy.pl\0" +"monticello.museum\0" +"med.ht\0" +"ct.it\0otago.museum\0alaheadju.no\0" +"omotego.fukushima.jp\0name\0" +"balsan.it\0" +"ogi.saga.jp\0" +"okawa.fukuoka.jp\0" +"norfolk.museum\0n\xc3\xa6r\xc3\xb8y.no\0" "gouv.ht\0" -"!city.okayama.jp\0co.kr\0" -"co.lc\0" -"sa.it\0" -"donna.no\0" -"sortland.no\0" -"tomsk.ru\0" -"birthplace.museum\0l\xc3\xb8""dingen.no\0" -"ge.it\0orenburg.ru\0" -"cn.com\0" -"co.ma\0" -"co.ls\0skaun.no\0name.vn\0" -"navigation.aero\0" -"cagliari.it\0co.me\0portal.museum\0" +"kaminokawa.tochigi.jp\0" +"hammerfest.no\0" +"hiraya.nagano.jp\0settlement.museum\0" +"toei.aichi.jp\0santabarbara.museum\0" +"\xc3\xb8rsta.no\0" +"ao.it\0sano.tochigi.jp\0jondal.no\0" +"re.it\0" +"kamitsue.oita.jp\0" +"sola.no\0" +"laspezia.it\0luzern.museum\0salat.no\0stv.ru\0est-a-la-maison.com\0" +"avocat.fr\0sm\xc3\xb8la.no\0" +"bando.ibaraki.jp\0kawakami.nara.jp\0" +"*.kawasaki.jp\0ngo.lk\0" "gouv.bj\0" -"udine.it\0" -"engineer.aero\0" -"szczecin.pl\0" -"wales.museum\0" -"co.na\0bo.telemark.no\0" -"austin.museum\0" -"k12.mo.us\0" -"co.mu\0" -"gouv.ci\0" -"co.mw\0" -"esp.br\0" -"naturalhistorymuseum.museum\0" -"mosjoen.no\0" -"solund.no\0" -"name.tj\0" -"sand\xc3\xb8y.no\0" -"kunstunddesign.museum\0" -"cartoonart.museum\0collection.museum\0gsm.pl\0" -"aure.no\0" -"!pref.yamaguchi.jp\0historical.museum\0" -"name.tt\0" -"england.museum\0valle.no\0" -"cc.ok.us\0" -"salangen.no\0" -"gloppen.no\0" -"cc.co.us\0" -"contemporaryart.museum\0" -"tas.edu.au\0" -"trading.aero\0" -"mazury.pl\0" -"!pref.aomori.jp\0co.pl\0" -"opoczno.pl\0" -"*.kobe.jp\0co.pn\0" -"oppegard.no\0" -"co.pw\0" -"saltdal.no\0smolensk.ru\0" -"na.it\0\xc4\x8d\xc3\xa1hcesuolo.no\0" -"vgs.no\0evenassi.no\0" -"parachuting.aero\0jl.cn\0maritime.museum\0bd.se\0" -"badaddja.no\0" -"bergen.no\0" -"brussel.museum\0" -"avoues.fr\0" -"cesenaforli.it\0" -"oregontrail.museum\0" -"ullensaker.no\0" -"jobs\0" -"accident-prevention.aero\0" -"n.se\0" -"association.museum\0california.museum\0" -"cultural.museum\0co.rs\0" -"zoology.museum\0" -"pruszkow.pl\0" -"control.aero\0nt.edu.au\0net\0komforb.se\0" -"lincoln.museum\0aurland.no\0name.pr\0co.rw\0" -"ostroleka.pl\0" -"isernia.it\0" -"tm.fr\0" -"gs.ol.no\0" -"nb.ca\0marnardal.no\0" -"williamsburg.museum\0" -"!jet.uk\0" -"suisse.museum\0\xc3\xa5""fjord.no\0flakstad.no\0" -"karmoy.no\0" -"yn.cn\0chesapeakebay.museum\0" -"nsw.au\0" -"amur.ru\0co.st\0" -"imb.br\0siellak.no\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" -"name.na\0" -"co.th\0" -"p.bg\0" -"co.sz\0co.tj\0" -"name.mv\0\xc3\xa5lesund.no\0lib.in.us\0" -"lucerne.museum\0naumburg.museum\0" -"society.museum\0name.my\0" -"tinn.no\0" -"co.tt\0" -"unj\xc3\xa1rga.no\0" -"co.ug\0" -"lib.wy.us\0" -"co.tz\0" -"ass.km\0" -"ok.us\0" -"tm.hu\0kongsvinger.no\0" -"ibestad.no\0" -"juedisches.museum\0co.us\0" -"cq.cn\0" -"rs.ba\0" -"wa.edu.au\0co.vi\0" -"co.uz\0" -"health.museum\0" -"grue.no\0" -"automotive.museum\0journalism.museum\0settlement.museum\0" -"qh.cn\0interactive.museum\0" -"snillfjord.no\0!national-library-scotland.uk\0" -"balsfjord.no\0lib.nh.us\0" -"kolobrzeg.pl\0" -"gs.tm.no\0" -"h\xc3\xb8nefoss.no\0" -"ol.no\0" -"music.museum\0moareke.no\0" -"b\xc3\xb8.nordland.no\0" -"name.mk\0lier.no\0" -"eidfjord.no\0" -"sc.cn\0tm.km\0" -"jelenia-gora.pl\0sanok.pl\0" -"intelligence.museum\0" -"srv.br\0elblag.pl\0" -"judygarland.museum\0" -"padua.it\0" -"k12.co.us\0" -"lindesnes.no\0" -"name.jo\0izhevsk.ru\0" -"yorkshire.museum\0mel\xc3\xb8y.no\0" -"tm.mc\0lib.pr.us\0" -"hjartdal.no\0" +"sennan.osaka.jp\0" +"greta.fr\0" +"minamiuonuma.niigata.jp\0h\xc3\xa1""bmer.no\0" +"sanuki.kagawa.jp\0" +"cosenza.it\0kota.aichi.jp\0takko.aomori.jp\0" +"gamvik.no\0" +"kaneyama.fukushima.jp\0cc.ky.us\0" +"stjohn.museum\0" +"habikino.osaka.jp\0askim.no\0" +"gouv.ci\0musashimurayama.tokyo.jp\0" +"gs.bu.no\0" +"teshikaga.hokkaido.jp\0al.us\0" +"re.kr\0" +"kyotamba.kyoto.jp\0minnesota.museum\0" +"ise.mie.jp\0" +"med.ly\0" +"safety.aero\0kyonan.chiba.jp\0koga.ibaraki.jp\0skedsmokorset.no\0" +"!www.ck\0sherbrooke.museum\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0" +"b\xc3\xa1jddar.no\0" +"fuchu.toyama.jp\0conf.lv\0" +"yonabaru.okinawa.jp\0" +"9.bg\0ujiie.tochigi.jp\0" +"numata.hokkaido.jp\0luroy.no\0sortland.no\0" +"yamamoto.miyagi.jp\0" +"morimachi.shizuoka.jp\0" +"iijima.nagano.jp\0ichikawamisato.yamanashi.jp\0upow.gov.pl\0" +"losangeles.museum\0" +"club.aero\0" +"kommunalforbund.se\0" +"drangedal.no\0" +"ngo.ph\0" +"tur.br\0" +"ngo.pl\0" +"nishinoomote.kagoshima.jp\0" +"lib.dc.us\0" +"chihayaakasaka.osaka.jp\0eastafrica.museum\0" +"leitungsen.de\0" +"aurland.no\0" +"misawa.aomori.jp\0med.pa\0" +"inabe.mie.jp\0" +"laquila.it\0" +"tm.fr\0toon.ehime.jp\0" +"kusatsu.shiga.jp\0" +"med.pl\0" +"hofu.yamaguchi.jp\0" +"mamurogawa.yamagata.jp\0vinnytsia.ua\0" +"miyota.nagano.jp\0" +"parachuting.aero\0" +"suli.hu\0" +"yasugi.shimane.jp\0" +"johana.toyama.jp\0" +"yaita.tochigi.jp\0!nawras.om\0izhevsk.ru\0" +"frei.no\0" +"kumenan.okayama.jp\0kikugawa.shizuoka.jp\0" +"vr.it\0" +"ambulance.museum\0" +"tsunan.niigata.jp\0matsubushi.saitama.jp\0" +"ichiba.tokushima.jp\0" +"tm.hu\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0" +"id.au\0perugia.it\0" +"gotemba.shizuoka.jp\0fla.no\0" +"kamikoani.akita.jp\0sec.ps\0" +"med.sa\0" +"skole.museum\0" +"airport.aero\0" +"med.sd\0" +"sibenik.museum\0" +"sondre-land.no\0" +"jpn.com\0" +"shimamaki.hokkaido.jp\0" +"owariasahi.aichi.jp\0utashinai.hokkaido.jp\0hotel.tz\0" +"namie.fukushima.jp\0komi.ru\0" +"malvik.no\0lib.nj.us\0" +"k-uralsk.ru\0" +"xz.cn\0lukow.pl\0" +"iiyama.nagano.jp\0steiermark.museum\0radom.pl\0blogspot.co.at\0" +"saltdal.no\0vladivostok.ru\0" +"int\0kira.aichi.jp\0" +"flog.br\0shiranuka.hokkaido.jp\0nsk.ru\0" +"ar.it\0" +"tono.iwate.jp\0fujiidera.osaka.jp\0" +"tm.km\0" +"ct.us\0" +"kuchinotsu.nagasaki.jp\0" +"shinto.gunma.jp\0" +"trysil.no\0" +"saves-the-whales.com\0" +"off.ai\0" +"county.museum\0" +"tank.museum\0" +"is-a-hard-worker.com\0" +"pc.it\0" +"tm.mc\0kyiv.ua\0" +"onojo.fukuoka.jp\0" "tm.mg\0" -"bari.it\0milano.it\0" -"lg.jp\0" -"zgrad.ru\0" -"sm\xc3\xb8la.no\0" -"communications.museum\0" -"arts.co\0seoul.kr\0engerdal.no\0" +"onga.fukuoka.jp\0" +"a.bg\0vlog.br\0lib.id.us\0" +"kalmykia.ru\0" +"alto-adige.it\0" +"shibukawa.gunma.jp\0" +"toba.mie.jp\0" +"misato.shimane.jp\0" +"kitahata.saga.jp\0" +"for-more.biz\0" +"siellak.no\0" +"la-spezia.it\0" +"mn.it\0seljord.no\0" +"mihama.chiba.jp\0" +"miyako.fukuoka.jp\0" +"fujinomiya.shizuoka.jp\0moka.tochigi.jp\0" +"cultural.museum\0" +"tm.no\0" +"kamisato.saitama.jp\0magadan.ru\0" +"mk.ua\0" +"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0" +"motobu.okinawa.jp\0" +"r\xc3\xb8yrvik.no\0is-a-geek.com\0" +"shizukuishi.iwate.jp\0omura.nagasaki.jp\0" +"rec.br\0kai.yamanashi.jp\0" +"monza.it\0" +"teo.br\0pescara.it\0" +"yugawa.fukushima.jp\0circus.museum\0kirkenes.no\0" +"air-surveillance.aero\0br\xc3\xb8nn\xc3\xb8y.no\0roros.no\0rnd.ru\0" +"pharmacy.museum\0gs.nt.no\0" +"bmd.br\0takizawa.iwate.jp\0bunkyo.tokyo.jp\0" +"motegi.tochigi.jp\0youth.museum\0" +"gob.bo\0tamba.hyogo.jp\0" +"lib.tx.us\0" +"kitashiobara.fukushima.jp\0" +"rec.co\0kautokeino.no\0" +"baseball.museum\0dinosaur.museum\0tm.pl\0" +"grane.no\0" "oster\xc3\xb8y.no\0" -"\xe6\x95\x8e\xe8\x82\xb2.hk\0foggia.it\0verran.no\0" -"orskog.no\0voronezh.ru\0kv.ua\0" -"av.it\0" -"tm.no\0nissedal.no\0" -"historisches.museum\0gs.mr.no\0" -"medecin.fr\0" -"montreal.museum\0" -"o.se\0" -"!metro.tokyo.jp\0sola.no\0" -"k12.tn.us\0" -"floro.no\0" -"milan.it\0*.shiga.jp\0" -"berkeley.museum\0" -"maintenance.aero\0" -"ws.na\0" -"lindas.no\0cc.ia.us\0" -"brescia.it\0embroidery.museum\0" -"arezzo.it\0tm.pl\0" -"r\xc3\xa6lingen.no\0" -"burghof.museum\0" -"rec.br\0" -"q.bg\0" -"!nawras.om\0" -"hammarfeasta.no\0" -"moss.no\0" -"on.ca\0" -"gouv.rw\0" -"luxembourg.museum\0" -"rec.co\0british.museum\0" -"reggio-emilia.it\0" -"gouv.sn\0lib.wv.us\0" -"avocat.fr\0" -"simbirsk.ru\0" -"jar.ru\0" -"monza-brianza.it\0" -"tm.ro\0" -"imageandsound.museum\0" -"jpn.com\0mr.no\0" -"siracusa.it\0" -"norilsk.ru\0tm.se\0" -"tn.it\0" -"jeju.kr\0" -"!pref.fukuoka.jp\0" -"*.hyogo.jp\0portlligat.museum\0" -"!pref.osaka.jp\0" -"siena.it\0sc.kr\0omaha.museum\0saskatchewan.museum\0" -"phoenix.museum\0vanylven.no\0" -"botanicalgarden.museum\0" -"turek.pl\0" -"vagsoy.no\0" -"riodejaneiro.museum\0" -"vi.it\0" -"uy.com\0" -"kristiansand.no\0" -"sd.cn\0trento.it\0" -"muncie.museum\0" -"berg.no\0meldal.no\0" -"nes.buskerud.no\0" -"saratov.ru\0" -"gs.oslo.no\0" -"harstad.no\0vaga.no\0" -"research.museum\0" -"brunel.museum\0ia.us\0" -"test.tj\0" -"columbia.museum\0" -"ms.it\0stockholm.museum\0" -"reklam.hu\0" -"pomorskie.pl\0lg.ua\0" -"bg.it\0historicalsociety.museum\0rns.tn\0" -"mallorca.museum\0surgut.ru\0cc.sc.us\0" -"ushistory.museum\0" -"palana.ru\0" -"snoasa.no\0" -"naturalsciences.museum\0" -"yaroslavl.ru\0" -"unjarga.no\0" -"p.se\0" -"ingatlan.hu\0" -"irc.pl\0" -"savona.it\0" -"cr.it\0" -"test.ru\0cc.tn.us\0" -"ms.kr\0museumvereniging.museum\0" -"time.no\0k12.ia.us\0" -"vladimir.ru\0" -"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" -"gouv.km\0nationalfirearms.museum\0" -"m\xc3\xa1latvuopmi.no\0" -"aero\0yosemite.museum\0" -"r.bg\0school.na\0" -"cc.vi.us\0" -"*.wakayama.jp\0" -"beauxarts.museum\0averoy.no\0ullensvang.no\0bar.pro\0" -"!city.hiroshima.jp\0" -"b\xc3\xa1hccavuotna.no\0" -"frosta.no\0" -"gdynia.pl\0" -"medical.museum\0" -"embaixada.st\0" -"balsan.it\0vantaa.museum\0" -"za.net\0" -"!city.saitama.jp\0lib.ks.us\0" -"fnd.br\0" -"ru.com\0se.com\0hol.no\0modalen.no\0" -"gouv.ml\0chukotka.ru\0" -"malopolska.pl\0" -"mansion.museum\0" -"iki.fi\0children.museum\0" -"cyber.museum\0rec.nf\0mo\xc3\xa5reke.no\0" -"to.it\0" -"hasvik.no\0" -"\xc3\xb8yer.no\0" -"arts.ro\0sc.ug\0" -"lib.ar.us\0" -"sc.tz\0cc.ms.us\0cc.nc.us\0" -"etc.br\0poznan.pl\0" -"cnt.br\0viking.museum\0" -"*.miyazaki.jp\0" -"melhus.no\0" -"skodje.no\0vevelstad.no\0" -"sc.us\0" -"upow.gov.pl\0" -"!city.fukuoka.jp\0brandywinevalley.museum\0natuurwetenschappen.museum\0tranby.no\0" -"bahn.museum\0msk.ru\0" -"delmenhorst.museum\0" -"russia.museum\0fuoisku.no\0" -"shell.museum\0" -"r\xc3\xa1isa.no\0" -"hs.kr\0udmurtia.ru\0" -"palermo.it\0" -"pilot.aero\0" -"tn.us\0" -"priv.hu\0" -"li.it\0" -"kr\xc3\xa5""anghke.no\0mosreg.ru\0" -"lib.fl.us\0" -"plants.museum\0" -"ulsan.kr\0national.museum\0" -"mil.ac\0!pref.nara.jp\0surgeonshall.museum\0" -"mil.ae\0santacruz.museum\0vi.us\0" -"wlocl.pl\0" -"mt.it\0napoli.it\0alaska.museum\0arts.nf\0" -"missoula.museum\0" -"rec.ro\0" -"mil.al\0" -"marburg.museum\0waw.pl\0" -"pharmaciens.km\0indianapolis.museum\0larsson.museum\0" -"cc.sd.us\0" -"mil.ba\0mobi\0" -"indianmarket.museum\0" -"recreation.aero\0padova.it\0" -"varese.it\0parti.se\0" -"mil.az\0" -"mil.bo\0!pref.kagoshima.jp\0khmelnitskiy.ua\0" -"rygge.no\0" -"os\xc3\xb8yro.no\0" -"mil.br\0" -"cs.it\0" -"austevoll.no\0fjell.no\0" -"mil.by\0" -"!pref.tokushima.jp\0org\0" -"mil.cn\0gs.svalbard.no\0" -"mil.co\0" -"pz.it\0lib.va.us\0\xd1\x80\xd1\x84\0" -"\xe4\xb8\xaa\xe4\xba\xba.hk\0ms.us\0nc.us\0k12.wi.us\0" -"s.bg\0drangedal.no\0" -"en.it\0" -"culturalcenter.museum\0" -"house.museum\0divttasvuotna.no\0" -"fhs.no\0" -"circus.museum\0" -"priv.at\0" -"mil.ec\0" -"ruovat.no\0" -"midsund.no\0vagan.no\0" -"casadelamoneda.museum\0" -"bristol.museum\0" -"and.museum\0" -"ascolipiceno.it\0computerhistory.museum\0vyatka.ru\0" -"uhren.museum\0" -"lahppi.no\0" -"*.yokohama.jp\0cody.museum\0lib.al.us\0" -"colonialwilliamsburg.museum\0indian.museum\0cc.ky.us\0" -"tp.it\0biev\xc3\xa1t.no\0" -"can.br\0royken.no\0" +"eidskog.no\0lanbib.se\0" +"gob.cl\0kristiansund.no\0" "id.ir\0" -"mediocampidano.it\0tromso.no\0" -"kartuzy.pl\0k12.ok.us\0" -"*.saitama.jp\0stjohn.museum\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0" -"mil.ge\0trani-barletta-andria.it\0" -"lib.as.us\0" -"swiebodzin.pl\0cc.mt.us\0cc.nd.us\0" -"mil.gh\0" -"science-fiction.museum\0\xd9\x82\xd8\xb7\xd8\xb1\0" -"airtraffic.aero\0" -"konskowola.pl\0" -"scienceandhistory.museum\0nysa.pl\0sd.us\0" -"balestrand.no\0" -"oygarden.no\0" -"her\xc3\xb8y.nordland.no\0" -"!pref.ishikawa.jp\0strand.no\0" -"\xe7\xb5\x84\xe7\xbb\x87.hk\0mil.hn\0" -"gob.bo\0volda.no\0" -"losangeles.museum\0larvik.no\0" -"university.museum\0" -"cc.dc.us\0" -"mil.id\0" -"sorfold.no\0" -"watch-and-clock.museum\0" -"flor\xc3\xb8.no\0" -"nittedal.no\0oppeg\xc3\xa5rd.no\0" -"k12.ri.us\0" -"gob.cl\0" -"komi.ru\0" -"government.aero\0mil.in\0" -"mil.iq\0id.lv\0" -"culture.museum\0" -"id.ly\0" -"raholt.no\0" -"lubin.pl\0grozny.ru\0" -"kchr.ru\0" -"nikolaev.ua\0" -"lib.sd.us\0" -"de.com\0" -"mil.jo\0" -"*.kanagawa.jp\0gaular.no\0miasta.pl\0" -"bi.it\0rnu.tn\0uzhgorod.ua\0" -"idrett.no\0v\xc3\xa5gs\xc3\xb8y.no\0" -"wroclaw.pl\0" -"res.aero\0ne.jp\0mil.kg\0" -"\xc3\xa5mli.no\0" -"education.museum\0" -"dgca.aero\0" -"mil.km\0" -"trolley.museum\0" -"cci.fr\0r.se\0" -"archaeological.museum\0" -"monzaedellabrianza.it\0mil.kr\0" -"gob.es\0kvafjord.no\0ky.us\0" -"lecco.it\0" -"ct.it\0" +"iwate.iwate.jp\0" +"hotel.lk\0" +"omiya.saitama.jp\0" +"tanagura.fukushima.jp\0" +"perm.ru\0" +"\xc3\xb8rland.no\0" +"western.museum\0from-va.com\0" +"game-server.cc\0" +"gob.do\0hita.oita.jp\0" +"ashibetsu.hokkaido.jp\0zgorzelec.pl\0" +"gob.ec\0" +"blogspot.co.il\0" +"barum.no\0" +"bozen.it\0kotohira.kagawa.jp\0tm.ro\0gouv.rw\0" +"varese.it\0hirokawa.fukuoka.jp\0" +"ia.us\0k12.ct.us\0" +"tm.se\0" +"gouv.sn\0lib.or.us\0" +"is-a-therapist.com\0" +"pc.pl\0" +"gob.es\0seiro.niigata.jp\0farsund.no\0" "magazine.aero\0" -"operaunite.com\0ne.kr\0" -"mil.kz\0skoczow.pl\0" -"nf.ca\0" -"western.museum\0" -"kunst.museum\0gaivuotna.no\0karpacz.pl\0spb.ru\0cc.id.us\0" -"slask.pl\0" -"youth.museum\0" -"adv.br\0campidanomedio.it\0!songfest.om\0" -"geelvinck.museum\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" -"mil.lv\0" -"fie.ee\0mil.mg\0mt.us\0nd.us\0k12.vt.us\0" -"t.bg\0ushuaia.museum\0" -"off.ai\0" -"irkutsk.ru\0" -"stor-elvdal.no\0tourism.tn\0" -"penza.ru\0" -"bj.cn\0\xe4\xb8\xad\xe5\x9b\xbd\0" -"civilwar.museum\0mil.mv\0opole.pl\0" -"nes.akershus.no\0" -"mil.my\0karelia.ru\0" -"como.it\0sande.vestfold.no\0" -"\xe4\xb8\xad\xe5\x9c\x8b\0" -"gob.hn\0lib.la.us\0" -"mil.no\0cc.wv.us\0" -"boleslawiec.pl\0" -"!pref.niigata.jp\0gs.sf.no\0dc.us\0k12.mi.us\0" -"museum\0dep.no\0kv\xc3\xa6nangen.no\0l\xc3\xa1hppi.no\0" -"film.museum\0" -"frei.no\0" -"notodden.no\0risor.no\0" -"messina.it\0" -"eidsberg.no\0" -"krakow.pl\0lib.mt.us\0lib.nd.us\0" -"rauma.no\0" -"mulhouse.museum\0" -"sibenik.museum\0grong.no\0mil.pe\0" -"budejju.no\0k12.nv.us\0" -"stavanger.no\0mil.ph\0" -"forli-cesena.it\0" -"naples.it\0cc.ne.us\0" -"s\xc3\xb8r-aurdal.no\0" -"mil.pl\0" -"vibo-valentia.it\0ski.museum\0siedlce.pl\0" -"bus.museum\0" -"tozsde.hu\0" -"!pref.shizuoka.jp\0santabarbara.museum\0" -"zhitomir.ua\0" -"pro.az\0" -"ne.pw\0" -"pro.br\0orkanger.no\0b\xc3\xb8.telemark.no\0" -"roma.it\0cc.ct.us\0" -"heritage.museum\0giske.no\0" -"!pref.kumamoto.jp\0prof.pr\0" -"*.kochi.jp\0" -"andria-barletta-trani.it\0*.toyama.jp\0sveio.no\0" -"id.us\0" -"bolt.hu\0" -"fetsund.no\0porsgrunn.no\0" -"iglesias-carbonia.it\0" -"sf.no\0" -"mil.ru\0" -"from.hr\0asnes.no\0mil.rw\0" -"alesund.no\0sos.pl\0" -"livorno.it\0" -"crafts.museum\0" -"aquila.it\0" -"vega.no\0" -"jewelry.museum\0" -"sk\xc3\xa1nit.no\0chita.ru\0" -"pro.ec\0" -"fortmissoula.museum\0j\xc3\xb8lster.no\0" -"pro\0mil.st\0" -"busan.kr\0lib.ga.us\0" -"dellogliastra.it\0" -"aosta.it\0chungnam.kr\0gob.mx\0" -"mil.sy\0k12.hi.us\0" -"mil.tj\0" -"ulan-ude.ru\0mil.to\0wv.us\0" -"luster.no\0volgograd.ru\0" -"pa.it\0kommunalforbund.se\0lib.tx.us\0" -"s.se\0" -"qsl.br\0" -"mil.tw\0" -"est.pr\0ens.tn\0" -"lib.id.us\0" -"mil.tz\0" -"uscountryestate.museum\0" -"agents.aero\0" -"\xc3\xb8vre-eiker.no\0ne.ug\0" -"pb.ao\0" -"gob.pa\0ne.tz\0" -"tur.br\0" -"mil.vc\0" -"or.at\0gob.pe\0" -"s\xc3\xb8r-fron.no\0" -"or.bi\0ne.us\0" -"u.bg\0gob.pk\0" -"stavern.no\0" -"brindisi.it\0" -"aknoluokta.no\0" -"!pref.kyoto.jp\0tydal.no\0" -"plc.ly\0muos\xc3\xa1t.no\0" -"or.ci\0hamaroy.no\0priv.pl\0" -"vestre-slidre.no\0gniezno.pl\0" -"\xe7\xae\x87\xe4\xba\xba.hk\0" -"andebu.no\0" -"nieruchomosci.pl\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0" -"or.cr\0pro.ht\0bolzano.it\0" -"ct.us\0k12.md.us\0" -"za.org\0" -"!icnet.uk\0" -"localhistory.museum\0" -"firm.ht\0" -"lel.br\0tr.it\0kvanangen.no\0" -"sondre-land.no\0t\xc3\xb8nsberg.no\0vefsn.no\0" -"nature.museum\0yamal.ru\0" -"rv.ua\0" -"lans.museum\0lib.ne.us\0" -"lur\xc3\xb8y.no\0" -"eu.com\0firm.in\0" -"hjelmeland.no\0" -"gs.tr.no\0" -"casino.hu\0essex.museum\0tourism.pl\0" -"rennesoy.no\0" -"priv.no\0" -"baths.museum\0mytis.ru\0" -"tingvoll.no\0" -"cc.az.us\0" -"sh.cn\0" -"!pref.miyazaki.jp\0s\xc3\xb8rfold.no\0" -"aurskog-holand.no\0malatvuopmi.no\0" -"lib.ct.us\0" -"cc.pa.us\0" -"pa.gov.pl\0" -"firm.co\0cc.de.us\0" -"nrw.museum\0" -"daejeon.kr\0livinghistory.museum\0" -"gildeskal.no\0lund.no\0" -"\xc3\xb8ksnes.no\0stavropol.ru\0" -"b\xc3\xa6rum.no\0r\xc3\xb8yrvik.no\0" -"osoyro.no\0" -"priv.me\0sula.no\0!parliament.uk\0" -"nationalheritage.museum\0" -"jaworzno.pl\0" -"dinosaur.museum\0" -"garden.museum\0trust.museum\0" -"turen.tn\0" -"kautokeino.no\0" -"pro.na\0" -"gorizia.it\0" -"siljan.no\0" -"or.id\0pro.mv\0" -"bieszczady.pl\0www.ro\0" -"lib.ee\0antiques.museum\0brasil.museum\0tr.no\0" -"aejrie.no\0" -"!pref.hokkaido.jp\0" -"schlesisches.museum\0" -"huissier-justice.fr\0or.it\0" -"t.se\0" -"environment.museum\0" -"vindafjord.no\0" -"edu.ac\0or.jp\0" -"tree.museum\0" -"groundhandling.aero\0edu.af\0" -"rochester.museum\0sanfrancisco.museum\0" -"ebiz.tw\0" -"kirovograd.ua\0" +"ueno.gunma.jp\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" +"ayase.kanagawa.jp\0kitaura.miyazaki.jp\0" +"cz.it\0" +"tp.it\0ikoma.nara.jp\0" +"presse.ci\0konin.pl\0" +"id.lv\0eigersund.no\0nore-og-uvdal.no\0" +"yoshimi.saitama.jp\0fl.us\0" +"id.ly\0" +"dyndns.biz\0" +"ohkura.yamagata.jp\0" +"vlaanderen.museum\0" +"surnadal.no\0" +"urbino-pesaro.it\0" +"evenassi.no\0from-ok.com\0" +"tara.saga.jp\0hashimoto.wakayama.jp\0" +"gob.gt\0" +"hotel.hu\0gs.vf.no\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" +"groks-the.info\0" +"!bl.uk\0" +"ota.gunma.jp\0" +"gob.hn\0kitagata.gifu.jp\0" +"airline.aero\0simbirsk.ru\0" +"katashina.gunma.jp\0hiraizumi.iwate.jp\0" +"hirado.nagasaki.jp\0corporation.museum\0" +"volyn.ua\0" +"fujisawa.kanagawa.jp\0" +"6bone.pl\0" +"gifu.gifu.jp\0kami.kochi.jp\0" +"molde.no\0" +"essex.museum\0" +"tatsuno.hyogo.jp\0" +"cherkasy.ua\0" +"sayo.hyogo.jp\0" +"ar.us\0is-an-engineer.com\0" +"k12.ma.us\0" +"d.bg\0" +"shimofusa.chiba.jp\0" +"california.museum\0" +"songdalen.no\0svelvik.no\0" +"vic.au\0setouchi.okayama.jp\0" +"presse.fr\0" +"theater.museum\0" +"leg.br\0harvestcelebration.museum\0" +"mus.br\0" +"towada.aomori.jp\0" +"mochizuki.nagano.jp\0is-a-knight.org\0" +"nsn.us\0" +"lindas.no\0" +"na.it\0" +"paderborn.museum\0" +"catanzaro.it\0wajiki.tokushima.jp\0" +"gosen.niigata.jp\0busan.kr\0clinton.museum\0embaixada.st\0" +"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0jfk.museum\0" +"hanamaki.iwate.jp\0mielec.pl\0" +"casadelamoneda.museum\0hjelmeland.no\0" +"cc.gu.us\0" +"is-a-anarchist.com\0" +"\xc3\xb8stre-toten.no\0is-a-geek.org\0" +"katori.chiba.jp\0myphotos.cc\0" +"hakata.fukuoka.jp\0" +"oguchi.aichi.jp\0hachirogata.akita.jp\0" +"eniwa.hokkaido.jp\0" +"tottori.jp\0okagaki.fukuoka.jp\0mn.us\0" +"bergamo.it\0noda.chiba.jp\0" +"coastaldefence.museum\0rec.nf\0" +"izu.shizuoka.jp\0" +"karuizawa.nagano.jp\0" +"tadaoka.osaka.jp\0" +"gouv.km\0" +"lunner.no\0" +"topology.museum\0" +"maibara.shiga.jp\0ostroda.pl\0" +"takamori.nagano.jp\0" +"larsson.museum\0" +"obama.fukui.jp\0" +"gob.mx\0amot.no\0" +"hida.gifu.jp\0" +"alessandria.it\0nagiso.nagano.jp\0" +"shunan.yamaguchi.jp\0" +"ogawara.miyagi.jp\0" +"ritto.shiga.jp\0" +"tsuru.yamanashi.jp\0lomza.pl\0" +"f\xc3\xb8rde.no\0" +"yokaichiba.chiba.jp\0" +"\xc3\xb8ygarden.no\0pskov.ru\0" +"chiba.jp\0" +"irc.pl\0" +"fr.it\0mo\xc3\xa5reke.no\0" +"gen.in\0" +"gouv.ml\0" +"estate.museum\0" +"id.us\0k12.de.us\0" +"aomori.aomori.jp\0naturalhistorymuseum.museum\0lib.pa.us\0" +"iwaki.fukushima.jp\0gob.pa\0" +"vaapste.no\0" +"kosei.shiga.jp\0" +"shirosato.ibaraki.jp\0gob.pe\0from-la.net\0" +"tj\xc3\xb8me.no\0" +"viking.museum\0" +"neat-url.com\0" +"chelyabinsk.ru\0" +"gob.pk\0" +"selbu.no\0" +"shari.hokkaido.jp\0" +"gausdal.no\0" +"edu.ac\0catania.it\0ureshino.mie.jp\0a.se\0" +"ts.it\0is-a-celticsfan.org\0" +"edu.af\0school.museum\0" +"blogspot.co.uk\0" +"k12.ar.us\0" +"lib.mt.us\0lib.nd.us\0" "edu.al\0" -"edu.an\0\xc3\xa1k\xc5\x8boluokta.no\0v\xc3\xa5g\xc3\xa5.no\0" -"v.bg\0" +"edu.an\0entomology.museum\0gildeskal.no\0" +"gallery.museum\0stuff-4-sale.us\0" +"nesodden.no\0" "edu.ba\0" -"edu.bb\0nesset.no\0" -"hornindal.no\0pro.pr\0" -"or.kr\0" -"az.us\0" -"edu.bh\0volkenkunde.museum\0" -"edu.bi\0" -"edu.az\0" -"b\xc3\xb8mlo.no\0" +"edu.bb\0" +"iizuka.fukuoka.jp\0shikabe.hokkaido.jp\0" +"edu.au\0" +"rec.ro\0" +"chosei.chiba.jp\0" +"edu.bh\0msk.ru\0" +"edu.bi\0sauherad.no\0" +"edu.az\0ardal.no\0" +"rn.it\0game-host.org\0" "edu.bm\0" -"edu.bo\0tyumen.ru\0" +"histoire.museum\0" +"edu.bo\0mihama.mie.jp\0" +"massacarrara.it\0mobara.chiba.jp\0aogaki.hyogo.jp\0hatogaya.saitama.jp\0oe.yamagata.jp\0" "edu.br\0" -"edu.bs\0pa.us\0" -"alto-adige.it\0whaling.museum\0" -"*.iwate.jp\0" -"edu.ci\0law.pro\0" -"edu.bz\0de.us\0" -"lib.ak.us\0" +"edu.bs\0" +"edu.bt\0" +"tamakawa.fukushima.jp\0uslivinghistory.museum\0waw.pl\0" +"tas.edu.au\0edu.ci\0yura.wakayama.jp\0" +"edu.bz\0niepce.museum\0baidar.no\0" +"mod.gi\0" +"vicenza.it\0gets-it.net\0" "edu.cn\0" -"edu.co\0" -"laspezia.it\0" -"baidar.no\0" -"ts.it\0" -"or.na\0" -"edu.cu\0hotel.lk\0" -"show.aero\0or.mu\0" -"sandnes.no\0" -"museumcenter.museum\0" -"edu.dm\0kazan.ru\0" -"biz\0caltanissetta.it\0odessa.ua\0k12.oh.us\0" -"crimea.ua\0" -"research.aero\0lom.no\0" -"edu.ec\0florence.it\0clock.museum\0sshn.se\0" -"edu.ee\0game.tw\0" -"!pref.okinawa.jp\0" -"ilawa.pl\0" -"edu.dz\0indiana.museum\0" -"gs.jan-mayen.no\0" -"publ.pt\0" -"nom.ad\0" -"skanit.no\0gdansk.pl\0k12.pa.us\0" -"nom.ag\0edu.es\0" -"if.ua\0" -"pro.tt\0lib.de.us\0" -"environmentalconservation.museum\0cc.or.us\0" -"bern.museum\0nat.tn\0" -"rubtsovsk.ru\0" -"!educ.ar\0masoy.no\0" -"bologna.it\0" -"\xc3\xa5snes.no\0fhv.se\0" -"*.tottori.jp\0radoy.no\0" -"romskog.no\0" -"malbork.pl\0" -"olbiatempio.it\0" -"edu.ge\0" -"edu.gh\0" +"edu.co\0glass.museum\0sciencecenter.museum\0" +"tv.bo\0neyagawa.osaka.jp\0" +"pi.it\0arakawa.tokyo.jp\0" +"isahaya.nagasaki.jp\0iwatsuki.saitama.jp\0" +"tv.br\0" +"edu.cu\0" +"gs.st.no\0" +"g.bg\0kamisunagawa.hokkaido.jp\0" +"omigawa.chiba.jp\0" +"edu.dm\0so.gov.pl\0" +"sa.au\0nakagawa.fukuoka.jp\0" +"edu.do\0" +"edu.ec\0suginami.tokyo.jp\0" +"hashima.gifu.jp\0" +"edu.ee\0" +"edu.eg\0" +"mt.it\0hadano.kanagawa.jp\0dontexist.net\0" +"edu.dz\0pistoia.it\0hobol.no\0" +"warabi.saitama.jp\0" +"trading.aero\0nsw.au\0kagawa.jp\0hadsel.no\0" +"ooshika.nagano.jp\0" +"edu.es\0isa.kagoshima.jp\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0" +"priv.hu\0" +"jewishart.museum\0" +"meeres.museum\0trust.museum\0" +"suifu.ibaraki.jp\0" +"oarai.ibaraki.jp\0bomlo.no\0" +"sa.cr\0tarnobrzeg.pl\0" +"conference.aero\0" +"kasaoka.okayama.jp\0" +"gjovik.no\0her\xc3\xb8y.nordland.no\0sk\xc3\xa5nland.no\0" +"edu.ge\0wazuka.kyoto.jp\0" +"syzran.ru\0k12.id.us\0" +"edu.gh\0wakasa.tottori.jp\0fylkesbibl.no\0snoasa.no\0" "edu.gi\0" -"or.pw\0" -"hob\xc3\xb8l.no\0" -"nom.br\0edu.gn\0virginia.museum\0mbone.pl\0!nls.uk\0" -"seljord.no\0pro.vn\0" +"nom.ad\0" +"kamifurano.hokkaido.jp\0" +"kitamoto.saitama.jp\0targi.pl\0" +"nom.ag\0kuki.saitama.jp\0arendal.no\0" +"edu.gn\0" "edu.gp\0" -"edu.gr\0" -"!uba.ar\0!pref.saitama.jp\0" -"greta.fr\0gs.aa.no\0kvinnherad.no\0" -"lib.sc.us\0" -"js.cn\0nom.co\0edu.hk\0" -"lesja.no\0" -"bl.it\0" -"edu.hn\0\xc3\xb8ystre-slidre.no\0mari-el.ru\0" -"hotel.hu\0" -"rindal.no\0" -"edu.ht\0" -"!pref.miyagi.jp\0" -"midtre-gauldal.no\0" -"xj.cn\0australia.museum\0" -"ab.ca\0salvadordali.museum\0olawa.pl\0" -"pc.it\0" -"u.se\0" -"edu.in\0b\xc3\xa1l\xc3\xa1t.no\0" -"ln.cn\0alta.no\0" -"chelyabinsk.ru\0" +"edu.gr\0akishima.tokyo.jp\0" +"cc.vi.us\0" +"edu.gt\0toyokawa.aichi.jp\0" +"nikolaev.ua\0" +"meiwa.mie.jp\0kaneyama.yamagata.jp\0" +"sel.no\0" +"edu.hk\0is-an-entertainer.com\0is-certified.com\0" +"edu.hn\0burghof.museum\0" +"contemporary.museum\0from-wa.com\0" +"s\xc3\xb8r-varanger.no\0" +"klepp.no\0" +"edu.ht\0fedje.no\0!mediaphone.om\0" +"krodsherad.no\0" +"web.co\0" +"messina.it\0fussa.tokyo.jp\0" +"nom.br\0divtasvuodna.no\0" +"war.museum\0porsgrunn.no\0" +"amursk.ru\0" +"edu.in\0ge.it\0komatsu.ishikawa.jp\0" +"is-very-evil.org\0" "edu.iq\0" -"ontario.museum\0" -"edu.is\0" +"edu.is\0erimo.hokkaido.jp\0" "edu.it\0" -"b\xc3\xa5tsfjord.no\0" -"trysil.no\0or.th\0" -"utsira.no\0" -"nom.es\0edu.jo\0fhsk.se\0" -"bale.museum\0" -"w.bg\0" -"lillesand.no\0" +"nom.co\0univ.sn\0k12.tx.us\0" +"web.do\0" +"minami.tokushima.jp\0" +"jeju.kr\0" +"soc.lk\0grimstad.no\0kharkov.ua\0gb.net\0" +"ralingen.no\0" +"edu.jo\0" +"miura.kanagawa.jp\0kunigami.okinawa.jp\0priv.at\0" +"time.museum\0" +"kaho.fukuoka.jp\0d.se\0" +"tv.it\0blogspot.co.nz\0" "edu.kg\0" -"amusement.aero\0" "edu.ki\0" -"fauske.no\0or.ug\0" -"int.az\0askvoll.no\0eidskog.no\0cv.ua\0" -"algard.no\0" -"edu.km\0or.tz\0" -"nom.fr\0edu.kn\0" -"*.ibaraki.jp\0hoylandet.no\0" -"int.bo\0edu.kp\0" +"ass.km\0" +"k12.as.us\0" +"lahppi.no\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0" +"edu.km\0lib.ms.us\0lib.nc.us\0" +"izunokuni.shizuoka.jp\0edu.kn\0" +"nakagusuku.okinawa.jp\0edu.kp\0" "edu.la\0" -"si.it\0edu.lb\0travel.pl\0" -"edu.lc\0mx.na\0n\xc3\xa1vuotna.no\0ovre-eiker.no\0" -"aa.no\0!siemens.om\0" -"sciences.museum\0or.us\0" -"cat\0" -"edu.ky\0" -"int.ci\0edu.kz\0firm.ro\0cc.wy.us\0" -"edu.lk\0vaapste.no\0" -"!pref.tochigi.jp\0" -"int.co\0podlasie.pl\0" -"edu.lr\0" -"karikatur.museum\0jamal.ru\0" -"gjovik.no\0krager\xc3\xb8.no\0k12.az.us\0" -"edu.me\0" -"ud.it\0edu.lv\0entomology.museum\0" -"edu.mg\0moskenes.no\0" -"\xe6\x94\xbf\xe5\xba\x9c.hk\0edu.ly\0" -"stpetersburg.museum\0" +"yashio.saitama.jp\0edu.lb\0" +"nozawaonsen.nagano.jp\0edu.lc\0" +"oguni.yamagata.jp\0jelenia-gora.pl\0gdansk.pl\0" +"tobetsu.hokkaido.jp\0" +"matsuura.nagasaki.jp\0" +"nom.es\0daito.osaka.jp\0edu.ky\0" +"ozu.ehime.jp\0edu.kz\0" +"edu.lk\0" +"sa.it\0" +"lier.no\0" +"cremona.it\0" +"oamishirasato.chiba.jp\0edu.lr\0" +"matsusaka.mie.jp\0edu.me\0" +"minokamo.gifu.jp\0edu.lv\0divttasvuotna.no\0" +"edu.mg\0" +"nom.fr\0" +"edu.ly\0" +"club.tw\0" "edu.mk\0" -"edu.ml\0nordreisa.no\0" -"!pref.fukui.jp\0lib.ms.us\0lib.nc.us\0" -"edu.mn\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" -"fot.br\0edu.mo\0" -"iron.museum\0" -"asti.it\0annefrank.museum\0stv.ru\0cc.nh.us\0" +"edu.ml\0" +"wakayama.wakayama.jp\0skierv\xc3\xa1.no\0" +"edu.mn\0" +"edu.mo\0saratov.ru\0cc.me.us\0" +"vdonsk.ru\0" +"from-ar.com\0" +"zgora.pl\0" +"usculture.museum\0mari.ru\0" +"daiwa.hiroshima.jp\0" "edu.mv\0" -"lodi.it\0edu.mw\0edu.ng\0" -"gwangju.kr\0edu.mx\0" +"edu.mw\0edu.ng\0kaszuby.pl\0" +"edu.mx\0" "edu.my\0" -"soundandvision.museum\0" -"lenvik.no\0" -"ballooning.aero\0" -"name\0" -"jogasz.hu\0frogn.no\0" -"history.museum\0" -"consultant.aero\0edu.nr\0" -"manchester.museum\0" -"*.hiroshima.jp\0" -"pol.dz\0" -"*.tochigi.jp\0heimatunduhren.museum\0" -"!pref.kanagawa.jp\0" -"firm.nf\0edu.pa\0" -"coop.ht\0pc.pl\0" -"chicago.museum\0" -"vn.ua\0" -"edu.pe\0" -"tana.no\0edu.pf\0" +"usui.fukuoka.jp\0" +"j.bg\0web.id\0" +"sr.gov.pl\0" +"s\xc3\xb8mna.no\0" +"info.ht\0sauda.no\0" +"info.hu\0" +"edu.nr\0" +"tv.na\0" +"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0" +"chuo.tokyo.jp\0" +"s\xc3\xa1lat.no\0" +"dazaifu.fukuoka.jp\0" +"kawai.nara.jp\0" +"eun.eg\0" +"koshimizu.hokkaido.jp\0" +"charter.aero\0" +"thruhere.net\0" +"usgarden.museum\0" +"kanoya.kagoshima.jp\0edu.pa\0" +"kihoku.ehime.jp\0kalisz.pl\0" +"sakura.tochigi.jp\0" +"agrar.hu\0edu.pe\0" +"edu.pf\0" "edu.ph\0" -"nom.km\0" -"travel.tt\0" +"sd.cn\0oxford.museum\0" "edu.pk\0" -"experts-comptables.fr\0edu.pl\0bryansk.ru\0" +"edu.pl\0" "edu.pn\0" -"evje-og-hornnes.no\0warszawa.pl\0" -"ac.ae\0" -"edu.pr\0" -"vaksdal.no\0edu.ps\0dni.us\0" -"po.gov.pl\0edu.pt\0" -"nordre-land.no\0vadso.no\0" -"rnrt.tn\0" -"sport.hu\0!pref.gifu.jp\0voss.no\0targi.pl\0" -"flesberg.no\0" -"photography.museum\0" -"modena.it\0tonsberg.no\0" -"ac.at\0" -"ac.be\0coop.br\0" -"services.aero\0" -"nom.mg\0" -"wielun.pl\0" -"jefferson.museum\0wy.us\0" -"pd.it\0ot.it\0neues.museum\0slattum.no\0" -"vdonsk.ru\0" -"ar.com\0edu.sa\0" -"\xc3\xa5l.no\0edu.sb\0" +"arao.kumamoto.jp\0" +"edu.qa\0" +"kr.it\0nakijin.okinawa.jp\0edu.pr\0" +"edu.ps\0" +"fjaler.no\0edu.pt\0" +"gotdns.org\0" +"itoigawa.niigata.jp\0oregontrail.museum\0kvafjord.no\0" +"mt.us\0nd.us\0" +"freight.aero\0ando.nara.jp\0edu.py\0" +"ino.kochi.jp\0" +"portlligat.museum\0" +"web.lk\0" +"nom.km\0music.museum\0" +"ishikawa.okinawa.jp\0" +"chtr.k12.ma.us\0" +"andriabarlettatrani.it\0" +"nationalheritage.museum\0giehtavuoatna.no\0" +"im.it\0" +"hareid.no\0" +"kids.museum\0" +"kanmaki.nara.jp\0tra.kp\0" +"numata.gunma.jp\0" +"info.ec\0hizen.saga.jp\0labour.museum\0honefoss.no\0" +"misato.wakayama.jp\0edu.sa\0lib.sd.us\0" +"arts.co\0shima.mie.jp\0edu.sb\0" "edu.rs\0edu.sc\0" -"ac.ci\0int.is\0edu.sd\0!tsk.tr\0" -"br\xc3\xb8nn\xc3\xb8ysund.no\0and\xc3\xb8y.no\0edu.ru\0" -"pol.ht\0" +"edu.sd\0" +"tama.tokyo.jp\0t\xc3\xb8nsberg.no\0edu.ru\0" "edu.rw\0edu.sg\0" -"gyeongnam.kr\0olecko.pl\0" -"ac.cn\0" -"graz.museum\0" -"coldwar.museum\0edu.sl\0" -"ac.cr\0" -"edu.sn\0" -"hamar.no\0" -"histoire.museum\0" -"!city.shizuoka.jp\0" +"komae.tokyo.jp\0" +"mazowsze.pl\0" +"shintoku.hokkaido.jp\0lans.museum\0edu.sl\0" +"nom.mg\0l\xc3\xa4ns.museum\0web.nf\0skjak.no\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" +"info.bb\0chel.ru\0edu.sn\0" +"trd.br\0info.at\0" +"info.au\0" +"chikuzen.fukuoka.jp\0asahi.toyama.jp\0" "edu.st\0" -"oceanographic.museum\0nh.us\0" -"x.bg\0" -"surnadal.no\0" -"fc.it\0costume.museum\0stalowa-wola.pl\0" -"valer.ostfold.no\0edu.sy\0" +"info.az\0tv.sd\0" +"shimonoseki.yamaguchi.jp\0edu.sy\0" "edu.tj\0" -"arq.br\0" -"aeroclub.aero\0odo.br\0pe.ca\0\xe7\xb6\xb2\xe7\xb5\xa1.cn\0bronnoysund.no\0nom.pa\0" +"radoy.no\0" +"sasaguri.fukuoka.jp\0nakano.nagano.jp\0ogimi.okinawa.jp\0computerhistory.museum\0ug.gov.pl\0edu.tm\0" +"abira.hokkaido.jp\0" "edu.to\0" -"paleo.museum\0nom.pe\0edu.ua\0" -"int.la\0trustee.museum\0forsand.no\0krasnoyarsk.ru\0" -"!pref.hyogo.jp\0" -"edu.tt\0" -"zarow.pl\0" -"edu.tw\0" +"edu.ua\0" +"lavagis.no\0cc.al.us\0" +"kopervik.no\0edu.tt\0" +"nishimera.miyazaki.jp\0kuban.ru\0" +"g.se\0edu.tw\0" +"lillehammer.no\0" +"info.co\0" +"achi.nagano.jp\0" +"karasjok.no\0pa.gov.pl\0" +"lib.mn.us\0" +"osteroy.no\0" +"naganohara.gunma.jp\0" +"web.pk\0dp.ua\0" +"edu.vc\0" +"minato.osaka.jp\0" +"rotorcraft.aero\0uchihara.ibaraki.jp\0edu.ve\0" +"nom.pa\0" +"edu.uy\0" +"nom.pe\0ternopil.ua\0" +"h\xc3\xa6gebostad.no\0tv.tz\0" +"iwade.wakayama.jp\0" +"bn.it\0oyama.tochigi.jp\0edu.vn\0" +"yukuhashi.fukuoka.jp\0" +"rel.ht\0biei.hokkaido.jp\0cinema.museum\0yuzhno-sakhalinsk.ru\0" "nom.pl\0" -"community.museum\0kvitsoy.no\0" -"int.lk\0tychy.pl\0" -"k12.me.us\0" -"jondal.no\0edu.vc\0" -"illustration.museum\0" -"clinton.museum\0" -"tas.au\0es.kr\0" -"production.aero\0" -"rodoy.no\0" -"database.museum\0bodo.no\0" -"anthro.museum\0landes.museum\0edu.vn\0" -"nom.re\0" -"altai.ru\0" -"filatelia.museum\0" -"sk.ca\0lezajsk.pl\0" -"rockart.museum\0int.mv\0" -"int.mw\0herad.no\0" -"eti.br\0ac.gn\0" -"fedje.no\0nom.ro\0" -"money.museum\0" -"\xd9\x85\xd8\xb5\xd8\xb1\0" -"horten.no\0" -"gangaviika.no\0mielec.pl\0" -"uw.gov.pl\0" -"moma.museum\0" -"edu.ws\0" -"go.ci\0" -"tv.bo\0technology.museum\0" -"s\xc3\xb8ndre-land.no\0" -"tv.br\0" -"jor.br\0lib.dc.us\0" -"arboretum.museum\0" -"go.cr\0" -"artsandcrafts.museum\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" -"psc.br\0ac.id\0!city.chiba.jp\0" -"wa.au\0" -"rome.it\0" -"amli.no\0" -"ac.im\0lo.it\0" -"ac.in\0" -"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0durham.museum\0" -"ac.ir\0" -"torino.museum\0" -"loabat.no\0" -"com\0" -"nalchik.ru\0" -"yakutia.ru\0" -"settlers.museum\0" -"!promocion.ar\0int.pt\0" -"union.aero\0" -"utah.museum\0" -"giehtavuoatna.no\0" -"ac.jp\0" -"air-traffic-control.aero\0" -"silk.museum\0usantiques.museum\0" -"bn.it\0" -"kalisz.pl\0" -"perm.ru\0" -"aoste.it\0bindal.no\0" -"coloradoplateau.museum\0k12.gu.us\0" -"frosinone.it\0forde.no\0" +"ichinomiya.chiba.jp\0s\xc3\xb8gne.no\0" +"izumisano.osaka.jp\0" +"rimini.it\0" +"skjervoy.no\0" +"anpachi.gifu.jp\0" +"verdal.no\0sanok.pl\0" +"matera.it\0" +"nagatoro.saitama.jp\0edu.ws\0" +"po.it\0" +"takatori.nara.jp\0dyroy.no\0" +"!mecon.ar\0" +"walbrzych.pl\0" +"yamashina.kyoto.jp\0sandoy.no\0is-a-geek.net\0" +"kunisaki.oita.jp\0nom.re\0" +"hazu.aichi.jp\0k12.mt.us\0k12.nd.us\0" +"m.bg\0" +"ulvik.no\0" +"asahi.chiba.jp\0rankoshi.hokkaido.jp\0" +"stockholm.museum\0troandin.no\0" +"berlev\xc3\xa5g.no\0pomorze.pl\0pl.ua\0" +"itoman.okinawa.jp\0" +"kasuya.fukuoka.jp\0skjerv\xc3\xb8y.no\0" +"okoppe.hokkaido.jp\0nom.ro\0" +"caa.aero\0togane.chiba.jp\0" +"polkowice.pl\0" +"mosj\xc3\xb8""en.no\0" +"web.tj\0" +"iglesias-carbonia.it\0stj\xc3\xb8rdalshalsen.no\0" +"ogori.fukuoka.jp\0" +"north.museum\0lib.wy.us\0" +"scrapper-site.net\0" +"eu.com\0" +"database.museum\0" +"vaga.no\0" +"birdart.museum\0" +"gratangen.no\0" +"kasukabe.saitama.jp\0" +"dyndns-home.com\0" +"seranishi.hiroshima.jp\0asker.no\0nom.tm\0" +"le.it\0brussels.museum\0" +"is-a-hunter.com\0" +"babia-gora.pl\0ustka.pl\0" +"travel\0" +"chijiwa.nagasaki.jp\0web.ve\0" +"gaivuotna.no\0kr.ua\0" +"\xe5\x85\xac\xe5\x8f\xb8.cn\0" +"yamada.iwate.jp\0evje-og-hornnes.no\0" +, + +"kamijima.ehime.jp\0malbork.pl\0" +"otsu.shiga.jp\0kosuge.yamanashi.jp\0" +"kakuda.miyagi.jp\0" +"est-a-la-masion.com\0" +"\xe5\x85\xac\xe5\x8f\xb8.hk\0" +"chigasaki.kanagawa.jp\0writesthisblog.com\0" +"szkola.pl\0k12.wa.us\0" +"ookuwa.nagano.jp\0lib.sc.us\0" +"info\0ujitawara.kyoto.jp\0" +"tranibarlettaandria.it\0" +"aviation.museum\0" +"nm.cn\0" +"antiques.museum\0ddr.museum\0l\xc3\xb8""dingen.no\0" +"shibata.miyagi.jp\0priv.pl\0" +"bauern.museum\0" +"cc.ct.us\0" +"tokigawa.saitama.jp\0" +"pruszkow.pl\0" +"belluno.it\0chonan.chiba.jp\0" +"from-ks.com\0" +"kannami.shizuoka.jp\0" +"tatebayashi.gunma.jp\0" +"rel.pl\0k12.tn.us\0lib.al.us\0" +"oshima.tokyo.jp\0" +"cbg.ru\0" "epilepsy.museum\0" -"olbia-tempio.it\0" -"journalist.aero\0ac.kr\0*.sch.uk\0" -"nic.im\0sciencesnaturelles.museum\0bedzin.pl\0" -"nic.in\0pe.it\0" -"w.se\0" -"!pref.okayama.jp\0" -"urn.arpa\0" -"cinema.museum\0" -"monza.it\0versailles.museum\0int.ru\0" -"andasuolo.no\0skj\xc3\xa5k.no\0chernovtsy.ua\0" -"nyc.museum\0int.rw\0paroch.k12.ma.us\0" -"ringerike.no\0" -"ac.ma\0" -"org.ac\0civilaviation.aero\0" -"rakkestad.no\0" -"org.ae\0ac.me\0" -"org.af\0" -"org.ag\0" -"org.ai\0stokke.no\0" -"airport.aero\0" -"finnoy.no\0" -"org.al\0" -"org.an\0y.bg\0habmer.no\0" -"stadt.museum\0holtalen.no\0" -"int.tj\0" -"org.ba\0gjerdrum.no\0" -"org.bb\0ascoli-piceno.it\0molde.no\0r\xc3\xb8st.no\0tysfjord.no\0" -"pe.kr\0rybnik.pl\0" -"go.id\0" -"ac.mu\0" -"ac.mw\0ac.ng\0" -"org.bh\0\xc3\xa5mot.no\0rana.no\0" -"org.bi\0" -"org.az\0belgorod.ru\0int.tt\0" -"ae.org\0" -"group.aero\0posts-and-telecommunications.museum\0" -"org.bm\0salerno.it\0" -"etnedal.no\0" -"org.bo\0*.hokkaido.jp\0donetsk.ua\0" -"ostroda.pl\0" -"org.br\0" -"org.bs\0" -"go.it\0h\xc3\xb8ylandet.no\0" -"zgorzelec.pl\0" -"org.bw\0" -"org.ci\0" -"org.bz\0vicenza.it\0resistance.museum\0" -"missile.museum\0" -"org.cn\0" -"org.co\0assassination.museum\0" -"go.jp\0" -"tv.it\0austrheim.no\0ac.pa\0" -"verbania.it\0" -"palace.museum\0" -"tmp.br\0int.vn\0" -"org.cu\0" -"paris.museum\0" -"media.aero\0hokksund.no\0" -"arts.museum\0gemological.museum\0hammerfest.no\0" -"k12.ny.us\0" -"org.dm\0hemsedal.no\0ringsaker.no\0sklep.pl\0" -"h\xc3\xa5.no\0cc.nj.us\0" -"rzeszow.pl\0" -"go.kr\0gjesdal.no\0ac.pr\0" -"org.ec\0" -"org.ee\0" -"media.museum\0" -"terni.it\0touch.museum\0zakopane.pl\0" -"journal.aero\0org.dz\0" -"incheon.kr\0" -"b\xc3\xa1hcavuotna.no\0" -"leksvik.no\0ulvik.no\0" +"spy.museum\0" +"!city.sapporo.jp\0kanie.aichi.jp\0" +"mulhouse.museum\0" +"taki.mie.jp\0gangaviika.no\0" +"v\xc3\xa5ler.\xc3\xb8stfold.no\0gok.pk\0!jet.uk\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0sagae.yamagata.jp\0austin.museum\0" +"manno.kagawa.jp\0lillesand.no\0" +"kitaakita.akita.jp\0" +"priv.no\0" +"campidano-medio.it\0" +"lapy.pl\0lezajsk.pl\0" +"info.ve\0" +"shakotan.hokkaido.jp\0" +"takahama.fukui.jp\0kiryu.gunma.jp\0arna.no\0sunndal.no\0" +"nagai.yamagata.jp\0" +"tomsk.ru\0" +"info.vn\0" +"agriculture.museum\0" +"jeonbuk.kr\0" +"realestate.pl\0from-md.com\0" +"ca.it\0" "plantation.museum\0" -"org.es\0loyalist.museum\0" -"gildesk\xc3\xa5l.no\0bytom.pl\0" -"bo.nordland.no\0" -"ambulance.aero\0iglesiascarbonia.it\0" -"tw.cn\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0" -"chocolate.museum\0" -"pittsburgh.museum\0" -"royrvik.no\0sor-odal.no\0ac.rs\0" -"kaluga.ru\0" -"org.ge\0erotica.hu\0ac.ru\0ac.se\0" -"org.gg\0leangaviika.no\0ac.rw\0" -"org.gh\0v\xc3\xa6r\xc3\xb8y.no\0" -"org.gi\0" -"jevnaker.no\0" -"org.gn\0tv.na\0leikanger.no\0" -"org.gp\0" -"ask\xc3\xb8y.no\0" -"org.gr\0wroc.pl\0" -"ad.jp\0" -"powiat.pl\0" -"tj\xc3\xb8me.no\0" -"coop.tt\0" -"ac.th\0" -"mragowo.pl\0ac.sz\0ac.tj\0" -"org.hk\0bo.it\0" -"philately.museum\0" -"org.hn\0" -"fet.no\0" -"axis.museum\0mansions.museum\0" -"wiki.br\0" -"org.ht\0" -"org.hu\0piacenza.it\0scotland.museum\0cpa.pro\0" -"ac.ug\0" -"coop.mv\0x.se\0" -"coop.mw\0ac.tz\0" -"bmd.br\0" -"org.im\0ralingen.no\0" -"org.in\0" -"cz.it\0lib.ia.us\0" -"org.iq\0" -"org.ir\0" -"org.is\0" -"nl.ca\0" -"org.je\0" -"childrensgarden.museum\0" -"kvits\xc3\xb8y.no\0go.pw\0" -"sokndal.no\0" -"ra.it\0grimstad.no\0" -"denmark.museum\0" -"ac.vn\0" -"ecn.br\0org.jo\0" -"bialystok.pl\0nj.us\0" -"z.bg\0bilbao.museum\0stargard.pl\0nic.tj\0" -"eisenbahn.museum\0" -"fe.it\0bryne.no\0vrn.ru\0" -"cc.wa.us\0" -"sex.hu\0skierva.no\0" -"org.kg\0" -"org.ki\0" -"org.km\0" -"org.kn\0khakassia.ru\0" -"org.kp\0" -"org.la\0" -"org.lb\0" -"org.lc\0" -"francaise.museum\0" -"panama.museum\0" -"rotorcraft.aero\0gateway.museum\0olkusz.pl\0" -"org.ky\0czeladz.pl\0ryazan.ru\0" -"org.kz\0" -"org.lk\0dyr\xc3\xb8y.no\0" -"raisa.no\0" -"dlugoleka.pl\0" -"org.ma\0" -"org.lr\0prochowice.pl\0" -"org.ls\0" -"org.me\0sandoy.no\0s\xc3\xb8r-varanger.no\0" -"org.lv\0" -"org.mg\0" -"tel\0go.th\0" -"org.ly\0" -"steam.museum\0go.tj\0" -"org.mk\0pasadena.museum\0jessheim.no\0lib.mn.us\0" -"org.ml\0" -"software.aero\0" -"org.mn\0" -"org.mo\0" -"*.fukui.jp\0decorativearts.museum\0" -"spy.museum\0org.na\0jorpeland.no\0" -"vads\xc3\xb8.no\0" -"org.mu\0building.museum\0gausdal.no\0" -"org.mv\0nannestad.no\0" -"org.mw\0org.ng\0go.ug\0" -"vr.it\0org.mx\0" -"org.my\0" -"go.tz\0" -"oppdal.no\0" -"uk.net\0" -"coop.km\0" -"*.kyoto.jp\0" -"sarpsborg.no\0org.nr\0" -"chernigov.ua\0" -"ha.cn\0no.com\0" -"space.museum\0" -"org.pa\0" -"*.ar\0" -"usgarden.museum\0" -"*.bd\0org.pe\0" -"*.au\0org.pf\0um.gov.pl\0" -"bio.br\0" -"org.ph\0" -"org.pk\0" -"fr\xc3\xa6na.no\0org.pl\0" -"nord-aurdal.no\0org.pn\0" -"*.bn\0handson.museum\0agrinet.tn\0" -"kviteseid.no\0" -"rel.ht\0virtuel.museum\0atm.pl\0org.pr\0" -"org.ps\0cherkassy.ua\0" -"org.pt\0wa.us\0" -"*.bt\0arendal.no\0magnitka.ru\0" -"depot.museum\0porsangu.no\0" -"laakesvuemie.no\0" -"sor-fron.no\0" -"heroy.more-og-romsdal.no\0" -"*.ck\0" -"!rakpetroleum.om\0" -"kr\xc3\xb8""dsherad.no\0mail.pl\0" -"mod.gi\0" -"gs.nl.no\0" -"mb.ca\0" "pavia.it\0" -"civilisation.museum\0folldal.no\0" -"suli.hu\0" -"brumunddal.no\0" -"*.cy\0" -"pg.it\0troms\xc3\xb8.no\0" -"sex.pl\0y.se\0" -"org.ro\0" -"*.do\0" -"caserta.it\0org.sa\0" -"za.com\0halloffame.museum\0org.sb\0lviv.ua\0" -"mill.museum\0org.rs\0org.sc\0" -"org.sd\0" -"idv.hk\0!omanmobile.om\0org.ru\0org.se\0" -"langev\xc3\xa5g.no\0r\xc3\xa5holt.no\0starostwo.gov.pl\0" -"trani-andria-barletta.it\0org.sg\0" -"*.eg\0hvaler.no\0" -"*.ehime.jp\0" -"gmina.pl\0" -"bod\xc3\xb8.no\0org.sl\0" -"edu\0org.sn\0" -"org.so\0lib.wi.us\0" -"kommune.no\0" -"nome.pt\0" -"*.er\0namdalseid.no\0k12.wa.us\0" -"nm.cn\0org.st\0" -"*.et\0d\xc3\xb8nna.no\0" -"jewish.museum\0preservation.museum\0" -"slupsk.pl\0org.sy\0" -"art.br\0org.sz\0org.tj\0" -"ntr.br\0*.fj\0ski.no\0" -"*.fk\0rimini.it\0grajewo.pl\0" -"loppa.no\0" -"franziskaner.museum\0notteroy.no\0org.tn\0" -"org.to\0" -"nesoddtangen.no\0" -"org.ua\0" -"discovery.museum\0wloclawek.pl\0" -"lakas.hu\0org.tt\0" -"kurgan.ru\0" -"baltimore.museum\0nkz.ru\0org.tw\0" -"com.ac\0castle.museum\0" -"*.fukuoka.jp\0sandefjord.no\0varggat.no\0" -"com.af\0" -"com.ag\0" -"ato.br\0k12.nj.us\0" -"com.ai\0" -"city.hu\0oryol.ru\0" -"com.al\0nl.no\0mielno.pl\0cc.ma.us\0" -"org.vc\0" -"com.an\0g12.br\0" -"*.gt\0" -"*.gu\0" -"com.ba\0" -"com.bb\0americanart.museum\0" -"org.vi\0" -"kunstsammlung.museum\0" -"com.aw\0" -"flight.aero\0com.bh\0lib.mo.us\0org.vn\0" -"com.bi\0adygeya.ru\0" -"com.az\0" -"art.dz\0" -"com.bm\0" +"jeonnam.kr\0" +"jogasz.hu\0klodzko.pl\0kostroma.ru\0" +"ltd.co.im\0" +"koshigaya.saitama.jp\0dyndns-remote.com\0" +"coop\0arts.ro\0" +"hyogo.jp\0priv.me\0" +"stalbans.museum\0" +"pr.it\0test.tj\0" +"info.tn\0" +"kouzushima.tokyo.jp\0pacific.museum\0" +"gs.tm.no\0" +"sd.us\0k12.ne.us\0" +"p.bg\0" +"info.tt\0" +"khmelnitskiy.ua\0" +"decorativearts.museum\0alesund.no\0" +"ginowan.okinawa.jp\0info.tz\0" +"mining.museum\0" +"\xc3\xb8vre-eiker.no\0" +"gonohe.aomori.jp\0" +"aurskog-holand.no\0" +"kagamiishi.fukushima.jp\0m\xc3\xa1latvuopmi.no\0" +"podlasie.pl\0" +"malselv.no\0" +"odawara.kanagawa.jp\0" +"rygge.no\0" +"arida.wakayama.jp\0" +"dni.us\0" +"info.ro\0codespot.com\0" +"ca.na\0kv\xc3\xa6nangen.no\0" +"ome.tokyo.jp\0" +"atsugi.kanagawa.jp\0" +"info.sd\0" +"egyptian.museum\0cc.ia.us\0" +"suzaka.nagano.jp\0test.ru\0" +"kumejima.okinawa.jp\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0groks-this.info\0" +"public.museum\0\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0" +"ono.hyogo.jp\0" +"arts.nf\0" +"iwama.ibaraki.jp\0kamimine.saga.jp\0" +"nj.us\0" +"mantova.it\0" +"padova.it\0" +"samnanger.no\0" +"yuki.ibaraki.jp\0higashitsuno.kochi.jp\0sciencesnaturelles.museum\0" +"miho.ibaraki.jp\0" +"hemnes.no\0" +"yosemite.museum\0" +"tochio.niigata.jp\0whaling.museum\0is-an-accountant.com\0" +"info.pk\0" +"soja.okayama.jp\0voagat.no\0info.pl\0cc.fl.us\0" +"sekikawa.niigata.jp\0" +"is.it\0photography.museum\0" +"info.pr\0" +"aizubange.fukushima.jp\0jinsekikogen.hiroshima.jp\0rissa.no\0" +"napoli.it\0glas.museum\0" +"\xe7\xb5\x84\xe7\xb9\x94.hk\0rns.tn\0" +"k12.wv.us\0is-a-candidate.org\0" +"ushiku.ibaraki.jp\0" +"production.aero\0" +"fukagawa.hokkaido.jp\0philately.museum\0" +"miyake.nara.jp\0" +"akune.kagoshima.jp\0" +"info.na\0" +"fujikawaguchiko.yamanashi.jp\0from-il.com\0" +"ozu.kumamoto.jp\0" +"exchange.aero\0gmina.pl\0" +"info.mv\0info.nf\0" +"kosai.shizuoka.jp\0steigen.no\0homeip.net\0" +"chuo.chiba.jp\0" +"tambov.ru\0" +"j\xc3\xb8lster.no\0" +"omi.niigata.jp\0" +"mil\0lib.ak.us\0" +"muika.niigata.jp\0info.nr\0" +"berlevag.no\0" +"indiana.museum\0" +"jewish.museum\0" "dr\xc3\xb8""bak.no\0" -"com.bo\0isla.pr\0" -"com.br\0" -"com.bs\0ustka.pl\0kuban.ru\0" -"press.aero\0" -"vs.it\0" -"meloy.no\0" -"*.il\0ulm.museum\0" -"com.by\0com.ci\0genoa.it\0" -"com.bz\0sn.cn\0" -"lib.or.us\0" -"santafe.museum\0org.ws\0" +"government.aero\0" +"ltd.gi\0" +"cc.ar.us\0" +"gon.pk\0" +"marumori.miyagi.jp\0" +"gateway.museum\0" +"fujimino.saitama.jp\0m.se\0" +"takanezawa.tochigi.jp\0vads\xc3\xb8.no\0dontexist.org\0" +"info.la\0belau.pw\0" +"ibaraki.ibaraki.jp\0po.gov.pl\0" +"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0loab\xc3\xa1t.no\0" +"coal.museum\0" +"karikatur.museum\0" +"miyazaki.miyazaki.jp\0ketrzyn.pl\0k12.sd.us\0" +"fukuyama.hiroshima.jp\0lib.oh.us\0" +"hamaroy.no\0" +"nishinoshima.shimane.jp\0samara.ru\0" +"ikeda.fukui.jp\0" +"mel\xc3\xb8y.no\0chukotka.ru\0" +"port.fr\0" +"us.org\0" +"kumagaya.saitama.jp\0" +"*.sapporo.jp\0" +"westfalen.museum\0" +"yahiko.niigata.jp\0" +"ichinomiya.aichi.jp\0naruto.tokushima.jp\0" +"tmp.br\0bt.it\0" +"donna.no\0khabarovsk.ru\0" +"saikai.nagasaki.jp\0" +"ato.br\0sex.hu\0daigo.ibaraki.jp\0" +"izumiotsu.osaka.jp\0" +"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0" +"davvesiida.no\0" +"gyeonggi.kr\0" +"coloradoplateau.museum\0olecko.pl\0" +"ha.cn\0" +"forlicesena.it\0" +"taka.hyogo.jp\0kita.kyoto.jp\0" +"cc.mn.us\0" +"mutsu.aomori.jp\0" +"shimotsuma.ibaraki.jp\0rybnik.pl\0" +"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0" +"livorno.it\0pu.it\0verona.it\0" +"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0" +"sveio.no\0" +"kurate.fukuoka.jp\0" +"natuurwetenschappen.museum\0" +"ca.us\0" +"bryansk.ru\0" +"s.bg\0seoul.kr\0" +"watarai.mie.jp\0muenchen.museum\0" +"iyo.ehime.jp\0" +"starnberg.museum\0tydal.no\0" +"info.ki\0" +"fet.no\0finn\xc3\xb8y.no\0" +"kagoshima.kagoshima.jp\0" +"naturalsciences.museum\0" +"artsandcrafts.museum\0" +"sakurai.nara.jp\0" +"carrara-massa.it\0" +"shirakawa.fukushima.jp\0" +"mitsuke.niigata.jp\0museet.museum\0is-a-photographer.com\0" +"shioya.tochigi.jp\0" +"randaberg.no\0" +"ojiya.niigata.jp\0" +"ltd.lk\0pr.us\0k12.ks.us\0" +"osaka.jp\0lib.hi.us\0" +"horonobe.hokkaido.jp\0" +"kragero.no\0" +"kawaguchi.saitama.jp\0" +"hara.nagano.jp\0itabashi.tokyo.jp\0" +"fl\xc3\xa5.no\0" +"otsuki.kochi.jp\0leangaviika.no\0pors\xc3\xa1\xc5\x8bgu.no\0" +"savannahga.museum\0" +"volkenkunde.museum\0" +"cc.id.us\0" +"kashima.kumamoto.jp\0swinoujscie.pl\0" +"prof.pr\0" +"ab.ca\0is-a-democrat.com\0" +"press.museum\0" +"uk.com\0" +"bajddar.no\0" +"medecin.km\0" +"iki.nagasaki.jp\0shirahama.wakayama.jp\0" +"ip6.arpa\0nm.us\0" +"lib.fl.us\0" +"yanagawa.fukuoka.jp\0donetsk.ua\0" +"s\xc3\xb8r-aurdal.no\0" +"qh.cn\0mill.museum\0" +"naka.ibaraki.jp\0" +"kamitonda.wakayama.jp\0" +"mosreg.ru\0" +"gorizia.it\0kushima.miyazaki.jp\0berlin.museum\0" +"ns.ca\0shiga.jp\0" +"cheltenham.museum\0" +"kawachinagano.osaka.jp\0fujieda.shizuoka.jp\0nakhodka.ru\0k12.ga.us\0" +"magnitka.ru\0" +"uki.kumamoto.jp\0wroc.pl\0" +"stange.no\0stuff-4-sale.org\0" +"tsuruga.fukui.jp\0nagasu.kumamoto.jp\0" +"biella.it\0buyshouses.net\0is-a-guru.com\0" +"vevelstad.no\0" +"nyuzen.toyama.jp\0" +"bjugn.no\0" +"motosu.gifu.jp\0" +"usdecorativearts.museum\0" +"anthro.museum\0" +"sex.pl\0" +"americanantiques.museum\0rennes\xc3\xb8y.no\0" +"arezzo.it\0hakuba.nagano.jp\0" +"jamison.museum\0is-a-painter.com\0mypets.ws\0" +"ln.cn\0" +"hiji.oita.jp\0" +"air.museum\0" +"palana.ru\0" +"toki.gifu.jp\0sakata.yamagata.jp\0p.se\0" +"vb.it\0funahashi.toyama.jp\0" +"hino.tottori.jp\0" +"logistics.aero\0ohda.shimane.jp\0" +"amli.no\0" +"yatsuka.shimane.jp\0" +"chichibu.saitama.jp\0" +"sciences.museum\0" +"wa.edu.au\0" +"ouchi.saga.jp\0" +"pittsburgh.museum\0gloppen.no\0" +"kamigori.hyogo.jp\0" +"valer.ostfold.no\0is-a-soxfan.org\0" +"net\0halden.no\0dyndns-work.com\0" +"oita.jp\0hinode.tokyo.jp\0sa.com\0" +"leikanger.no\0" +"stord.no\0" +"sarufutsu.hokkaido.jp\0alstahaug.no\0k12.al.us\0" +"shinanomachi.nagano.jp\0edogawa.tokyo.jp\0k12.pr.us\0" +"hakodate.hokkaido.jp\0" +"tobishima.aichi.jp\0" +"ogasawara.tokyo.jp\0stjordal.no\0" +"aarborte.no\0" +"xj.cn\0" +"kyotanabe.kyoto.jp\0" +"williamsburg.museum\0" +"nabari.mie.jp\0namerikawa.toyama.jp\0rana.no\0" +"gwangju.kr\0" +"agdenes.no\0" +"hitachiota.ibaraki.jp\0ha.no\0tynset.no\0" +"k12.ok.us\0" +"v.bg\0eco.br\0algard.no\0" +"khmelnytskyi.ua\0" +"nagano.jp\0" +"jus.br\0" +"tanohata.iwate.jp\0" +"hakusan.ishikawa.jp\0" +"detroit.museum\0" +"szex.hu\0" +"asahikawa.hokkaido.jp\0nov.ru\0" +"fhsk.se\0" +"voronezh.ru\0" +"date.fukushima.jp\0" +"textile.museum\0" +"toyosato.shiga.jp\0" +"mytis.ru\0" +"valley.museum\0" +"mazury.pl\0" +"imari.saga.jp\0" +"insurance.aero\0tomiya.miyagi.jp\0" +"siena.it\0" +"novara.it\0" +"ichihara.chiba.jp\0" +"tochigi.jp\0" +"b\xc3\xa5tsfjord.no\0doesntexist.org\0" +"is-a-personaltrainer.com\0" +"uryu.hokkaido.jp\0interactive.museum\0" +"!songfest.om\0" +"mihara.hiroshima.jp\0" +"field.museum\0adygeya.ru\0" +"yasuda.kochi.jp\0" +"yokote.akita.jp\0dyndns-mail.com\0" +"salzburg.museum\0" +"is-very-bad.org\0worse-than.tv\0" +"sn\xc3\xa5""ase.no\0" +"indian.museum\0" +"anan.nagano.jp\0vagan.no\0" +"baghdad.museum\0" +"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" +"simple-url.com\0" +"of.by\0" +"shiogama.miyagi.jp\0" +"huissier-justice.fr\0" +"shika.ishikawa.jp\0" +"from-fl.com\0" +"drammen.no\0fam.pk\0" +"contemporaryart.museum\0" +"bio.br\0handa.aichi.jp\0ikeda.nagano.jp\0is-saved.org\0" +"inzai.chiba.jp\0soka.saitama.jp\0" +"s\xc3\xb8rfold.no\0sellsyourhome.org\0" +"louvre.museum\0" +"yanaizu.fukushima.jp\0" +"kiyosu.aichi.jp\0" +"ichikawa.chiba.jp\0kawanishi.hyogo.jp\0sakawa.kochi.jp\0" +"konyvelo.hu\0lindesnes.no\0" +"!promocion.ar\0lom.no\0" +"k12.ec\0" +"tree.museum\0" +"s.se\0" +"ve.it\0juif.museum\0flatanger.no\0" +"kobierzyce.pl\0" +"chino.nagano.jp\0" +"kristiansand.no\0norddal.no\0" +"b\xc3\xb8.nordland.no\0" +"kirov.ru\0" +"tomobe.ibaraki.jp\0" +"jl.cn\0frosinone.it\0" +"toyooka.hyogo.jp\0" +"tsuiki.fukuoka.jp\0hitra.no\0" +"bz.it\0yotsukaido.chiba.jp\0" +"sp.it\0" +"ariake.saga.jp\0scrapping.cc\0" +"iwanai.hokkaido.jp\0" +"erotica.hu\0sumoto.kumamoto.jp\0glogow.pl\0" +"lib.mi.us\0" +"tateyama.chiba.jp\0semine.miyagi.jp\0vestre-toten.no\0" +"dellogliastra.it\0sm.ua\0" +"brussel.museum\0" +"hasami.nagasaki.jp\0sells-for-u.com\0" +"anan.tokushima.jp\0" +"barreau.bj\0" +"cc.mt.us\0cc.nd.us\0" +"l\xc3\xb8renskog.no\0" +"trolley.museum\0" +"okuma.fukushima.jp\0" +"hirara.okinawa.jp\0kaminoyama.yamagata.jp\0k12.oh.us\0" +"y.bg\0" +"miyazaki.jp\0" +"repbody.aero\0" +"sannohe.aomori.jp\0shimizu.hokkaido.jp\0" +"judygarland.museum\0gotdns.com\0" +"toyota.aichi.jp\0oketo.hokkaido.jp\0zao.miyagi.jp\0" +"ohtawara.tochigi.jp\0" +"workinggroup.aero\0" +"matsukawa.nagano.jp\0" +"mugi.tokushima.jp\0karate.museum\0" +"bjerkreim.no\0" +"miyagi.jp\0" +"!city.kobe.jp\0aquarium.museum\0" +"k12.la.us\0" +"pharmaciens.km\0de.com\0" +"!omantel.om\0" +"zhytomyr.ua\0" +"kawara.fukuoka.jp\0raholt.no\0" +"medecin.fr\0saiki.oita.jp\0v\xc3\xa1rgg\xc3\xa1t.no\0" +"kotoura.tottori.jp\0moskenes.no\0vennesla.no\0" +"rishirifuji.hokkaido.jp\0" +"cuneo.it\0" +"takamatsu.kagawa.jp\0malatvuopmi.no\0pomorskie.pl\0" +"otsuchi.iwate.jp\0" +"spb.ru\0" +"recreation.aero\0misaki.okayama.jp\0k12.in.us\0ham-radio-op.net\0" +"freiburg.museum\0" +"journal.aero\0fot.br\0" +"asahi.yamagata.jp\0" +"ah.cn\0saotome.st\0" +"delaware.museum\0" +"tondabayashi.osaka.jp\0" +"!uba.ar\0notaires.km\0" +"nord-aurdal.no\0" +"furubira.hokkaido.jp\0kazan.ru\0" +"shisui.chiba.jp\0town.museum\0" +"inatsuki.fukuoka.jp\0yuu.yamaguchi.jp\0" +"munakata.fukuoka.jp\0" +"matsuyama.ehime.jp\0" +"traniandriabarletta.it\0toyama.toyama.jp\0grandrapids.museum\0lenvik.no\0" +"toyota.yamaguchi.jp\0" +"niigata.jp\0yamatsuri.fukushima.jp\0batsfjord.no\0" +"ravenna.it\0zama.kanagawa.jp\0" +"is-a-landscaper.com\0is-gone.com\0" +"doomdns.org\0" +"shinjo.yamagata.jp\0hawaii.museum\0" +"trento.it\0taiki.mie.jp\0" +"royrvik.no\0" +"palermo.it\0" +"arts.museum\0newjersey.museum\0" +"scienceandhistory.museum\0" +"sunagawa.hokkaido.jp\0tabuse.yamaguchi.jp\0chuo.yamanashi.jp\0" +"*.sch.uk\0" +"southwest.museum\0of.no\0k12.fl.us\0" +"md.ci\0" +"haboro.hokkaido.jp\0iwanuma.miyagi.jp\0adachi.tokyo.jp\0" +"harstad.no\0" +"kunneppu.hokkaido.jp\0" +"tachikawa.tokyo.jp\0" +"agrigento.it\0murata.miyagi.jp\0" +"macerata.it\0b\xc3\xa1id\xc3\xa1r.no\0" +"kurogi.fukuoka.jp\0" +"misato.miyagi.jp\0americanart.museum\0" +"sanagochi.tokushima.jp\0" +"nanyo.yamagata.jp\0" +"otaru.hokkaido.jp\0" +"bremanger.no\0nordkapp.no\0" +"kawagoe.saitama.jp\0" +"sodegaura.chiba.jp\0creation.museum\0romskog.no\0" +"hiratsuka.kanagawa.jp\0" +"muroto.kochi.jp\0" +"miki.hyogo.jp\0" +"g\xc3\xa1ls\xc3\xa1.no\0isa-geek.org\0" +"eastcoast.museum\0shell.museum\0" +"salerno.it\0shinyoshitomi.fukuoka.jp\0is-a-libertarian.com\0" +"ss.it\0" +"fuefuki.yamanashi.jp\0" +"voss.no\0dnepropetrovsk.ua\0" +"lib.md.us\0" +"ggf.br\0" +"nara.nara.jp\0" +"gz.cn\0kakamigahara.gifu.jp\0!teledata.mz\0" +"!gobiernoelectronico.ar\0katano.osaka.jp\0" +"jp.net\0" +"ethnology.museum\0" +"krym.ua\0" +"e164.arpa\0fie.ee\0" +"preservation.museum\0" +"como.it\0ina.saitama.jp\0" +"tempio-olbia.it\0kokubunji.tokyo.jp\0" +"k12.ny.us\0" +"\xc3\xa5""fjord.no\0" +"kamo.kyoto.jp\0is-very-sweet.org\0" +"kuroiso.tochigi.jp\0" +"nagaoka.niigata.jp\0" +"kl\xc3\xa6""bu.no\0" +"vossevangen.no\0" +"casino.hu\0" +"stuttgart.museum\0" +"tamamura.gunma.jp\0" +"malopolska.pl\0" +"is-a-student.com\0" +"naka.hiroshima.jp\0higashichichibu.saitama.jp\0" +"mykolaiv.ua\0!mod.uk\0" +"lt.it\0" +"honjo.saitama.jp\0" +"manchester.museum\0bedzin.pl\0" +"sandiego.museum\0" +"sakuho.nagano.jp\0" +"nv.us\0is-a-liberal.com\0" +"2.bg\0nature.museum\0" +"za.net\0" +"!city.nagoya.jp\0ris\xc3\xb8r.no\0" +"sanda.hyogo.jp\0" +"satsumasendai.kagoshima.jp\0kizu.kyoto.jp\0is-a-cubicle-slave.com\0" +"yamagata.yamagata.jp\0" +"\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" +"k12.vi\0" +"svalbard.no\0" +"koganei.tokyo.jp\0" +"cci.fr\0inami.toyama.jp\0" +"misconfused.org\0" +"int.az\0" }; +static const quint16 tldChunkCount = 2; +static const quint32 tldChunks[] = {65521, 75539}; + QT_END_NAMESPACE #endif // QURLTLD_P_H diff --git a/src/corelib/io/qwindowspipereader_p.h b/src/corelib/io/qwindowspipereader_p.h index d29e77b034..ea3d3c271f 100644 --- a/src/corelib/io/qwindowspipereader_p.h +++ b/src/corelib/io/qwindowspipereader_p.h @@ -60,8 +60,6 @@ #include <qt_windows.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -117,6 +115,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QWINDOWSPIPEREADER_P_H diff --git a/src/corelib/io/qwindowspipewriter_p.h b/src/corelib/io/qwindowspipewriter_p.h index fa2b386788..62cd49d66a 100644 --- a/src/corelib/io/qwindowspipewriter_p.h +++ b/src/corelib/io/qwindowspipewriter_p.h @@ -59,8 +59,6 @@ #include <qwaitcondition.h> #include <qt_windows.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -156,6 +154,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_PROCESS diff --git a/src/corelib/io/qwinoverlappedionotifier_p.h b/src/corelib/io/qwinoverlappedionotifier_p.h index f117e31535..451bedf7cf 100644 --- a/src/corelib/io/qwinoverlappedionotifier_p.h +++ b/src/corelib/io/qwinoverlappedionotifier_p.h @@ -57,8 +57,6 @@ #include <qt_windows.h> #include <qqueue.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QWinIoCompletionPort; @@ -112,6 +110,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QWINOVERLAPPEDIONOTIFIER_P_H diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index 12029f4a23..989456efbb 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -866,6 +866,27 @@ void QAbstractItemModelPrivate::columnsRemoved(const QModelIndex &parent, } /*! + \since 4.8 + + This slot is called just after the internal data of a model is cleared + while it is being reset. + + This slot is provided the convenience of subclasses of concrete proxy + models, such as subclasses of QSortFilterProxyModel which maintain extra + data. + + \snippet code/src_corelib_kernel_qabstractitemmodel.cpp 12 + + \note Due to a mistake, this slot is missing in Qt 5.0. + + \sa modelAboutToBeReset(), modelReset() +*/ +void QAbstractItemModel::resetInternalData() +{ + +} + +/*! \class QModelIndex \inmodule QtCore @@ -3054,6 +3075,7 @@ void QAbstractItemModel::endResetModel() { Q_D(QAbstractItemModel); d->invalidatePersistentIndexes(); + QMetaObject::invokeMethod(this, "resetInternalData"); emit modelReset(QPrivateSignal()); } @@ -3271,6 +3293,17 @@ bool QAbstractTableModel::hasChildren(const QModelIndex &parent) const } /*! + \reimp + */ +Qt::ItemFlags QAbstractTableModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags f = QAbstractItemModel::flags(index); + if (index.isValid()) + f |= Qt::ItemNeverHasChildren; + return f; +} + +/*! \class QAbstractListModel \inmodule QtCore \brief The QAbstractListModel class provides an abstract model that can be @@ -3391,6 +3424,17 @@ QModelIndex QAbstractListModel::parent(const QModelIndex & /* index */) const } /*! + \reimp + */ +Qt::ItemFlags QAbstractListModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags f = QAbstractItemModel::flags(index); + if (index.isValid()) + f |= Qt::ItemNeverHasChildren; + return f; +} + +/*! \internal Returns the number of columns in the list with the given \a parent. diff --git a/src/corelib/itemmodels/qabstractitemmodel.h b/src/corelib/itemmodels/qabstractitemmodel.h index 793a1ba169..6a57ccaca8 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.h +++ b/src/corelib/itemmodels/qabstractitemmodel.h @@ -47,8 +47,6 @@ #include <QtCore/qhash.h> #include <QtCore/qvector.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -332,6 +330,10 @@ public Q_SLOTS: virtual bool submit(); virtual void revert(); +protected Q_SLOTS: + // Qt 6: Make virtual + void resetInternalData(); + protected: QAbstractItemModel(QAbstractItemModelPrivate &dd, QObject *parent = 0); @@ -421,6 +423,7 @@ public: bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; protected: QAbstractTableModel(QAbstractItemModelPrivate &dd, QObject *parent); @@ -441,6 +444,8 @@ public: QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const; bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + + Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; protected: QAbstractListModel(QAbstractItemModelPrivate &dd, QObject *parent); @@ -473,6 +478,4 @@ inline uint qHash(const QModelIndex &index) QT_END_NAMESPACE -QT_END_HEADER - #endif // QABSTRACTITEMMODEL_H diff --git a/src/corelib/itemmodels/qabstractproxymodel.cpp b/src/corelib/itemmodels/qabstractproxymodel.cpp index ed5d0e9a85..d5887a52d5 100644 --- a/src/corelib/itemmodels/qabstractproxymodel.cpp +++ b/src/corelib/itemmodels/qabstractproxymodel.cpp @@ -148,6 +148,15 @@ void QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel) } /*! + Clears the roleNames of this proxy model. +*/ +void QAbstractProxyModel::resetInternalData() +{ + Q_D(QAbstractProxyModel); + d->roleNames = d->model->roleNames(); +} + +/*! Returns the model that contains the data that is available through the proxy model. */ QAbstractItemModel *QAbstractProxyModel::sourceModel() const diff --git a/src/corelib/itemmodels/qabstractproxymodel.h b/src/corelib/itemmodels/qabstractproxymodel.h index e7a47214f8..9b26d6cead 100644 --- a/src/corelib/itemmodels/qabstractproxymodel.h +++ b/src/corelib/itemmodels/qabstractproxymodel.h @@ -44,8 +44,6 @@ #include <QtCore/qabstractitemmodel.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -103,6 +101,9 @@ Q_SIGNALS: #endif ); +protected Q_SLOTS: + void resetInternalData(); + protected: QAbstractProxyModel(QAbstractProxyModelPrivate &, QObject *parent); @@ -116,6 +117,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QABSTRACTPROXYMODEL_H diff --git a/src/corelib/itemmodels/qidentityproxymodel.h b/src/corelib/itemmodels/qidentityproxymodel.h index 4125683f77..8a416c97bc 100644 --- a/src/corelib/itemmodels/qidentityproxymodel.h +++ b/src/corelib/itemmodels/qidentityproxymodel.h @@ -47,8 +47,6 @@ #ifndef QT_NO_IDENTITYPROXYMODEL -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -113,8 +111,6 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_IDENTITYPROXYMODEL #endif // QIDENTITYPROXYMODEL_H diff --git a/src/corelib/itemmodels/qitemselectionmodel.h b/src/corelib/itemmodels/qitemselectionmodel.h index dd5f6061cd..2a1a4b0a2d 100644 --- a/src/corelib/itemmodels/qitemselectionmodel.h +++ b/src/corelib/itemmodels/qitemselectionmodel.h @@ -47,8 +47,6 @@ #include <QtCore/qlist.h> #include <QtCore/qabstractitemmodel.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -253,6 +251,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QItemSelectionRange &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QITEMSELECTIONMODEL_H diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.h b/src/corelib/itemmodels/qsortfilterproxymodel.h index ffebec5283..a37c892c6c 100644 --- a/src/corelib/itemmodels/qsortfilterproxymodel.h +++ b/src/corelib/itemmodels/qsortfilterproxymodel.h @@ -48,8 +48,6 @@ #include <QtCore/qregexp.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -198,8 +196,6 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_SORTFILTERPROXYMODEL #endif // QSORTFILTERPROXYMODEL_H diff --git a/src/corelib/itemmodels/qstringlistmodel.cpp b/src/corelib/itemmodels/qstringlistmodel.cpp index c6fabfcaee..31c9137c79 100644 --- a/src/corelib/itemmodels/qstringlistmodel.cpp +++ b/src/corelib/itemmodels/qstringlistmodel.cpp @@ -170,9 +170,9 @@ QVariant QStringListModel::data(const QModelIndex &index, int role) const Qt::ItemFlags QStringListModel::flags(const QModelIndex &index) const { if (!index.isValid()) - return QAbstractItemModel::flags(index) | Qt::ItemIsDropEnabled; + return QAbstractListModel::flags(index) | Qt::ItemIsDropEnabled; - return QAbstractItemModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled; + return QAbstractListModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled; } /*! diff --git a/src/corelib/itemmodels/qstringlistmodel.h b/src/corelib/itemmodels/qstringlistmodel.h index 22e9294f74..3514b27508 100644 --- a/src/corelib/itemmodels/qstringlistmodel.h +++ b/src/corelib/itemmodels/qstringlistmodel.h @@ -45,8 +45,6 @@ #include <QtCore/qabstractitemmodel.h> #include <QtCore/qstringlist.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -86,6 +84,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSTRINGLISTMODEL_H diff --git a/src/corelib/json/qjsonarray.h b/src/corelib/json/qjsonarray.h index 24c04d2942..1474ccae41 100644 --- a/src/corelib/json/qjsonarray.h +++ b/src/corelib/json/qjsonarray.h @@ -45,8 +45,6 @@ #include <QtCore/qjsonvalue.h> #include <QtCore/qiterator.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QDebug; @@ -219,6 +217,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QJSONARRAY_H diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp index 550cc76b0d..bdb46528d3 100644 --- a/src/corelib/json/qjsondocument.cpp +++ b/src/corelib/json/qjsondocument.cpp @@ -303,15 +303,50 @@ QVariant QJsonDocument::toVariant() const */ QByteArray QJsonDocument::toJson() const { + return toJson(Indented); +} + +/*! + \enum QJsonDocument::JsonFormat + + This value defines the format of the JSON byte array produced + when converting to a QJsonDocument using toJson(). + + \value Indented Defines human readable output as follows: + \code + { + "Array": [ + true, + 999, + "string" + ], + "Key": "Value", + "null": null + } + \endcode + + \value Compact Defines a compact output as follows: + \code + {"Array": [true,999,"string"],"Key": "Value","null": null} + \endcode + */ + +/*! + Converts the QJsonDocument to a UTF-8 encoded JSON document in the provided \a format. + + \sa fromJson(), JsonFormat + */ +QByteArray QJsonDocument::toJson(JsonFormat format) const +{ if (!d) return QByteArray(); QByteArray json; if (d->header->root()->isArray()) - QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(d->header->root()), json, 0); + QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(d->header->root()), json, 0, (format == Compact)); else - QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(d->header->root()), json, 0); + QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(d->header->root()), json, 0, (format == Compact)); return json; } diff --git a/src/corelib/json/qjsondocument.h b/src/corelib/json/qjsondocument.h index 675ee75dbf..4d4f3885dc 100644 --- a/src/corelib/json/qjsondocument.h +++ b/src/corelib/json/qjsondocument.h @@ -44,8 +44,6 @@ #include <QtCore/qjsonvalue.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QDebug; @@ -109,8 +107,19 @@ public: static QJsonDocument fromVariant(const QVariant &variant); QVariant toVariant() const; + enum JsonFormat { + Indented, + Compact + }; + static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0); - QByteArray toJson() const; + +#ifdef Q_QDOC + QByteArray toJson(JsonFormat format = Indented) const; +#else + QByteArray toJson() const; //### Merge in Qt6 + QByteArray toJson(JsonFormat format) const; +#endif bool isEmpty() const; bool isArray() const; @@ -144,6 +153,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QJSONDOCUMENT_H diff --git a/src/corelib/json/qjsonobject.h b/src/corelib/json/qjsonobject.h index 4168e4b633..8226b614b4 100644 --- a/src/corelib/json/qjsonobject.h +++ b/src/corelib/json/qjsonobject.h @@ -45,8 +45,6 @@ #include <QtCore/qjsonvalue.h> #include <QtCore/qiterator.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QDebug; @@ -214,6 +212,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QJSONOBJECT_H diff --git a/src/corelib/json/qjsonvalue.h b/src/corelib/json/qjsonvalue.h index 38f4a03c0f..b8bdf55aa3 100644 --- a/src/corelib/json/qjsonvalue.h +++ b/src/corelib/json/qjsonvalue.h @@ -45,8 +45,6 @@ #include <QtCore/qglobal.h> #include <QtCore/qstring.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QDebug; @@ -184,6 +182,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QJSONVALUE_H diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index 34e32a721d..5a8499d723 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -131,7 +131,7 @@ unix|integrity { contains(QT_CONFIG, clock-gettime):include($$QT_SOURCE_TREE/config.tests/unix/clock-gettime/clock-gettime.pri) - !linux-android-* { + !android { SOURCES += kernel/qsharedmemory_unix.cpp \ kernel/qsystemsemaphore_unix.cpp } else { diff --git a/src/corelib/kernel/qabstracteventdispatcher.h b/src/corelib/kernel/qabstracteventdispatcher.h index c07c395a84..6f21cefa4e 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.h +++ b/src/corelib/kernel/qabstracteventdispatcher.h @@ -45,8 +45,6 @@ #include <QtCore/qobject.h> #include <QtCore/qeventloop.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QAbstractNativeEventFilter; @@ -129,6 +127,4 @@ protected: QT_END_NAMESPACE -QT_END_HEADER - #endif // QABSTRACTEVENTDISPATCHER_H diff --git a/src/corelib/kernel/qabstractnativeeventfilter.h b/src/corelib/kernel/qabstractnativeeventfilter.h index 09701a4923..9d1db2c19b 100644 --- a/src/corelib/kernel/qabstractnativeeventfilter.h +++ b/src/corelib/kernel/qabstractnativeeventfilter.h @@ -44,8 +44,6 @@ #include <QtCore/qnamespace.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QAbstractNativeEventFilterPrivate; @@ -65,6 +63,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif /* QABSTRACTNATIVEEVENTFILTER_H */ diff --git a/src/corelib/kernel/qbasictimer.h b/src/corelib/kernel/qbasictimer.h index 4fdb00d633..432e4d58c8 100644 --- a/src/corelib/kernel/qbasictimer.h +++ b/src/corelib/kernel/qbasictimer.h @@ -45,8 +45,6 @@ #include <QtCore/qglobal.h> #include <QtCore/qnamespace.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -70,6 +68,4 @@ Q_DECLARE_TYPEINFO(QBasicTimer, Q_MOVABLE_TYPE); QT_END_NAMESPACE -QT_END_HEADER - #endif // QBASICTIMER_H diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h index cbbbc18814..35688f7463 100644 --- a/src/corelib/kernel/qcore_mac_p.h +++ b/src/corelib/kernel/qcore_mac_p.h @@ -63,6 +63,8 @@ #include <CoreFoundation/CoreFoundation.h> #endif +#include "qglobal.h" + #ifndef Q_OS_IOS #include <CoreServices/CoreServices.h> #endif @@ -137,14 +139,4 @@ private: QT_END_NAMESPACE -#if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) -#ifndef __LP64__ - typedef float CGFloat; - typedef int NSInteger; - typedef unsigned int NSUInteger; - #define SRefCon SInt32 - #define URefCon UInt32 -#endif -#endif - #endif // QCORE_MAC_P_H diff --git a/src/corelib/kernel/qcore_unix.cpp b/src/corelib/kernel/qcore_unix.cpp index cc5479876d..241658acb1 100644 --- a/src/corelib/kernel/qcore_unix.cpp +++ b/src/corelib/kernel/qcore_unix.cpp @@ -60,8 +60,8 @@ QT_BEGIN_NAMESPACE -static inline bool time_update(struct timeval *tv, const struct timeval &start, - const struct timeval &timeout) +static inline bool time_update(struct timespec *tv, const struct timespec &start, + const struct timespec &timeout) { if (!QElapsedTimer::isMonotonic()) { // we cannot recalculate the timeout without a monotonic clock as the time may have changed @@ -69,13 +69,13 @@ static inline bool time_update(struct timeval *tv, const struct timeval &start, } // clock source is monotonic, so we can recalculate how much timeout is left - struct timeval now = qt_gettime(); + struct timespec now = qt_gettime(); *tv = timeout + start - now; return tv->tv_sec >= 0; } int qt_safe_select(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept, - const struct timeval *orig_timeout) + const struct timespec *orig_timeout) { if (!orig_timeout) { // no timeout -> block forever @@ -84,13 +84,20 @@ int qt_safe_select(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept, return ret; } - timeval start = qt_gettime(); - timeval timeout = *orig_timeout; + timespec start = qt_gettime(); + timespec timeout = *orig_timeout; // loop and recalculate the timeout as needed int ret; forever { - ret = ::select(nfds, fdread, fdwrite, fdexcept, &timeout); +#ifndef Q_OS_QNX + ret = ::pselect(nfds, fdread, fdwrite, fdexcept, &timeout, 0); +#else + timeval timeoutVal; + timeoutVal.tv_sec = timeout.tv_sec; + timeoutVal.tv_usec = timeout.tv_nsec / 1000; + ret = ::select(nfds, fdread, fdwrite, fdexcept, &timeoutVal); +#endif if (ret != -1 || errno != EINTR) return ret; diff --git a/src/corelib/kernel/qcore_unix_p.h b/src/corelib/kernel/qcore_unix_p.h index 6342b0362a..b68146cd6c 100644 --- a/src/corelib/kernel/qcore_unix_p.h +++ b/src/corelib/kernel/qcore_unix_p.h @@ -100,49 +100,49 @@ using namespace QT_PREPEND_NAMESPACE(QtLibcSupplement); QT_BEGIN_NAMESPACE -// Internal operator functions for timevals -inline timeval &normalizedTimeval(timeval &t) +// Internal operator functions for timespecs +inline timespec &normalizedTimespec(timespec &t) { - while (t.tv_usec >= 1000000) { + while (t.tv_nsec >= 1000000000) { ++t.tv_sec; - t.tv_usec -= 1000000; + t.tv_nsec -= 1000000000; } - while (t.tv_usec < 0) { + while (t.tv_nsec < 0) { --t.tv_sec; - t.tv_usec += 1000000; + t.tv_nsec += 1000000000; } return t; } -inline bool operator<(const timeval &t1, const timeval &t2) -{ return t1.tv_sec < t2.tv_sec || (t1.tv_sec == t2.tv_sec && t1.tv_usec < t2.tv_usec); } -inline bool operator==(const timeval &t1, const timeval &t2) -{ return t1.tv_sec == t2.tv_sec && t1.tv_usec == t2.tv_usec; } -inline timeval &operator+=(timeval &t1, const timeval &t2) +inline bool operator<(const timespec &t1, const timespec &t2) +{ return t1.tv_sec < t2.tv_sec || (t1.tv_sec == t2.tv_sec && t1.tv_nsec < t2.tv_nsec); } +inline bool operator==(const timespec &t1, const timespec &t2) +{ return t1.tv_sec == t2.tv_sec && t1.tv_nsec == t2.tv_nsec; } +inline timespec &operator+=(timespec &t1, const timespec &t2) { t1.tv_sec += t2.tv_sec; - t1.tv_usec += t2.tv_usec; - return normalizedTimeval(t1); + t1.tv_nsec += t2.tv_nsec; + return normalizedTimespec(t1); } -inline timeval operator+(const timeval &t1, const timeval &t2) +inline timespec operator+(const timespec &t1, const timespec &t2) { - timeval tmp; + timespec tmp; tmp.tv_sec = t1.tv_sec + t2.tv_sec; - tmp.tv_usec = t1.tv_usec + t2.tv_usec; - return normalizedTimeval(tmp); + tmp.tv_nsec = t1.tv_nsec + t2.tv_nsec; + return normalizedTimespec(tmp); } -inline timeval operator-(const timeval &t1, const timeval &t2) +inline timespec operator-(const timespec &t1, const timespec &t2) { - timeval tmp; + timespec tmp; tmp.tv_sec = t1.tv_sec - (t2.tv_sec - 1); - tmp.tv_usec = t1.tv_usec - (t2.tv_usec + 1000000); - return normalizedTimeval(tmp); + tmp.tv_nsec = t1.tv_nsec - (t2.tv_nsec + 1000000000); + return normalizedTimespec(tmp); } -inline timeval operator*(const timeval &t1, int mul) +inline timespec operator*(const timespec &t1, int mul) { - timeval tmp; + timespec tmp; tmp.tv_sec = t1.tv_sec * mul; - tmp.tv_usec = t1.tv_usec * mul; - return normalizedTimeval(tmp); + tmp.tv_nsec = t1.tv_nsec * mul; + return normalizedTimespec(tmp); } inline void qt_ignore_sigpipe() @@ -335,11 +335,11 @@ static inline pid_t qt_safe_waitpid(pid_t pid, int *status, int options) #endif // in qelapsedtimer_mac.cpp or qtimestamp_unix.cpp -timeval qt_gettime() Q_DECL_NOTHROW; +timespec qt_gettime() Q_DECL_NOTHROW; void qt_nanosleep(timespec amount); Q_CORE_EXPORT int qt_safe_select(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept, - const struct timeval *tv); + const struct timespec *tv); // according to X/OPEN we have to define semun ourselves // we use prefix as on some systems sem.h will have it diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index ec808424f9..46de52ec9f 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -194,8 +194,32 @@ extern "C" void Q_CORE_EXPORT qt_startup_hook() { } +typedef QList<QtStartUpFunction> QStartUpFuncList; +Q_GLOBAL_STATIC(QStartUpFuncList, preRList) typedef QList<QtCleanUpFunction> QVFuncList; Q_GLOBAL_STATIC(QVFuncList, postRList) +static QBasicMutex globalPreRoutinesMutex; + +/*! + \internal + + Adds a global routine that will be called from the QCoreApplication + constructor. The public API is Q_COREAPP_STARTUP_FUNCTION. +*/ +void qAddPreRoutine(QtStartUpFunction p) +{ + QStartUpFuncList *list = preRList(); + if (!list) + return; + // Due to C++11 parallel dynamic initialization, this can be called + // from multiple threads. +#ifndef QT_NO_THREAD + QMutexLocker locker(&globalPreRoutinesMutex); +#endif + if (QCoreApplication::instance()) + p(); + list->prepend(p); // in case QCoreApplication is re-created, see qt_call_pre_routines +} void qAddPostRoutine(QtCleanUpFunction p) { @@ -213,6 +237,21 @@ void qRemovePostRoutine(QtCleanUpFunction p) list->removeAll(p); } +static void qt_call_pre_routines() +{ + QStartUpFuncList *list = preRList(); + if (!list) + return; +#ifndef QT_NO_THREAD + QMutexLocker locker(&globalPreRoutinesMutex); +#endif + // Unlike qt_call_post_routines, we don't empty the list, because + // Q_COREAPP_STARTUP_FUNCTION is a macro, so the user expects + // the function to be executed every time QCoreApplication is created. + for (int i = 0; i < list->count(); ++i) + list->at(i)(); +} + void Q_CORE_EXPORT qt_call_post_routines() { QVFuncList *list = 0; @@ -261,13 +300,6 @@ struct QCoreApplicationData { #ifndef QT_NO_LIBRARY delete app_libpaths; #endif - - // cleanup the QAdoptedThread created for the main() thread - if (QCoreApplicationPrivate::theMainThread) { - QThreadData *data = QThreadData::get2(QCoreApplicationPrivate::theMainThread); - QCoreApplicationPrivate::theMainThread = 0; - data->deref(); // deletes the data and the adopted thread - } } #ifdef Q_OS_BLACKBERRY @@ -637,6 +669,7 @@ void QCoreApplication::init() d->processCommandLineArguments(); + qt_call_pre_routines(); qt_startup_hook(); } @@ -1999,9 +2032,21 @@ QStringList QCoreApplication::arguments() \sa organizationDomain, applicationName */ +/*! + \fn void QCoreApplication::organizationNameChanged() + \internal + + While not useful from C++ due to how organizationName is normally set once on + startup, this is still needed for QML so that bindings are reevaluated after + that initial change. +*/ void QCoreApplication::setOrganizationName(const QString &orgName) { + if (coreappdata()->orgName == orgName) + return; coreappdata()->orgName = orgName; + if (QCoreApplication::self) + emit QCoreApplication::self->organizationNameChanged(); } QString QCoreApplication::organizationName() @@ -2027,9 +2072,19 @@ QString QCoreApplication::organizationName() \sa organizationName, applicationName, applicationVersion */ +/*! + \fn void QCoreApplication::organizationDomainChanged() + \internal + + Primarily for QML, see organizationNameChanged. +*/ void QCoreApplication::setOrganizationDomain(const QString &orgDomain) { + if (coreappdata()->orgDomain == orgDomain) + return; coreappdata()->orgDomain = orgDomain; + if (QCoreApplication::self) + emit QCoreApplication::self->organizationDomainChanged(); } QString QCoreApplication::organizationDomain() @@ -2049,9 +2104,19 @@ QString QCoreApplication::organizationDomain() \sa organizationName, organizationDomain, applicationVersion, applicationFilePath */ +/*! + \fn void QCoreApplication::applicationNameChanged() + \internal + + Primarily for QML, see organizationNameChanged. +*/ void QCoreApplication::setApplicationName(const QString &application) { + if (coreappdata()->application == application) + return; coreappdata()->application = application; + if (QCoreApplication::self) + emit QCoreApplication::self->applicationNameChanged(); } QString QCoreApplication::applicationName() @@ -2078,9 +2143,19 @@ Q_CORE_EXPORT QString qt_applicationName_noFallback() \sa applicationName, organizationName, organizationDomain */ +/*! + \fn void QCoreApplication::applicationVersionChanged() + \internal + + Primarily for QML, see organizationNameChanged. +*/ void QCoreApplication::setApplicationVersion(const QString &version) { + if (coreappdata()->applicationVersion == version) + return; coreappdata()->applicationVersion = version; + if (QCoreApplication::self) + emit QCoreApplication::self->applicationVersionChanged(); } QString QCoreApplication::applicationVersion() @@ -2325,6 +2400,31 @@ void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatc } /*! + \macro Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr) + \since 5.1 + \relates QCoreApplication + \reentrant + + Adds a global function that will be called from the QCoreApplication + constructor. This macro is normally used to initialize libraries + for program-wide functionality, without requiring the application to + call into the library for initialization. + + The function specified by \a ptr should take no arguments and should + return nothing. For example: + + \snippet code/src_corelib_kernel_qcoreapplication.cpp 3 + + Note that the startup function will run at the end of the QCoreApplication constructor, + before any GUI initialization. If GUI code is required in the function, + use a timer (or a queued invocation) to perform the initialization later on, + from the event loop. + + If QCoreApplication is deleted and another QCoreApplication is created, + the startup function will be invoked again. +*/ + +/*! \fn void qAddPostRoutine(QtCleanUpFunction ptr) \relates QCoreApplication diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h index 0a87689ff3..022ef8c0bc 100644 --- a/src/corelib/kernel/qcoreapplication.h +++ b/src/corelib/kernel/qcoreapplication.h @@ -50,8 +50,6 @@ typedef struct tagMSG MSG; #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -68,10 +66,10 @@ class QAbstractNativeEventFilter; class Q_CORE_EXPORT QCoreApplication : public QObject { Q_OBJECT - Q_PROPERTY(QString applicationName READ applicationName WRITE setApplicationName) - Q_PROPERTY(QString applicationVersion READ applicationVersion WRITE setApplicationVersion) - Q_PROPERTY(QString organizationName READ organizationName WRITE setOrganizationName) - Q_PROPERTY(QString organizationDomain READ organizationDomain WRITE setOrganizationDomain) + Q_PROPERTY(QString applicationName READ applicationName WRITE setApplicationName NOTIFY applicationNameChanged) + Q_PROPERTY(QString applicationVersion READ applicationVersion WRITE setApplicationVersion NOTIFY applicationVersionChanged) + Q_PROPERTY(QString organizationName READ organizationName WRITE setOrganizationName NOTIFY organizationNameChanged) + Q_PROPERTY(QString organizationDomain READ organizationDomain WRITE setOrganizationDomain NOTIFY organizationDomainChanged) Q_PROPERTY(bool quitLockEnabled READ isQuitLockEnabled WRITE setQuitLockEnabled) Q_DECLARE_PRIVATE(QCoreApplication) @@ -166,6 +164,11 @@ Q_SIGNALS: #endif ); + void organizationNameChanged(); + void organizationDomainChanged(); + void applicationNameChanged(); + void applicationVersionChanged(); + protected: bool event(QEvent *); @@ -220,12 +223,20 @@ public: \ { return QCoreApplication::translate(#context, sourceText, disambiguation, n); } \ private: +typedef void (*QtStartUpFunction)(); typedef void (*QtCleanUpFunction)(); +Q_CORE_EXPORT void qAddPreRoutine(QtStartUpFunction); Q_CORE_EXPORT void qAddPostRoutine(QtCleanUpFunction); Q_CORE_EXPORT void qRemovePostRoutine(QtCleanUpFunction); Q_CORE_EXPORT QString qAppName(); // get application name +#define Q_COREAPP_STARTUP_FUNCTION(AFUNC) \ + static void AFUNC ## _ctor_function() { \ + qAddPreRoutine(AFUNC); \ + } \ + Q_CONSTRUCTOR_FUNCTION(AFUNC ## _ctor_function) + #if defined(Q_OS_WIN) && !defined(QT_NO_DEBUG_STREAM) Q_CORE_EXPORT QString decodeMSG(const MSG &); Q_CORE_EXPORT QDebug operator<<(QDebug, const MSG &); @@ -233,6 +244,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const MSG &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QCOREAPPLICATION_H diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h index d35b5198a9..47a461d330 100644 --- a/src/corelib/kernel/qcoreevent.h +++ b/src/corelib/kernel/qcoreevent.h @@ -46,8 +46,6 @@ #include <QtCore/qbytearray.h> #include <QtCore/qobjectdefs.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -377,6 +375,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QCOREEVENT_H diff --git a/src/corelib/kernel/qeventdispatcher_blackberry.cpp b/src/corelib/kernel/qeventdispatcher_blackberry.cpp index 3e958ee277..5206334c09 100644 --- a/src/corelib/kernel/qeventdispatcher_blackberry.cpp +++ b/src/corelib/kernel/qeventdispatcher_blackberry.cpp @@ -271,13 +271,13 @@ void QEventDispatcherBlackberry::unregisterSocketNotifier(QSocketNotifier *notif } } -static inline int timevalToMillisecs(const timeval &tv) +static inline int timespecToMillisecs(const timespec &tv) { - return (tv.tv_sec * 1000) + (tv.tv_usec / 1000); + return (tv.tv_sec * 1000) + (tv.tv_nsec / 1000000); } int QEventDispatcherBlackberry::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - timeval *timeout) + timespec *timeout) { Q_UNUSED(nfds); Q_D(QEventDispatcherBlackberry); @@ -306,9 +306,9 @@ int QEventDispatcherBlackberry::select(int nfds, fd_set *readfds, fd_set *writef // Convert timeout to milliseconds int timeoutTotal = -1; if (timeout) - timeoutTotal = timevalToMillisecs(*timeout); + timeoutTotal = timespecToMillisecs(*timeout); int timeoutLeft = timeoutTotal; - timeval startTime = qt_gettime(); + timespec startTime = qt_gettime(); // This loop exists such that we can drain the bps event queue of all native events // more efficiently than if we were to return control to Qt after each event. This @@ -332,16 +332,16 @@ int QEventDispatcherBlackberry::select(int nfds, fd_set *readfds, fd_set *writef // Update the timeout // Clock source is monotonic, so we can recalculate how much timeout is left if (timeoutTotal != -1) { - timeval t2 = qt_gettime(); + timespec t2 = qt_gettime(); timeoutLeft = timeoutTotal - - (timevalToMillisecs(t2) - timevalToMillisecs(startTime)); + - (timespecToMillisecs(t2) - timespecToMillisecs(startTime)); if (timeoutLeft < 0) timeoutLeft = 0; } - timeval tnext; + timespec tnext; if (d->timerList.timerWait(tnext)) { - int timeoutNext = timevalToMillisecs(tnext); + int timeoutNext = timespecToMillisecs(tnext); if (timeoutNext < timeoutLeft || timeoutTotal == -1) { timeoutTotal = timeoutLeft = timeoutNext; startTime = qt_gettime(); diff --git a/src/corelib/kernel/qeventdispatcher_blackberry_p.h b/src/corelib/kernel/qeventdispatcher_blackberry_p.h index 79ed21dbf2..5a4c3a9dcd 100644 --- a/src/corelib/kernel/qeventdispatcher_blackberry_p.h +++ b/src/corelib/kernel/qeventdispatcher_blackberry_p.h @@ -77,7 +77,7 @@ protected: QEventDispatcherBlackberry(QEventDispatcherBlackberryPrivate &dd, QObject *parent = 0); int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - timeval *timeout); + timespec *timeout); int ioEvents(int fd); }; diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp index c6680d6a80..75cd88c456 100644 --- a/src/corelib/kernel/qeventdispatcher_glib.cpp +++ b/src/corelib/kernel/qeventdispatcher_glib.cpp @@ -131,9 +131,9 @@ struct GTimerSource static gboolean timerSourcePrepareHelper(GTimerSource *src, gint *timeout) { - timeval tv = { 0l, 0l }; + timespec tv = { 0l, 0l }; if (!(src->processEventsFlags & QEventLoop::X11ExcludeTimers) && src->timerList.timerWait(tv)) - *timeout = (tv.tv_sec * 1000) + ((tv.tv_usec + 999) / 1000); + *timeout = (tv.tv_sec * 1000) + ((tv.tv_nsec + 999999) / 1000 / 1000); else *timeout = -1; diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp index acdc7635e8..c79fe89105 100644 --- a/src/corelib/kernel/qeventdispatcher_unix.cpp +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp @@ -56,6 +56,10 @@ #include <stdio.h> #include <stdlib.h> +#ifndef QT_NO_EVENTFD +# include <sys/eventfd.h> +#endif + // VxWorks doesn't correctly set the _POSIX_... options #if defined(Q_OS_VXWORKS) # if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK <= 0) @@ -109,7 +113,7 @@ QEventDispatcherUNIXPrivate::QEventDispatcherUNIXPrivate() } #elif defined(Q_OS_VXWORKS) char name[20]; - qsnprintf(name, sizeof(name), "/pipe/qt_%08x", int(taskIdCurrent)); + qsnprintf(name, sizeof(name), "/pipe/qt_%08x", int(taskIdSelf())); // make sure there is no pipe with this name pipeDevDelete(name, true); @@ -127,6 +131,12 @@ QEventDispatcherUNIXPrivate::QEventDispatcherUNIXPrivate() } } #else +# ifndef QT_NO_EVENTFD + thread_pipe[0] = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); + if (thread_pipe[0] != -1) + thread_pipe[1] = -1; + else // fall through the next "if" +# endif if (qt_safe_pipe(thread_pipe, O_NONBLOCK) == -1) { perror("QEventDispatcherUNIXPrivate(): Unable to create thread pipe"); pipefail = true; @@ -149,20 +159,21 @@ QEventDispatcherUNIXPrivate::~QEventDispatcherUNIXPrivate() close(thread_pipe[0]); char name[20]; - qsnprintf(name, sizeof(name), "/pipe/qt_%08x", int(taskIdCurrent)); + qsnprintf(name, sizeof(name), "/pipe/qt_%08x", int(taskIdSelf())); pipeDevDelete(name, true); #else // cleanup the common parts of the event loop close(thread_pipe[0]); - close(thread_pipe[1]); + if (thread_pipe[1] != -1) + close(thread_pipe[1]); #endif // cleanup timers qDeleteAll(timerList); } -int QEventDispatcherUNIXPrivate::doSelect(QEventLoop::ProcessEventsFlags flags, timeval *timeout) +int QEventDispatcherUNIXPrivate::doSelect(QEventLoop::ProcessEventsFlags flags, timespec *timeout) { Q_Q(QEventDispatcherUNIX); @@ -279,9 +290,18 @@ int QEventDispatcherUNIXPrivate::processThreadWakeUp(int nsel) ::read(thread_pipe[0], c, sizeof(c)); ::ioctl(thread_pipe[0], FIOFLUSH, 0); #else - char c[16]; - while (::read(thread_pipe[0], c, sizeof(c)) > 0) - ; +# ifndef QT_NO_EVENTFD + if (thread_pipe[1] == -1) { + // eventfd + eventfd_t value; + eventfd_read(thread_pipe[0], &value); + } else +# endif + { + char c[16]; + while (::read(thread_pipe[0], c, sizeof(c)) > 0) { + } + } #endif if (!wakeUps.testAndSetRelease(1, 0)) { // hopefully, this is dead code @@ -307,7 +327,7 @@ QEventDispatcherUNIX::~QEventDispatcherUNIX() } int QEventDispatcherUNIX::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - timeval *timeout) + timespec *timeout) { return qt_safe_select(nfds, readfds, writefds, exceptfds, timeout); } @@ -580,8 +600,8 @@ bool QEventDispatcherUNIX::processEvents(QEventLoop::ProcessEventsFlags flags) if (!d->interrupt) { // return the maximum time we can wait for an event. - timeval *tm = 0; - timeval wait_tm = { 0l, 0l }; + timespec *tm = 0; + timespec wait_tm = { 0l, 0l }; if (!(flags & QEventLoop::X11ExcludeTimers)) { if (d->timerList.timerWait(wait_tm)) tm = &wait_tm; @@ -593,7 +613,7 @@ bool QEventDispatcherUNIX::processEvents(QEventLoop::ProcessEventsFlags flags) // no time to wait tm->tv_sec = 0l; - tm->tv_usec = 0l; + tm->tv_nsec = 0l; } nevents = d->doSelect(flags, tm); @@ -630,6 +650,15 @@ void QEventDispatcherUNIX::wakeUp() { Q_D(QEventDispatcherUNIX); if (d->wakeUps.testAndSetAcquire(0, 1)) { +#ifndef QT_NO_EVENTFD + if (d->thread_pipe[1] == -1) { + // eventfd + eventfd_t value = 1; + int ret; + EINTR_LOOP(ret, eventfd_write(d->thread_pipe[0], value)); + return; + } +#endif char c = 0; qt_safe_write( d->thread_pipe[1], &c, 1 ); } diff --git a/src/corelib/kernel/qeventdispatcher_unix_p.h b/src/corelib/kernel/qeventdispatcher_unix_p.h index afebe2fb7e..db89b7c444 100644 --- a/src/corelib/kernel/qeventdispatcher_unix_p.h +++ b/src/corelib/kernel/qeventdispatcher_unix_p.h @@ -61,9 +61,7 @@ #include "QtCore/qvarlengtharray.h" #include "private/qtimerinfo_unix_p.h" -#if defined(Q_OS_VXWORKS) -# include <sys/times.h> -#else +#if !defined(Q_OS_VXWORKS) # include <sys/time.h> # if (!defined(Q_OS_HPUX) || defined(__ia64)) && !defined(Q_OS_NACL) # include <sys/select.h> @@ -132,7 +130,7 @@ protected: virtual int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - timeval *timeout); + timespec *timeout); }; class Q_CORE_EXPORT QEventDispatcherUNIXPrivate : public QAbstractEventDispatcherPrivate @@ -143,11 +141,14 @@ public: QEventDispatcherUNIXPrivate(); ~QEventDispatcherUNIXPrivate(); - int doSelect(QEventLoop::ProcessEventsFlags flags, timeval *timeout); + int doSelect(QEventLoop::ProcessEventsFlags flags, timespec *timeout); virtual int initThreadWakeUp(); virtual int processThreadWakeUp(int nsel); bool mainThread; + + // note for eventfd(7) support: + // if thread_pipe[1] is -1, then eventfd(7) is in use and is stored in thread_pipe[0] int thread_pipe[2]; // highest fd for all socket notifiers diff --git a/src/corelib/kernel/qeventloop.h b/src/corelib/kernel/qeventloop.h index d4141a05bc..926be08265 100644 --- a/src/corelib/kernel/qeventloop.h +++ b/src/corelib/kernel/qeventloop.h @@ -44,8 +44,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -106,6 +104,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QEVENTLOOP_H diff --git a/src/corelib/kernel/qeventloop_p.h b/src/corelib/kernel/qeventloop_p.h index 21a1dcda4c..8e2bfdb55e 100644 --- a/src/corelib/kernel/qeventloop_p.h +++ b/src/corelib/kernel/qeventloop_p.h @@ -44,8 +44,6 @@ #include "qobject_p.h" -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QEventLoopPrivate : public QObjectPrivate @@ -76,6 +74,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QEVENTLOOP_P_H diff --git a/src/corelib/kernel/qfunctions_nacl.h b/src/corelib/kernel/qfunctions_nacl.h index 2cb9d16c95..bc44a21cb8 100644 --- a/src/corelib/kernel/qfunctions_nacl.h +++ b/src/corelib/kernel/qfunctions_nacl.h @@ -52,8 +52,6 @@ #define PTHREAD_CANCEL_ENABLE 2 #define PTHREAD_INHERIT_SCHED 3 -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -89,8 +87,6 @@ int select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * errorfds, str QT_END_NAMESPACE -QT_END_HEADER - #endif //Q_OS_NACL #endif //QFUNCTIONS_NACL_H diff --git a/src/corelib/kernel/qfunctions_p.h b/src/corelib/kernel/qfunctions_p.h index 57c6a8f295..6e094f1ed3 100644 --- a/src/corelib/kernel/qfunctions_p.h +++ b/src/corelib/kernel/qfunctions_p.h @@ -72,8 +72,5 @@ # define Q_STATIC_GLOBAL_INLINE_OPERATOR static inline #endif -QT_BEGIN_HEADER -QT_END_HEADER - #endif diff --git a/src/corelib/kernel/qfunctions_vxworks.cpp b/src/corelib/kernel/qfunctions_vxworks.cpp index 2174588757..e1abecb9d6 100644 --- a/src/corelib/kernel/qfunctions_vxworks.cpp +++ b/src/corelib/kernel/qfunctions_vxworks.cpp @@ -46,7 +46,9 @@ #include "qplatformdefs.h" #include "qfunctions_vxworks.h" +#if defined(_WRS_KERNEL) #include <vmLib.h> +#endif #include <selectLib.h> #include <ioLib.h> @@ -74,10 +76,12 @@ void *lfind(const void* key, const void* base, size_t* elements, size_t size, // no rand_r(), but rand() // NOTE: this implementation is wrong for multi threaded applications, // but there is no way to get it right on VxWorks (in kernel mode) +#if defined(_WRS_KERNEL) int rand_r(unsigned int * /*seedp*/) { return rand(); } +#endif // no usleep() support int usleep(unsigned int usec) @@ -92,7 +96,7 @@ int usleep(unsigned int usec) // gettimeofday() is declared, but is missing from the library // It IS however defined in the Curtis-Wright X11 libraries, so // we have to make the symbol 'weak' -#if defined(Q_CC_DIAB) +#if defined(Q_CC_DIAB) && !defined(VXWORKS_DKM) && !defined(VXWORKS_RTP) # pragma weak gettimeofday #endif int gettimeofday(struct timeval *tv, void /*struct timezone*/ *) @@ -118,7 +122,11 @@ int gettimeofday(struct timeval *tv, void /*struct timezone*/ *) // neither getpagesize() or sysconf(_SC_PAGESIZE) are available int getpagesize() { +#if defined(_WRS_KERNEL) return vmPageSizeGet(); +#else + return sysconf(_SC_PAGESIZE); +#endif } // symlinks are not supported (lstat is now just a call to stat - see qplatformdefs.h) diff --git a/src/corelib/kernel/qfunctions_vxworks.h b/src/corelib/kernel/qfunctions_vxworks.h index 6339903cff..02c599f490 100644 --- a/src/corelib/kernel/qfunctions_vxworks.h +++ b/src/corelib/kernel/qfunctions_vxworks.h @@ -52,7 +52,11 @@ #include <errno.h> #include <sys/types.h> #include <sys/ioctl.h> +#if defined(_WRS_KERNEL) #include <sys/times.h> +#else +#include <sys/time.h> +#endif #include <sys/socket.h> #include <sys/stat.h> #include <sys/wait.h> @@ -61,15 +65,50 @@ #include <net/if.h> #endif -QT_BEGIN_HEADER +// VxWorks has public header mbuf.h which defines following variables for DKM. +// Let's undef those to because they overlap with Qt variable names- +// File mbuf.h is included in headers <netinet/in.h> <net/if.h>, so make sure +// that those are included before undef's. +#if defined(mbuf) +# undef mbuf +#endif +#if defined(m_data) +# undef m_data +#endif +#if defined(m_type) +# undef m_type +#endif +#if defined(m_next) +# undef m_next +#endif +#if defined(m_len) +# undef m_len +#endif +#if defined(m_flags) +# undef m_flags +#endif +#if defined(m_hdr) +# undef m_hdr +#endif +#if defined(m_ext) +# undef m_ext +#endif +#if defined(m_act) +# undef m_act +#endif +#if defined(m_nextpkt) +# undef m_nextpkt +#endif +#if defined(m_pkthdr) +# undef m_pkthdr +#endif + QT_BEGIN_NAMESPACE #ifdef QT_BUILD_CORE_LIB #endif QT_END_NAMESPACE -QT_END_HEADER - #ifndef RTLD_LOCAL #define RTLD_LOCAL 0 @@ -95,17 +134,23 @@ void *lfind(const void* key, const void* base, size_t* elements, size_t size, // no rand_r(), but rand() // NOTE: this implementation is wrong for multi threaded applications, // but there is no way to get it right on VxWorks (in kernel mode) +#if defined(_WRS_KERNEL) int rand_r(unsigned int * /*seedp*/); +#endif // no usleep() support int usleep(unsigned int); +#if defined(VXWORKS_DKM) || defined(VXWORKS_RTP) +int gettimeofday(struct timeval *, void *); +#else // gettimeofday() is declared, but is missing from the library. // It IS however defined in the Curtis-Wright X11 libraries, so // we have to make the symbol 'weak' int gettimeofday(struct timeval *tv, void /*struct timezone*/ *) __attribute__((weak)); +#endif -// neither getpagesize() or sysconf(_SC_PAGESIZE) are available +// getpagesize() not available int getpagesize(); // symlinks are not supported (lstat is now just a call to stat - see qplatformdefs.h) diff --git a/src/corelib/kernel/qfunctions_wince.h b/src/corelib/kernel/qfunctions_wince.h index e20a4ceaca..4eeb9cff6a 100644 --- a/src/corelib/kernel/qfunctions_wince.h +++ b/src/corelib/kernel/qfunctions_wince.h @@ -56,15 +56,12 @@ #include <winsock.h> #include <ceconfig.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE #ifdef QT_BUILD_CORE_LIB #endif QT_END_NAMESPACE -QT_END_HEADER - // The standard SDK misses this define... #define _control87 _controlfp diff --git a/src/corelib/kernel/qmath.cpp b/src/corelib/kernel/qmath.cpp index 1d6fcc2cd6..8f900e2101 100644 --- a/src/corelib/kernel/qmath.cpp +++ b/src/corelib/kernel/qmath.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2013 Laszlo Papp <lpapp@kde.org> ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -302,4 +303,90 @@ const qreal qt_sine_table[QT_SINE_TABLE_SIZE] = { qreal(-0.024541228522912448) }; +/*! + \headerfile <QtMath> + \title Generic Math Declarations + \ingroup funclists + + \brief The <QtMath> header file includes generic math declarations. + + The global declarations include \l{functions}. + + These functions are partly convenience definitions for basic + operations, for instance not available in the Standard Template Library et + al. +*/ + +/*! + \fn float qDegreesToRadians(float degrees) + \relates <QtMath> + \since 5.1 + + \brief The function converts the \a degrees in float to radians. + + The purpose of the function is to aid the conversion as such a convenient + function is not part of the Standard Template Library, i.e. in <cmath> or + elsewhere. + + Example: + + \snippet code/src_corelib_kernel_qmath.cpp 0 + + \sa qRadiansToDegrees() +*/ + +/*! + \fn double qDegreesToRadians(double degrees) + \relates <QtMath> + \since 5.1 + + \brief The function converts the \a degrees in double to radians. + + The purpose of the function is to aid the conversion as such a convenient + function is not part of the Standard Template Library, i.e. in <cmath> or + elsewhere. + + Example: + + \snippet code/src_corelib_kernel_qmath.cpp 1 + + \sa qRadiansToDegrees() +*/ + +/*! + \fn float qRadiansToDegrees(float radians) + \relates <QtMath> + \since 5.1 + + \brief The function converts the \a radians in float to degrees. + + The purpose of the function is to aid the conversion as such a convenient + function is not part of the Standard Template Library, i.e. in <cmath> or + elsewhere. + + Example: + + \snippet code/src_corelib_kernel_qmath.cpp 2 + + \sa qDegreesToRadians() +*/ + +/*! + \fn double qRadiansToDegrees(double radians) + \relates <QtMath> + \since 5.1 + + \brief The function converts the \a radians in double to degrees. + + The purpose of the function is to aid the conversion as such a convenient + function is not part of the Standard Template Library, i.e. in <cmath> or + elsewhere. + + Example: + + \snippet code/src_corelib_kernel_qmath.cpp 3 + + \sa qDegreesToRadians() +*/ + QT_END_NAMESPACE diff --git a/src/corelib/kernel/qmath.h b/src/corelib/kernel/qmath.h index 097200d690..21e23b9eb0 100644 --- a/src/corelib/kernel/qmath.h +++ b/src/corelib/kernel/qmath.h @@ -42,12 +42,14 @@ #ifndef QMATH_H #define QMATH_H +#if 0 +#pragma qt_class(QtMath) +#endif + #include <math.h> #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -264,8 +266,26 @@ inline qreal qFastCos(qreal x) return qt_sine_table[si] - (qt_sine_table[ci] + 0.5 * qt_sine_table[si] * d) * d; } -QT_END_NAMESPACE +Q_DECL_CONSTEXPR inline float qDegreesToRadians(float degrees) +{ + return degrees * float(M_PI/180); +} + +Q_DECL_CONSTEXPR inline double qDegreesToRadians(double degrees) +{ + return degrees * (M_PI / 180); +} + +Q_DECL_CONSTEXPR inline float qRadiansToDegrees(float radians) +{ + return radians * float(180/M_PI); +} -QT_END_HEADER +Q_DECL_CONSTEXPR inline double qRadiansToDegrees(double radians) +{ + return radians * (180 / M_PI); +} + +QT_END_NAMESPACE #endif // QMATH_H diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h index 6d6b849d75..23fc89ffe3 100644 --- a/src/corelib/kernel/qmetaobject.h +++ b/src/corelib/kernel/qmetaobject.h @@ -45,8 +45,6 @@ #include <QtCore/qobjectdefs.h> #include <QtCore/qvariant.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -274,6 +272,4 @@ Q_DECLARE_TYPEINFO(QMetaClassInfo, Q_MOVABLE_TYPE); QT_END_NAMESPACE -QT_END_HEADER - #endif // QMETAOBJECT_H diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index abf220ebd4..b9f7462b12 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -959,11 +959,11 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data) break; #endif #ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION case QMetaType::QRegularExpression: stream << *static_cast<const NS(QRegularExpression)*>(data); break; -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION case QMetaType::QEasingCurve: stream << *static_cast<const NS(QEasingCurve)*>(data); break; @@ -1182,11 +1182,11 @@ bool QMetaType::load(QDataStream &stream, int type, void *data) break; #endif #ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION case QMetaType::QRegularExpression: stream >> *static_cast< NS(QRegularExpression)*>(data); break; -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION case QMetaType::QEasingCurve: stream >> *static_cast< NS(QEasingCurve)*>(data); break; diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 3ffbfb8385..16ea1042a2 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -56,8 +56,6 @@ #error qmetatype.h must be included before any header file that defines Bool #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -534,6 +532,9 @@ struct QMetaTypeId2 static inline Q_DECL_CONSTEXPR int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); } }; +template <typename T> +struct QMetaTypeId2<const T&> : QMetaTypeId2<T> {}; + namespace QtPrivate { template <typename T, bool Defined = QMetaTypeId2<T>::Defined> struct QMetaTypeIdHelper { @@ -633,30 +634,30 @@ void qRegisterMetaTypeStreamOperators(const char *typeName #endif // QT_NO_DATASTREAM template <typename T> -inline Q_DECL_CONSTEXPR int qMetaTypeId( -#ifndef Q_QDOC - T * /* dummy */ = 0 -#endif -) +inline Q_DECL_CONSTEXPR int qMetaTypeId() { Q_STATIC_ASSERT_X(QMetaTypeId2<T>::Defined, "Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system"); return QMetaTypeId2<T>::qt_metatype_id(); } template <typename T> -inline Q_DECL_CONSTEXPR int qRegisterMetaType( -#if !defined(Q_QDOC) && !defined(Q_CC_SUN) - T * dummy = 0 -#endif -) +inline Q_DECL_CONSTEXPR int qRegisterMetaType() { -#ifdef Q_CC_SUN - return qMetaTypeId(static_cast<T *>(0)); -#else - return qMetaTypeId(dummy); -#endif + return qMetaTypeId<T>(); } +#if QT_DEPRECATED_SINCE(5, 1) && !defined(Q_QDOC) +// There used to be a T *dummy = 0 argument in Qt 4.0 to support MSVC6 +template <typename T> +QT_DEPRECATED inline Q_DECL_CONSTEXPR int qMetaTypeId(T *) +{ return qMetaTypeId<T>(); } +#ifndef Q_CC_SUN +template <typename T> +QT_DEPRECATED inline Q_DECL_CONSTEXPR int qRegisterMetaType(T *) +{ return qRegisterMetaType<T>(); } +#endif +#endif + template <typename T> struct QMetaTypeIdQObject<T*, /* isPointerToTypeDerivedFromQObject */ true> { @@ -980,6 +981,4 @@ QT_END_NAMESPACE QT_FOR_EACH_STATIC_TYPE(Q_DECLARE_BUILTIN_METATYPE) -QT_END_HEADER - #endif // QMETATYPE_H diff --git a/src/corelib/kernel/qmetatype_p.h b/src/corelib/kernel/qmetatype_p.h index 39bdd5e3bb..95b9e2e394 100644 --- a/src/corelib/kernel/qmetatype_p.h +++ b/src/corelib/kernel/qmetatype_p.h @@ -221,7 +221,7 @@ template<> struct TypeDefinition<QPointF> { static const bool IsAvailable = fals #ifdef QT_NO_REGEXP template<> struct TypeDefinition<QRegExp> { static const bool IsAvailable = false; }; #endif -#if defined(QT_BOOTSTRAPPED) || defined(QT_NO_REGEXP) +#if defined(QT_BOOTSTRAPPED) || defined(QT_NO_REGULAREXPRESSION) template<> struct TypeDefinition<QRegularExpression> { static const bool IsAvailable = false; }; #endif #ifdef QT_NO_SHORTCUT diff --git a/src/corelib/kernel/qmimedata.h b/src/corelib/kernel/qmimedata.h index 774a6e4986..84c73262b2 100644 --- a/src/corelib/kernel/qmimedata.h +++ b/src/corelib/kernel/qmimedata.h @@ -45,8 +45,6 @@ #include <QtCore/qvariant.h> #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -98,6 +96,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QMIMEDATA_H diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 36db55d25a..c96fb446d6 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -1690,7 +1690,7 @@ void qt_qFindChildren_helper(const QObject *parent, const QRegExp &re, } #endif // QT_NO_REGEXP -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION /*! \internal */ @@ -1712,7 +1712,7 @@ void qt_qFindChildren_helper(const QObject *parent, const QRegularExpression &re qt_qFindChildren_helper(obj, re, mo, list, options); } } -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION /*! \internal diff --git a/src/corelib/kernel/qobject.h b/src/corelib/kernel/qobject.h index a2d7dcd7ef..7beaa32855 100644 --- a/src/corelib/kernel/qobject.h +++ b/src/corelib/kernel/qobject.h @@ -56,8 +56,6 @@ #include <QtCore/qobject_impl.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -73,7 +71,7 @@ class QWidget; #ifndef QT_NO_REGEXP class QRegExp; #endif -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION class QRegularExpression; #endif #ifndef QT_NO_USERDATA @@ -179,7 +177,7 @@ public: } #endif -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION template<typename T> inline QList<T> findChildren(const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const { @@ -496,8 +494,6 @@ namespace QtPrivate { QT_END_NAMESPACE -QT_END_HEADER - #endif #endif // QOBJECT_H diff --git a/src/corelib/kernel/qobject_impl.h b/src/corelib/kernel/qobject_impl.h index 7ed4d33e96..0b5631f2a6 100644 --- a/src/corelib/kernel/qobject_impl.h +++ b/src/corelib/kernel/qobject_impl.h @@ -45,7 +45,10 @@ #error Do not include qobject_impl.h directly #endif -QT_BEGIN_HEADER +#if 0 +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif QT_BEGIN_NAMESPACE @@ -207,6 +210,4 @@ namespace QtPrivate { QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h index e4b4ce8b42..e849ec1599 100644 --- a/src/corelib/kernel/qobject_p.h +++ b/src/corelib/kernel/qobject_p.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2013 Olivier Goffart <ogoffart@woboq.com> ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -198,6 +199,14 @@ public: inline void connectNotify(const QMetaMethod &signal); inline void disconnectNotify(const QMetaMethod &signal); + template <typename Func1, typename Func2> + static inline QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, + const typename QtPrivate::FunctionPointer<Func2>::Object *receiverPrivate, Func2 slot, + Qt::ConnectionType type = Qt::AutoConnection); + + template <typename Func1, typename Func2> + static inline bool disconnect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, + const typename QtPrivate::FunctionPointer<Func2>::Object *receiverPrivate, Func2 slot); public: ExtraData *extraData; // extra data set by the user QThreadData *threadData; // id of the thread that owns the object @@ -267,6 +276,74 @@ inline void QObjectPrivate::disconnectNotify(const QMetaMethod &signal) q_ptr->disconnectNotify(signal); } +namespace QtPrivate { +template<typename Func, typename Args, typename R> class QPrivateSlotObject : public QSlotObjectBase +{ + typedef QtPrivate::FunctionPointer<Func> FuncType; + Func function; + static void impl(int which, QSlotObjectBase *this_, QObject *r, void **a, bool *ret) + { + switch (which) { + case Destroy: + delete static_cast<QPrivateSlotObject*>(this_); + break; + case Call: + FuncType::template call<Args, R>(static_cast<QPrivateSlotObject*>(this_)->function, + static_cast<typename FuncType::Object *>(QObjectPrivate::get(r)), a); + break; + case Compare: + *ret = *reinterpret_cast<Func *>(a) == static_cast<QPrivateSlotObject*>(this_)->function; + break; + case NumOperations: ; + } + } +public: + explicit QPrivateSlotObject(Func f) : QSlotObjectBase(&impl), function(f) {} +}; +} //namespace QtPrivate + +template <typename Func1, typename Func2> +inline QMetaObject::Connection QObjectPrivate::connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, + const typename QtPrivate::FunctionPointer<Func2>::Object *receiverPrivate, Func2 slot, + Qt::ConnectionType type) +{ + typedef QtPrivate::FunctionPointer<Func1> SignalType; + typedef QtPrivate::FunctionPointer<Func2> SlotType; + reinterpret_cast<typename SignalType::Object *>(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast<typename SignalType::Object *>(0)); + + //compilation error if the arguments does not match. + Q_STATIC_ASSERT_X(int(SignalType::ArgumentCount) >= int(SlotType::ArgumentCount), + "The slot requires more arguments than the signal provides."); + Q_STATIC_ASSERT_X((QtPrivate::CheckCompatibleArguments<typename SignalType::Arguments, typename SlotType::Arguments>::value), + "Signal and slot arguments are not compatible."); + Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible<typename SlotType::ReturnType, typename SignalType::ReturnType>::value), + "Return type of the slot is not compatible with the return type of the signal."); + + const int *types = 0; + if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection) + types = QtPrivate::ConnectionTypes<typename SignalType::Arguments>::types(); + + return QObject::connectImpl(sender, reinterpret_cast<void **>(&signal), + receiverPrivate->q_func(), reinterpret_cast<void **>(&slot), + new QtPrivate::QPrivateSlotObject<Func2, typename QtPrivate::List_Left<typename SignalType::Arguments, SlotType::ArgumentCount>::Value, + typename SignalType::ReturnType>(slot), + type, types, &SignalType::Object::staticMetaObject); +} + +template <typename Func1, typename Func2> +bool QObjectPrivate::disconnect(const typename QtPrivate::FunctionPointer< Func1 >::Object* sender, Func1 signal, + const typename QtPrivate::FunctionPointer< Func2 >::Object* receiverPrivate, Func2 slot) +{ + typedef QtPrivate::FunctionPointer<Func1> SignalType; + typedef QtPrivate::FunctionPointer<Func2> SlotType; + reinterpret_cast<typename SignalType::Object *>(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast<typename SignalType::Object *>(0)); + //compilation error if the arguments does not match. + Q_STATIC_ASSERT_X((QtPrivate::CheckCompatibleArguments<typename SignalType::Arguments, typename SlotType::Arguments>::value), + "Signal and slot arguments are not compatible."); + return QObject::disconnectImpl(sender, reinterpret_cast<void **>(&signal), + receiverPrivate->q_func(), reinterpret_cast<void **>(&slot), + &SignalType::Object::staticMetaObject); +} Q_DECLARE_TYPEINFO(QObjectPrivate::Connection, Q_MOVABLE_TYPE); Q_DECLARE_TYPEINFO(QObjectPrivate::Sender, Q_MOVABLE_TYPE); diff --git a/src/corelib/kernel/qobjectcleanuphandler.h b/src/corelib/kernel/qobjectcleanuphandler.h index 96faabc173..1f053cc34b 100644 --- a/src/corelib/kernel/qobjectcleanuphandler.h +++ b/src/corelib/kernel/qobjectcleanuphandler.h @@ -44,8 +44,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -72,6 +70,4 @@ private Q_SLOTS: QT_END_NAMESPACE -QT_END_HEADER - #endif // QOBJECTCLEANUPHANDLER_H diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h index a0617379d5..afbe1a5ece 100644 --- a/src/corelib/kernel/qobjectdefs.h +++ b/src/corelib/kernel/qobjectdefs.h @@ -46,8 +46,6 @@ #include <QtCore/qobjectdefs_impl.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -483,6 +481,4 @@ inline const QMetaObject *QMetaObject::superClass() const QT_END_NAMESPACE -QT_END_HEADER - #endif // QOBJECTDEFS_H diff --git a/src/corelib/kernel/qobjectdefs_impl.h b/src/corelib/kernel/qobjectdefs_impl.h index 1452e720ad..959a255389 100644 --- a/src/corelib/kernel/qobjectdefs_impl.h +++ b/src/corelib/kernel/qobjectdefs_impl.h @@ -45,7 +45,10 @@ #error Do not include qobjectdefs_impl.h directly #endif -QT_BEGIN_HEADER +#if 0 +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif QT_BEGIN_NAMESPACE @@ -601,6 +604,4 @@ namespace QtPrivate { QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/kernel/qpointer.h b/src/corelib/kernel/qpointer.h index ebdeb156ba..230b6b66eb 100644 --- a/src/corelib/kernel/qpointer.h +++ b/src/corelib/kernel/qpointer.h @@ -46,67 +46,51 @@ #ifndef QT_NO_QOBJECT -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QVariant; -class QPointerBase -{ - QWeakPointer<QObject> wp; - -protected: - inline QPointerBase() : wp() { } - inline QPointerBase(QObject *p) : wp(p, true) { } - // compiler-generated copy/move ctor/assignment operators are fine! (even though public) - inline ~QPointerBase() { } - - inline QObject* data() const - { return wp.data(); } - - inline void assign(QObject *p) - { wp.assign(p); } - - inline bool isNull() const - { return wp.isNull(); } - - inline void clear() - { wp.clear(); } -}; - template <class T> -class QPointer : private QPointerBase +class QPointer { + template<typename U> + struct TypeSelector + { + typedef QObject Type; + }; + template<typename U> + struct TypeSelector<const U> + { + typedef const QObject Type; + }; + typedef typename TypeSelector<T>::Type QObjectType; + QWeakPointer<QObjectType> wp; public: inline QPointer() { } - inline QPointer(T *p) : QPointerBase(p) { } + inline QPointer(T *p) : wp(p, true) { } // compiler-generated copy/move ctor/assignment operators are fine! inline ~QPointer() { } inline QPointer<T> &operator=(T* p) - { QPointerBase::assign(p); return *this; } + { wp.assign(static_cast<QObjectType*>(p)); return *this; } inline T* data() const - { return static_cast<T*>(QPointerBase::data()); } + { return static_cast<T*>( wp.data()); } inline T* operator->() const { return data(); } inline T& operator*() const { return *data(); } inline operator T*() const { return data(); } -#ifdef Q_QDOC - inline bool isNull() const; - inline void clear(); -#else - using QPointerBase::isNull; - using QPointerBase::clear; -#endif + + inline bool isNull() const + { return wp.isNull(); } + + inline void clear() + { wp.clear(); } }; template <class T> Q_DECLARE_TYPEINFO_BODY(QPointer<T>, Q_MOVABLE_TYPE); -#if (!defined(Q_CC_SUN) || (__SUNPRO_CC >= 0x580)) // ambiguity between const T * and T * - template <class T> inline bool operator==(const T *o, const QPointer<T> &p) { return o == p.operator->(); } @@ -115,18 +99,6 @@ template<class T> inline bool operator==(const QPointer<T> &p, const T *o) { return p.operator->() == o; } -#else - -template<class T> -inline bool operator==(const void *o, const QPointer<T> &p) -{ return o == p.operator->(); } - -template<class T> -inline bool operator==(const QPointer<T> &p, const void *o) -{ return p.operator->() == o; } - -#endif - template <class T> inline bool operator==(T *o, const QPointer<T> &p) { return o == p.operator->(); } @@ -139,9 +111,6 @@ template<class T> inline bool operator==(const QPointer<T> &p1, const QPointer<T> &p2) { return p1.operator->() == p2.operator->(); } - -#if (!defined(Q_CC_SUN) || (__SUNPRO_CC >= 0x580)) // ambiguity between const T * and T * - template <class T> inline bool operator!=(const T *o, const QPointer<T> &p) { return o != p.operator->(); } @@ -150,18 +119,6 @@ template<class T> inline bool operator!= (const QPointer<T> &p, const T *o) { return p.operator->() != o; } -#else - -template<class T> -inline bool operator!= (const void *o, const QPointer<T> &p) -{ return o != p.operator->(); } - -template<class T> -inline bool operator!= (const QPointer<T> &p, const void *o) -{ return p.operator->() != o; } - -#endif - template <class T> inline bool operator!=(T *o, const QPointer<T> &p) { return o != p.operator->(); } @@ -174,17 +131,6 @@ template<class T> inline bool operator!= (const QPointer<T> &p1, const QPointer<T> &p2) { return p1.operator->() != p2.operator->() ; } -// Make MSVC < 1400 (2005) handle "if (NULL == p)" syntax -#if defined(Q_CC_MSVC) && (_MSC_VER < 1400) -template<class T> -inline bool operator== (int i, const QPointer<T> &p) -{ Q_ASSERT(i == 0); return !i && p.isNull(); } - -template<class T> -inline bool operator!= (int i, const QPointer<T> &p) -{ Q_ASSERT(i == 0); return !i && !p.isNull(); } -#endif - template<typename T> QPointer<T> qPointerFromVariant(const QVariant &variant) @@ -194,8 +140,6 @@ qPointerFromVariant(const QVariant &variant) QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_QOBJECT #endif // QPOINTER_H diff --git a/src/corelib/kernel/qsharedmemory.h b/src/corelib/kernel/qsharedmemory.h index d87ba02ac9..6b44548f44 100644 --- a/src/corelib/kernel/qsharedmemory.h +++ b/src/corelib/kernel/qsharedmemory.h @@ -44,8 +44,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -114,7 +112,5 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSHAREDMEMORY_H diff --git a/src/corelib/kernel/qsharedmemory_p.h b/src/corelib/kernel/qsharedmemory_p.h index dd9856adf5..9f1e6c8aa1 100644 --- a/src/corelib/kernel/qsharedmemory_p.h +++ b/src/corelib/kernel/qsharedmemory_p.h @@ -69,7 +69,7 @@ namespace QSharedMemoryPrivate #include "qsystemsemaphore.h" #include "private/qobject_p.h" -#if !defined(Q_OS_WIN) && !defined(Q_OS_LINUX_ANDROID) +#if !defined(Q_OS_WIN) && !defined(Q_OS_ANDROID) # include <sys/sem.h> #endif diff --git a/src/corelib/kernel/qsharedmemory_unix.cpp b/src/corelib/kernel/qsharedmemory_unix.cpp index 7f13e3b1a2..fdd73657a9 100644 --- a/src/corelib/kernel/qsharedmemory_unix.cpp +++ b/src/corelib/kernel/qsharedmemory_unix.cpp @@ -151,9 +151,6 @@ key_t QSharedMemoryPrivate::handle() */ int QSharedMemoryPrivate::createUnixKeyFile(const QString &fileName) { - if (QFile::exists(fileName)) - return 0; - int fd = qt_safe_open(QFile::encodeName(fileName).constData(), O_EXCL | O_CREAT | O_RDWR, 0640); if (-1 == fd) { diff --git a/src/corelib/kernel/qsignalmapper.h b/src/corelib/kernel/qsignalmapper.h index f1f4428118..997e8e46de 100644 --- a/src/corelib/kernel/qsignalmapper.h +++ b/src/corelib/kernel/qsignalmapper.h @@ -44,8 +44,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QSignalMapperPrivate; @@ -86,6 +84,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSIGNALMAPPER_H diff --git a/src/corelib/kernel/qsocketnotifier.h b/src/corelib/kernel/qsocketnotifier.h index 97321521e4..8cc6b9c4c4 100644 --- a/src/corelib/kernel/qsocketnotifier.h +++ b/src/corelib/kernel/qsocketnotifier.h @@ -44,8 +44,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QSocketNotifierPrivate; @@ -84,6 +82,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSOCKETNOTIFIER_H diff --git a/src/corelib/kernel/qsystemsemaphore.h b/src/corelib/kernel/qsystemsemaphore.h index 52547f0c1f..b7dd220832 100644 --- a/src/corelib/kernel/qsystemsemaphore.h +++ b/src/corelib/kernel/qsystemsemaphore.h @@ -45,8 +45,6 @@ #include <QtCore/qstring.h> #include <QtCore/qscopedpointer.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -96,7 +94,5 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSYSTEMSEMAPHORE_H diff --git a/src/corelib/kernel/qtimer.h b/src/corelib/kernel/qtimer.h index 9a90ecc772..34bfff9089 100644 --- a/src/corelib/kernel/qtimer.h +++ b/src/corelib/kernel/qtimer.h @@ -47,8 +47,6 @@ #include <QtCore/qbasictimer.h> // conceptual inheritance #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -114,8 +112,6 @@ inline void QTimer::setSingleShot(bool asingleShot) { single = asingleShot; } QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_QOBJECT #endif // QTIMER_H diff --git a/src/corelib/kernel/qtimerinfo_unix.cpp b/src/corelib/kernel/qtimerinfo_unix.cpp index 7a29247fc5..0e33fa697a 100644 --- a/src/corelib/kernel/qtimerinfo_unix.cpp +++ b/src/corelib/kernel/qtimerinfo_unix.cpp @@ -77,7 +77,7 @@ QTimerInfoList::QTimerInfoList() msPerTick = 1000/ticksPerSecond; } else { // detected monotonic timers - previousTime.tv_sec = previousTime.tv_usec = 0; + previousTime.tv_sec = previousTime.tv_nsec = 0; previousTicks = 0; ticksPerSecond = 0; msPerTick = 0; @@ -87,24 +87,24 @@ QTimerInfoList::QTimerInfoList() firstTimerInfo = 0; } -timeval QTimerInfoList::updateCurrentTime() +timespec QTimerInfoList::updateCurrentTime() { return (currentTime = qt_gettime()); } #if ((_POSIX_MONOTONIC_CLOCK-0 <= 0) && !defined(Q_OS_MAC) && !defined(Q_OS_INTEGRITY)) || defined(QT_BOOTSTRAPPED) -timeval qAbsTimeval(const timeval &t) +timespec qAbsTimespec(const timespec &t) { - timeval tmp = t; + timespec tmp = t; if (tmp.tv_sec < 0) { tmp.tv_sec = -tmp.tv_sec - 1; - tmp.tv_usec -= 1000000; + tmp.tv_nsec -= 1000000000; } - if (tmp.tv_sec == 0 && tmp.tv_usec < 0) { - tmp.tv_usec = -tmp.tv_usec; + if (tmp.tv_sec == 0 && tmp.tv_nsec < 0) { + tmp.tv_nsec = -tmp.tv_nsec; } - return normalizedTimeval(tmp); + return normalizedTimespec(tmp); } /* @@ -114,7 +114,7 @@ timeval qAbsTimeval(const timeval &t) If /a delta is nonzero, delta is set to our best guess at how much the system clock was changed. */ -bool QTimerInfoList::timeChanged(timeval *delta) +bool QTimerInfoList::timeChanged(timespec *delta) { #ifdef Q_OS_NACL Q_UNUSED(delta) @@ -124,13 +124,13 @@ bool QTimerInfoList::timeChanged(timeval *delta) clock_t currentTicks = times(&unused); clock_t elapsedTicks = currentTicks - previousTicks; - timeval elapsedTime = currentTime - previousTime; + timespec elapsedTime = currentTime - previousTime; - timeval elapsedTimeTicks; + timespec elapsedTimeTicks; elapsedTimeTicks.tv_sec = elapsedTicks / ticksPerSecond; - elapsedTimeTicks.tv_usec = (((elapsedTicks * 1000) / ticksPerSecond) % 1000) * 1000; + elapsedTimeTicks.tv_nsec = (((elapsedTicks * 1000) / ticksPerSecond) % 1000) * 1000 * 1000; - timeval dummy; + timespec dummy; if (!delta) delta = &dummy; *delta = elapsedTime - elapsedTimeTicks; @@ -140,16 +140,16 @@ bool QTimerInfoList::timeChanged(timeval *delta) // If tick drift is more than 10% off compared to realtime, we assume that the clock has // been set. Of course, we have to allow for the tick granularity as well. - timeval tickGranularity; + timespec tickGranularity; tickGranularity.tv_sec = 0; - tickGranularity.tv_usec = msPerTick * 1000; - return elapsedTimeTicks < ((qAbsTimeval(*delta) - tickGranularity) * 10); + tickGranularity.tv_nsec = msPerTick * 1000 * 1000; + return elapsedTimeTicks < ((qAbsTimespec(*delta) - tickGranularity) * 10); } /* repair broken timer */ -void QTimerInfoList::timerRepair(const timeval &diff) +void QTimerInfoList::timerRepair(const timespec &diff) { // repair all timers for (int i = 0; i < size(); ++i) { @@ -162,7 +162,7 @@ void QTimerInfoList::repairTimersIfNeeded() { if (QElapsedTimer::isMonotonic()) return; - timeval delta; + timespec delta; if (timeChanged(&delta)) timerRepair(delta); } @@ -189,27 +189,27 @@ void QTimerInfoList::timerInsert(QTimerInfo *ti) insert(index+1, ti); } -inline timeval &operator+=(timeval &t1, int ms) +inline timespec &operator+=(timespec &t1, int ms) { t1.tv_sec += ms / 1000; - t1.tv_usec += ms % 1000 * 1000; - return normalizedTimeval(t1); + t1.tv_nsec += ms % 1000 * 1000 * 1000; + return normalizedTimespec(t1); } -inline timeval operator+(const timeval &t1, int ms) +inline timespec operator+(const timespec &t1, int ms) { - timeval t2 = t1; + timespec t2 = t1; return t2 += ms; } -static timeval roundToMillisecond(timeval val) +static timespec roundToMillisecond(timespec val) { // always round up // worst case scenario is that the first trigger of a 1-ms timer is 0.999 ms late - int us = val.tv_usec % 1000; - val.tv_usec += 1000 - us; - return normalizedTimeval(val); + int ns = val.tv_nsec % (1000 * 1000); + val.tv_nsec += 1000 * 1000 - ns; + return normalizedTimespec(val); } #ifdef QTIMERINFO_DEBUG @@ -226,7 +226,7 @@ QDebug operator<<(QDebug s, Qt::TimerType t) } #endif -static void calculateCoarseTimerTimeout(QTimerInfo *t, timeval currentTime) +static void calculateCoarseTimerTimeout(QTimerInfo *t, timespec currentTime) { // The coarse timer works like this: // - interval under 40 ms: round to even @@ -245,7 +245,7 @@ static void calculateCoarseTimerTimeout(QTimerInfo *t, timeval currentTime) // The objective is to make most timers wake up at the same time, thereby reducing CPU wakeups. register uint interval = uint(t->interval); - register uint msec = uint(t->timeout.tv_usec) / 1000; + register uint msec = uint(t->timeout.tv_nsec) / 1000 / 1000; Q_ASSERT(interval >= 20); // Calculate how much we can round and still keep within 5% error @@ -327,16 +327,16 @@ static void calculateCoarseTimerTimeout(QTimerInfo *t, timeval currentTime) recalculate: if (msec == 1000u) { ++t->timeout.tv_sec; - t->timeout.tv_usec = 0; + t->timeout.tv_nsec = 0; } else { - t->timeout.tv_usec = msec * 1000; + t->timeout.tv_nsec = msec * 1000 * 1000; } if (t->timeout < currentTime) t->timeout += interval; } -static void calculateNextTimeout(QTimerInfo *t, timeval currentTime) +static void calculateNextTimeout(QTimerInfo *t, timespec currentTime) { switch (t->timerType) { case Qt::PreciseTimer: @@ -382,9 +382,9 @@ static void calculateNextTimeout(QTimerInfo *t, timeval currentTime) Returns the time to wait for the next timer, or null if no timers are waiting. */ -bool QTimerInfoList::timerWait(timeval &tm) +bool QTimerInfoList::timerWait(timespec &tm) { - timeval currentTime = updateCurrentTime(); + timespec currentTime = updateCurrentTime(); repairTimersIfNeeded(); // Find first waiting timer not already active @@ -405,7 +405,7 @@ bool QTimerInfoList::timerWait(timeval &tm) } else { // no time to wait tm.tv_sec = 0; - tm.tv_usec = 0; + tm.tv_nsec = 0; } return true; @@ -418,9 +418,9 @@ bool QTimerInfoList::timerWait(timeval &tm) */ int QTimerInfoList::timerRemainingTime(int timerId) { - timeval currentTime = updateCurrentTime(); + timespec currentTime = updateCurrentTime(); repairTimersIfNeeded(); - timeval tm = {0, 0}; + timespec tm = {0, 0}; for (int i = 0; i < count(); ++i) { register QTimerInfo *t = at(i); @@ -428,7 +428,7 @@ int QTimerInfoList::timerRemainingTime(int timerId) if (currentTime < t->timeout) { // time to wait tm = roundToMillisecond(t->timeout - currentTime); - return tm.tv_sec*1000 + tm.tv_usec/1000; + return tm.tv_sec*1000 + tm.tv_nsec/1000/1000; } else { return 0; } @@ -451,7 +451,7 @@ void QTimerInfoList::registerTimer(int timerId, int interval, Qt::TimerType time t->obj = object; t->activateRef = 0; - timeval expected = updateCurrentTime() + interval; + timespec expected = updateCurrentTime() + interval; switch (timerType) { case Qt::PreciseTimer: @@ -486,10 +486,10 @@ void QTimerInfoList::registerTimer(int timerId, int interval, Qt::TimerType time t->interval += 1; t->interval >>= 1; t->timeout.tv_sec = currentTime.tv_sec + t->interval; - t->timeout.tv_usec = 0; + t->timeout.tv_nsec = 0; // if we're past the half-second mark, increase the timeout again - if (currentTime.tv_usec > 500*1000) + if (currentTime.tv_nsec > 500*1000*1000) ++t->timeout.tv_sec; } @@ -573,7 +573,7 @@ int QTimerInfoList::activateTimers() int n_act = 0, maxCount = 0; firstTimerInfo = 0; - timeval currentTime = updateCurrentTime(); + timespec currentTime = updateCurrentTime(); // qDebug() << "Thread" << QThread::currentThreadId() << "woken up at" << currentTime; repairTimersIfNeeded(); diff --git a/src/corelib/kernel/qtimerinfo_unix_p.h b/src/corelib/kernel/qtimerinfo_unix_p.h index 549062bd1f..ec7560429b 100644 --- a/src/corelib/kernel/qtimerinfo_unix_p.h +++ b/src/corelib/kernel/qtimerinfo_unix_p.h @@ -66,7 +66,7 @@ struct QTimerInfo { int id; // - timer identifier int interval; // - timer interval in milliseconds Qt::TimerType timerType; // - timer type - timeval timeout; // - when to actually fire + timespec timeout; // - when to actually fire QObject *obj; // - object to receive event QTimerInfo **activateRef; // - ref from activateTimers @@ -80,13 +80,13 @@ struct QTimerInfo { class Q_CORE_EXPORT QTimerInfoList : public QList<QTimerInfo*> { #if ((_POSIX_MONOTONIC_CLOCK-0 <= 0) && !defined(Q_OS_MAC)) || defined(QT_BOOTSTRAPPED) - timeval previousTime; + timespec previousTime; clock_t previousTicks; int ticksPerSecond; int msPerTick; - bool timeChanged(timeval *delta); - void timerRepair(const timeval &); + bool timeChanged(timespec *delta); + void timerRepair(const timespec &); #endif // state variables used by activateTimers() @@ -95,13 +95,13 @@ class Q_CORE_EXPORT QTimerInfoList : public QList<QTimerInfo*> public: QTimerInfoList(); - timeval currentTime; - timeval updateCurrentTime(); + timespec currentTime; + timespec updateCurrentTime(); // must call updateCurrentTime() first! void repairTimersIfNeeded(); - bool timerWait(timeval &); + bool timerWait(timespec &); void timerInsert(QTimerInfo *); int timerRemainingTime(int timerId); diff --git a/src/corelib/kernel/qtranslator.h b/src/corelib/kernel/qtranslator.h index 98c0b81c97..c3957aff3f 100644 --- a/src/corelib/kernel/qtranslator.h +++ b/src/corelib/kernel/qtranslator.h @@ -45,8 +45,6 @@ #include <QtCore/qobject.h> #include <QtCore/qbytearray.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -87,6 +85,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QTRANSLATOR_H diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index d70d8d9a68..ed1a8a4974 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -1529,10 +1529,13 @@ QVariant::QVariant(const QLocale &l) QVariant::QVariant(const QRegExp ®Exp) : d(RegExp) { v_construct<QRegExp>(&d, regExp); } +#endif // QT_NO_REGEXP #ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGULAREXPRESSION QVariant::QVariant(const QRegularExpression &re) : d(RegularExpression) { v_construct<QRegularExpression>(&d, re); } +#endif QVariant::QVariant(const QUuid &uuid) : d(Uuid) { v_construct<QUuid>(&d, uuid); } @@ -1552,7 +1555,6 @@ QVariant::QVariant(const QJsonDocument &jsonDocument) : d(QMetaType::QJsonDocument) { v_construct<QJsonDocument>(&d, jsonDocument); } #endif // QT_BOOTSTRAPPED -#endif // QT_NO_REGEXP /*! Returns the storage type of the value stored in the variant. @@ -2214,6 +2216,7 @@ QRegExp QVariant::toRegExp() const } #endif +#ifndef QT_BOOTSTRAPPED /*! \fn QRegularExpression QVariant::toRegularExpression() const \since 5.0 @@ -2223,13 +2226,12 @@ QRegExp QVariant::toRegExp() const \sa canConvert(), convert() */ -#ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION QRegularExpression QVariant::toRegularExpression() const { return qVariantToHelper<QRegularExpression>(d, handlerManager); } -#endif +#endif // QT_NO_REGULAREXPRESSION /*! \since 5.0 diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index d21f48f98c..6f212f5000 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -51,8 +51,6 @@ #include <QtCore/qstring.h> #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -76,8 +74,10 @@ class QRect; class QRectF; #ifndef QT_NO_REGEXP class QRegExp; -class QRegularExpression; #endif // QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION +class QRegularExpression; +#endif // QT_NO_REGULAREXPRESSION class QTextFormat; class QTextLength; class QUrl; @@ -240,11 +240,11 @@ class Q_CORE_EXPORT QVariant QVariant(const QLocale &locale); #ifndef QT_NO_REGEXP QVariant(const QRegExp ®Exp); -#ifndef QT_BOOTSRAPPED - QVariant(const QRegularExpression &re); -#endif // QT_BOOTSTRAPPED #endif // QT_NO_REGEXP #ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGULAREXPRESSION + QVariant(const QRegularExpression &re); +#endif // QT_NO_REGULAREXPRESSION QVariant(const QUrl &url); QVariant(const QEasingCurve &easing); QVariant(const QUuid &uuid); @@ -253,7 +253,7 @@ class Q_CORE_EXPORT QVariant QVariant(const QJsonObject &jsonObject); QVariant(const QJsonArray &jsonArray); QVariant(const QJsonDocument &jsonDocument); -#endif +#endif // QT_BOOTSTRAPPED QVariant& operator=(const QVariant &other); #ifdef Q_COMPILER_RVALUE_REFS @@ -313,11 +313,11 @@ class Q_CORE_EXPORT QVariant QLocale toLocale() const; #ifndef QT_NO_REGEXP QRegExp toRegExp() const; -#ifndef QT_BOOTSTRAPPED - QRegularExpression toRegularExpression() const; -#endif // QT_BOOTSTRAPPED #endif // QT_NO_REGEXP #ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGULAREXPRESSION + QRegularExpression toRegularExpression() const; +#endif // QT_NO_REGULAREXPRESSION QUrl toUrl() const; QEasingCurve toEasingCurve() const; QUuid toUuid() const; @@ -326,7 +326,7 @@ class Q_CORE_EXPORT QVariant QJsonObject toJsonObject() const; QJsonArray toJsonArray() const; QJsonDocument toJsonDocument() const; -#endif +#endif // QT_BOOTSTRAPPED #ifndef QT_NO_DATASTREAM void load(QDataStream &ds); @@ -484,7 +484,7 @@ public: template <typename T> inline QVariant qVariantFromValue(const T &t) { - return QVariant(qMetaTypeId<T>(reinterpret_cast<T *>(0)), &t, QTypeInfo<T>::isPointer); + return QVariant(qMetaTypeId<T>(), &t, QTypeInfo<T>::isPointer); } template <> @@ -494,7 +494,7 @@ template <typename T> inline void qVariantSetValue(QVariant &v, const T &t) { //if possible we reuse the current QVariant private - const uint type = qMetaTypeId<T>(reinterpret_cast<T *>(0)); + const uint type = qMetaTypeId<T>(); QVariant::Private &d = v.data_ptr(); if (v.isDetached() && (type == d.type || (type <= uint(QVariant::Char) && d.type <= uint(QVariant::Char)))) { d.type = type; @@ -568,7 +568,7 @@ namespace QtPrivate { { static T metaType(const QVariant &v) { - const int vid = qMetaTypeId<T>(static_cast<T *>(0)); + const int vid = qMetaTypeId<T>(); if (vid == v.userType()) return *reinterpret_cast<const T *>(v.constData()); if (vid < int(QMetaType::User)) { @@ -620,6 +620,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QVariant::Type); QT_END_NAMESPACE -QT_END_HEADER - #endif // QVARIANT_H diff --git a/src/corelib/kernel/qwineventnotifier.h b/src/corelib/kernel/qwineventnotifier.h index ca84054d71..56605d9aaa 100644 --- a/src/corelib/kernel/qwineventnotifier.h +++ b/src/corelib/kernel/qwineventnotifier.h @@ -47,8 +47,6 @@ #ifdef Q_OS_WIN #include "QtCore/qt_windows.h" -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QWinEventNotifierPrivate; @@ -83,8 +81,6 @@ protected: QT_END_NAMESPACE -QT_END_HEADER - #endif // Q_OS_WIN #endif // QWINEVENTNOTIFIER_H diff --git a/src/corelib/mimetypes/qmimedatabase.h b/src/corelib/mimetypes/qmimedatabase.h index a567d99749..17684e49da 100644 --- a/src/corelib/mimetypes/qmimedatabase.h +++ b/src/corelib/mimetypes/qmimedatabase.h @@ -45,7 +45,6 @@ #include <QtCore/qmimetype.h> #include <QtCore/qstringlist.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE class QByteArray; @@ -90,6 +89,4 @@ private: }; QT_END_NAMESPACE -QT_END_HEADER - #endif // QMIMEDATABASE_H diff --git a/src/corelib/mimetypes/qmimetype.h b/src/corelib/mimetypes/qmimetype.h index dcab8153ab..24d043eebc 100644 --- a/src/corelib/mimetypes/qmimetype.h +++ b/src/corelib/mimetypes/qmimetype.h @@ -45,7 +45,6 @@ #include <QtCore/qshareddata.h> #include <QtCore/qstring.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE class QMimeTypePrivate; @@ -112,6 +111,4 @@ protected: Q_DECLARE_SHARED(QMimeType) QT_END_NAMESPACE -QT_END_HEADER - #endif // QMIMETYPE_H diff --git a/src/corelib/plugin/qfactoryinterface.h b/src/corelib/plugin/qfactoryinterface.h index 59bce69022..88fb1bf599 100644 --- a/src/corelib/plugin/qfactoryinterface.h +++ b/src/corelib/plugin/qfactoryinterface.h @@ -45,8 +45,6 @@ #include <QtCore/qobject.h> #include <QtCore/qstringlist.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -61,6 +59,4 @@ Q_DECLARE_INTERFACE(QFactoryInterface, "org.qt-project.Qt.QFactoryInterface") QT_END_NAMESPACE -QT_END_HEADER - #endif // QFACTORYINTERFACE_H diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index d17067684a..3432f9619d 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -79,8 +79,6 @@ QT_BEGIN_NAMESPACE # define QT_NO_DEBUG_PLUGIN_CHECK #endif -static QBasicMutex qt_library_mutex; - /*! \class QLibrary \inmodule QtCore @@ -339,46 +337,134 @@ static void installCoverageTool(QLibraryPrivate *libPrivate) #endif } -typedef QMap<QString, QLibraryPrivate*> LibraryMap; +class QLibraryStore +{ +public: + inline ~QLibraryStore(); + static inline QLibraryPrivate *findOrCreate(const QString &fileName, const QString &version); + static inline void releaseLibrary(QLibraryPrivate *lib); + + static inline void cleanup(); -struct LibraryData { +private: + static inline QLibraryStore *instance(); + + // all members and instance() are protected by qt_library_mutex + typedef QMap<QString, QLibraryPrivate*> LibraryMap; LibraryMap libraryMap; - QSet<QLibraryPrivate*> loadedLibs; }; -Q_GLOBAL_STATIC(LibraryData, libraryData) +static QBasicMutex qt_library_mutex; +static QLibraryStore *qt_library_data = 0; + +QLibraryStore::~QLibraryStore() +{ + qt_library_data = 0; +} + +inline void QLibraryStore::cleanup() +{ + QLibraryStore *data = qt_library_data; + if (!data) + return; + + // find any libraries that are still loaded but have a no one attached to them + LibraryMap::Iterator it = data->libraryMap.begin(); + for (; it != data->libraryMap.end(); ++it) { + QLibraryPrivate *lib = it.value(); + if (lib->libraryRefCount.load() == 1) { + if (lib->libraryUnloadCount.load() > 0) { + Q_ASSERT(lib->pHnd); + lib->libraryUnloadCount.store(1); +#ifdef __GLIBC__ + // glibc has a bug in unloading from global destructors + // see https://bugzilla.novell.com/show_bug.cgi?id=622977 + // and http://sourceware.org/bugzilla/show_bug.cgi?id=11941 + lib->unload(QLibraryPrivate::NoUnloadSys); +#else + lib->unload(); +#endif + } + delete lib; + it.value() = 0; + } + } + + if (qt_debug_component()) { + // dump all objects that remain + foreach (QLibraryPrivate *lib, data->libraryMap) { + if (lib) + qDebug() << "On QtCore unload," << lib->fileName << "was leaked, with" + << lib->libraryRefCount.load() << "users"; + } + } + + delete data; +} + +static void qlibraryCleanup() +{ + QLibraryStore::cleanup(); +} +Q_DESTRUCTOR_FUNCTION(qlibraryCleanup) + +// must be called with a locked mutex +QLibraryStore *QLibraryStore::instance() +{ + if (Q_UNLIKELY(!qt_library_data)) + qt_library_data = new QLibraryStore; + return qt_library_data; +} -static LibraryMap *libraryMap() +inline QLibraryPrivate *QLibraryStore::findOrCreate(const QString &fileName, const QString &version) { - LibraryData *data = libraryData(); - return data ? &data->libraryMap : 0; + QMutexLocker locker(&qt_library_mutex); + QLibraryStore *data = instance(); + + // check if this library is already loaded + QLibraryPrivate *lib = data->libraryMap.value(fileName); + if (!lib) + lib = new QLibraryPrivate(fileName, version); + + // track this library + data->libraryMap.insert(fileName, lib); + + lib->libraryRefCount.ref(); + return lib; +} + +inline void QLibraryStore::releaseLibrary(QLibraryPrivate *lib) +{ + QMutexLocker locker(&qt_library_mutex); + QLibraryStore *data = instance(); + + if (lib->libraryRefCount.deref()) { + // still in use + return; + } + + // no one else is using + Q_ASSERT(lib->libraryUnloadCount.load() == 0); + + QLibraryPrivate *that = data->libraryMap.take(lib->fileName); + Q_ASSERT(lib == that); + Q_UNUSED(that); + delete lib; } QLibraryPrivate::QLibraryPrivate(const QString &canonicalFileName, const QString &version) : pHnd(0), fileName(canonicalFileName), fullVersion(version), instance(0), loadHints(0), - libraryRefCount(1), libraryUnloadCount(0), pluginState(MightBeAPlugin) -{ libraryMap()->insert(canonicalFileName, this); } + libraryRefCount(0), libraryUnloadCount(0), pluginState(MightBeAPlugin) +{ } QLibraryPrivate *QLibraryPrivate::findOrCreate(const QString &fileName, const QString &version) { - QMutexLocker locker(&qt_library_mutex); - if (QLibraryPrivate *lib = libraryMap()->value(fileName)) { - lib->libraryRefCount.ref(); - return lib; - } - - return new QLibraryPrivate(fileName, version); + return QLibraryStore::findOrCreate(fileName, version); } QLibraryPrivate::~QLibraryPrivate() { - LibraryMap * const map = libraryMap(); - if (map) { - QLibraryPrivate *that = map->take(fileName); - Q_ASSERT(this == that); - Q_UNUSED(that); - } } QFunctionPointer QLibraryPrivate::resolve(const char *symbol) @@ -391,9 +477,10 @@ QFunctionPointer QLibraryPrivate::resolve(const char *symbol) bool QLibraryPrivate::load() { - libraryUnloadCount.ref(); - if (pHnd) + if (pHnd) { + libraryUnloadCount.ref(); return true; + } if (fileName.isEmpty()) return false; @@ -403,32 +490,27 @@ bool QLibraryPrivate::load() if (ret) { //when loading a library we add a reference to it so that the QLibraryPrivate won't get deleted //this allows to unload the library at a later time - if (LibraryData *lib = libraryData()) { - lib->loadedLibs += this; - libraryRefCount.ref(); - } - + libraryUnloadCount.ref(); + libraryRefCount.ref(); installCoverageTool(this); } return ret; } -bool QLibraryPrivate::unload() +bool QLibraryPrivate::unload(UnloadFlag flag) { if (!pHnd) return false; - if (!libraryUnloadCount.deref()) { // only unload if ALL QLibrary instance wanted to + if (libraryUnloadCount.load() > 0 && !libraryUnloadCount.deref()) { // only unload if ALL QLibrary instance wanted to delete inst.data(); - if (unload_sys()) { + if (flag == NoUnloadSys || unload_sys()) { if (qt_debug_component()) - qWarning() << "QLibraryPrivate::unload succeeded on" << fileName; + qWarning() << "QLibraryPrivate::unload succeeded on" << fileName + << (flag == NoUnloadSys ? "(faked)" : ""); //when the library is unloaded, we release the reference on it so that 'this' //can get deleted - if (LibraryData *lib = libraryData()) { - if (lib->loadedLibs.remove(this)) - libraryRefCount.deref(); - } + libraryRefCount.deref(); pHnd = 0; instance = 0; } @@ -439,9 +521,7 @@ bool QLibraryPrivate::unload() void QLibraryPrivate::release() { - QMutexLocker locker(&qt_library_mutex); - if (!libraryRefCount.deref()) - delete this; + QLibraryStore::releaseLibrary(this); } bool QLibraryPrivate::loadPlugin() @@ -631,7 +711,7 @@ void QLibraryPrivate::updatePluginState() hTempModule = ::LoadLibraryEx((wchar_t*)QDir::toNativeSeparators(fileName).utf16(), 0, dwFlags); SetErrorMode(oldmode); #else - temporary_load = load_sys(); + temporary_load = load(); #endif } QtPluginQueryVerificationDataFunction getMetaData = NULL; @@ -656,11 +736,10 @@ void QLibraryPrivate::updatePluginState() if (getMetaData) ret = qt_get_metadata(getMetaData, this, &exceptionThrown); + if (temporary_load) + unload(); if (!exceptionThrown) { - if (!ret) { - if (temporary_load) - unload_sys(); - } else { + if (ret) { success = true; } retryLoadLibrary = false; diff --git a/src/corelib/plugin/qlibrary.h b/src/corelib/plugin/qlibrary.h index f99c69c2d7..5c81e6af1a 100644 --- a/src/corelib/plugin/qlibrary.h +++ b/src/corelib/plugin/qlibrary.h @@ -44,8 +44,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -111,6 +109,4 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QLibrary::LoadHints) QT_END_NAMESPACE -QT_END_HEADER - #endif //QLIBRARY_H diff --git a/src/corelib/plugin/qlibrary_p.h b/src/corelib/plugin/qlibrary_p.h index 28bec300eb..abf11be9f7 100644 --- a/src/corelib/plugin/qlibrary_p.h +++ b/src/corelib/plugin/qlibrary_p.h @@ -71,6 +71,7 @@ QT_BEGIN_NAMESPACE bool qt_debug_component(); +class QLibraryStore; class QLibraryPrivate { public: @@ -82,12 +83,14 @@ public: #endif pHnd; + enum UnloadFlag { UnloadSys, NoUnloadSys }; + QString fileName, qualifiedFileName; QString fullVersion; bool load(); bool loadPlugin(); // loads and resolves instance - bool unload(); + bool unload(UnloadFlag flag = UnloadSys); void release(); QFunctionPointer resolve(const char *); @@ -124,11 +127,13 @@ private: bool unload_sys(); QFunctionPointer resolve_sys(const char *); + /// counts how many QLibrary or QPluginLoader are attached to us, plus 1 if it's loaded QAtomicInt libraryRefCount; + /// counts how many times load() or loadPlugin() were called QAtomicInt libraryUnloadCount; enum { IsAPlugin, IsNotAPlugin, MightBeAPlugin } pluginState; - friend class QLibraryPrivateHasFriends; + friend class QLibraryStore; }; QT_END_NAMESPACE diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp index 5044d09e9b..2aed877e6b 100644 --- a/src/corelib/plugin/qlibrary_unix.cpp +++ b/src/corelib/plugin/qlibrary_unix.cpp @@ -56,7 +56,7 @@ #include <string.h> #endif -#if defined(Q_OS_VXWORKS) || defined (Q_OS_NACL) +#if (defined(Q_OS_VXWORKS) && !defined(VXWORKS_RTP)) || defined (Q_OS_NACL) #define QT_NO_DYNAMIC_LIBRARY #endif diff --git a/src/corelib/plugin/qplugin.h b/src/corelib/plugin/qplugin.h index b6a533b793..b91a0e9900 100644 --- a/src/corelib/plugin/qplugin.h +++ b/src/corelib/plugin/qplugin.h @@ -45,8 +45,6 @@ #include <QtCore/qobject.h> #include <QtCore/qpointer.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -139,6 +137,4 @@ void Q_CORE_EXPORT qRegisterStaticPluginFunction(QStaticPlugin staticPlugin); QT_END_NAMESPACE -QT_END_HEADER - #endif // Q_PLUGIN_H diff --git a/src/corelib/plugin/qpluginloader.h b/src/corelib/plugin/qpluginloader.h index 7eb48d530c..3d1d2dbe0b 100644 --- a/src/corelib/plugin/qpluginloader.h +++ b/src/corelib/plugin/qpluginloader.h @@ -51,8 +51,6 @@ #ifndef QT_NO_LIBRARY -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QLibraryPrivate; @@ -93,8 +91,6 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_LIBRARY #endif //QPLUGINLOADER_H diff --git a/src/corelib/plugin/quuid.h b/src/corelib/plugin/quuid.h index bfd6759344..8bda617a3c 100644 --- a/src/corelib/plugin/quuid.h +++ b/src/corelib/plugin/quuid.h @@ -44,8 +44,6 @@ #include <QtCore/qstring.h> -QT_BEGIN_HEADER - #if defined(Q_OS_WIN) #ifndef GUID_DEFINED #define GUID_DEFINED @@ -227,6 +225,4 @@ Q_CORE_EXPORT uint qHash(const QUuid &uuid, uint seed = 0) Q_DECL_NOTHROW; QT_END_NAMESPACE -QT_END_HEADER - #endif // QUUID_H diff --git a/src/corelib/statemachine/qabstractstate.h b/src/corelib/statemachine/qabstractstate.h index da13985316..a6ac248b85 100644 --- a/src/corelib/statemachine/qabstractstate.h +++ b/src/corelib/statemachine/qabstractstate.h @@ -44,8 +44,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -96,6 +94,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/statemachine/qabstracttransition.h b/src/corelib/statemachine/qabstracttransition.h index e8b2d0074f..a35ad4ca96 100644 --- a/src/corelib/statemachine/qabstracttransition.h +++ b/src/corelib/statemachine/qabstracttransition.h @@ -46,8 +46,6 @@ #include <QtCore/qlist.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -113,6 +111,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/statemachine/qeventtransition.h b/src/corelib/statemachine/qeventtransition.h index 520c63e93b..f53a5e4732 100644 --- a/src/corelib/statemachine/qeventtransition.h +++ b/src/corelib/statemachine/qeventtransition.h @@ -45,8 +45,6 @@ #include <QtCore/qabstracttransition.h> #include <QtCore/qcoreevent.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -89,6 +87,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/statemachine/qfinalstate.h b/src/corelib/statemachine/qfinalstate.h index b0d8eb3a02..0343b99c1c 100644 --- a/src/corelib/statemachine/qfinalstate.h +++ b/src/corelib/statemachine/qfinalstate.h @@ -44,8 +44,6 @@ #include <QtCore/qabstractstate.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -74,6 +72,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/statemachine/qhistorystate.h b/src/corelib/statemachine/qhistorystate.h index e35385b1a1..62278ac47a 100644 --- a/src/corelib/statemachine/qhistorystate.h +++ b/src/corelib/statemachine/qhistorystate.h @@ -44,8 +44,6 @@ #include <QtCore/qabstractstate.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -89,6 +87,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/statemachine/qsignaltransition.h b/src/corelib/statemachine/qsignaltransition.h index 3038132da3..12f021d78e 100644 --- a/src/corelib/statemachine/qsignaltransition.h +++ b/src/corelib/statemachine/qsignaltransition.h @@ -44,8 +44,6 @@ #include <QtCore/qabstracttransition.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -84,6 +82,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/statemachine/qstate.h b/src/corelib/statemachine/qstate.h index 8080c9062d..a5f2509ffb 100644 --- a/src/corelib/statemachine/qstate.h +++ b/src/corelib/statemachine/qstate.h @@ -46,8 +46,6 @@ #include <QtCore/qlist.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -129,6 +127,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h index b33b95d25d..9305676bb5 100644 --- a/src/corelib/statemachine/qstatemachine.h +++ b/src/corelib/statemachine/qstatemachine.h @@ -50,8 +50,6 @@ #include <QtCore/qset.h> #include <QtCore/qvariant.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -195,6 +193,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/thread/qatomic.h b/src/corelib/thread/qatomic.h index 06cee4894e..1ccaecc135 100644 --- a/src/corelib/thread/qatomic.h +++ b/src/corelib/thread/qatomic.h @@ -46,8 +46,6 @@ #include <QtCore/qbasicatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -220,6 +218,4 @@ inline void qAtomicDetach(T *&d) } QT_END_NAMESPACE -QT_END_HEADER - #endif // QATOMIC_H diff --git a/src/corelib/thread/qbasicatomic.h b/src/corelib/thread/qbasicatomic.h index 70b69827c2..5c5d2637b3 100644 --- a/src/corelib/thread/qbasicatomic.h +++ b/src/corelib/thread/qbasicatomic.h @@ -101,15 +101,11 @@ // Only include if the implementation has been ported to QAtomicOps #ifndef QOLDBASICATOMIC_H -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - #pragma qt_no_master_include #pragma qt_sync_stop_processing #endif @@ -271,8 +267,6 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QOLDBASICATOMIC_H #endif // QBASICATOMIC_H diff --git a/src/corelib/thread/qexception.h b/src/corelib/thread/qexception.h index fa944ce69d..accf0fc7b4 100644 --- a/src/corelib/thread/qexception.h +++ b/src/corelib/thread/qexception.h @@ -53,7 +53,6 @@ # include <exception> #endif -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -116,7 +115,6 @@ public: #endif // QT_NO_EXCEPTIONS QT_END_NAMESPACE -QT_END_HEADER #endif // QT_NO_QFUTURE diff --git a/src/corelib/thread/qfuture.h b/src/corelib/thread/qfuture.h index d9c4f1af77..8071e80d1b 100644 --- a/src/corelib/thread/qfuture.h +++ b/src/corelib/thread/qfuture.h @@ -49,7 +49,6 @@ #include <QtCore/qfutureinterface.h> #include <QtCore/qstring.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -269,7 +268,6 @@ QFuture<void> qToVoidFuture(const QFuture<T> &future) } QT_END_NAMESPACE -QT_END_HEADER #endif // QT_NO_QFUTURE diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h index 6ab1409f55..d2d58a9332 100644 --- a/src/corelib/thread/qfutureinterface.h +++ b/src/corelib/thread/qfutureinterface.h @@ -50,7 +50,6 @@ #include <QtCore/qexception.h> #include <QtCore/qresultstore.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -310,8 +309,6 @@ public: }; QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_QFUTURE #endif // QFUTUREINTERFACE_H diff --git a/src/corelib/thread/qfuturesynchronizer.h b/src/corelib/thread/qfuturesynchronizer.h index 60960f7711..426bb42b0d 100644 --- a/src/corelib/thread/qfuturesynchronizer.h +++ b/src/corelib/thread/qfuturesynchronizer.h @@ -46,7 +46,6 @@ #ifndef QT_NO_QFUTURE -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -113,8 +112,6 @@ protected: }; QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_QFUTURE #endif // QFUTURESYNCHRONIZER_H diff --git a/src/corelib/thread/qfuturewatcher.h b/src/corelib/thread/qfuturewatcher.h index d41b6139b6..c78ed7a83b 100644 --- a/src/corelib/thread/qfuturewatcher.h +++ b/src/corelib/thread/qfuturewatcher.h @@ -48,7 +48,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -215,8 +214,6 @@ Q_INLINE_TEMPLATE void QFutureWatcher<void>::setFuture(const QFuture<void> &_fut } QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_QFUTURE #endif // QFUTUREWATCHER_H diff --git a/src/corelib/thread/qgenericatomic.h b/src/corelib/thread/qgenericatomic.h index 90f0223ccf..a0a851eabb 100644 --- a/src/corelib/thread/qgenericatomic.h +++ b/src/corelib/thread/qgenericatomic.h @@ -44,14 +44,12 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_sync_stop_processing #endif @@ -241,6 +239,4 @@ template <typename BaseClass> struct QGenericAtomicOps #undef always_inline QT_END_NAMESPACE -QT_END_HEADER - #endif // QGENERICATOMIC_H diff --git a/src/corelib/thread/qmutex.h b/src/corelib/thread/qmutex.h index 94bcdd1750..0bca0def22 100644 --- a/src/corelib/thread/qmutex.h +++ b/src/corelib/thread/qmutex.h @@ -46,8 +46,6 @@ #include <QtCore/qatomic.h> #include <new> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -211,6 +209,4 @@ typedef QMutex QBasicMutex; QT_END_NAMESPACE -QT_END_HEADER - #endif // QMUTEX_H diff --git a/src/corelib/thread/qmutex_p.h b/src/corelib/thread/qmutex_p.h index 1b8bcd6b3a..bec2d934c1 100644 --- a/src/corelib/thread/qmutex_p.h +++ b/src/corelib/thread/qmutex_p.h @@ -70,6 +70,8 @@ # define QT_LINUX_FUTEX #endif +struct timespec; + QT_BEGIN_NAMESPACE class QMutexData @@ -137,6 +139,13 @@ public: #endif //QT_LINUX_FUTEX +#ifdef Q_OS_UNIX +// helper functions for qmutex_unix.cpp and qwaitcondition_unix.cpp +// they are in qwaitcondition_unix.cpp actually +void qt_initialize_pthread_cond(pthread_cond_t *cond, const char *where); +void qt_abstime_for_timeout(struct timespec *ts, int timeout); +#endif + QT_END_NAMESPACE #endif // QMUTEX_P_H diff --git a/src/corelib/thread/qmutex_unix.cpp b/src/corelib/thread/qmutex_unix.cpp index ef030cb49a..2f8c2e1dc8 100644 --- a/src/corelib/thread/qmutex_unix.cpp +++ b/src/corelib/thread/qmutex_unix.cpp @@ -42,11 +42,14 @@ #include "qplatformdefs.h" #include "qmutex.h" #include "qstring.h" +#include "qelapsedtimer.h" #ifndef QT_NO_THREAD #include "qatomic.h" #include "qmutex_p.h" #include <errno.h> +#include <sys/time.h> +#include <time.h> #if defined(Q_OS_VXWORKS) && defined(wakeup) #undef wakeup @@ -64,7 +67,7 @@ QMutexPrivate::QMutexPrivate() : wakeup(false) { report_error(pthread_mutex_init(&mutex, NULL), "QMutex", "mutex init"); - report_error(pthread_cond_init(&cond, NULL), "QMutex", "cv init"); + qt_initialize_pthread_cond(&cond, "QMutex"); } QMutexPrivate::~QMutexPrivate() @@ -81,12 +84,8 @@ bool QMutexPrivate::wait(int timeout) if (timeout < 0) { errorCode = pthread_cond_wait(&cond, &mutex); } else { - struct timeval tv; - gettimeofday(&tv, 0); timespec ti; - ti.tv_nsec = (tv.tv_usec + (timeout % 1000) * 1000) * 1000; - ti.tv_sec = tv.tv_sec + (timeout / 1000) + (ti.tv_nsec / 1000000000); - ti.tv_nsec %= 1000000000; + qt_abstime_for_timeout(&ti, timeout); errorCode = pthread_cond_timedwait(&cond, &mutex, &ti); } if (errorCode) { diff --git a/src/corelib/thread/qoldbasicatomic.h b/src/corelib/thread/qoldbasicatomic.h index 15785e2232..b755256ff7 100644 --- a/src/corelib/thread/qoldbasicatomic.h +++ b/src/corelib/thread/qoldbasicatomic.h @@ -44,16 +44,13 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 // silence syncqt warnings QT_END_NAMESPACE -QT_END_HEADER - +#pragma qt_sync_skip_header_check #pragma qt_no_master_include #pragma qt_sync_stop_processing #endif @@ -142,6 +139,5 @@ public: #define Q_BASIC_ATOMIC_INITIALIZER(a) { (a) } QT_END_NAMESPACE -QT_END_HEADER #endif // QOLDBASICATOMIC_H diff --git a/src/corelib/thread/qreadwritelock.h b/src/corelib/thread/qreadwritelock.h index 8217d4eacd..6815878ec5 100644 --- a/src/corelib/thread/qreadwritelock.h +++ b/src/corelib/thread/qreadwritelock.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -231,6 +229,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QREADWRITELOCK_H diff --git a/src/corelib/thread/qresultstore.h b/src/corelib/thread/qresultstore.h index 8c1787bc11..c14146656a 100644 --- a/src/corelib/thread/qresultstore.h +++ b/src/corelib/thread/qresultstore.h @@ -49,7 +49,6 @@ #include <QtCore/qmap.h> #include <QtCore/qdebug.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -234,7 +233,6 @@ public: #endif //Q_QDOC QT_END_NAMESPACE -QT_END_HEADER #endif // QT_NO_QFUTURE diff --git a/src/corelib/thread/qrunnable.h b/src/corelib/thread/qrunnable.h index ba03519872..a6cc095258 100644 --- a/src/corelib/thread/qrunnable.h +++ b/src/corelib/thread/qrunnable.h @@ -44,7 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -67,6 +66,5 @@ public: }; QT_END_NAMESPACE -QT_END_HEADER #endif diff --git a/src/corelib/thread/qsemaphore.h b/src/corelib/thread/qsemaphore.h index b47588ce62..40200151b0 100644 --- a/src/corelib/thread/qsemaphore.h +++ b/src/corelib/thread/qsemaphore.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -77,6 +75,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSEMAPHORE_H diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp index bd8c6341c1..79199c97e0 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -76,6 +76,7 @@ QThreadData::~QThreadData() // the problem... if (this->thread == QCoreApplicationPrivate::theMainThread) { QCoreApplicationPrivate::theMainThread = 0; + QThreadData::clearCurrentThreadData(); } QThread *t = thread; diff --git a/src/corelib/thread/qthread.h b/src/corelib/thread/qthread.h index c6c6167da7..19c0f82d86 100644 --- a/src/corelib/thread/qthread.h +++ b/src/corelib/thread/qthread.h @@ -46,8 +46,6 @@ #include <limits.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -164,6 +162,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QTHREAD_H diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h index 526633cafa..2cf988260f 100644 --- a/src/corelib/thread/qthread_p.h +++ b/src/corelib/thread/qthread_p.h @@ -223,6 +223,7 @@ public: ~QThreadData(); static QThreadData *current(); + static void clearCurrentThreadData(); static QThreadData *get2(QThread *thread) { Q_ASSERT_X(thread != 0, "QThread", "internal error"); return thread->d_func()->data; } diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index 8abf1d06ef..44ad8d3ac2 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -204,6 +204,11 @@ static void clear_thread_data() pthread_setspecific(current_thread_data_key, 0); } +void QThreadData::clearCurrentThreadData() +{ + clear_thread_data(); +} + QThreadData *QThreadData::current() { QThreadData *data = get_thread_data(); @@ -287,7 +292,7 @@ static void setCurrentThreadName(pthread_t threadId, const char *name) void *QThreadPrivate::start(void *arg) { -#if !defined(Q_OS_LINUX_ANDROID) +#if !defined(Q_OS_ANDROID) pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); #endif pthread_cleanup_push(QThreadPrivate::finish, arg); @@ -326,7 +331,7 @@ void *QThreadPrivate::start(void *arg) #endif emit thr->started(QThread::QPrivateSignal()); -#if !defined(Q_OS_LINUX_ANDROID) +#if !defined(Q_OS_ANDROID) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); pthread_testcancel(); #endif @@ -415,6 +420,13 @@ int QThread::idealThreadCount() Q_DECL_NOTHROW // IRIX cores = (int)sysconf(_SC_NPROC_ONLN); #elif defined(Q_OS_INTEGRITY) +#if (__INTEGRITY_MAJOR_VERSION >= 10) + // Integrity V10+ does support multicore CPUs + Value processorCount; + if (GetProcessorCount(CurrentTask(), &processorCount) == 0) + cores = processorCount; + else +#endif // as of aug 2008 Integrity only supports one single core CPU cores = 1; #elif defined(Q_OS_VXWORKS) @@ -488,8 +500,20 @@ static bool calculateUnixPriority(int priority, int *sched_policy, int *sched_pr #endif const int highestPriority = QThread::TimeCriticalPriority; - int prio_min = sched_get_priority_min(*sched_policy); - int prio_max = sched_get_priority_max(*sched_policy); + int prio_min; + int prio_max; +#if defined(Q_OS_VXWORKS) && defined(VXWORKS_DKM) + // for other scheduling policies than SCHED_RR or SCHED_FIFO + prio_min = SCHED_FIFO_LOW_PRI; + prio_max = SCHED_FIFO_HIGH_PRI; + + if ((*sched_policy == SCHED_RR) || (*sched_policy == SCHED_FIFO)) +#endif + { + prio_min = sched_get_priority_min(*sched_policy); + prio_max = sched_get_priority_max(*sched_policy); + } + if (prio_min == -1 || prio_max == -1) return false; @@ -612,7 +636,7 @@ void QThread::start(Priority priority) void QThread::terminate() { -#if !defined(Q_OS_LINUX_ANDROID) +#if !defined(Q_OS_ANDROID) Q_D(QThread); QMutexLocker locker(&d->mutex); @@ -654,7 +678,7 @@ void QThread::setTerminationEnabled(bool enabled) "Current thread was not started with QThread."); Q_UNUSED(thr) -#if defined(Q_OS_LINUX_ANDROID) +#if defined(Q_OS_ANDROID) Q_UNUSED(enabled); #else pthread_setcancelstate(enabled ? PTHREAD_CANCEL_ENABLE : PTHREAD_CANCEL_DISABLE, NULL); diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp index 8614330d6f..0cf903bb3a 100644 --- a/src/corelib/thread/qthread_win.cpp +++ b/src/corelib/thread/qthread_win.cpp @@ -96,6 +96,11 @@ Q_DESTRUCTOR_FUNCTION(qt_free_tls) /* QThreadData */ +void QThreadData::clearCurrentThreadData() +{ + TlsSetValue(qt_current_thread_data_tls_index, 0); +} + QThreadData *QThreadData::current() { qt_create_tls(); diff --git a/src/corelib/thread/qthreadpool.h b/src/corelib/thread/qthreadpool.h index bc572fc8e8..ffc16dedbe 100644 --- a/src/corelib/thread/qthreadpool.h +++ b/src/corelib/thread/qthreadpool.h @@ -49,7 +49,6 @@ #ifndef QT_NO_THREAD -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -87,7 +86,6 @@ public: }; QT_END_NAMESPACE -QT_END_HEADER #endif // QT_NO_THREAD diff --git a/src/corelib/thread/qthreadstorage.h b/src/corelib/thread/qthreadstorage.h index c98d181c1f..86285de84f 100644 --- a/src/corelib/thread/qthreadstorage.h +++ b/src/corelib/thread/qthreadstorage.h @@ -46,8 +46,6 @@ #ifndef QT_NO_THREAD -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -156,8 +154,6 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_THREAD #endif // QTHREADSTORAGE_H diff --git a/src/corelib/thread/qwaitcondition.h b/src/corelib/thread/qwaitcondition.h index e8f51dad54..1468951373 100644 --- a/src/corelib/thread/qwaitcondition.h +++ b/src/corelib/thread/qwaitcondition.h @@ -46,8 +46,6 @@ #include <limits.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -99,6 +97,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QWAITCONDITION_H diff --git a/src/corelib/thread/qwaitcondition_unix.cpp b/src/corelib/thread/qwaitcondition_unix.cpp index ab4e7872fb..9b5c8d000d 100644 --- a/src/corelib/thread/qwaitcondition_unix.cpp +++ b/src/corelib/thread/qwaitcondition_unix.cpp @@ -45,11 +45,15 @@ #include "qreadwritelock.h" #include "qatomic.h" #include "qstring.h" +#include "qelapsedtimer.h" +#include "private/qcore_unix_p.h" #include "qmutex_p.h" #include "qreadwritelock_p.h" #include <errno.h> +#include <sys/time.h> +#include <time.h> #ifndef QT_NO_THREAD @@ -61,6 +65,38 @@ static void report_error(int code, const char *where, const char *what) qWarning("%s: %s failure: %s", where, what, qPrintable(qt_error_string(code))); } +void qt_initialize_pthread_cond(pthread_cond_t *cond, const char *where) +{ + pthread_condattr_t condattr; + + pthread_condattr_init(&condattr); +#if !defined(Q_OS_MAC) && (_POSIX_MONOTONIC_CLOCK-0 >= 0) + if (QElapsedTimer::clockType() == QElapsedTimer::MonotonicClock) + pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC); +#endif + report_error(pthread_cond_init(cond, &condattr), where, "cv init"); + pthread_condattr_destroy(&condattr); +} + +void qt_abstime_for_timeout(timespec *ts, int timeout) +{ +#ifdef Q_OS_MAC + // on Mac, qt_gettime() (on qelapsedtimer_mac.cpp) returns ticks related to the Mach absolute time + // that doesn't work with pthread + // Mac also doesn't have clock_gettime + struct timeval tv; + gettimeofday(&tv, 0); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; +#else + *ts = qt_gettime(); +#endif + + ts->tv_sec += timeout / 1000; + ts->tv_nsec += timeout % 1000 * Q_UINT64_C(1000) * 1000; + normalizedTimespec(*ts); +} + class QWaitConditionPrivate { public: pthread_mutex_t mutex; @@ -73,14 +109,8 @@ public: int code; forever { if (time != ULONG_MAX) { - struct timeval tv; - gettimeofday(&tv, 0); - timespec ti; - ti.tv_nsec = (tv.tv_usec + (time % 1000) * 1000) * 1000; - ti.tv_sec = tv.tv_sec + (time / 1000) + (ti.tv_nsec / 1000000000); - ti.tv_nsec %= 1000000000; - + qt_abstime_for_timeout(&ti, time); code = pthread_cond_timedwait(&cond, &mutex, &ti); } else { code = pthread_cond_wait(&cond, &mutex); @@ -114,7 +144,7 @@ QWaitCondition::QWaitCondition() { d = new QWaitConditionPrivate; report_error(pthread_mutex_init(&d->mutex, NULL), "QWaitCondition", "mutex init"); - report_error(pthread_cond_init(&d->cond, NULL), "QWaitCondition", "cv init"); + qt_initialize_pthread_cond(&d->cond, "QWaitCondition"); d->waiters = d->wakeups = 0; } diff --git a/src/corelib/thread/thread.pri b/src/corelib/thread/thread.pri index 7247f2984e..13f0502b62 100644 --- a/src/corelib/thread/thread.pri +++ b/src/corelib/thread/thread.pri @@ -56,7 +56,7 @@ integrity:SOURCES += thread/qmutex_unix.cpp \ thread/qwaitcondition_unix.cpp unix: { - macx-* { + mac { SOURCES += thread/qmutex_mac.cpp } else:linux-*:!linux-lsb-* { SOURCES += thread/qmutex_linux.cpp diff --git a/src/corelib/tools/qalgorithms.h b/src/corelib/tools/qalgorithms.h index 936ebd1cbb..e3b76886f1 100644 --- a/src/corelib/tools/qalgorithms.h +++ b/src/corelib/tools/qalgorithms.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -520,6 +518,4 @@ Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFindHelper(RandomAccessIterator QT_END_NAMESPACE -QT_END_HEADER - #endif // QALGORITHMS_H diff --git a/src/corelib/tools/qarraydata.h b/src/corelib/tools/qarraydata.h index aab01c5f41..27f2606954 100644 --- a/src/corelib/tools/qarraydata.h +++ b/src/corelib/tools/qarraydata.h @@ -45,8 +45,6 @@ #include <QtCore/qrefcount.h> #include <string.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE struct Q_CORE_EXPORT QArrayData @@ -361,6 +359,4 @@ namespace QtPrivate { QT_END_NAMESPACE -QT_END_HEADER - #endif // include guard diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h index 6c95e9364d..3cd8c51c07 100644 --- a/src/corelib/tools/qarraydataops.h +++ b/src/corelib/tools/qarraydataops.h @@ -47,8 +47,6 @@ #include <new> #include <string.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE namespace QtPrivate { @@ -423,6 +421,4 @@ struct QArrayDataOps QT_END_NAMESPACE -QT_END_HEADER - #endif // include guard diff --git a/src/corelib/tools/qarraydatapointer.h b/src/corelib/tools/qarraydatapointer.h index 52d054b035..533f7a306f 100644 --- a/src/corelib/tools/qarraydatapointer.h +++ b/src/corelib/tools/qarraydatapointer.h @@ -44,8 +44,6 @@ #include <QtCore/qarraydataops.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE template <class T> @@ -219,6 +217,4 @@ namespace std } } -QT_END_HEADER - #endif // include guard diff --git a/src/corelib/tools/qbitarray.h b/src/corelib/tools/qbitarray.h index e622d6515c..1103712627 100644 --- a/src/corelib/tools/qbitarray.h +++ b/src/corelib/tools/qbitarray.h @@ -44,8 +44,6 @@ #include <QtCore/qbytearray.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -176,6 +174,4 @@ Q_DECLARE_SHARED(QBitArray) QT_END_NAMESPACE -QT_END_HEADER - #endif // QBITARRAY_H diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h index 8d03951073..f3cc301a49 100644 --- a/src/corelib/tools/qbytearray.h +++ b/src/corelib/tools/qbytearray.h @@ -66,8 +66,6 @@ #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -610,8 +608,6 @@ Q_DECLARE_SHARED(QByteArray) QT_END_NAMESPACE -QT_END_HEADER - #ifdef QT_USE_QSTRINGBUILDER #include <QtCore/qstring.h> #endif diff --git a/src/corelib/tools/qbytearraymatcher.h b/src/corelib/tools/qbytearraymatcher.h index 370116e643..da6a337a69 100644 --- a/src/corelib/tools/qbytearraymatcher.h +++ b/src/corelib/tools/qbytearraymatcher.h @@ -44,8 +44,6 @@ #include <QtCore/qbytearray.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -97,6 +95,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QBYTEARRAYMATCHER_H diff --git a/src/corelib/tools/qcache.h b/src/corelib/tools/qcache.h index 2d2b9f3d45..5890a94dc2 100644 --- a/src/corelib/tools/qcache.h +++ b/src/corelib/tools/qcache.h @@ -44,8 +44,6 @@ #include <QtCore/qhash.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -200,6 +198,4 @@ void QCache<Key,T>::trim(int m) QT_END_NAMESPACE -QT_END_HEADER - #endif // QCACHE_H diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp index 6fdb3215b0..8545276dac 100644 --- a/src/corelib/tools/qchar.cpp +++ b/src/corelib/tools/qchar.cpp @@ -263,6 +263,132 @@ QT_BEGIN_NAMESPACE */ /*! + \enum QChar::Script + \since 5.1 + + This enum type defines the Unicode script property values. + + For details about the Unicode script property values see + \l{http://www.unicode.org/reports/tr24/}{Unicode Standard Annex #24}. + + In order to conform to C/C++ naming conventions "Script_" is prepended + to the codes used in the Unicode Standard. + + \value Script_Unknown For unassigned, private-use, noncharacter, and surrogate code points. + \value Script_Inherited For characters that may be used with multiple scripts + and that inherit their script from the preceding characters. + These include nonspacing marks, enclosing marks, + and zero width joiner/non-joiner characters. + \value Script_Common For characters that may be used with multiple scripts + and that do not inherit their script from the preceding characters. + + \value Script_Latin + \value Script_Greek + \value Script_Cyrillic + \value Script_Armenian + \value Script_Hebrew + \value Script_Arabic + \value Script_Syriac + \value Script_Thaana + \value Script_Devanagari + \value Script_Bengali + \value Script_Gurmukhi + \value Script_Gujarati + \value Script_Oriya + \value Script_Tamil + \value Script_Telugu + \value Script_Kannada + \value Script_Malayalam + \value Script_Sinhala + \value Script_Thai + \value Script_Lao + \value Script_Tibetan + \value Script_Myanmar + \value Script_Georgian + \value Script_Hangul + \value Script_Ethiopic + \value Script_Cherokee + \value Script_CanadianAboriginal + \value Script_Ogham + \value Script_Runic + \value Script_Khmer + \value Script_Mongolian + \value Script_Hiragana + \value Script_Katakana + \value Script_Bopomofo + \value Script_Han + \value Script_Yi + \value Script_OldItalic + \value Script_Gothic + \value Script_Deseret + \value Script_Tagalog + \value Script_Hanunoo + \value Script_Buhid + \value Script_Tagbanwa + \value Script_Coptic + \value Script_Limbu + \value Script_TaiLe + \value Script_LinearB + \value Script_Ugaritic + \value Script_Shavian + \value Script_Osmanya + \value Script_Cypriot + \value Script_Braille + \value Script_Buginese + \value Script_NewTaiLue + \value Script_Glagolitic + \value Script_Tifinagh + \value Script_SylotiNagri + \value Script_OldPersian + \value Script_Kharoshthi + \value Script_Balinese + \value Script_Cuneiform + \value Script_Phoenician + \value Script_PhagsPa + \value Script_Nko + \value Script_Sundanese + \value Script_Lepcha + \value Script_OlChiki + \value Script_Vai + \value Script_Saurashtra + \value Script_KayahLi + \value Script_Rejang + \value Script_Lycian + \value Script_Carian + \value Script_Lydian + \value Script_Cham + \value Script_TaiTham + \value Script_TaiViet + \value Script_Avestan + \value Script_EgyptianHieroglyphs + \value Script_Samaritan + \value Script_Lisu + \value Script_Bamum + \value Script_Javanese + \value Script_MeeteiMayek + \value Script_ImperialAramaic + \value Script_OldSouthArabian + \value Script_InscriptionalParthian + \value Script_InscriptionalPahlavi + \value Script_OldTurkic + \value Script_Kaithi + \value Script_Batak + \value Script_Brahmi + \value Script_Mandaic + \value Script_Chakma + \value Script_MeroiticCursive + \value Script_MeroiticHieroglyphs + \value Script_Miao + \value Script_Sharada + \value Script_SoraSompeng + \value Script_Takri + + \omitvalue ScriptCount + + \sa script() +*/ + +/*! \enum QChar::Direction This enum type defines the Unicode direction attributes. See the @@ -1159,6 +1285,27 @@ unsigned char QChar::combiningClass(uint ucs4) } /*! + \fn QChar::Script QChar::script() const + \since 5.1 + + Returns the Unicode script property value for this character. +*/ + +/*! + \overload + \since 5.1 + + Returns the Unicode script property value for the character specified in + its UCS-4-encoded form as \a ucs4. +*/ +QChar::Script QChar::script(uint ucs4) +{ + if (ucs4 > LastValidCodePoint) + return QChar::Script_Unknown; + return (QChar::Script) qGetProp(ucs4)->script; +} + +/*! \fn QChar::UnicodeVersion QChar::unicodeVersion() const Returns the Unicode version that introduced this character. diff --git a/src/corelib/tools/qchar.h b/src/corelib/tools/qchar.h index 20101db975..8afa05bb00 100644 --- a/src/corelib/tools/qchar.h +++ b/src/corelib/tools/qchar.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -137,6 +135,130 @@ public: Symbol_Other // So }; + enum Script + { + Script_Unknown, + Script_Inherited, + Script_Common, + + Script_Latin, + Script_Greek, + Script_Cyrillic, + Script_Armenian, + Script_Hebrew, + Script_Arabic, + Script_Syriac, + Script_Thaana, + Script_Devanagari, + Script_Bengali, + Script_Gurmukhi, + Script_Gujarati, + Script_Oriya, + Script_Tamil, + Script_Telugu, + Script_Kannada, + Script_Malayalam, + Script_Sinhala, + Script_Thai, + Script_Lao, + Script_Tibetan, + Script_Myanmar, + Script_Georgian, + Script_Hangul, + Script_Ethiopic, + Script_Cherokee, + Script_CanadianAboriginal, + Script_Ogham, + Script_Runic, + Script_Khmer, + Script_Mongolian, + Script_Hiragana, + Script_Katakana, + Script_Bopomofo, + Script_Han, + Script_Yi, + Script_OldItalic, + Script_Gothic, + Script_Deseret, + Script_Tagalog, + Script_Hanunoo, + Script_Buhid, + Script_Tagbanwa, + Script_Coptic, + + // Unicode 4.0 additions + Script_Limbu, + Script_TaiLe, + Script_LinearB, + Script_Ugaritic, + Script_Shavian, + Script_Osmanya, + Script_Cypriot, + Script_Braille, + + // Unicode 4.1 additions + Script_Buginese, + Script_NewTaiLue, + Script_Glagolitic, + Script_Tifinagh, + Script_SylotiNagri, + Script_OldPersian, + Script_Kharoshthi, + + // Unicode 5.0 additions + Script_Balinese, + Script_Cuneiform, + Script_Phoenician, + Script_PhagsPa, + Script_Nko, + + // Unicode 5.1 additions + Script_Sundanese, + Script_Lepcha, + Script_OlChiki, + Script_Vai, + Script_Saurashtra, + Script_KayahLi, + Script_Rejang, + Script_Lycian, + Script_Carian, + Script_Lydian, + Script_Cham, + + // Unicode 5.2 additions + Script_TaiTham, + Script_TaiViet, + Script_Avestan, + Script_EgyptianHieroglyphs, + Script_Samaritan, + Script_Lisu, + Script_Bamum, + Script_Javanese, + Script_MeeteiMayek, + Script_ImperialAramaic, + Script_OldSouthArabian, + Script_InscriptionalParthian, + Script_InscriptionalPahlavi, + Script_OldTurkic, + Script_Kaithi, + + // Unicode 6.0 additions + Script_Batak, + Script_Brahmi, + Script_Mandaic, + + // Unicode 6.1 additions + Script_Chakma, + Script_MeroiticCursive, + Script_MeroiticHieroglyphs, + Script_Miao, + Script_Sharada, + Script_SoraSompeng, + Script_Takri, + + ScriptCount + }; + enum Direction { DirL, DirR, DirEN, DirES, DirET, DirAN, DirCS, DirB, DirS, DirWS, DirON, @@ -231,6 +353,8 @@ public: inline QChar toTitleCase() const { return QChar::toTitleCase(ucs); } inline QChar toCaseFolded() const { return QChar::toCaseFolded(ucs); } + inline Script script() const { return QChar::script(ucs); } + inline UnicodeVersion unicodeVersion() const { return QChar::unicodeVersion(ucs); } #if QT_DEPRECATED_SINCE(5, 0) @@ -316,6 +440,8 @@ public: static uint QT_FASTCALL toTitleCase(uint ucs4); static uint QT_FASTCALL toCaseFolded(uint ucs4); + static Script QT_FASTCALL script(uint ucs4); + static UnicodeVersion QT_FASTCALL unicodeVersion(uint ucs4); static UnicodeVersion QT_FASTCALL currentUnicodeVersion(); @@ -398,6 +524,4 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QChar &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QCHAR_H diff --git a/src/corelib/tools/qcollator_p.h b/src/corelib/tools/qcollator_p.h index 4420c6592e..51de205565 100644 --- a/src/corelib/tools/qcollator_p.h +++ b/src/corelib/tools/qcollator_p.h @@ -45,8 +45,6 @@ #include <QtCore/qstring.h> #include <QtCore/qlocale.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QCollatorPrivate; @@ -119,6 +117,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QCOLLATOR_P_H diff --git a/src/corelib/tools/qcontainerfwd.h b/src/corelib/tools/qcontainerfwd.h index c4866253ee..6b79e40635 100644 --- a/src/corelib/tools/qcontainerfwd.h +++ b/src/corelib/tools/qcontainerfwd.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -65,6 +63,4 @@ template <class T> class QVector; QT_END_NAMESPACE -QT_END_HEADER - #endif // QCONTAINERFWD_H diff --git a/src/corelib/tools/qcontiguouscache.h b/src/corelib/tools/qcontiguouscache.h index 1075284491..d601ddb819 100644 --- a/src/corelib/tools/qcontiguouscache.h +++ b/src/corelib/tools/qcontiguouscache.h @@ -46,8 +46,6 @@ #include <limits.h> #include <new> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #undef QT_QCONTIGUOUSCACHE_DEBUG @@ -464,6 +462,4 @@ inline T QContiguousCache<T>::takeLast() QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/tools/qcryptographichash.cpp b/src/corelib/tools/qcryptographichash.cpp index 3f17fe15aa..fdf2d1a620 100644 --- a/src/corelib/tools/qcryptographichash.cpp +++ b/src/corelib/tools/qcryptographichash.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2013 Richard J. Moore <rich@kde.org>. ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -40,12 +41,51 @@ ****************************************************************************/ #include <qcryptographichash.h> +#include <qiodevice.h> + +#include "../../3rdparty/sha1/sha1.cpp" +#ifndef QT_CRYPTOGRAPHICHASH_ONLY_SHA1 +// qdoc only needs SHA-1 #include "../../3rdparty/md5/md5.h" #include "../../3rdparty/md5/md5.cpp" #include "../../3rdparty/md4/md4.h" #include "../../3rdparty/md4/md4.cpp" -#include "../../3rdparty/sha1/sha1.cpp" + +typedef unsigned char BitSequence; +typedef unsigned long long DataLength; +typedef enum { SUCCESS = 0, FAIL = 1, BAD_HASHLEN = 2 } HashReturn; + +#include "../../3rdparty/sha3/KeccakSponge.c" +typedef spongeState hashState; + +#include "../../3rdparty/sha3/KeccakNISTInterface.c" + +/* + This lets us choose between SHA3 implementations at build time. + */ +typedef spongeState SHA3Context; +typedef HashReturn (SHA3Init)(hashState *state, int hashbitlen); +typedef HashReturn (SHA3Update)(hashState *state, const BitSequence *data, DataLength databitlen); +typedef HashReturn (SHA3Final)(hashState *state, BitSequence *hashval); + +#if QT_POINTER_SIZE == 8 // 64 bit version + +#include "../../3rdparty/sha3/KeccakF-1600-opt64.c" + +static SHA3Init * const sha3Init = Init; +static SHA3Update * const sha3Update = Update; +static SHA3Final * const sha3Final = Final; + +#else // 32 bit optimised fallback + +#include "../../3rdparty/sha3/KeccakF-1600-opt32.c" + +static SHA3Init * const sha3Init = Init; +static SHA3Update * const sha3Update = Update; +static SHA3Final * const sha3Final = Final; + +#endif /* These #defines replace the typedefs needed by the RFC6234 code. Normally @@ -88,8 +128,6 @@ static int SHA384_512AddLength(SHA512Context *context, unsigned int length); #undef uint68_t #undef int_least16_t -#include <qiodevice.h> - static inline int SHA224_256AddLength(SHA256Context *context, unsigned int length) { QT_PREPEND_NAMESPACE(quint32) addTemp; @@ -100,6 +138,7 @@ static inline int SHA384_512AddLength(SHA512Context *context, unsigned int lengt QT_PREPEND_NAMESPACE(quint64) addTemp; return SHA384_512AddLengthM(context, length); } +#endif // QT_CRYPTOGRAPHICHASH_ONLY_SHA1 QT_BEGIN_NAMESPACE @@ -108,13 +147,16 @@ class QCryptographicHashPrivate public: QCryptographicHash::Algorithm method; union { + Sha1State sha1Context; +#ifndef QT_CRYPTOGRAPHICHASH_ONLY_SHA1 MD5Context md5Context; md4_context md4Context; - Sha1State sha1Context; SHA224Context sha224Context; SHA256Context sha256Context; SHA384Context sha384Context; SHA512Context sha512Context; + SHA3Context sha3Context; +#endif }; QByteArray result; }; @@ -141,10 +183,14 @@ public: \value Md4 Generate an MD4 hash sum \value Md5 Generate an MD5 hash sum \value Sha1 Generate an SHA-1 hash sum - \value Sha224 Generate an SHA-224 hash sum. Introduced in Qt 5.0 - \value Sha256 Generate an SHA-256 hash sum. Introduced in Qt 5.0 - \value Sha384 Generate an SHA-384 hash sum. Introduced in Qt 5.0 - \value Sha512 Generate an SHA-512 hash sum. Introduced in Qt 5.0 + \value Sha224 Generate an SHA-224 hash sum (SHA-2). Introduced in Qt 5.0 + \value Sha256 Generate an SHA-256 hash sum (SHA-2). Introduced in Qt 5.0 + \value Sha384 Generate an SHA-384 hash sum (SHA-2). Introduced in Qt 5.0 + \value Sha512 Generate an SHA-512 hash sum (SHA-2). Introduced in Qt 5.0 + \value Sha3_224 Generate an SHA3-224 hash sum. Introduced in Qt 5.1 + \value Sha3_256 Generate an SHA3-256 hash sum. Introduced in Qt 5.1 + \value Sha3_384 Generate an SHA3-384 hash sum. Introduced in Qt 5.1 + \value Sha3_512 Generate an SHA3-512 hash sum. Introduced in Qt 5.1 */ /*! @@ -171,15 +217,21 @@ QCryptographicHash::~QCryptographicHash() void QCryptographicHash::reset() { switch (d->method) { + case Sha1: + sha1InitState(&d->sha1Context); + break; +#ifdef QT_CRYPTOGRAPHICHASH_ONLY_SHA1 + default: + Q_ASSERT_X(false, "QCryptographicHash", "Method not compiled in"); + Q_UNREACHABLE(); + break; +#else case Md4: md4_init(&d->md4Context); break; case Md5: MD5Init(&d->md5Context); break; - case Sha1: - sha1InitState(&d->sha1Context); - break; case Sha224: SHA224Reset(&d->sha224Context); break; @@ -192,6 +244,19 @@ void QCryptographicHash::reset() case Sha512: SHA512Reset(&d->sha512Context); break; + case Sha3_224: + sha3Init(&d->sha3Context, 224); + break; + case Sha3_256: + sha3Init(&d->sha3Context, 256); + break; + case Sha3_384: + sha3Init(&d->sha3Context, 384); + break; + case Sha3_512: + sha3Init(&d->sha3Context, 512); + break; +#endif } d->result.clear(); } @@ -203,15 +268,21 @@ void QCryptographicHash::reset() void QCryptographicHash::addData(const char *data, int length) { switch (d->method) { + case Sha1: + sha1Update(&d->sha1Context, (const unsigned char *)data, length); + break; +#ifdef QT_CRYPTOGRAPHICHASH_ONLY_SHA1 + default: + Q_ASSERT_X(false, "QCryptographicHash", "Method not compiled in"); + Q_UNREACHABLE(); + break; +#else case Md4: md4_update(&d->md4Context, (const unsigned char *)data, length); break; case Md5: MD5Update(&d->md5Context, (const unsigned char *)data, length); break; - case Sha1: - sha1Update(&d->sha1Context, (const unsigned char *)data, length); - break; case Sha224: SHA224Input(&d->sha224Context, reinterpret_cast<const unsigned char *>(data), length); break; @@ -224,6 +295,19 @@ void QCryptographicHash::addData(const char *data, int length) case Sha512: SHA512Input(&d->sha512Context, reinterpret_cast<const unsigned char *>(data), length); break; + case Sha3_224: + sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), length*8); + break; + case Sha3_256: + sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), length*8); + break; + case Sha3_384: + sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), length*8); + break; + case Sha3_512: + sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), length*8); + break; +#endif } d->result.clear(); } @@ -270,6 +354,19 @@ QByteArray QCryptographicHash::result() const return d->result; switch (d->method) { + case Sha1: { + Sha1State copy = d->sha1Context; + d->result.resize(20); + sha1FinalizeState(©); + sha1ToHash(©, (unsigned char *)d->result.data()); + break; + } +#ifdef QT_CRYPTOGRAPHICHASH_ONLY_SHA1 + default: + Q_ASSERT_X(false, "QCryptographicHash", "Method not compiled in"); + Q_UNREACHABLE(); + break; +#else case Md4: { md4_context copy = d->md4Context; d->result.resize(MD4_RESULTLEN); @@ -282,13 +379,6 @@ QByteArray QCryptographicHash::result() const MD5Final(©, (unsigned char *)d->result.data()); break; } - case Sha1: { - Sha1State copy = d->sha1Context; - d->result.resize(20); - sha1FinalizeState(©); - sha1ToHash(©, (unsigned char *)d->result.data()); - break; - } case Sha224: { SHA224Context copy = d->sha224Context; d->result.resize(SHA224HashSize); @@ -313,6 +403,31 @@ QByteArray QCryptographicHash::result() const SHA512Result(©, reinterpret_cast<unsigned char *>(d->result.data())); break; } + case Sha3_224: { + SHA3Context copy = d->sha3Context; + d->result.resize(224/8); + sha3Final(©, reinterpret_cast<BitSequence *>(d->result.data())); + break; + } + case Sha3_256: { + SHA3Context copy = d->sha3Context; + d->result.resize(256/8); + sha3Final(©, reinterpret_cast<BitSequence *>(d->result.data())); + break; + } + case Sha3_384: { + SHA3Context copy = d->sha3Context; + d->result.resize(384/8); + sha3Final(©, reinterpret_cast<BitSequence *>(d->result.data())); + break; + } + case Sha3_512: { + SHA3Context copy = d->sha3Context; + d->result.resize(512/8); + sha3Final(©, reinterpret_cast<BitSequence *>(d->result.data())); + break; + } +#endif } return d->result; } diff --git a/src/corelib/tools/qcryptographichash.h b/src/corelib/tools/qcryptographichash.h index 1a7e3751e8..d4e75c4667 100644 --- a/src/corelib/tools/qcryptographichash.h +++ b/src/corelib/tools/qcryptographichash.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2013 Richard J. Moore <rich@kde.org>. ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -44,8 +45,6 @@ #include <QtCore/qbytearray.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -62,7 +61,11 @@ public: Sha224, Sha256, Sha384, - Sha512 + Sha512, + Sha3_224, + Sha3_256, + Sha3_384, + Sha3_512 }; explicit QCryptographicHash(Algorithm method); @@ -84,6 +87,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 88f22daad5..31c870b012 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -93,11 +93,6 @@ static inline QDate fixedDate(int y, int m, int d) return result; } -static inline qint64 floordiv(qint64 a, qint64 b) -{ - return (a - (a < 0 ? b-1 : 0)) / b; -} - static inline qint64 floordiv(qint64 a, int b) { return (a - (a < 0 ? b-1 : 0)) / b; @@ -549,8 +544,8 @@ int QDate::weekNumber(int *yearNumber) const \li 12 = "Dec" \endlist - The month names will be localized according to the system's locale - settings. + The month names will be localized according to the system's default + locale settings. Returns an empty string if the date is invalid. @@ -596,8 +591,8 @@ QString QDate::shortMonthName(int month, QDate::MonthNameType type) \li 12 = "December" \endlist - The month names will be localized according to the system's locale - settings. + The month names will be localized according to the system's default + locale settings. Returns an empty string if the date is invalid. @@ -638,8 +633,8 @@ QString QDate::longMonthName(int month, MonthNameType type) \li 7 = "Sun" \endlist - The day names will be localized according to the system's locale - settings. + The day names will be localized according to the system's default + locale settings. Returns an empty string if the date is invalid. @@ -680,8 +675,8 @@ QString QDate::shortDayName(int weekday, MonthNameType type) \li 7 = "Sunday" \endlist - The day names will be localized according to the system's locale - settings. + The day names will be localized according to the system's default + locale settings. Returns an empty string if the date is invalid. @@ -718,8 +713,8 @@ QString QDate::longDayName(int weekday, MonthNameType type) If the \a format is Qt::TextDate, the string is formatted in the default way. QDate::shortDayName() and QDate::shortMonthName() are used to generate the string, so the day and month names will - be localized names. An example of this formatting is - "Sat May 20 1995". + be localized names using the default locale from the system. An + example of this formatting is "Sat May 20 1995". If the \a format is Qt::ISODate, the string format corresponds to the ISO 8601 extended specification for representations of @@ -2409,9 +2404,9 @@ uint QDateTime::toTime_t() const (Qt::UTC). On systems that do not support time zones this function will behave as if local time were Qt::UTC. - Note that there are possible values for \a msecs that lie outside the - valid range of QDateTime, both negative and positive. The behavior of - this function is undefined for those values. + Note that passing the minimum of \c qint64 + (\c{std::numeric_limits<qint64>::min()}) to \a msecs will result in + undefined behavior. \sa toMSecsSinceEpoch(), setTime_t() */ @@ -4015,7 +4010,7 @@ static QDateTimePrivate::Spec utcToLocal(QDate &date, QTime &time) time = QTime(); return QDateTimePrivate::LocalUnknown; } else { - int deltaDays = fakeDate.daysTo(date); + qint64 deltaDays = fakeDate.daysTo(date); date = QDate(brokenDown->tm_year + 1900, brokenDown->tm_mon + 1, brokenDown->tm_mday); time = QTime(brokenDown->tm_hour, brokenDown->tm_min, brokenDown->tm_sec, time.msec()); date = date.addDays(deltaDays); @@ -4093,7 +4088,7 @@ static void localToUtc(QDate &date, QTime &time, int isdst) date = QDate(1970, 1, 1); time = QTime(); } else { - int deltaDays = fakeDate.daysTo(date); + qint64 deltaDays = fakeDate.daysTo(date); date = QDate(brokenDown->tm_year + 1900, brokenDown->tm_mon + 1, brokenDown->tm_mday); time = QTime(brokenDown->tm_hour, brokenDown->tm_min, brokenDown->tm_sec, time.msec()); date = date.addDays(deltaDays); diff --git a/src/corelib/tools/qdatetime.h b/src/corelib/tools/qdatetime.h index ae545eda4f..d1cc10c877 100644 --- a/src/corelib/tools/qdatetime.h +++ b/src/corelib/tools/qdatetime.h @@ -48,8 +48,6 @@ #include <limits> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -296,6 +294,4 @@ Q_CORE_EXPORT uint qHash(const QTime &key, uint seed = 0) Q_DECL_NOTHROW; QT_END_NAMESPACE -QT_END_HEADER - #endif // QDATETIME_H diff --git a/src/corelib/tools/qdatetime_p.h b/src/corelib/tools/qdatetime_p.h index 4f61e34bf9..c70571d509 100644 --- a/src/corelib/tools/qdatetime_p.h +++ b/src/corelib/tools/qdatetime_p.h @@ -101,6 +101,9 @@ public: void getUTC(QDate &outDate, QTime &outTime) const; static QDateTime addMSecs(const QDateTime &dt, qint64 msecs); static void addMSecs(QDate &utcDate, QTime &utcTime, qint64 msecs); + + static inline qint64 minJd() { return QDate::minJd(); } + static inline qint64 maxJd() { return QDate::maxJd(); } }; #ifndef QT_BOOTSTRAPPED diff --git a/src/corelib/tools/qeasingcurve.h b/src/corelib/tools/qeasingcurve.h index cb8519d204..2e65754989 100644 --- a/src/corelib/tools/qeasingcurve.h +++ b/src/corelib/tools/qeasingcurve.h @@ -50,8 +50,6 @@ # include <QtCore/qpoint.h> #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -142,6 +140,4 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QEasingCurve &); QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/tools/qelapsedtimer.h b/src/corelib/tools/qelapsedtimer.h index 3fb9c6bffe..b06afe4ab4 100644 --- a/src/corelib/tools/qelapsedtimer.h +++ b/src/corelib/tools/qelapsedtimer.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -89,6 +87,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QELAPSEDTIMER_H diff --git a/src/corelib/tools/qelapsedtimer_mac.cpp b/src/corelib/tools/qelapsedtimer_mac.cpp index 611098779c..19056d1bd9 100644 --- a/src/corelib/tools/qelapsedtimer_mac.cpp +++ b/src/corelib/tools/qelapsedtimer_mac.cpp @@ -76,14 +76,14 @@ static qint64 absoluteToMSecs(qint64 cpuTime) return absoluteToNSecs(cpuTime) / 1000000; } -timeval qt_gettime() Q_DECL_NOTHROW +timespec qt_gettime() Q_DECL_NOTHROW { - timeval tv; + timespec tv; uint64_t cpu_time = mach_absolute_time(); uint64_t nsecs = absoluteToNSecs(cpu_time); tv.tv_sec = nsecs / 1000000000ull; - tv.tv_usec = (nsecs / 1000) - (tv.tv_sec * 1000000); + tv.tv_nsec = nsecs - (tv.tv_sec * 1000000000ull); return tv; } diff --git a/src/corelib/tools/qelapsedtimer_unix.cpp b/src/corelib/tools/qelapsedtimer_unix.cpp index e719358ce0..f81a723aa5 100644 --- a/src/corelib/tools/qelapsedtimer_unix.cpp +++ b/src/corelib/tools/qelapsedtimer_unix.cpp @@ -43,8 +43,12 @@ #define _POSIX_C_SOURCE 200809L #include "qelapsedtimer.h" +#ifdef Q_OS_VXWORKS +#include "qfunctions_vxworks.h" +#else #include <sys/time.h> #include <time.h> +#endif #include <unistd.h> #include <qatomic.h> @@ -168,14 +172,14 @@ static inline void do_gettime(qint64 *sec, qint64 *frac) } // used in qcore_unix.cpp and qeventdispatcher_unix.cpp -timeval qt_gettime() Q_DECL_NOTHROW +struct timespec qt_gettime() Q_DECL_NOTHROW { qint64 sec, frac; do_gettime(&sec, &frac); - timeval tv; + timespec tv; tv.tv_sec = sec; - tv.tv_usec = frac / 1000; + tv.tv_nsec = frac; return tv; } diff --git a/src/corelib/tools/qfreelist_p.h b/src/corelib/tools/qfreelist_p.h index 3de0d0b204..5e90a03d7f 100644 --- a/src/corelib/tools/qfreelist_p.h +++ b/src/corelib/tools/qfreelist_p.h @@ -55,8 +55,6 @@ #include <QtCore/qatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -288,6 +286,4 @@ inline void QFreeList<T, ConstantsType>::release(int id) QT_END_NAMESPACE -QT_END_HEADER - #endif // QFREELIST_P_H diff --git a/src/corelib/tools/qharfbuzz_p.h b/src/corelib/tools/qharfbuzz_p.h index 1cbfb03f63..9a0156f673 100644 --- a/src/corelib/tools/qharfbuzz_p.h +++ b/src/corelib/tools/qharfbuzz_p.h @@ -53,11 +53,85 @@ #ifndef QHARFBUZZ_P_H #define QHARFBUZZ_P_H -#include <QtCore/qglobal.h> +#include <QtCore/qchar.h> #include <private/harfbuzz-shaper.h> QT_BEGIN_NAMESPACE +static inline HB_Script script_to_hbscript(uchar script) +{ + switch (script) { + case QChar::Script_Inherited: return HB_Script_Inherited; + case QChar::Script_Common: return HB_Script_Common; + case QChar::Script_Arabic: return HB_Script_Arabic; + case QChar::Script_Armenian: return HB_Script_Armenian; + case QChar::Script_Bengali: return HB_Script_Bengali; + case QChar::Script_Cyrillic: return HB_Script_Cyrillic; + case QChar::Script_Devanagari: return HB_Script_Devanagari; + case QChar::Script_Georgian: return HB_Script_Georgian; + case QChar::Script_Greek: return HB_Script_Greek; + case QChar::Script_Gujarati: return HB_Script_Gujarati; + case QChar::Script_Gurmukhi: return HB_Script_Gurmukhi; + case QChar::Script_Hangul: return HB_Script_Hangul; + case QChar::Script_Hebrew: return HB_Script_Hebrew; + case QChar::Script_Kannada: return HB_Script_Kannada; + case QChar::Script_Khmer: return HB_Script_Khmer; + case QChar::Script_Lao: return HB_Script_Lao; + case QChar::Script_Malayalam: return HB_Script_Malayalam; + case QChar::Script_Myanmar: return HB_Script_Myanmar; + case QChar::Script_Ogham: return HB_Script_Ogham; + case QChar::Script_Oriya: return HB_Script_Oriya; + case QChar::Script_Runic: return HB_Script_Runic; + case QChar::Script_Sinhala: return HB_Script_Sinhala; + case QChar::Script_Syriac: return HB_Script_Syriac; + case QChar::Script_Tamil: return HB_Script_Tamil; + case QChar::Script_Telugu: return HB_Script_Telugu; + case QChar::Script_Thaana: return HB_Script_Thaana; + case QChar::Script_Thai: return HB_Script_Thai; + case QChar::Script_Tibetan: return HB_Script_Tibetan; + case QChar::Script_Nko: return HB_Script_Nko; + default: break; + }; + return HB_Script_Common; +} + +static inline uchar hbscript_to_script(uchar script) +{ + switch (script) { + case HB_Script_Inherited: return QChar::Script_Inherited; + case HB_Script_Common: return QChar::Script_Common; + case HB_Script_Arabic: return QChar::Script_Arabic; + case HB_Script_Armenian: return QChar::Script_Armenian; + case HB_Script_Bengali: return QChar::Script_Bengali; + case HB_Script_Cyrillic: return QChar::Script_Cyrillic; + case HB_Script_Devanagari: return QChar::Script_Devanagari; + case HB_Script_Georgian: return QChar::Script_Georgian; + case HB_Script_Greek: return QChar::Script_Greek; + case HB_Script_Gujarati: return QChar::Script_Gujarati; + case HB_Script_Gurmukhi: return QChar::Script_Gurmukhi; + case HB_Script_Hangul: return QChar::Script_Hangul; + case HB_Script_Hebrew: return QChar::Script_Hebrew; + case HB_Script_Kannada: return QChar::Script_Kannada; + case HB_Script_Khmer: return QChar::Script_Khmer; + case HB_Script_Lao: return QChar::Script_Lao; + case HB_Script_Malayalam: return QChar::Script_Malayalam; + case HB_Script_Myanmar: return QChar::Script_Myanmar; + case HB_Script_Ogham: return QChar::Script_Ogham; + case HB_Script_Oriya: return QChar::Script_Oriya; + case HB_Script_Runic: return QChar::Script_Runic; + case HB_Script_Sinhala: return QChar::Script_Sinhala; + case HB_Script_Syriac: return QChar::Script_Syriac; + case HB_Script_Tamil: return QChar::Script_Tamil; + case HB_Script_Telugu: return QChar::Script_Telugu; + case HB_Script_Thaana: return QChar::Script_Thaana; + case HB_Script_Thai: return QChar::Script_Thai; + case HB_Script_Tibetan: return QChar::Script_Tibetan; + case HB_Script_Nko: return QChar::Script_Nko; + default: break; + }; + return QChar::Script_Common; +} + Q_CORE_EXPORT HB_Bool qShapeItem(HB_ShaperItem *item); // ### temporary diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp index 0103a208f3..b8cd076cb6 100644 --- a/src/corelib/tools/qhash.cpp +++ b/src/corelib/tools/qhash.cpp @@ -924,6 +924,16 @@ void QHashData::checkSanity() \sa clear() */ +/*! \fn QHash::QHash(std::initializer_list<std::pair<Key,T> > list) + \since 5.1 + + Constructs a hash with a copy of each of the elements in the + initializer list \a list. + + This function is only available if the program is being + compiled in C++11 mode. +*/ + /*! \fn QHash::QHash(const QHash<Key, T> &other) Constructs a copy of \a other. @@ -1981,6 +1991,16 @@ void QHashData::checkSanity() Constructs an empty hash. */ +/*! \fn QMultiHash::QMultiHash(std::initializer_list<std::pair<Key,T> > list) + \since 5.1 + + Constructs a multi hash with a copy of each of the elements in the + initializer list \a list. + + This function is only available if the program is being + compiled in C++11 mode. +*/ + /*! \fn QMultiHash::QMultiHash(const QHash<Key, T> &other) Constructs a copy of \a other (which can be a QHash or a diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h index 98965b9121..5d9238f453 100644 --- a/src/corelib/tools/qhash.h +++ b/src/corelib/tools/qhash.h @@ -48,7 +48,9 @@ #include <QtCore/qpair.h> #include <QtCore/qrefcount.h> -QT_BEGIN_HEADER +#ifdef Q_COMPILER_INITIALIZER_LISTS +#include <initializer_list> +#endif QT_BEGIN_NAMESPACE @@ -285,6 +287,15 @@ class QHash public: inline QHash() : d(const_cast<QHashData *>(&QHashData::shared_null)) { } +#ifdef Q_COMPILER_INITIALIZER_LISTS + inline QHash(std::initializer_list<std::pair<Key,T> > list) + : d(const_cast<QHashData *>(&QHashData::shared_null)) + { + reserve(list.size()); + for (typename std::initializer_list<std::pair<Key,T> >::const_iterator it = list.begin(); it != list.end(); ++it) + insert(it->first, it->second); + } +#endif inline QHash(const QHash<Key, T> &other) : d(other.d) { d->ref.ref(); if (!d->sharable) detach(); } inline ~QHash() { if (!d->ref.deref()) freeData(d); } @@ -921,6 +932,14 @@ class QMultiHash : public QHash<Key, T> { public: QMultiHash() {} +#ifdef Q_COMPILER_INITIALIZER_LISTS + inline QMultiHash(std::initializer_list<std::pair<Key,T> > list) + { + this->reserve(list.size()); + for (typename std::initializer_list<std::pair<Key,T> >::const_iterator it = list.begin(); it != list.end(); ++it) + insert(it->first, it->second); + } +#endif QMultiHash(const QHash<Key, T> &other) : QHash<Key, T>(other) {} inline void swap(QMultiHash<Key, T> &other) { QHash<Key, T>::swap(other); } // prevent QMultiHash<->QHash swaps @@ -1034,6 +1053,4 @@ Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR(Hash) QT_END_NAMESPACE -QT_END_HEADER - #endif // QHASH_H diff --git a/src/corelib/tools/qiterator.h b/src/corelib/tools/qiterator.h index ad2d8bae41..3b86edd750 100644 --- a/src/corelib/tools/qiterator.h +++ b/src/corelib/tools/qiterator.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #define Q_DECLARE_SEQUENTIAL_ITERATOR(C) \ @@ -190,6 +188,4 @@ public: \ QT_END_NAMESPACE -QT_END_HEADER - #endif // QITERATOR_H diff --git a/src/corelib/tools/qline.h b/src/corelib/tools/qline.h index cf87067b61..69e8a8245a 100644 --- a/src/corelib/tools/qline.h +++ b/src/corelib/tools/qline.h @@ -44,8 +44,6 @@ #include <QtCore/qpoint.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -421,6 +419,4 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QLineF &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QLINE_H diff --git a/src/corelib/tools/qlinkedlist.h b/src/corelib/tools/qlinkedlist.h index 383d6eb990..b9ca1b964a 100644 --- a/src/corelib/tools/qlinkedlist.h +++ b/src/corelib/tools/qlinkedlist.h @@ -48,8 +48,6 @@ #include <iterator> #include <list> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -501,6 +499,4 @@ Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR(LinkedList) QT_END_NAMESPACE -QT_END_HEADER - #endif // QLINKEDLIST_H diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h index 98326e5e00..0592c24e9f 100644 --- a/src/corelib/tools/qlist.h +++ b/src/corelib/tools/qlist.h @@ -57,8 +57,6 @@ #include <limits.h> #include <string.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -910,6 +908,4 @@ Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR(List) QT_END_NAMESPACE -QT_END_HEADER - #endif // QLIST_H diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 39257158a4..454025f54d 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -1327,6 +1327,224 @@ double QLocale::toDouble(const QString &s, bool *ok) const } /*! + Returns the short int represented by the localized string \a s. + + If the conversion fails the function returns 0. + + If \a ok is not null, failure is reported by setting *ok to false, and + success by setting *ok to true. + + This function ignores leading and trailing whitespace. + + \sa toUShort(), toString() + + \since 5.1 +*/ + +short QLocale::toShort(const QStringRef &s, bool *ok) const +{ + qlonglong i = toLongLong(s, ok); + if (i < SHRT_MIN || i > SHRT_MAX) { + if (ok) + *ok = false; + return 0; + } + return short(i); +} + +/*! + Returns the unsigned short int represented by the localized string \a s. + + If the conversion fails the function returns 0. + + If \a ok is not null, failure is reported by setting *ok to false, and + success by setting *ok to true. + + This function ignores leading and trailing whitespace. + + \sa toShort(), toString() + + \since 5.1 +*/ + +ushort QLocale::toUShort(const QStringRef &s, bool *ok) const +{ + qulonglong i = toULongLong(s, ok); + if (i > USHRT_MAX) { + if (ok) + *ok = false; + return 0; + } + return ushort(i); +} + +/*! + Returns the int represented by the localized string \a s. + + If the conversion fails the function returns 0. + + If \a ok is not null, failure is reported by setting *ok to false, and + success by setting *ok to true. + + This function ignores leading and trailing whitespace. + + \sa toUInt(), toString() + + \since 5.1 +*/ + +int QLocale::toInt(const QStringRef &s, bool *ok) const +{ + qlonglong i = toLongLong(s, ok); + if (i < INT_MIN || i > INT_MAX) { + if (ok) + *ok = false; + return 0; + } + return int(i); +} + +/*! + Returns the unsigned int represented by the localized string \a s. + + If the conversion fails the function returns 0. + + If \a ok is not null, failure is reported by setting *ok to false, and + success by setting *ok to true. + + This function ignores leading and trailing whitespace. + + \sa toInt(), toString() + + \since 5.1 +*/ + +uint QLocale::toUInt(const QStringRef &s, bool *ok) const +{ + qulonglong i = toULongLong(s, ok); + if (i > UINT_MAX) { + if (ok) + *ok = false; + return 0; + } + return uint(i); +} + +/*! + Returns the long long int represented by the localized string \a s. + + If the conversion fails the function returns 0. + + If \a ok is not null, failure is reported by setting *ok to false, and + success by setting *ok to true. + + This function ignores leading and trailing whitespace. + + \sa toInt(), toULongLong(), toDouble(), toString() + + \since 5.1 +*/ + + +qlonglong QLocale::toLongLong(const QStringRef &s, bool *ok) const +{ + QLocalePrivate::GroupSeparatorMode mode + = d->m_numberOptions & RejectGroupSeparator + ? QLocalePrivate::FailOnGroupSeparators + : QLocalePrivate::ParseGroupSeparators; + + return d->stringToLongLong(s, 10, ok, mode); +} + +/*! + Returns the unsigned long long int represented by the localized + string \a s. + + If the conversion fails the function returns 0. + + If \a ok is not null, failure is reported by setting *ok to false, and + success by setting *ok to true. + + This function ignores leading and trailing whitespace. + + \sa toLongLong(), toInt(), toDouble(), toString() + + \since 5.1 +*/ + +qulonglong QLocale::toULongLong(const QStringRef &s, bool *ok) const +{ + QLocalePrivate::GroupSeparatorMode mode + = d->m_numberOptions & RejectGroupSeparator + ? QLocalePrivate::FailOnGroupSeparators + : QLocalePrivate::ParseGroupSeparators; + + return d->stringToUnsLongLong(s, 10, ok, mode); +} + +/*! + Returns the float represented by the localized string \a s, or 0.0 + if the conversion failed. + + If \a ok is not null, reports failure by setting + *ok to false and success by setting *ok to true. + + This function ignores leading and trailing whitespace. + + \sa toDouble(), toInt(), toString() + + \since 5.1 +*/ + +float QLocale::toFloat(const QStringRef &s, bool *ok) const +{ + bool myOk; + double d = toDouble(s, &myOk); + if (!myOk || d > QT_MAX_FLOAT || d < -QT_MAX_FLOAT) { + if (ok) + *ok = false; + return 0.0; + } + if (ok) + *ok = true; + return float(d); +} + +/*! + Returns the double represented by the localized string \a s, or + 0.0 if the conversion failed. + + If \a ok is not null, reports failure by setting + *ok to false and success by setting *ok to true. + + Unlike QString::toDouble(), this function does not fall back to + the "C" locale if the string cannot be interpreted in this + locale. + + \snippet code/src_corelib_tools_qlocale.cpp 3 + + Notice that the last conversion returns 1234.0, because '.' is the + thousands group separator in the German locale. + + This function ignores leading and trailing whitespace. + + \sa toFloat(), toInt(), toString() + + \since 5.1 +*/ + +double QLocale::toDouble(const QStringRef &s, bool *ok) const +{ + QLocalePrivate::GroupSeparatorMode mode + = d->m_numberOptions & RejectGroupSeparator + ? QLocalePrivate::FailOnGroupSeparators + : QLocalePrivate::ParseGroupSeparators; + + return d->stringToDouble(s, ok, mode); +} + + +/*! Returns a localized string representation of \a i. \sa toLongLong() @@ -2892,12 +3110,12 @@ QString QLocalePrivate::unsLongLongToString(const QChar zero, const QChar group, number. We can't detect junk here, since we don't even know the base of the number. */ -bool QLocalePrivate::numberToCLocale(const QString &num, +bool QLocalePrivate::numberToCLocale(const QChar *str, int len, GroupSeparatorMode group_sep_mode, CharBuff *result) const { - const QChar *uc = num.unicode(); - int l = num.length(); + const QChar *uc = str; + int l = len; int idx = 0; // Skip whitespace @@ -3043,7 +3261,13 @@ double QLocalePrivate::stringToDouble(const QString &number, bool *ok, GroupSeparatorMode group_sep_mode) const { CharBuff buff; - if (!numberToCLocale(group().unicode() == 0xa0 ? number.trimmed() : number, + // Do not use the ternary operator - triggers msvc2012 bug in optimized builds + QString trimmedNumber; + if (group().unicode() == 0xa0) + trimmedNumber = number.trimmed(); + else + trimmedNumber = number; + if (!numberToCLocale(trimmedNumber.unicode(), trimmedNumber.size(), group_sep_mode, &buff)) { if (ok != 0) *ok = false; @@ -3056,7 +3280,13 @@ qlonglong QLocalePrivate::stringToLongLong(const QString &number, int base, bool *ok, GroupSeparatorMode group_sep_mode) const { CharBuff buff; - if (!numberToCLocale(group().unicode() == 0xa0 ? number.trimmed() : number, + // Do not use the ternary operator - triggers msvc2012 bug in optimized builds + QString trimmedNumber; + if (group().unicode() == 0xa0) + trimmedNumber = number.trimmed(); + else + trimmedNumber = number; + if (!numberToCLocale(trimmedNumber.unicode(), trimmedNumber.size(), group_sep_mode, &buff)) { if (ok != 0) *ok = false; @@ -3070,7 +3300,13 @@ qulonglong QLocalePrivate::stringToUnsLongLong(const QString &number, int base, bool *ok, GroupSeparatorMode group_sep_mode) const { CharBuff buff; - if (!numberToCLocale(group().unicode() == 0xa0 ? number.trimmed() : number, + // Do not use the ternary operator - triggers msvc2012 bug in optimized builds + QString trimmedNumber; + if (group().unicode() == 0xa0) + trimmedNumber = number.trimmed(); + else + trimmedNumber = number; + if (!numberToCLocale(trimmedNumber.unicode(), trimmedNumber.size(), group_sep_mode, &buff)) { if (ok != 0) *ok = false; @@ -3080,6 +3316,64 @@ qulonglong QLocalePrivate::stringToUnsLongLong(const QString &number, int base, return bytearrayToUnsLongLong(buff.constData(), base, ok); } +double QLocalePrivate::stringToDouble(const QStringRef &number, bool *ok, + GroupSeparatorMode group_sep_mode) const +{ + CharBuff buff; + QStringRef trimmedNumber; + // Do not use the ternary operator - triggers msvc2012 bug in optimized builds + if (group().unicode() == 0xa0) + trimmedNumber = number.trimmed(); + else + trimmedNumber = number; + if (!numberToCLocale(trimmedNumber.unicode(), trimmedNumber.size(), + group_sep_mode, &buff)) { + if (ok != 0) + *ok = false; + return 0.0; + } + return bytearrayToDouble(buff.constData(), ok); +} + +qlonglong QLocalePrivate::stringToLongLong(const QStringRef &number, int base, + bool *ok, GroupSeparatorMode group_sep_mode) const +{ + CharBuff buff; + QStringRef trimmedNumber; + // Do not use the ternary operator - triggers msvc2012 bug in optimized builds + if (group().unicode() == 0xa0) + trimmedNumber = number.trimmed(); + else + trimmedNumber = number; + if (!numberToCLocale(trimmedNumber.unicode(), trimmedNumber.size(), + group_sep_mode, &buff)) { + if (ok != 0) + *ok = false; + return 0; + } + + return bytearrayToLongLong(buff.constData(), base, ok); +} + +qulonglong QLocalePrivate::stringToUnsLongLong(const QStringRef &number, int base, + bool *ok, GroupSeparatorMode group_sep_mode) const +{ + CharBuff buff; + QStringRef trimmedNumber; + // Do not use the ternary operator - triggers msvc2012 bug in optimized builds + if (group().unicode() == 0xa0) + trimmedNumber = number.trimmed(); + else + trimmedNumber = number; + if (!numberToCLocale(trimmedNumber.unicode(), trimmedNumber.size(), + group_sep_mode, &buff)) { + if (ok != 0) + *ok = false; + return 0; + } + + return bytearrayToUnsLongLong(buff.constData(), base, ok); +} double QLocalePrivate::bytearrayToDouble(const char *num, bool *ok, bool *overflow) { diff --git a/src/corelib/tools/qlocale.h b/src/corelib/tools/qlocale.h index 4283a31c43..6199cdb19b 100644 --- a/src/corelib/tools/qlocale.h +++ b/src/corelib/tools/qlocale.h @@ -47,8 +47,6 @@ #include <QtCore/qobjectdefs.h> #include <QtCore/qshareddata.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -69,6 +67,7 @@ class Q_CORE_EXPORT QLocale Q_ENUMS(Country) Q_ENUMS(MeasurementSystem) friend class QString; + friend class QStringRef; friend class QByteArray; friend class QIntValidator; friend class QDoubleValidatorPrivate; @@ -207,7 +206,7 @@ public: Turkish = 125, Turkmen = 126, Tahitian = 127, - Uigur = 128, + Uighur = 128, Ukrainian = 129, Urdu = 130, Uzbek = 131, @@ -340,6 +339,57 @@ public: Kako = 258, Meta = 259, Ngiemboon = 260, + Aragonese = 261, + Akkadian = 262, + AncientEgyptian = 263, + AncientGreek = 264, + Aramaic = 265, + Balinese = 266, + Bamun = 267, + BatakToba = 268, + Buginese = 269, + Buhid = 270, + Carian = 271, + Chakma = 272, + ClassicalMandaic = 273, + Coptic = 274, + Dogri = 275, + EasternCham = 276, + EasternKayah = 277, + Etruscan = 278, + Gothic = 279, + Hanunoo = 280, + Ingush = 281, + LargeFloweryMiao = 282, + Lepcha = 283, + Limbu = 284, + Lisu = 285, + Lu = 286, + Lycian = 287, + Lydian = 288, + Mandingo = 289, + Manipuri = 290, + Meroitic = 291, + NorthernThai = 292, + OldIrish = 293, + OldNorse = 294, + OldPersian = 295, + OldTurkish = 296, + Pahlavi = 297, + Parthian = 298, + Phoenician = 299, + PrakritLanguage = 300, + Rejang = 301, + Sabaean = 302, + Samaritan = 303, + Santali = 304, + Saurashtra = 305, + Sora = 306, + Sylheti = 307, + Tagbanwa = 308, + TaiDam = 309, + TaiNua = 310, + Ugaritic = 311, Norwegian = NorwegianBokmal, Moldavian = Romanian, SerboCroatian = Serbian, @@ -353,7 +403,8 @@ public: RhaetoRomance = Romansh, Chewa = Nyanja, Frisian = WesternFrisian, - LastLanguage = Ngiemboon + Uigur = Uighur, + LastLanguage = Ugaritic }; enum Script { @@ -393,9 +444,76 @@ public: SyriacScript = 33, YiScript = 34, VaiScript = 35, + AvestanScript = 36, + BalineseScript = 37, + BamumScript = 38, + BatakScript = 39, + BopomofoScript = 40, + BrahmiScript = 41, + BugineseScript = 42, + BuhidScript = 43, + CanadianAboriginalScript = 44, + CarianScript = 45, + ChakmaScript = 46, + ChamScript = 47, + CopticScript = 48, + CypriotScript = 49, + EgyptianHieroglyphsScript = 50, + FraserScript = 51, + GlagoliticScript = 52, + GothicScript = 53, + HanScript = 54, + HangulScript = 55, + HanunooScript = 56, + ImperialAramaicScript = 57, + InscriptionalPahlaviScript = 58, + InscriptionalParthianScript = 59, + JavaneseScript = 60, + KaithiScript = 61, + KatakanaScript = 62, + KayahLiScript = 63, + KharoshthiScript = 64, + LannaScript = 65, + LepchaScript = 66, + LimbuScript = 67, + LinearBScript = 68, + LycianScript = 69, + LydianScript = 70, + MandaeanScript = 71, + MeiteiMayekScript = 72, + MeroiticScript = 73, + MeroiticCursiveScript = 74, + NkoScript = 75, + NewTaiLueScript = 76, + OghamScript = 77, + OlChikiScript = 78, + OldItalicScript = 79, + OldPersianScript = 80, + OldSouthArabianScript = 81, + OrkhonScript = 82, + OsmanyaScript = 83, + PhagsPaScript = 84, + PhoenicianScript = 85, + PollardPhoneticScript = 86, + RejangScript = 87, + RunicScript = 88, + SamaritanScript = 89, + SaurashtraScript = 90, + SharadaScript = 91, + ShavianScript = 92, + SoraSompengScript = 93, + CuneiformScript = 94, + SundaneseScript = 95, + SylotiNagriScript = 96, + TagalogScript = 97, + TagbanwaScript = 98, + TaiLeScript = 99, + TaiVietScript = 100, + TakriScript = 101, + UgariticScript = 102, SimplifiedChineseScript = SimplifiedHanScript, TraditionalChineseScript = TraditionalHanScript, - LastScript = VaiScript + LastScript = UgariticScript }; enum Country { AnyCountry = 0, @@ -712,6 +830,15 @@ public: float toFloat(const QString &s, bool *ok = 0) const; double toDouble(const QString &s, bool *ok = 0) const; + short toShort(const QStringRef &s, bool *ok = 0) const; + ushort toUShort(const QStringRef &s, bool *ok = 0) const; + int toInt(const QStringRef &s, bool *ok = 0) const; + uint toUInt(const QStringRef &s, bool *ok = 0) const; + qlonglong toLongLong(const QStringRef &s, bool *ok = 0) const; + qulonglong toULongLong(const QStringRef &s, bool *ok = 0) const; + float toFloat(const QStringRef &s, bool *ok = 0) const; + double toDouble(const QStringRef &s, bool *ok = 0) const; + QString toString(qlonglong i) const; QString toString(qulonglong i) const; inline QString toString(short i) const; @@ -843,6 +970,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QLocale &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QLOCALE_H diff --git a/src/corelib/tools/qlocale.qdoc b/src/corelib/tools/qlocale.qdoc index 8c76833fc1..770c72e476 100644 --- a/src/corelib/tools/qlocale.qdoc +++ b/src/corelib/tools/qlocale.qdoc @@ -289,7 +289,8 @@ \value Turkish \value Turkmen \value Twi Obsolete, please use Akan - \value Uigur + \value Uighur + \value Uigur Obsolete, please use Uighur \value Ukrainian \value Urdu \value Uzbek @@ -401,6 +402,57 @@ \value Kako \value Meta \value Ngiemboon + \value Aragonese + \value Akkadian + \value AncientEgyptian + \value AncientGreek + \value Aramaic + \value Balinese + \value Bamun + \value BatakToba + \value Buginese + \value Buhid + \value Carian + \value Chakma + \value ClassicalMandaic + \value Coptic + \value Dogri + \value EasternCham + \value EasternKayah + \value Etruscan + \value Gothic + \value Hanunoo + \value Ingush + \value LargeFloweryMiao + \value Lepcha + \value Limbu + \value Lisu + \value Lu + \value Lycian + \value Lydian + \value Mandingo + \value Manipuri + \value Meroitic + \value NorthernThai + \value OldIrish + \value OldNorse + \value OldPersian + \value OldTurkish + \value Pahlavi + \value Parthian + \value Phoenician + \value PrakritLanguage + \value Rejang + \value Sabaean + \value Samaritan + \value Santali + \value Saurashtra + \value Sora + \value Sylheti + \value Tagbanwa + \value TaiDam + \value TaiNua + \value Ugaritic \omitvalue LastLanguage \sa language(), languageToString() @@ -686,42 +738,109 @@ \value AnyScript \value ArabicScript - \value CyrillicScript - \value DeseretScript - \value GurmukhiScript - \value SimplifiedHanScript same as SimplifiedChineseScript - \value SimplifiedChineseScript same as SimplifiedHanScript - \value TraditionalHanScript same as TraditionalChineseScript - \value TraditionalChineseScript same as TraditionalHanScript - \value LatinScript - \value MongolianScript - \value TifinaghScript \value ArmenianScript + \value AvestanScript + \value BalineseScript + \value BamumScript + \value BatakScript \value BengaliScript + \value BopomofoScript + \value BrahmiScript + \value BugineseScript + \value BuhidScript + \value CanadianAboriginalScript + \value CarianScript + \value ChakmaScript + \value ChamScript \value CherokeeScript + \value CopticScript + \value CypriotScript + \value CyrillicScript + \value DeseretScript \value DevanagariScript + \value EgyptianHieroglyphsScript \value EthiopicScript + \value FraserScript \value GeorgianScript + \value GlagoliticScript + \value GothicScript \value GreekScript \value GujaratiScript + \value GurmukhiScript + \value HanScript + \value HangulScript + \value HanunooScript \value HebrewScript + \value ImperialAramaicScript + \value InscriptionalPahlaviScript + \value InscriptionalParthianScript \value JapaneseScript - \value KhmerScript + \value JavaneseScript + \value KaithiScript \value KannadaScript + \value KatakanaScript + \value KayahLiScript + \value KharoshthiScript + \value KhmerScript \value KoreanScript + \value LannaScript \value LaoScript + \value LatinScript + \value LepchaScript + \value LimbuScript + \value LinearBScript + \value LycianScript + \value LydianScript \value MalayalamScript + \value MandaeanScript + \value MeiteiMayekScript + \value MeroiticScript + \value MeroiticCursiveScript + \value MongolianScript \value MyanmarScript + \value NkoScript + \value NewTaiLueScript + \value OghamScript + \value OlChikiScript + \value OldItalicScript + \value OldPersianScript + \value OldSouthArabianScript \value OriyaScript + \value OrkhonScript + \value OsmanyaScript + \value PhagsPaScript + \value PhoenicianScript + \value PollardPhoneticScript + \value RejangScript + \value RunicScript + \value SamaritanScript + \value SaurashtraScript + \value SharadaScript + \value ShavianScript + \value SimplifiedHanScript same as SimplifiedChineseScript + \value SimplifiedChineseScript same as SimplifiedHanScript + \value SinhalaScript + \value SoraSompengScript + \value CuneiformScript + \value SundaneseScript + \value SylotiNagriScript + \value SyriacScript + \value TagalogScript + \value TagbanwaScript + \value TaiLeScript + \value TaiVietScript + \value TakriScript \value TamilScript \value TeluguScript \value ThaanaScript \value ThaiScript \value TibetanScript - \value SinhalaScript - \value SyriacScript - \value YiScript + \value TifinaghScript + \value TraditionalHanScript same as TraditionalChineseScript + \value TraditionalChineseScript same as TraditionalHanScript + \value UgariticScript \value VaiScript + \value YiScript \omitvalue LastScript \sa script(), scriptToString(), languageToString() diff --git a/src/corelib/tools/qlocale_data_p.h b/src/corelib/tools/qlocale_data_p.h index c7e9e83dbd..1f1a6ef4c7 100644 --- a/src/corelib/tools/qlocale_data_p.h +++ b/src/corelib/tools/qlocale_data_p.h @@ -77,7 +77,7 @@ static const int ImperialMeasurementSystemsCount = // GENERATED PART STARTS HERE /* - This part of the file was generated on 2012-11-23 from the + This part of the file was generated on 2012-12-19 from the Common Locale Data Repository v22.1 http://www.unicode.org/cldr/ @@ -172,6 +172,7 @@ static const QLocaleId likely_subtags[] = { { 52, 0, 0 }, { 52, 7, 101 }, // id -> id_Latn_ID { 149, 0, 0 }, { 149, 7, 157 }, // ig -> ig_Latn_NG { 168, 0, 0 }, { 168, 34, 44 }, // ii -> ii_Yiii_CN + { 281, 0, 0 }, { 281, 2, 178 }, // inh -> inh_Cyrl_RU { 51, 0, 0 }, { 51, 7, 99 }, // is -> is_Latn_IS { 58, 0, 0 }, { 58, 7, 106 }, // it -> it_Latn_IT { 59, 0, 0 }, { 59, 19, 108 }, // ja -> ja_Jpan_JP @@ -273,6 +274,7 @@ static const QLocaleId likely_subtags[] = { { 99, 0, 0 }, { 99, 13, 100 }, // sa -> sa_Deva_IN { 248, 0, 0 }, { 248, 2, 178 }, // sah -> sah_Cyrl_RU { 179, 0, 0 }, { 179, 7, 111 }, // saq -> saq_Latn_KE + { 304, 0, 0 }, { 304, 7, 100 }, // sat -> sat_Latn_IN { 249, 0, 0 }, { 249, 7, 210 }, // sbp -> sbp_Latn_TZ { 105, 0, 0 }, { 105, 1, 100 }, // sd -> sd_Arab_IN { 173, 0, 0 }, { 173, 7, 161 }, // se -> se_Latn_NO @@ -334,7 +336,9 @@ static const QLocaleId likely_subtags[] = { { 0, 1, 100 }, { 130, 1, 100 }, // und_Arab_IN -> ur_Arab_IN { 0, 1, 157 }, { 47, 1, 157 }, // und_Arab_NG -> ha_Arab_NG { 0, 1, 163 }, { 130, 1, 163 }, // und_Arab_PK -> ur_Arab_PK + { 0, 57, 0 }, { 265, 57, 102 }, // und_Armi -> arc_Armi_IR { 0, 10, 0 }, { 9, 10, 11 }, // und_Armn -> hy_Armn_AM + { 0, 36, 0 }, { 255, 36, 102 }, // und_Avst -> ae_Avst_IR { 0, 0, 27 }, { 142, 7, 27 }, // und_BA -> bs_Latn_BA { 0, 0, 18 }, { 15, 11, 18 }, // und_BD -> bn_Beng_BD { 0, 0, 21 }, { 30, 7, 21 }, // und_BE -> nl_Latn_BE @@ -349,7 +353,14 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 30 }, { 91, 7, 30 }, // und_BR -> pt_Latn_BR { 0, 0, 25 }, { 16, 31, 25 }, // und_BT -> dz_Tibt_BT { 0, 0, 20 }, { 22, 2, 20 }, // und_BY -> be_Cyrl_BY + { 0, 37, 0 }, { 266, 37, 101 }, // und_Bali -> ban_Bali_ID + { 0, 38, 0 }, { 267, 38, 37 }, // und_Bamu -> bax_Bamu_CM + { 0, 39, 0 }, { 268, 39, 101 }, // und_Batk -> bbc_Batk_ID { 0, 11, 0 }, { 15, 11, 18 }, // und_Beng -> bn_Beng_BD + { 0, 40, 0 }, { 25, 40, 208 }, // und_Bopo -> zh_Bopo_TW + { 0, 41, 0 }, { 300, 41, 100 }, // und_Brah -> pra_Brah_IN + { 0, 42, 0 }, { 269, 42, 101 }, // und_Bugi -> bug_Bugi_ID + { 0, 43, 0 }, { 270, 43, 170 }, // und_Buhd -> bku_Buhd_PH { 0, 0, 49 }, { 113, 7, 49 }, // und_CD -> sw_Latn_CD { 0, 0, 41 }, { 37, 7, 41 }, // und_CF -> fr_Latn_CF { 0, 0, 50 }, { 37, 7, 50 }, // und_CG -> fr_Latn_CG @@ -365,7 +376,13 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 39 }, { 91, 7, 39 }, // und_CV -> pt_Latn_CV { 0, 0, 56 }, { 43, 16, 56 }, // und_CY -> el_Grek_CY { 0, 0, 57 }, { 28, 7, 57 }, // und_CZ -> cs_Latn_CZ + { 0, 46, 0 }, { 272, 46, 18 }, // und_Cakm -> ccp_Cakm_BD + { 0, 44, 0 }, { 221, 44, 38 }, // und_Cans -> cr_Cans_CA + { 0, 45, 0 }, { 271, 45, 217 }, // und_Cari -> xcr_Cari_TR + { 0, 47, 0 }, { 276, 47, 232 }, // und_Cham -> cjm_Cham_VN { 0, 12, 0 }, { 190, 12, 225 }, // und_Cher -> chr_Cher_US + { 0, 48, 0 }, { 274, 48, 64 }, // und_Copt -> cop_Copt_EG + { 0, 49, 0 }, { 264, 49, 56 }, // und_Cprt -> grc_Cprt_CY { 0, 2, 0 }, { 96, 2, 178 }, // und_Cyrl -> ru_Cyrl_RU { 0, 2, 27 }, { 100, 2, 27 }, // und_Cyrl_BA -> sr_Cyrl_BA { 0, 2, 81 }, { 2, 2, 81 }, // und_Cyrl_GE -> ab_Cyrl_GE @@ -382,6 +399,7 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 236 }, { 8, 1, 236 }, // und_EH -> ar_Arab_EH { 0, 0, 67 }, { 122, 14, 67 }, // und_ER -> ti_Ethi_ER { 0, 0, 197 }, { 111, 7, 197 }, // und_ES -> es_Latn_ES + { 0, 50, 0 }, { 263, 50, 64 }, // und_Egyp -> egy_Egyp_EG { 0, 14, 0 }, { 7, 14, 69 }, // und_Ethi -> am_Ethi_ET { 0, 0, 73 }, { 36, 7, 73 }, // und_FI -> fi_Latn_FI { 0, 0, 71 }, { 34, 7, 71 }, // und_FO -> fo_Latn_FO @@ -398,6 +416,8 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 90 }, { 111, 7, 90 }, // und_GT -> es_Latn_GT { 0, 0, 92 }, { 91, 7, 92 }, // und_GW -> pt_Latn_GW { 0, 15, 0 }, { 41, 15, 81 }, // und_Geor -> ka_Geor_GE + { 0, 52, 0 }, { 219, 52, 33 }, // und_Glag -> cu_Glag_BG + { 0, 53, 0 }, { 279, 53, 222 }, // und_Goth -> got_Goth_UA { 0, 16, 0 }, { 43, 16, 85 }, // und_Grek -> el_Grek_GR { 0, 17, 0 }, { 46, 17, 100 }, // und_Gujr -> gu_Gujr_IN { 0, 4, 0 }, { 92, 4, 100 }, // und_Guru -> pa_Guru_IN @@ -406,6 +426,9 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 54 }, { 27, 7, 54 }, // und_HR -> hr_Latn_HR { 0, 0, 94 }, { 222, 7, 94 }, // und_HT -> ht_Latn_HT { 0, 0, 98 }, { 50, 7, 98 }, // und_HU -> hu_Latn_HU + { 0, 55, 0 }, { 66, 55, 114 }, // und_Hang -> ko_Hang_KR + { 0, 54, 0 }, { 25, 5, 44 }, // und_Hani -> zh_Hans_CN + { 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, 18, 0 }, { 48, 18, 105 }, // und_Hebr -> he_Hebr_IL @@ -417,8 +440,10 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 102 }, { 89, 1, 102 }, // und_IR -> fa_Arab_IR { 0, 0, 99 }, { 51, 7, 99 }, // und_IS -> is_Latn_IS { 0, 0, 106 }, { 58, 7, 106 }, // und_IT -> it_Latn_IT + { 0, 79, 0 }, { 278, 79, 106 }, // und_Ital -> ett_Ital_IT { 0, 0, 109 }, { 8, 1, 109 }, // und_JO -> ar_Arab_JO { 0, 0, 108 }, { 59, 19, 108 }, // und_JP -> ja_Jpan_JP + { 0, 60, 0 }, { 60, 60, 101 }, // und_Java -> jv_Java_ID { 0, 19, 0 }, { 59, 19, 108 }, // und_Jpan -> ja_Jpan_JP { 0, 0, 116 }, { 65, 2, 116 }, // und_KG -> ky_Cyrl_KG { 0, 0, 36 }, { 23, 20, 36 }, // und_KH -> km_Khmr_KH @@ -427,9 +452,13 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 114 }, { 66, 22, 114 }, // und_KR -> ko_Kore_KR { 0, 0, 115 }, { 8, 1, 115 }, // und_KW -> ar_Arab_KW { 0, 0, 110 }, { 96, 2, 110 }, // und_KZ -> ru_Cyrl_KZ + { 0, 63, 0 }, { 277, 63, 147 }, // und_Kali -> eky_Kali_MM + { 0, 62, 0 }, { 59, 62, 108 }, // und_Kana -> ja_Kana_JP + { 0, 64, 0 }, { 300, 64, 163 }, // und_Khar -> pra_Khar_PK { 0, 20, 0 }, { 23, 20, 36 }, // und_Khmr -> km_Khmr_KH { 0, 21, 0 }, { 61, 21, 100 }, // und_Knda -> kn_Knda_IN { 0, 22, 0 }, { 66, 22, 114 }, // und_Kore -> ko_Kore_KR + { 0, 61, 0 }, { 17, 61, 100 }, // und_Kthi -> bh_Kthi_IN { 0, 0, 117 }, { 69, 23, 117 }, // und_LA -> lo_Laoo_LA { 0, 0, 119 }, { 8, 1, 119 }, // und_LB -> ar_Arab_LB { 0, 0, 123 }, { 42, 7, 123 }, // und_LI -> de_Latn_LI @@ -439,6 +468,7 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 125 }, { 37, 7, 125 }, // und_LU -> fr_Latn_LU { 0, 0, 118 }, { 71, 7, 118 }, // und_LV -> lv_Latn_LV { 0, 0, 122 }, { 8, 1, 122 }, // und_LY -> ar_Arab_LY + { 0, 65, 0 }, { 292, 65, 211 }, // und_Lana -> nod_Lana_TH { 0, 23, 0 }, { 69, 23, 117 }, // und_Laoo -> lo_Laoo_LA { 0, 7, 44 }, { 139, 7, 44 }, // und_Latn_CN -> za_Latn_CN { 0, 7, 56 }, { 125, 7, 56 }, // und_Latn_CY -> tr_Latn_CY @@ -450,6 +480,12 @@ static const QLocaleId likely_subtags[] = { { 0, 7, 136 }, { 37, 7, 136 }, // und_Latn_MR -> fr_Latn_MR { 0, 7, 207 }, { 37, 7, 207 }, // und_Latn_SY -> fr_Latn_SY { 0, 7, 216 }, { 37, 7, 216 }, // und_Latn_TN -> fr_Latn_TN + { 0, 66, 0 }, { 283, 66, 100 }, // und_Lepc -> lep_Lepc_IN + { 0, 67, 0 }, { 284, 67, 100 }, // und_Limb -> lif_Limb_IN + { 0, 68, 0 }, { 264, 68, 85 }, // und_Linb -> grc_Linb_GR + { 0, 51, 0 }, { 285, 51, 44 }, // und_Lisu -> lis_Lisu_CN + { 0, 69, 0 }, { 287, 69, 217 }, // und_Lyci -> xlc_Lyci_TR + { 0, 70, 0 }, { 288, 70, 217 }, // und_Lydi -> xld_Lydi_TR { 0, 0, 145 }, { 8, 1, 145 }, // und_MA -> ar_Arab_MA { 0, 0, 142 }, { 37, 7, 142 }, // und_MC -> fr_Latn_MC { 0, 0, 141 }, { 95, 7, 141 }, // und_MD -> ro_Latn_MD @@ -469,8 +505,12 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 139 }, { 111, 7, 139 }, // und_MX -> es_Latn_MX { 0, 0, 130 }, { 76, 7, 130 }, // und_MY -> ms_Latn_MY { 0, 0, 146 }, { 91, 7, 146 }, // und_MZ -> pt_Latn_MZ + { 0, 71, 0 }, { 273, 71, 102 }, // und_Mand -> myz_Mand_IR + { 0, 74, 0 }, { 291, 74, 201 }, // und_Merc -> xmr_Merc_SD + { 0, 73, 0 }, { 291, 73, 201 }, // und_Mero -> xmr_Mero_SD { 0, 24, 0 }, { 77, 24, 100 }, // und_Mlym -> ml_Mlym_IN { 0, 8, 0 }, { 82, 8, 44 }, // und_Mong -> mn_Mong_CN + { 0, 72, 0 }, { 290, 72, 100 }, // und_Mtei -> mni_Mtei_IN { 0, 25, 0 }, { 21, 25, 147 }, // und_Mymr -> my_Mymr_MM { 0, 0, 148 }, { 228, 7, 148 }, // und_NA -> kj_Latn_NA { 0, 0, 153 }, { 37, 7, 153 }, // und_NC -> fr_Latn_NC @@ -479,8 +519,13 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 151 }, { 30, 7, 151 }, // und_NL -> nl_Latn_NL { 0, 0, 161 }, { 85, 7, 161 }, // und_NO -> nb_Latn_NO { 0, 0, 150 }, { 84, 13, 150 }, // und_NP -> ne_Deva_NP + { 0, 75, 0 }, { 289, 75, 91 }, // und_Nkoo -> man_Nkoo_GN { 0, 0, 162 }, { 8, 1, 162 }, // und_OM -> ar_Arab_OM + { 0, 77, 0 }, { 293, 77, 104 }, // und_Ogam -> sga_Ogam_IE + { 0, 78, 0 }, { 304, 78, 100 }, // und_Olck -> sat_Olck_IN + { 0, 82, 0 }, { 296, 82, 143 }, // und_Orkh -> otk_Orkh_MN { 0, 26, 0 }, { 87, 26, 100 }, // und_Orya -> or_Orya_IN + { 0, 83, 0 }, { 110, 83, 194 }, // und_Osma -> so_Osma_SO { 0, 0, 166 }, { 111, 7, 166 }, // und_PA -> es_Latn_PA { 0, 0, 169 }, { 111, 7, 169 }, // und_PE -> es_Latn_PE { 0, 0, 77 }, { 37, 7, 77 }, // und_PF -> fr_Latn_PF @@ -492,12 +537,18 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 165 }, { 8, 1, 165 }, // und_PS -> ar_Arab_PS { 0, 0, 173 }, { 91, 7, 173 }, // und_PT -> pt_Latn_PT { 0, 0, 168 }, { 45, 7, 168 }, // und_PY -> gn_Latn_PY + { 0, 58, 0 }, { 297, 58, 102 }, // und_Phli -> pal_Phli_IR + { 0, 85, 0 }, { 299, 85, 119 }, // und_Phnx -> phn_Phnx_LB + { 0, 86, 0 }, { 282, 86, 44 }, // und_Plrd -> hmd_Plrd_CN + { 0, 59, 0 }, { 298, 59, 102 }, // und_Prti -> xpr_Prti_IR { 0, 0, 175 }, { 8, 1, 175 }, // und_QA -> ar_Arab_QA { 0, 0, 176 }, { 37, 7, 176 }, // und_RE -> fr_Latn_RE { 0, 0, 177 }, { 95, 7, 177 }, // und_RO -> ro_Latn_RO { 0, 0, 243 }, { 100, 2, 243 }, // und_RS -> sr_Cyrl_RS { 0, 0, 178 }, { 96, 2, 178 }, // und_RU -> ru_Cyrl_RU { 0, 0, 179 }, { 64, 7, 179 }, // und_RW -> rw_Latn_RW + { 0, 87, 0 }, { 301, 87, 101 }, // und_Rjng -> rej_Rjng_ID + { 0, 88, 0 }, { 294, 88, 205 }, // und_Runr -> non_Runr_SE { 0, 0, 186 }, { 8, 1, 186 }, // und_SA -> ar_Arab_SA { 0, 0, 188 }, { 37, 7, 188 }, // und_SC -> fr_Latn_SC { 0, 0, 201 }, { 8, 1, 201 }, // und_SD -> ar_Arab_SD @@ -512,7 +563,16 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 185 }, { 91, 7, 185 }, // und_ST -> pt_Latn_ST { 0, 0, 65 }, { 111, 7, 65 }, // und_SV -> es_Latn_SV { 0, 0, 207 }, { 8, 1, 207 }, // und_SY -> ar_Arab_SY + { 0, 89, 0 }, { 303, 89, 105 }, // und_Samr -> smp_Samr_IL + { 0, 81, 0 }, { 302, 81, 237 }, // und_Sarb -> xsa_Sarb_YE + { 0, 90, 0 }, { 305, 90, 100 }, // und_Saur -> saz_Saur_IN + { 0, 92, 0 }, { 31, 92, 224 }, // und_Shaw -> en_Shaw_GB + { 0, 91, 0 }, { 99, 91, 100 }, // und_Shrd -> sa_Shrd_IN { 0, 32, 0 }, { 106, 32, 198 }, // und_Sinh -> si_Sinh_LK + { 0, 93, 0 }, { 306, 93, 100 }, // und_Sora -> srb_Sora_IN + { 0, 95, 0 }, { 112, 95, 101 }, // und_Sund -> su_Sund_ID + { 0, 96, 0 }, { 307, 96, 18 }, // und_Sylo -> syl_Sylo_BD + { 0, 33, 0 }, { 151, 33, 207 }, // und_Syrc -> syr_Syrc_SY { 0, 0, 42 }, { 37, 7, 42 }, // und_TD -> fr_Latn_TD { 0, 0, 212 }, { 37, 7, 212 }, // und_TG -> fr_Latn_TG { 0, 0, 211 }, { 120, 30, 211 }, // und_TH -> th_Thai_TH @@ -524,9 +584,15 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 217 }, { 125, 7, 217 }, // und_TR -> tr_Latn_TR { 0, 0, 208 }, { 25, 6, 208 }, // und_TW -> zh_Hant_TW { 0, 0, 210 }, { 113, 7, 210 }, // und_TZ -> sw_Latn_TZ + { 0, 98, 0 }, { 308, 98, 170 }, // und_Tagb -> tbw_Tagb_PH + { 0, 101, 0 }, { 275, 101, 100 }, // und_Takr -> doi_Takr_IN + { 0, 99, 0 }, { 310, 99, 44 }, // und_Tale -> tdd_Tale_CN + { 0, 76, 0 }, { 286, 76, 44 }, // und_Talu -> khb_Talu_CN { 0, 27, 0 }, { 117, 27, 100 }, // und_Taml -> ta_Taml_IN + { 0, 100, 0 }, { 309, 100, 232 }, // und_Tavt -> blt_Tavt_VN { 0, 28, 0 }, { 119, 28, 100 }, // und_Telu -> te_Telu_IN { 0, 9, 0 }, { 183, 9, 216 }, // und_Tfng -> shi_Tfng_TN + { 0, 97, 0 }, { 166, 97, 170 }, // und_Tglg -> fil_Tglg_PH { 0, 29, 0 }, { 143, 29, 131 }, // und_Thaa -> dv_Thaa_MV { 0, 30, 0 }, { 120, 30, 211 }, // und_Thai -> th_Thai_TH { 0, 31, 0 }, { 121, 31, 44 }, // und_Tibt -> bo_Tibt_CN @@ -534,6 +600,7 @@ static const QLocaleId likely_subtags[] = { { 0, 0, 221 }, { 113, 7, 221 }, // und_UG -> sw_Latn_UG { 0, 0, 227 }, { 111, 7, 227 }, // und_UY -> es_Latn_UY { 0, 0, 228 }, { 131, 2, 228 }, // und_UZ -> uz_Cyrl_UZ + { 0, 102, 0 }, { 311, 102, 207 }, // und_Ugar -> uga_Ugar_SY { 0, 0, 230 }, { 70, 7, 230 }, // und_VA -> la_Latn_VA { 0, 0, 231 }, { 111, 7, 231 }, // und_VE -> es_Latn_VE { 0, 0, 232 }, { 132, 7, 232 }, // und_VN -> vi_Latn_VN @@ -541,6 +608,8 @@ static const QLocaleId likely_subtags[] = { { 0, 35, 0 }, { 252, 35, 121 }, // und_Vaii -> vai_Vaii_LR { 0, 0, 235 }, { 37, 7, 235 }, // und_WF -> fr_Latn_WF { 0, 0, 183 }, { 97, 7, 183 }, // und_WS -> sm_Latn_WS + { 0, 80, 0 }, { 295, 80, 102 }, // und_Xpeo -> peo_Xpeo_IR + { 0, 94, 0 }, { 262, 94, 103 }, // und_Xsux -> akk_Xsux_IQ { 0, 0, 237 }, { 8, 1, 237 }, // und_YE -> ar_Arab_YE { 0, 0, 138 }, { 37, 7, 138 }, // und_YT -> fr_Latn_YT { 0, 34, 0 }, { 168, 34, 44 }, // und_Yiii -> ii_Yiii_CN @@ -563,6 +632,7 @@ static const QLocaleId likely_subtags[] = { { 139, 0, 0 }, { 139, 7, 44 }, // za -> za_Latn_CN { 25, 0, 0 }, { 25, 5, 44 }, // zh -> zh_Hans_CN { 25, 0, 97 }, { 25, 6, 97 }, // zh_HK -> zh_Hant_HK + { 25, 54, 0 }, { 25, 5, 44 }, // zh_Hani -> zh_Hans_CN { 25, 6, 0 }, { 25, 6, 208 }, // zh_Hant -> zh_Hant_TW { 25, 0, 126 }, { 25, 6, 126 }, // zh_MO -> zh_Hant_MO { 25, 0, 208 }, { 25, 6, 208 }, // zh_TW -> zh_Hant_TW @@ -698,7 +768,7 @@ static const quint16 locale_index[] = { 332, // Turkish 0, // Turkmen 0, // Tahitian - 0, // Uigur + 0, // Uighur 334, // Ukrainian 335, // Urdu 337, // Uzbek @@ -831,6 +901,57 @@ static const quint16 locale_index[] = { 435, // Kako 436, // Meta 437, // Ngiemboon + 0, // Aragonese + 0, // Akkadian + 0, // AncientEgyptian + 0, // AncientGreek + 0, // Aramaic + 0, // Balinese + 0, // Bamun + 0, // BatakToba + 0, // Buginese + 0, // Buhid + 0, // Carian + 0, // Chakma + 0, // ClassicalMandaic + 0, // Coptic + 0, // Dogri + 0, // EasternCham + 0, // EasternKayah + 0, // Etruscan + 0, // Gothic + 0, // Hanunoo + 0, // Ingush + 0, // LargeFloweryMiao + 0, // Lepcha + 0, // Limbu + 0, // Lisu + 0, // Lu + 0, // Lycian + 0, // Lydian + 0, // Mandingo + 0, // Manipuri + 0, // Meroitic + 0, // NorthernThai + 0, // OldIrish + 0, // OldNorse + 0, // OldPersian + 0, // OldTurkish + 0, // Pahlavi + 0, // Parthian + 0, // Phoenician + 0, // PrakritLanguage + 0, // Rejang + 0, // Sabaean + 0, // Samaritan + 0, // Santali + 0, // Saurashtra + 0, // Sora + 0, // Sylheti + 0, // Tagbanwa + 0, // TaiDam + 0, // TaiNua + 0, // Ugaritic 0 // trailing 0 }; @@ -5275,7 +5396,7 @@ static const char language_name_list[] = "Turkish\0" "Turkmen\0" "Tahitian\0" -"Uigur\0" +"Uighur\0" "Ukrainian\0" "Urdu\0" "Uzbek\0" @@ -5408,6 +5529,57 @@ static const char language_name_list[] = "Kako\0" "Meta\0" "Ngiemboon\0" +"Aragonese\0" +"Akkadian\0" +"AncientEgyptian\0" +"AncientGreek\0" +"Aramaic\0" +"Balinese\0" +"Bamun\0" +"BatakToba\0" +"Buginese\0" +"Buhid\0" +"Carian\0" +"Chakma\0" +"ClassicalMandaic\0" +"Coptic\0" +"Dogri\0" +"EasternCham\0" +"EasternKayah\0" +"Etruscan\0" +"Gothic\0" +"Hanunoo\0" +"Ingush\0" +"LargeFloweryMiao\0" +"Lepcha\0" +"Limbu\0" +"Lisu\0" +"Lu\0" +"Lycian\0" +"Lydian\0" +"Mandingo\0" +"Manipuri\0" +"Meroitic\0" +"NorthernThai\0" +"OldIrish\0" +"OldNorse\0" +"OldPersian\0" +"OldTurkish\0" +"Pahlavi\0" +"Parthian\0" +"Phoenician\0" +"PrakritLanguage\0" +"Rejang\0" +"Sabaean\0" +"Samaritan\0" +"Santali\0" +"Saurashtra\0" +"Sora\0" +"Sylheti\0" +"Tagbanwa\0" +"TaiDam\0" +"TaiNua\0" +"Ugaritic\0" ; static const quint16 language_name_index[] = { @@ -5539,139 +5711,190 @@ static const quint16 language_name_index[] = { 1023, // Turkish 1031, // Turkmen 1039, // Tahitian - 1048, // Uigur - 1054, // Ukrainian - 1064, // Urdu - 1069, // Uzbek - 1075, // Vietnamese - 1086, // Volapuk - 1094, // Welsh - 1100, // Wolof - 1106, // Xhosa - 1112, // Yiddish - 1120, // Yoruba - 1127, // Zhuang - 1134, // Zulu - 1139, // NorwegianNynorsk - 1156, // Bosnian - 1164, // Divehi - 1171, // Manx - 1176, // Cornish - 1184, // Akan - 1189, // Konkani - 1197, // Ga - 1200, // Igbo - 1205, // Kamba - 1211, // Syriac - 1218, // Blin - 1223, // Geez - 1228, // Koro - 1233, // Sidamo - 1240, // Atsam - 1246, // Tigre - 1252, // Jju - 1256, // Friulian - 1265, // Venda - 1271, // Ewe - 1275, // Walamo - 1282, // Hawaiian - 1291, // Tyap - 1296, // Nyanja - 1303, // Filipino - 1312, // Swiss German - 1325, // Sichuan Yi - 1336, // Kpelle - 1343, // Low German - 1354, // South Ndebele - 1368, // Northern Sotho - 1383, // Northern Sami - 1397, // Taroko - 1404, // Gusii - 1410, // Taita - 1416, // Fulah - 1422, // Kikuyu - 1429, // Samburu - 1437, // Sena - 1442, // North Ndebele - 1456, // Rombo - 1462, // Tachelhit - 1472, // Kabyle - 1479, // Nyankole - 1488, // Bena - 1493, // Vunjo - 1499, // Bambara - 1507, // Embu - 1512, // Cherokee - 1521, // Morisyen - 1530, // Makonde - 1538, // Langi - 1544, // Ganda - 1550, // Bemba - 1556, // Kabuverdianu - 1569, // Meru - 1574, // Kalenjin - 1583, // Nama - 1588, // Machame - 1596, // Colognian - 1606, // Masai - 1612, // Soga - 1617, // Luyia - 1623, // Asu - 1627, // Teso - 1632, // Saho - 1637, // Koyra Chiini - 1650, // Rwa - 1654, // Luo - 1658, // Chiga - 1664, // Central Morocco Tamazight - 1690, // Koyraboro Senni - 1706, // Shambala - 1715, // Bodo - 1720, // Avaric - 1727, // Chamorro - 1736, // Chechen - 1744, // Church - 1751, // Chuvash - 1759, // Cree - 1764, // Haitian - 1772, // Herero - 1779, // Hiri Motu - 1789, // Kanuri - 1796, // Komi - 1801, // Kongo - 1807, // Kwanyama - 1816, // Limburgish - 1827, // LubaKatanga - 1839, // Luxembourgish - 1853, // Navaho - 1860, // Ndonga - 1867, // Ojibwa - 1874, // Pali - 1879, // Walloon - 1887, // Aghem - 1893, // Basaa - 1899, // Zarma - 1905, // Duala - 1911, // JolaFonyi - 1921, // Ewondo - 1928, // Bafia - 1934, // MakhuwaMeetto - 1948, // Mundang - 1956, // Kwasio - 1963, // Nuer - 1968, // Sakha - 1974, // Sangu - 1980, // Congo Swahili - 1994, // Tasawaq - 2002, // Vai - 2006, // Walser - 2013, // Yangben - 2021, // Avestan - 2029, // Asturian - 2038, // Ngomba - 2045, // Kako - 2050, // Meta - 2055, // Ngiemboon + 1048, // Uighur + 1055, // Ukrainian + 1065, // Urdu + 1070, // Uzbek + 1076, // Vietnamese + 1087, // Volapuk + 1095, // Welsh + 1101, // Wolof + 1107, // Xhosa + 1113, // Yiddish + 1121, // Yoruba + 1128, // Zhuang + 1135, // Zulu + 1140, // NorwegianNynorsk + 1157, // Bosnian + 1165, // Divehi + 1172, // Manx + 1177, // Cornish + 1185, // Akan + 1190, // Konkani + 1198, // Ga + 1201, // Igbo + 1206, // Kamba + 1212, // Syriac + 1219, // Blin + 1224, // Geez + 1229, // Koro + 1234, // Sidamo + 1241, // Atsam + 1247, // Tigre + 1253, // Jju + 1257, // Friulian + 1266, // Venda + 1272, // Ewe + 1276, // Walamo + 1283, // Hawaiian + 1292, // Tyap + 1297, // Nyanja + 1304, // Filipino + 1313, // Swiss German + 1326, // Sichuan Yi + 1337, // Kpelle + 1344, // Low German + 1355, // South Ndebele + 1369, // Northern Sotho + 1384, // Northern Sami + 1398, // Taroko + 1405, // Gusii + 1411, // Taita + 1417, // Fulah + 1423, // Kikuyu + 1430, // Samburu + 1438, // Sena + 1443, // North Ndebele + 1457, // Rombo + 1463, // Tachelhit + 1473, // Kabyle + 1480, // Nyankole + 1489, // Bena + 1494, // Vunjo + 1500, // Bambara + 1508, // Embu + 1513, // Cherokee + 1522, // Morisyen + 1531, // Makonde + 1539, // Langi + 1545, // Ganda + 1551, // Bemba + 1557, // Kabuverdianu + 1570, // Meru + 1575, // Kalenjin + 1584, // Nama + 1589, // Machame + 1597, // Colognian + 1607, // Masai + 1613, // Soga + 1618, // Luyia + 1624, // Asu + 1628, // Teso + 1633, // Saho + 1638, // Koyra Chiini + 1651, // Rwa + 1655, // Luo + 1659, // Chiga + 1665, // Central Morocco Tamazight + 1691, // Koyraboro Senni + 1707, // Shambala + 1716, // Bodo + 1721, // Avaric + 1728, // Chamorro + 1737, // Chechen + 1745, // Church + 1752, // Chuvash + 1760, // Cree + 1765, // Haitian + 1773, // Herero + 1780, // Hiri Motu + 1790, // Kanuri + 1797, // Komi + 1802, // Kongo + 1808, // Kwanyama + 1817, // Limburgish + 1828, // LubaKatanga + 1840, // Luxembourgish + 1854, // Navaho + 1861, // Ndonga + 1868, // Ojibwa + 1875, // Pali + 1880, // Walloon + 1888, // Aghem + 1894, // Basaa + 1900, // Zarma + 1906, // Duala + 1912, // JolaFonyi + 1922, // Ewondo + 1929, // Bafia + 1935, // MakhuwaMeetto + 1949, // Mundang + 1957, // Kwasio + 1964, // Nuer + 1969, // Sakha + 1975, // Sangu + 1981, // Congo Swahili + 1995, // Tasawaq + 2003, // Vai + 2007, // Walser + 2014, // Yangben + 2022, // Avestan + 2030, // Asturian + 2039, // Ngomba + 2046, // Kako + 2051, // Meta + 2056, // Ngiemboon + 2066, // Aragonese + 2076, // Akkadian + 2085, // AncientEgyptian + 2101, // AncientGreek + 2114, // Aramaic + 2122, // Balinese + 2131, // Bamun + 2137, // BatakToba + 2147, // Buginese + 2156, // Buhid + 2162, // Carian + 2169, // Chakma + 2176, // ClassicalMandaic + 2193, // Coptic + 2200, // Dogri + 2206, // EasternCham + 2218, // EasternKayah + 2231, // Etruscan + 2240, // Gothic + 2247, // Hanunoo + 2255, // Ingush + 2262, // LargeFloweryMiao + 2279, // Lepcha + 2286, // Limbu + 2292, // Lisu + 2297, // Lu + 2300, // Lycian + 2307, // Lydian + 2314, // Mandingo + 2323, // Manipuri + 2332, // Meroitic + 2341, // NorthernThai + 2354, // OldIrish + 2363, // OldNorse + 2372, // OldPersian + 2383, // OldTurkish + 2394, // Pahlavi + 2402, // Parthian + 2411, // Phoenician + 2422, // PrakritLanguage + 2438, // Rejang + 2445, // Sabaean + 2453, // Samaritan + 2463, // Santali + 2471, // Saurashtra + 2482, // Sora + 2487, // Sylheti + 2495, // Tagbanwa + 2504, // TaiDam + 2511, // TaiNua + 2518, // Ugaritic }; static const char script_name_list[] = @@ -5711,6 +5934,73 @@ static const char script_name_list[] = "Syriac\0" "Yi\0" "Vai\0" +"Avestan\0" +"Balinese\0" +"Bamum\0" +"Batak\0" +"Bopomofo\0" +"Brahmi\0" +"Buginese\0" +"Buhid\0" +"CanadianAboriginal\0" +"Carian\0" +"Chakma\0" +"Cham\0" +"Coptic\0" +"Cypriot\0" +"Egyptian Hieroglyphs\0" +"Fraser\0" +"Glagolitic\0" +"Gothic\0" +"Han\0" +"Hangul\0" +"Hanunoo\0" +"Imperial Aramaic\0" +"Inscriptional Pahlavi\0" +"Inscriptional Parthian\0" +"Javanese\0" +"Kaithi\0" +"Katakana\0" +"Kayah Li\0" +"Kharoshthi\0" +"Lanna\0" +"Lepcha\0" +"Limbu\0" +"Linear B\0" +"Lycian\0" +"Lydian\0" +"Mandaean\0" +"Meitei Mayek\0" +"Meroitic\0" +"Meroitic Cursive\0" +"Nko\0" +"New Tai Lue\0" +"Ogham\0" +"Ol Chiki\0" +"Old Italic\0" +"Old Persian\0" +"Old South Arabian\0" +"Orkhon\0" +"Osmanya\0" +"Phags Pa\0" +"Phoenician\0" +"Pollard Phonetic\0" +"Rejang\0" +"Runic\0" +"Samaritan\0" +"Saurashtra\0" +"Sharada\0" +"Shavian\0" +"Sora Sompeng\0" +"Cuneiform\0" +"Sundanese\0" +"Syloti Nagri\0" +"Tagalog\0" +"Tagbanwa\0" +"Tai Le\0" +"Tai Viet\0" +"Takri\0" +"Ugaritic\0" ; static const quint16 script_name_index[] = { @@ -5750,6 +6040,73 @@ static const quint16 script_name_index[] = { 273, // Syriac 280, // Yi 283, // Vai + 287, // Avestan + 295, // Balinese + 304, // Bamum + 310, // Batak + 316, // Bopomofo + 325, // Brahmi + 332, // Buginese + 341, // Buhid + 347, // CanadianAboriginal + 366, // Carian + 373, // Chakma + 380, // Cham + 385, // Coptic + 392, // Cypriot + 400, // Egyptian Hieroglyphs + 421, // Fraser + 428, // Glagolitic + 439, // Gothic + 446, // Han + 450, // Hangul + 457, // Hanunoo + 465, // Imperial Aramaic + 482, // Inscriptional Pahlavi + 504, // Inscriptional Parthian + 527, // Javanese + 536, // Kaithi + 543, // Katakana + 552, // Kayah Li + 561, // Kharoshthi + 572, // Lanna + 578, // Lepcha + 585, // Limbu + 591, // Linear B + 600, // Lycian + 607, // Lydian + 614, // Mandaean + 623, // Meitei Mayek + 636, // Meroitic + 645, // Meroitic Cursive + 662, // Nko + 666, // New Tai Lue + 678, // Ogham + 684, // Ol Chiki + 693, // Old Italic + 704, // Old Persian + 716, // Old South Arabian + 734, // Orkhon + 741, // Osmanya + 749, // Phags Pa + 758, // Phoenician + 769, // Pollard Phonetic + 786, // Rejang + 793, // Runic + 799, // Samaritan + 809, // Saurashtra + 820, // Sharada + 828, // Shavian + 836, // Sora Sompeng + 849, // Cuneiform + 859, // Sundanese + 869, // Syloti Nagri + 882, // Tagalog + 890, // Tagbanwa + 899, // Tai Le + 906, // Tai Viet + 915, // Takri + 921, // Ugaritic }; static const char country_name_list[] = @@ -6401,7 +6758,7 @@ static const unsigned char language_code_list[] = "tr\0" // Turkish "tk\0" // Turkmen "ty\0" // Tahitian -"ug\0" // Uigur +"ug\0" // Uighur "uk\0" // Ukrainian "ur\0" // Urdu "uz\0" // Uzbek @@ -6534,6 +6891,57 @@ static const unsigned char language_code_list[] = "kkj" // Kako "mgo" // Meta "nnh" // Ngiemboon +"an\0" // Aragonese +"akk" // Akkadian +"egy" // AncientEgyptian +"grc" // AncientGreek +"arc" // Aramaic +"ban" // Balinese +"bax" // Bamun +"bbc" // BatakToba +"bug" // Buginese +"bku" // Buhid +"xcr" // Carian +"ccp" // Chakma +"myz" // ClassicalMandaic +"cop" // Coptic +"doi" // Dogri +"cjm" // EasternCham +"eky" // EasternKayah +"ett" // Etruscan +"got" // Gothic +"hnn" // Hanunoo +"inh" // Ingush +"hmd" // LargeFloweryMiao +"lep" // Lepcha +"lif" // Limbu +"lis" // Lisu +"khb" // Lu +"xlc" // Lycian +"xld" // Lydian +"man" // Mandingo +"mni" // Manipuri +"xmr" // Meroitic +"nod" // NorthernThai +"sga" // OldIrish +"non" // OldNorse +"peo" // OldPersian +"otk" // OldTurkish +"pal" // Pahlavi +"xpr" // Parthian +"phn" // Phoenician +"pra" // PrakritLanguage +"rej" // Rejang +"xsa" // Sabaean +"smp" // Samaritan +"sat" // Santali +"saz" // Saurashtra +"srb" // Sora +"syl" // Sylheti +"tbw" // Tagbanwa +"blt" // TaiDam +"tdd" // TaiNua +"uga" // Ugaritic ; static const unsigned char script_code_list[] = @@ -6570,9 +6978,76 @@ static const unsigned char script_code_list[] = "Thai" // Thai "Tibt" // Tibetan "Sinh" // Sinhala -"Syri" // Syriac +"Syrc" // Syriac "Yiii" // Yi "Vaii" // Vai +"Avst" // Avestan +"Bali" // Balinese +"Bamu" // Bamum +"Batk" // Batak +"Bopo" // Bopomofo +"Brah" // Brahmi +"Bugi" // Buginese +"Buhd" // Buhid +"Cans" // CanadianAboriginal +"Cari" // Carian +"Cakm" // Chakma +"Cham" // Cham +"Copt" // Coptic +"Cprt" // Cypriot +"Egyp" // Egyptian Hieroglyphs +"Lisu" // Fraser +"Glag" // Glagolitic +"Goth" // Gothic +"Hani" // Han +"Hang" // Hangul +"Hano" // Hanunoo +"Armi" // Imperial Aramaic +"Phli" // Inscriptional Pahlavi +"Prti" // Inscriptional Parthian +"Java" // Javanese +"Kthi" // Kaithi +"Kana" // Katakana +"Kali" // Kayah Li +"Khar" // Kharoshthi +"Lana" // Lanna +"Lepc" // Lepcha +"Limb" // Limbu +"Linb" // Linear B +"Lyci" // Lycian +"Lydi" // Lydian +"Mand" // Mandaean +"Mtei" // Meitei Mayek +"Mero" // Meroitic +"Merc" // Meroitic Cursive +"Nkoo" // Nko +"Talu" // New Tai Lue +"Ogam" // Ogham +"Olck" // Ol Chiki +"Ital" // Old Italic +"Xpeo" // Old Persian +"Sarb" // Old South Arabian +"Orkh" // Orkhon +"Osma" // Osmanya +"Phag" // Phags Pa +"Phnx" // Phoenician +"Plrd" // Pollard Phonetic +"Rjng" // Rejang +"Runr" // Runic +"Samr" // Samaritan +"Saur" // Saurashtra +"Shrd" // Sharada +"Shaw" // Shavian +"Sora" // Sora Sompeng +"Xsux" // Cuneiform +"Sund" // Sundanese +"Sylo" // Syloti Nagri +"Tglg" // Tagalog +"Tagb" // Tagbanwa +"Tale" // Tai Le +"Tavt" // Tai Viet +"Takr" // Takri +"Ugar" // Ugaritic ; static const unsigned char country_code_list[] = "ZZ\0" // AnyCountry diff --git a/src/corelib/tools/qlocale_mac.mm b/src/corelib/tools/qlocale_mac.mm index 0c35860b56..8594cfd40d 100644 --- a/src/corelib/tools/qlocale_mac.mm +++ b/src/corelib/tools/qlocale_mac.mm @@ -345,7 +345,6 @@ static QString macFormatCurrency(const QSystemLocale::CurrencyToStringArgument & static QVariant macQuoteString(QSystemLocale::QueryType type, const QStringRef &str) { -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 if (QSysInfo::MacintoshVersion < QSysInfo::MV_10_6) return QVariant(); @@ -363,7 +362,6 @@ static QVariant macQuoteString(QSystemLocale::QueryType type, const QStringRef & default: break; } -#endif return QVariant(); } #endif //QT_NO_SYSTEMLOCALE diff --git a/src/corelib/tools/qlocale_p.h b/src/corelib/tools/qlocale_p.h index 3746cd56e6..3c3d7c7054 100644 --- a/src/corelib/tools/qlocale_p.h +++ b/src/corelib/tools/qlocale_p.h @@ -311,13 +311,17 @@ public: qint64 stringToLongLong(const QString &num, int base, bool *ok, GroupSeparatorMode group_sep_mode) const; quint64 stringToUnsLongLong(const QString &num, int base, bool *ok, GroupSeparatorMode group_sep_mode) const; + double stringToDouble(const QStringRef &num, bool *ok, GroupSeparatorMode group_sep_mode) const; + qint64 stringToLongLong(const QStringRef &num, int base, bool *ok, GroupSeparatorMode group_sep_mode) const; + quint64 stringToUnsLongLong(const QStringRef &num, int base, bool *ok, GroupSeparatorMode group_sep_mode) const; + static double bytearrayToDouble(const char *num, bool *ok, bool *overflow = 0); static qint64 bytearrayToLongLong(const char *num, int base, bool *ok, bool *overflow = 0); static quint64 bytearrayToUnsLongLong(const char *num, int base, bool *ok); typedef QVarLengthArray<char, 256> CharBuff; - bool numberToCLocale(const QString &num, + bool numberToCLocale(const QChar *str, int len, GroupSeparatorMode group_sep_mode, CharBuff *result) const; inline char digitToCLocale(QChar c) const; diff --git a/src/corelib/tools/qmap.cpp b/src/corelib/tools/qmap.cpp index 75104e4825..a4c28b5bd4 100644 --- a/src/corelib/tools/qmap.cpp +++ b/src/corelib/tools/qmap.cpp @@ -538,6 +538,16 @@ void QMapDataBase::freeData(QMapDataBase *d) \sa toStdMap() */ +/*! \fn QMap::QMap(std::initializer_list<std::pair<Key,T> > list) + \since 5.1 + + Constructs a map with a copy of each of the elements in the + initializer list \a list. + + This function is only available if the program is being + compiled in C++11 mode. +*/ + /*! \fn std::map<Key, T> QMap::toStdMap() const Returns an STL map equivalent to this QMap. @@ -1576,6 +1586,16 @@ void QMapDataBase::freeData(QMapDataBase *d) Constructs an empty map. */ +/*! \fn QMultiMap::QMultiMap(std::initializer_list<std::pair<Key,T> > list) + \since 5.1 + + Constructs a multi map with a copy of each of the elements in the + initializer list \a list. + + This function is only available if the program is being + compiled in C++11 mode. +*/ + /*! \fn QMultiMap::QMultiMap(const QMap<Key, T> &other) Constructs a copy of \a other (which can be a QMap or a diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h index b0ec6fb3c6..280696c534 100644 --- a/src/corelib/tools/qmap.h +++ b/src/corelib/tools/qmap.h @@ -54,7 +54,9 @@ #include <map> #include <new> -QT_BEGIN_HEADER +#ifdef Q_COMPILER_INITIALIZER_LISTS +#include <initializer_list> +#endif QT_BEGIN_NAMESPACE @@ -327,6 +329,14 @@ class QMap public: inline QMap() : d(static_cast<QMapData<Key, T> *>(const_cast<QMapDataBase *>(&QMapDataBase::shared_null))) { } +#ifdef Q_COMPILER_INITIALIZER_LISTS + inline QMap(std::initializer_list<std::pair<Key,T> > list) + : d(static_cast<QMapData<Key, T> *>(const_cast<QMapDataBase *>(&QMapDataBase::shared_null))) + { + for (typename std::initializer_list<std::pair<Key,T> >::const_iterator it = list.begin(); it != list.end(); ++it) + insert(it->first, it->second); + } +#endif QMap(const QMap<Key, T> &other); inline ~QMap() { if (!d->ref.deref()) d->destroy(); } @@ -960,6 +970,13 @@ class QMultiMap : public QMap<Key, T> { public: QMultiMap() {} +#ifdef Q_COMPILER_INITIALIZER_LISTS + inline QMultiMap(std::initializer_list<std::pair<Key,T> > list) + { + for (typename std::initializer_list<std::pair<Key,T> >::const_iterator it = list.begin(); it != list.end(); ++it) + insert(it->first, it->second); + } +#endif QMultiMap(const QMap<Key, T> &other) : QMap<Key, T>(other) {} inline void swap(QMultiMap<Key, T> &other) { QMap<Key, T>::swap(other); } @@ -1072,6 +1089,4 @@ Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR(Map) QT_END_NAMESPACE -QT_END_HEADER - #endif // QMAP_H diff --git a/src/corelib/tools/qmargins.cpp b/src/corelib/tools/qmargins.cpp index 7b9d68707e..6e7b541110 100644 --- a/src/corelib/tools/qmargins.cpp +++ b/src/corelib/tools/qmargins.cpp @@ -157,6 +157,240 @@ QT_BEGIN_NAMESPACE Returns true if \a m1 and \a m2 are different; otherwise returns false. */ +/*! + \fn QRect operator+(const QRect &rectangle, const QMargins &margins) + \relates QRect + + Returns the \a rectangle grown by the \a margins. + + \since 5.1 +*/ + +/*! + \fn QRect operator+(const QMargins &margins, const QRect &rectangle) + \relates QRect + \overload + + Returns the \a rectangle grown by the \a margins. + + \since 5.1 +*/ + +/*! + \fn QRect QRect::marginsAdded(const QMargins &margins) const + + Returns a rectangle grown by the \a margins. + + \sa operator+=(), marginsRemoved(), operator-=() + + \since 5.1 +*/ + +/*! + \fn QRect QRect::operator+=(const QMargins &margins) const + + Adds the \a margins to the rectangle, growing it. + + \sa marginsAdded(), marginsRemoved(), operator-=() + + \since 5.1 +*/ + +/*! + \fn QRect QRect::marginsRemoved(const QMargins &margins) const + + Removes the \a margins from the rectangle, shrinking it. + + \sa marginsAdded(), operator+=(), operator-=() + + \since 5.1 +*/ + +/*! + \fn QRect QRect::operator -=(const QMargins &margins) const + + Returns a rectangle shrunk by the \a margins. + + \sa marginsRemoved(), operator+=(), marginsAdded() + + \since 5.1 +*/ + +/*! + \fn const QMargins operator+(const QMargins &m1, const QMargins &m2) + \relates QMargins + + Returns a QMargins object that is the sum of the given margins, \a m1 + and \a m2; each component is added separately. + + \sa QMargins::operator+=(), QMargins::operator-=() + + \since 5.1 +*/ + +/*! + \fn const QMargins operator-(const QMargins &m1, const QMargins &m2) + \relates QMargins + + Returns a QMargins object that is formed by subtracting \a m2 from + \a m1; each component is subtracted separately. + + \sa QMargins::operator+=(), QMargins::operator-=() + + \since 5.1 +*/ + +/*! + \fn const QMargins operator*(const QMargins &margins, int factor) + \relates QMargins + + Returns a QMargins object that is formed by multiplying each component + of the given \a margins by \a factor. + + \sa QMargins::operator*=(), QMargins::operator/=() + + \since 5.1 +*/ + +/*! + \fn const QMargins operator*(int factor, const QMargins &margins) + \relates QMargins + \overload + + Returns a QMargins object that is formed by multiplying each component + of the given \a margins by \a factor. + + \sa QMargins::operator*=(), QMargins::operator/=() + + \since 5.1 +*/ + +/*! + \fn const QMargins operator*(const QMargins &margins, qreal factor) + \relates QMargins + \overload + + Returns a QMargins object that is formed by multiplying each component + of the given \a margins by \a factor. + + \sa QMargins::operator*=(), QMargins::operator/=() + + \since 5.1 +*/ + +/*! + \fn const QMargins operator*(qreal factor, const QMargins &margins) + \relates QMargins + \overload + + Returns a QMargins object that is formed by multiplying each component + of the given \a margins by \a factor. + + \sa QMargins::operator*=(), QMargins::operator/=() + + \since 5.1 +*/ + +/*! + \fn const QMargins operator/(const QMargins &margins, int divisor) + \relates QMargins + + Returns a QMargins object that is formed by dividing the components of + the given \a margins by the given \a divisor. + + \sa QMargins::operator*=(), QMargins::operator/=() + + \since 5.1 +*/ + +/*! + \fn const QMargins operator/(const QMargins &, qreal) + \relates QMargins + \overload + + Returns a QMargins object that is formed by dividing the components of + the given \a margins by the given \a divisor. + + \sa QMargins::operator*=(), QMargins::operator/=() + + \since 5.1 +*/ + +/*! + \fn QMargins operator-(const QMargins &margins) + \relates QMargins + + Returns a QMargin object that is formed by negating all components of \a margins. + + \since 5.1 +*/ + +/*! + \fn QMargins &operator+=(const QMargins &margins) + + Add each component of \a margins to the respective component of this object + and returns a reference to it. + + \sa operator-=() + + \since 5.1 +*/ + +/*! + \fn QMargins &operator-=(const QMargins &margins) + + Subtract each component of \a margins from the respective component of this object + and returns a reference to it. + + \sa operator+=() + + \since 5.1 +*/ + +/*! + \fn QMargins &operator*=(int factor) + + Multiplies each component of this object by \a factor + and returns a reference to it. + + \sa operator/=() + + \since 5.1 +*/ + +/*! + \fn QMargins &operator*=(qreal factor) + \overload + + Multiplies each component of this object by \a factor + and returns a reference to it. + + \sa operator/=() + + \since 5.1 +*/ + +/*! + \fn QMargins &operator/=(int divisor) + + Divides each component of this object by \a divisor + and returns a reference to it. + + \sa operator*=() + + \since 5.1 +*/ + +/*! + \fn QMargins &operator/=(qreal divisor) + + \overload + + \sa operator*=() + + \since 5.1 +*/ + /***************************************************************************** QMargins stream functions *****************************************************************************/ diff --git a/src/corelib/tools/qmargins.h b/src/corelib/tools/qmargins.h index d927cb5aa1..0d68be961e 100644 --- a/src/corelib/tools/qmargins.h +++ b/src/corelib/tools/qmargins.h @@ -42,9 +42,7 @@ #ifndef QMARGINS_H #define QMARGINS_H -#include <QtCore/qnamespace.h> - -QT_BEGIN_HEADER +#include <QtCore/qrect.h> QT_BEGIN_NAMESPACE @@ -67,6 +65,15 @@ public: void setRight(int right); void setBottom(int bottom); + QMargins &operator+=(const QMargins &margins); + QMargins &operator-=(const QMargins &margins); + QMargins &operator+=(int); + QMargins &operator-=(int); + QMargins &operator*=(int); + QMargins &operator/=(int); + QMargins &operator*=(qreal); + QMargins &operator/=(qreal); + private: int m_left; int m_top; @@ -142,12 +149,128 @@ Q_DECL_CONSTEXPR inline bool operator!=(const QMargins &m1, const QMargins &m2) m1.m_bottom != m2.m_bottom; } +Q_DECL_CONSTEXPR inline QRect operator+(const QRect &rectangle, const QMargins &margins) +{ + return QRect(QPoint(rectangle.left() - margins.left(), rectangle.top() - margins.top()), + QPoint(rectangle.right() + margins.right(), rectangle.bottom() + margins.bottom())); +} + +Q_DECL_CONSTEXPR inline QRect operator+(const QMargins &margins, const QRect &rectangle) +{ + return QRect(QPoint(rectangle.left() - margins.left(), rectangle.top() - margins.top()), + QPoint(rectangle.right() + margins.right(), rectangle.bottom() + margins.bottom())); +} + +inline QRect QRect::marginsAdded(const QMargins &margins) const +{ + return *this + margins; +} + +inline QRect QRect::marginsRemoved(const QMargins &margins) const +{ + return QRect(QPoint(x1 + margins.left(), y1 + margins.top()), + QPoint(x2 - margins.right(), y2 - margins.bottom())); +} + +inline QRect &QRect::operator+=(const QMargins &margins) +{ + *this = marginsAdded(margins); + return *this; +} + +inline QRect &QRect::operator-=(const QMargins &margins) +{ + *this = marginsRemoved(margins); + return *this; +} + +Q_DECL_CONSTEXPR inline QMargins operator+(const QMargins &m1, const QMargins &m2) +{ + return QMargins(m1.left() + m2.left(), m1.top() + m2.top(), + m1.right() + m2.right(), m1.bottom() + m2.bottom()); +} + +Q_DECL_CONSTEXPR inline QMargins operator-(const QMargins &m1, const QMargins &m2) +{ + return QMargins(m1.left() - m2.left(), m1.top() - m2.top(), + m1.right() - m2.right(), m1.bottom() - m2.bottom()); +} + +Q_DECL_CONSTEXPR inline QMargins operator*(const QMargins &margins, int factor) +{ + return QMargins(margins.left() * factor, margins.top() * factor, + margins.right() * factor, margins.bottom() * factor); +} + +Q_DECL_CONSTEXPR inline QMargins operator*(int factor, const QMargins &margins) +{ + return QMargins(margins.left() * factor, margins.top() * factor, + margins.right() * factor, margins.bottom() * factor); +} + +Q_DECL_CONSTEXPR inline QMargins operator*(const QMargins &margins, qreal factor) +{ + return QMargins(qRound(margins.left() * factor), qRound(margins.top() * factor), + qRound(margins.right() * factor), qRound(margins.bottom() * factor)); +} + +Q_DECL_CONSTEXPR inline QMargins operator*(qreal factor, const QMargins &margins) +{ + return QMargins(qRound(margins.left() * factor), qRound(margins.top() * factor), + qRound(margins.right() * factor), qRound(margins.bottom() * factor)); +} + +Q_DECL_CONSTEXPR inline QMargins operator/(const QMargins &margins, int divisor) +{ + return QMargins(margins.left() / divisor, margins.top() / divisor, + margins.right() / divisor, margins.bottom() / divisor); +} + +Q_DECL_CONSTEXPR inline QMargins operator/(const QMargins &margins, qreal divisor) +{ + return QMargins(qRound(margins.left() / divisor), qRound(margins.top() / divisor), + qRound(margins.right() / divisor), qRound(margins.bottom() / divisor)); +} + +inline QMargins &QMargins::operator+=(const QMargins &margins) +{ + return *this = *this + margins; +} + +inline QMargins &QMargins::operator-=(const QMargins &margins) +{ + return *this = *this - margins; +} + +inline QMargins &QMargins::operator*=(int factor) +{ + return *this = *this * factor; +} + +inline QMargins &QMargins::operator/=(int divisor) +{ + return *this = *this / divisor; +} + +inline QMargins &QMargins::operator*=(qreal factor) +{ + return *this = *this * factor; +} + +inline QMargins &QMargins::operator/=(qreal divisor) +{ + return *this = *this / divisor; +} + +Q_DECL_CONSTEXPR inline QMargins operator-(const QMargins &margins) +{ + return QMargins(-margins.left(), -margins.top(), -margins.right(), -margins.bottom()); +} + #ifndef QT_NO_DEBUG_STREAM Q_CORE_EXPORT QDebug operator<<(QDebug, const QMargins &); #endif QT_END_NAMESPACE -QT_END_HEADER - #endif // QMARGINS_H diff --git a/src/corelib/tools/qmessageauthenticationcode.cpp b/src/corelib/tools/qmessageauthenticationcode.cpp new file mode 100644 index 0000000000..becaaaa704 --- /dev/null +++ b/src/corelib/tools/qmessageauthenticationcode.cpp @@ -0,0 +1,283 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Ruslan Nigmatullin <euroelessar@yandex.ru> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qmessageauthenticationcode.h" +#include "qvarlengtharray.h" + +/* + These #defines replace the typedefs needed by the RFC6234 code. Normally + the typedefs would come from from stdint.h, but since this header is not + available on all platforms (MSVC 2008, for example), we #define them to the + Qt equivalents. +*/ +#define uint64_t QT_PREPEND_NAMESPACE(quint64) +#define uint32_t QT_PREPEND_NAMESPACE(quint32) +#define uint8_t QT_PREPEND_NAMESPACE(quint8) +#define int_least16_t QT_PREPEND_NAMESPACE(qint16) + +// Header from rfc6234 with 1 modification: +// sha1.h - commented out '#include <stdint.h>' on line 74 +#include "../../3rdparty/rfc6234/sha.h" + +#undef uint64_t +#undef uint32_t +#undef uint68_t +#undef int_least16_t + +QT_BEGIN_NAMESPACE + +static int qt_hash_block_size(QCryptographicHash::Algorithm method) +{ + switch (method) { + case QCryptographicHash::Md4: + return 64; + case QCryptographicHash::Md5: + return 64; + case QCryptographicHash::Sha1: + return SHA1_Message_Block_Size; + case QCryptographicHash::Sha224: + return SHA224_Message_Block_Size; + case QCryptographicHash::Sha256: + return SHA256_Message_Block_Size; + case QCryptographicHash::Sha384: + return SHA384_Message_Block_Size; + case QCryptographicHash::Sha512: + return SHA512_Message_Block_Size; + case QCryptographicHash::Sha3_224: + return 144; + case QCryptographicHash::Sha3_256: + return 136; + case QCryptographicHash::Sha3_384: + return 104; + case QCryptographicHash::Sha3_512: + return 72; + } + return 0; +} + +class QMessageAuthenticationCodePrivate +{ +public: + QMessageAuthenticationCodePrivate(QCryptographicHash::Algorithm m) + : messageHash(m), method(m), messageHashInited(false) + { + } + + QByteArray key; + QByteArray result; + QCryptographicHash messageHash; + QCryptographicHash::Algorithm method; + bool messageHashInited; + + void initMessageHash(); +}; + +void QMessageAuthenticationCodePrivate::initMessageHash() +{ + if (messageHashInited) + return; + messageHashInited = true; + + const int blockSize = qt_hash_block_size(method); + + if (key.size() > blockSize) { + QCryptographicHash hash(method); + hash.addData(key); + key = hash.result(); + hash.reset(); + } + + if (key.size() < blockSize) { + const int size = key.size(); + key.resize(blockSize); + memset(key.data() + size, 0, blockSize - size); + } + + QVarLengthArray<char> iKeyPad(blockSize); + const char * const keyData = key.constData(); + + for (int i = 0; i < blockSize; ++i) + iKeyPad[i] = keyData[i] ^ 0x36; + + messageHash.addData(iKeyPad.data(), iKeyPad.size()); +} + +/*! + \class QMessageAuthenticationCode + \inmodule QtCore + + \brief The QMessageAuthenticationCode class provides a way to generate + hash-based message authentication codes. + + \since 5.1 + + \ingroup tools + \reentrant + + QMessageAuthenticationCode supports all cryptographic hashes which are supported by + QCryptographicHash. + + To generate message authentication code, pass hash algorithm QCryptographicHash::Algorithm + to constructor, then set key and message by setKey() and addData() functions. Result + can be acquired by result() function. + \snippet qmessageauthenticationcode/main.cpp 0 + \dots + \snippet qmessageauthenticationcode/main.cpp 1 + + Alternatively, this effect can be achieved by providing message, + key and method to hash() method. + \snippet qmessageauthenticationcode/main.cpp 2 + + \sa QCryptographicHash +*/ + +/*! + Constructs an object that can be used to create a cryptographic hash from data + using method \a method and key \a key. +*/ +QMessageAuthenticationCode::QMessageAuthenticationCode(QCryptographicHash::Algorithm method, + const QByteArray &key) + : d(new QMessageAuthenticationCodePrivate(method)) +{ + d->key = key; +} + +/*! + Destroys the object. +*/ +QMessageAuthenticationCode::~QMessageAuthenticationCode() +{ + delete d; +} + +/*! + Resets message data. Calling this method doesn't affect the key. +*/ +void QMessageAuthenticationCode::reset() +{ + d->result.clear(); + d->messageHash.reset(); + d->messageHashInited = false; +} + +/*! + Sets secret \a key. Calling this method automatically resets the object state. +*/ +void QMessageAuthenticationCode::setKey(const QByteArray &key) +{ + reset(); + d->key = key; +} + +/*! + Adds the first \a length chars of \a data to the message. +*/ +void QMessageAuthenticationCode::addData(const char *data, int length) +{ + d->initMessageHash(); + d->messageHash.addData(data, length); +} + +/*! + \overload addData() +*/ +void QMessageAuthenticationCode::addData(const QByteArray &data) +{ + d->initMessageHash(); + d->messageHash.addData(data); +} + +/*! + Reads the data from the open QIODevice \a device until it ends + and adds it to message. Returns true if reading was successful. + + \note \a device must be already opened. + */ +bool QMessageAuthenticationCode::addData(QIODevice *device) +{ + d->initMessageHash(); + return d->messageHash.addData(device); +} + +/*! + Returns the final authentication code. + + \sa QByteArray::toHex() +*/ +QByteArray QMessageAuthenticationCode::result() const +{ + if (!d->result.isEmpty()) + return d->result; + + d->initMessageHash(); + + const int blockSize = qt_hash_block_size(d->method); + + QByteArray hashedMessage = d->messageHash.result(); + + QVarLengthArray<char> oKeyPad(blockSize); + const char * const keyData = d->key.constData(); + + for (int i = 0; i < blockSize; ++i) + oKeyPad[i] = keyData[i] ^ 0x5c; + + QCryptographicHash hash(d->method); + hash.addData(oKeyPad.data(), oKeyPad.size()); + hash.addData(hashedMessage); + + d->result = hash.result(); + return d->result; +} + +/*! + Returns the authentication code for the message \a message using + the key \a key and the method \a method. +*/ +QByteArray QMessageAuthenticationCode::hash(const QByteArray &message, const QByteArray &key, + QCryptographicHash::Algorithm method) +{ + QMessageAuthenticationCode mac(method); + mac.setKey(key); + mac.addData(message); + return mac.result(); +} + +QT_END_NAMESPACE diff --git a/src/corelib/tools/qmessageauthenticationcode.h b/src/corelib/tools/qmessageauthenticationcode.h new file mode 100644 index 0000000000..77c22152e4 --- /dev/null +++ b/src/corelib/tools/qmessageauthenticationcode.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Ruslan Nigmatullin <euroelessar@yandex.ru> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QMESSAGEAUTHENTICATIONCODE_H +#define QMESSAGEAUTHENTICATIONCODE_H + +#include <QtCore/qcryptographichash.h> + +QT_BEGIN_NAMESPACE + + +class QMessageAuthenticationCodePrivate; +class QIODevice; + +class Q_CORE_EXPORT QMessageAuthenticationCode +{ +public: + explicit QMessageAuthenticationCode(QCryptographicHash::Algorithm method, + const QByteArray &key = QByteArray()); + ~QMessageAuthenticationCode(); + + void reset(); + + void setKey(const QByteArray &key); + + void addData(const char *data, int length); + void addData(const QByteArray &data); + bool addData(QIODevice *device); + + QByteArray result() const; + + static QByteArray hash(const QByteArray &message, const QByteArray &key, + QCryptographicHash::Algorithm method); + +private: + Q_DISABLE_COPY(QMessageAuthenticationCode) + QMessageAuthenticationCodePrivate *d; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/corelib/tools/qpair.h b/src/corelib/tools/qpair.h index 65622f78cb..96b1b65e33 100644 --- a/src/corelib/tools/qpair.h +++ b/src/corelib/tools/qpair.h @@ -44,8 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -108,6 +106,4 @@ Q_OUTOFLINE_TEMPLATE QPair<T1, T2> qMakePair(const T1 &x, const T2 &y) QT_END_NAMESPACE -QT_END_HEADER - #endif // QPAIR_H diff --git a/src/corelib/tools/qpodlist_p.h b/src/corelib/tools/qpodlist_p.h index f307e279e8..cfe4cab9ae 100644 --- a/src/corelib/tools/qpodlist_p.h +++ b/src/corelib/tools/qpodlist_p.h @@ -55,8 +55,6 @@ #include <QtCore/qvarlengtharray.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -109,6 +107,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QPODLIST_P_H diff --git a/src/corelib/tools/qpoint.cpp b/src/corelib/tools/qpoint.cpp index b3dd918a35..784d96bf1c 100644 --- a/src/corelib/tools/qpoint.cpp +++ b/src/corelib/tools/qpoint.cpp @@ -223,6 +223,15 @@ QT_BEGIN_NAMESPACE */ /*! + \fn static int QPoint::dotProduct(const QPoint &p1, const QPoint &p2) + \since 5.1 + + \snippet code/src_corelib_tools_qpoint.cpp 16 + + Returns the dot product of \a p1 and \a p2. +*/ + +/*! \fn bool operator==(const QPoint &p1, const QPoint &p2) \relates QPoint @@ -712,6 +721,15 @@ QDebug operator<<(QDebug d, const QPointF &p) */ /*! + \fn static qreal QPointF::dotProduct(const QPointF &p1, const QPointF &p2) + \since 5.1 + + \snippet code/src_corelib_tools_qpoint.cpp 17 + + Returns the dot product of \a p1 and \a p2. +*/ + +/*! \fn bool operator==(const QPointF &p1, const QPointF &p2) \relates QPointF diff --git a/src/corelib/tools/qpoint.h b/src/corelib/tools/qpoint.h index b6446e8c9f..69403ebc53 100644 --- a/src/corelib/tools/qpoint.h +++ b/src/corelib/tools/qpoint.h @@ -44,8 +44,6 @@ #include <QtCore/qnamespace.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -76,6 +74,9 @@ public: inline QPoint &operator/=(qreal divisor); + Q_DECL_CONSTEXPR static inline int dotProduct(const QPoint &p1, const QPoint &p2) + { return p1.xp * p2.xp + p1.yp * p2.yp; } + friend Q_DECL_CONSTEXPR inline bool operator==(const QPoint &, const QPoint &); friend Q_DECL_CONSTEXPR inline bool operator!=(const QPoint &, const QPoint &); friend Q_DECL_CONSTEXPR inline const QPoint operator+(const QPoint &, const QPoint &); @@ -233,6 +234,9 @@ public: inline QPointF &operator*=(qreal c); inline QPointF &operator/=(qreal c); + Q_DECL_CONSTEXPR static inline qreal dotProduct(const QPointF &p1, const QPointF &p2) + { return p1.xp * p2.xp + p1.yp * p2.yp; } + friend Q_DECL_CONSTEXPR inline bool operator==(const QPointF &, const QPointF &); friend Q_DECL_CONSTEXPR inline bool operator!=(const QPointF &, const QPointF &); friend Q_DECL_CONSTEXPR inline const QPointF operator+(const QPointF &, const QPointF &); @@ -393,6 +397,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug d, const QPointF &p); QT_END_NAMESPACE -QT_END_HEADER - #endif // QPOINT_H diff --git a/src/corelib/tools/qqueue.h b/src/corelib/tools/qqueue.h index ed275a121a..b83021434e 100644 --- a/src/corelib/tools/qqueue.h +++ b/src/corelib/tools/qqueue.h @@ -44,8 +44,6 @@ #include <QtCore/qlist.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -64,6 +62,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QQUEUE_H diff --git a/src/corelib/tools/qrect.h b/src/corelib/tools/qrect.h index 2ad049652f..62ebdd10cd 100644 --- a/src/corelib/tools/qrect.h +++ b/src/corelib/tools/qrect.h @@ -49,10 +49,9 @@ #error qrect.h must be included before any header file that defines topLeft #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE +class QMargins; class Q_CORE_EXPORT QRect { @@ -139,6 +138,11 @@ public: inline QRect intersected(const QRect &other) const; bool intersects(const QRect &r) const; + inline QRect marginsAdded(const QMargins &margins) const; + inline QRect marginsRemoved(const QMargins &margins) const; + inline QRect &operator+=(const QMargins &margins); + inline QRect &operator-=(const QMargins &margins); + #if QT_DEPRECATED_SINCE(5, 0) QT_DEPRECATED QRect unite(const QRect &r) const { return united(r); } QT_DEPRECATED QRect intersect(const QRect &r) const { return intersected(r); } @@ -786,6 +790,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QRectF &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QRECT_H diff --git a/src/corelib/tools/qrefcount.h b/src/corelib/tools/qrefcount.h index 4036bc6508..84314b1fcc 100644 --- a/src/corelib/tools/qrefcount.h +++ b/src/corelib/tools/qrefcount.h @@ -44,8 +44,6 @@ #include <QtCore/qatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -112,6 +110,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/tools/qregexp.h b/src/corelib/tools/qregexp.h index f5003fed0a..acf59d7196 100644 --- a/src/corelib/tools/qregexp.h +++ b/src/corelib/tools/qregexp.h @@ -46,8 +46,6 @@ #include <QtCore/qstring.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -129,8 +127,6 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QRegExp &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_REGEXP #endif // QREGEXP_H diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp index a18d8af898..19b492a505 100644 --- a/src/corelib/tools/qregularexpression.cpp +++ b/src/corelib/tools/qregularexpression.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2012 Giuseppe D'Angelo <dangelog@gmail.com>. +** Copyright (C) 2012 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** @@ -725,6 +726,13 @@ QT_BEGIN_NAMESPACE that (in this text) there are other characters beyond the end of the subject string. This can lead to surprising results; see the discussion in the \l{partial matching} section for more details. + + \value NoMatch + No matching is done. This value is returned as the match type by a + default constructed QRegularExpressionMatch or + QRegularExpressionMatchIterator. Using this match type is not very + useful for the user, as no matching ever happens. This enum value + has been introduced in Qt 5.1. */ /*! @@ -834,7 +842,7 @@ struct QRegularExpressionMatchPrivate : QSharedData const QString &subject, QRegularExpression::MatchType matchType, QRegularExpression::MatchOptions matchOptions, - int capturingCount); + int capturingCount = 0); QRegularExpressionMatch nextMatch() const; @@ -971,12 +979,13 @@ void QRegularExpressionPrivate::compilePattern() void QRegularExpressionPrivate::getPatternInfo() { Q_ASSERT(compiledPattern); + Q_ASSERT(studyData == 0); pcre16_fullinfo(compiledPattern, 0, PCRE_INFO_CAPTURECOUNT, &capturingCount); // detect the settings for the newline unsigned long int patternNewlineSetting; - pcre16_fullinfo(compiledPattern, studyData, PCRE_INFO_OPTIONS, &patternNewlineSetting); + pcre16_fullinfo(compiledPattern, 0, PCRE_INFO_OPTIONS, &patternNewlineSetting); patternNewlineSetting &= PCRE_NEWLINE_CR | PCRE_NEWLINE_LF | PCRE_NEWLINE_CRLF | PCRE_NEWLINE_ANY | PCRE_NEWLINE_ANYCRLF; if (patternNewlineSetting == 0) { @@ -1004,6 +1013,14 @@ void QRegularExpressionPrivate::getPatternInfo() usingCrLfNewlines = (patternNewlineSetting == PCRE_NEWLINE_CRLF) || (patternNewlineSetting == PCRE_NEWLINE_ANY) || (patternNewlineSetting == PCRE_NEWLINE_ANYCRLF); + + int hasJOptionChanged; + pcre16_fullinfo(compiledPattern, 0, PCRE_INFO_JCHANGED, &hasJOptionChanged); + if (hasJOptionChanged) { + qWarning("QRegularExpressionPrivate::getPatternInfo(): the pattern '%s'\n" + " is using the (?J) option; duplicate capturing group names are not supported by Qt", + qPrintable(pattern)); + } } @@ -1193,16 +1210,25 @@ QRegularExpressionMatchPrivate *QRegularExpressionPrivate::doMatch(const QString QRegularExpression re(*const_cast<QRegularExpressionPrivate *>(this)); if (offset < 0 || offset > subject.length()) - return new QRegularExpressionMatchPrivate(re, subject, matchType, matchOptions, 0); + return new QRegularExpressionMatchPrivate(re, subject, matchType, matchOptions); if (!compiledPattern) { qWarning("QRegularExpressionPrivate::doMatch(): called on an invalid QRegularExpression object"); - return new QRegularExpressionMatchPrivate(re, subject, matchType, matchOptions, 0); + return new QRegularExpressionMatchPrivate(re, subject, matchType, matchOptions); + } + + // skip optimizing and doing the actual matching if NoMatch type was requested + if (matchType == QRegularExpression::NoMatch) { + QRegularExpressionMatchPrivate *priv = new QRegularExpressionMatchPrivate(re, subject, + matchType, matchOptions); + priv->isValid = true; + return priv; } + // capturingCount doesn't include the implicit "0" capturing group QRegularExpressionMatchPrivate *priv = new QRegularExpressionMatchPrivate(re, subject, matchType, matchOptions, - capturingCount); + capturingCount + 1); // this is mutex protected const pcre16_extra *currentStudyData = const_cast<QRegularExpressionPrivate *>(this)->optimizePattern(); @@ -1311,8 +1337,10 @@ QRegularExpressionMatchPrivate::QRegularExpressionMatchPrivate(const QRegularExp hasMatch(false), hasPartialMatch(false), isValid(false) { Q_ASSERT(capturingCount >= 0); - const int captureOffsetsCount = (capturingCount + 1) * 3; - capturedOffsets.resize(captureOffsetsCount); + if (capturingCount > 0) { + const int captureOffsetsCount = capturingCount * 3; + capturedOffsets.resize(captureOffsetsCount); + } } @@ -1468,6 +1496,8 @@ void QRegularExpression::setPatternOptions(PatternOptions options) Returns the number of capturing groups inside the pattern string, or -1 if the regular expression is not valid. + \note The implicit capturing group 0 is \e{not} included in the returned number. + \sa isValid() */ int QRegularExpression::captureCount() const @@ -1478,6 +1508,71 @@ int QRegularExpression::captureCount() const } /*! + \since 5.1 + + Returns a list of captureCount() + 1 elements, containing the names of the + named capturing groups in the pattern string. The list is sorted such that + the element of the list at position \c{i} is the name of the \c{i}-th + capturing group, if it has a name, or an empty string if that capturing + group is unnamed. + + For instance, given the regular expression + + \code + (?<day>\d\d)-(?<month>\d\d)-(?<year>\d\d\d\d) (\w+) (?<name>\w+) + \endcode + + namedCaptureGroups() will return the following list: + + \code + ("", "day", "month", "year", "", "name") + \endcode + + which corresponds to the fact that the capturing group #0 (corresponding to + the whole match) has no name, the capturing group #1 has name "day", the + capturing group #2 has name "month", etc. + + If the regular expression is not valid, returns an empty list. + + \sa isValid(), QRegularExpressionMatch::captured(), QString::isEmpty() +*/ +QStringList QRegularExpression::namedCaptureGroups() const +{ + if (!isValid()) // isValid() will compile the pattern + return QStringList(); + + // namedCapturingTable will point to a table of + // namedCapturingTableEntryCount entries, each one of which + // contains one ushort followed by the name, NUL terminated. + // The ushort is the numerical index of the name in the pattern. + // The length of each entry is namedCapturingTableEntrySize. + ushort *namedCapturingTable; + int namedCapturingTableEntryCount; + int namedCapturingTableEntrySize; + + pcre16_fullinfo(d->compiledPattern, 0, PCRE_INFO_NAMETABLE, &namedCapturingTable); + pcre16_fullinfo(d->compiledPattern, 0, PCRE_INFO_NAMECOUNT, &namedCapturingTableEntryCount); + pcre16_fullinfo(d->compiledPattern, 0, PCRE_INFO_NAMEENTRYSIZE, &namedCapturingTableEntrySize); + + QStringList result; + + // no QList::resize nor fill is available. The +1 is for the implicit group #0 + result.reserve(d->capturingCount + 1); + for (int i = 0; i < d->capturingCount + 1; ++i) + result.append(QString()); + + for (int i = 0; i < namedCapturingTableEntryCount; ++i) { + const ushort * const currentNamedCapturingTableRow = namedCapturingTable + + namedCapturingTableEntrySize * i; + + const int index = *currentNamedCapturingTableRow; + result[index] = QString::fromUtf16(currentNamedCapturingTableRow + 1); + } + + return result; +} + +/*! Returns true if the regular expression is a valid regular expression (that is, it contains no syntax errors, etc.), or false otherwise. Use errorString() to obtain a textual description of the error. @@ -1639,6 +1734,26 @@ QString QRegularExpression::escape(const QString &str) } /*! + \since 5.1 + + Constructs a valid, empty QRegularExpressionMatch object. The regular + expression is set to a default-constructed one; the match type to + QRegularExpression::NoMatch and the match options to + QRegularExpression::NoMatchOption. + + The object will report no match through the hasMatch() and the + hasPartialMatch() member functions. +*/ +QRegularExpressionMatch::QRegularExpressionMatch() + : d(new QRegularExpressionMatchPrivate(QRegularExpression(), + QString(), + QRegularExpression::NoMatch, + QRegularExpression::NoMatchOption)) +{ + d->isValid = true; +} + +/*! Destroys the match result. */ QRegularExpressionMatch::~QRegularExpressionMatch() @@ -1982,6 +2097,26 @@ QRegularExpressionMatchIterator::QRegularExpressionMatchIterator(QRegularExpress } /*! + \since 5.1 + + Constructs an empty, valid QRegularExpressionMatchIterator object. The + regular expression is set to a default-constructed one; the match type to + QRegularExpression::NoMatch and the match options to + QRegularExpression::NoMatchOption. + + Invoking the hasNext() member function on the constructed object will + return false, as the iterator is not iterating on a valid sequence of + matches. +*/ +QRegularExpressionMatchIterator::QRegularExpressionMatchIterator() + : d(new QRegularExpressionMatchIteratorPrivate(QRegularExpression(), + QRegularExpression::NoMatch, + QRegularExpression::NoMatchOption, + QRegularExpressionMatch())) +{ +} + +/*! Destroys the QRegularExpressionMatchIterator object. */ QRegularExpressionMatchIterator::~QRegularExpressionMatchIterator() diff --git a/src/corelib/tools/qregularexpression.h b/src/corelib/tools/qregularexpression.h index 4c95a5b3a0..97dbee9256 100644 --- a/src/corelib/tools/qregularexpression.h +++ b/src/corelib/tools/qregularexpression.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2012 Giuseppe D'Angelo <dangelog@gmail.com>. +** Copyright (C) 2012 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -42,14 +43,13 @@ #ifndef QREGULAREXPRESSION_H #define QREGULAREXPRESSION_H -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION #include <QtCore/qstring.h> +#include <QtCore/qstringlist.h> #include <QtCore/qshareddata.h> #include <QtCore/qvariant.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QRegularExpressionMatch; @@ -95,11 +95,13 @@ public: QString errorString() const; int captureCount() const; + QStringList namedCaptureGroups() const; enum MatchType { NormalMatch = 0, PartialPreferCompleteMatch, - PartialPreferFirstMatch + PartialPreferFirstMatch, + NoMatch }; enum MatchOption { @@ -152,6 +154,7 @@ struct QRegularExpressionMatchPrivate; class Q_CORE_EXPORT QRegularExpressionMatch { public: + QRegularExpressionMatch(); ~QRegularExpressionMatch(); QRegularExpressionMatch(const QRegularExpressionMatch &match); QRegularExpressionMatch &operator=(const QRegularExpressionMatch &match); @@ -209,6 +212,7 @@ struct QRegularExpressionMatchIteratorPrivate; class Q_CORE_EXPORT QRegularExpressionMatchIterator { public: + QRegularExpressionMatchIterator(); ~QRegularExpressionMatchIterator(); QRegularExpressionMatchIterator(const QRegularExpressionMatchIterator &iterator); QRegularExpressionMatchIterator &operator=(const QRegularExpressionMatchIterator &iterator); @@ -239,8 +243,6 @@ Q_DECLARE_SHARED(QRegularExpressionMatchIterator) QT_END_NAMESPACE -QT_END_HEADER - -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION #endif // QREGULAREXPRESSION_H diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h index 5d19bcea55..2155c56e27 100644 --- a/src/corelib/tools/qscopedpointer.h +++ b/src/corelib/tools/qscopedpointer.h @@ -46,7 +46,6 @@ #include <stdlib.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE template <typename T> @@ -97,7 +96,6 @@ public: { T *oldD = this->d; Cleanup::cleanup(oldD); - this->d = 0; } inline T &operator*() const @@ -239,6 +237,5 @@ private: }; QT_END_NAMESPACE -QT_END_HEADER #endif // QSCOPEDPOINTER_H diff --git a/src/corelib/tools/qscopedpointer_p.h b/src/corelib/tools/qscopedpointer_p.h index f92ce0a454..06ebac1853 100644 --- a/src/corelib/tools/qscopedpointer_p.h +++ b/src/corelib/tools/qscopedpointer_p.h @@ -55,7 +55,6 @@ #include "QtCore/qscopedpointer.h" -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -145,6 +144,5 @@ private: QT_END_NAMESPACE -QT_END_HEADER #endif diff --git a/src/corelib/tools/qscopedvaluerollback.h b/src/corelib/tools/qscopedvaluerollback.h index 8d6293c514..dfaf1984be 100644 --- a/src/corelib/tools/qscopedvaluerollback.h +++ b/src/corelib/tools/qscopedvaluerollback.h @@ -44,7 +44,6 @@ #include <QtCore/qglobal.h> -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE template <typename T> @@ -75,6 +74,5 @@ private: }; QT_END_NAMESPACE -QT_END_HEADER #endif // QSCOPEDVALUEROLLBACK_H diff --git a/src/corelib/tools/qset.h b/src/corelib/tools/qset.h index 6fdc8e6281..d5c3637293 100644 --- a/src/corelib/tools/qset.h +++ b/src/corelib/tools/qset.h @@ -43,8 +43,9 @@ #define QSET_H #include <QtCore/qhash.h> - -QT_BEGIN_HEADER +#ifdef Q_COMPILER_INITIALIZER_LISTS +#include <initializer_list> +#endif QT_BEGIN_NAMESPACE @@ -56,6 +57,14 @@ class QSet public: inline QSet() {} +#ifdef Q_COMPILER_INITIALIZER_LISTS + inline QSet(std::initializer_list<T> list) + { + reserve(list.size()); + for (typename std::initializer_list<T>::const_iterator it = list.begin(); it != list.end(); ++it) + insert(*it); + } +#endif inline QSet(const QSet<T> &other) : q_hash(other.q_hash) {} inline QSet<T> &operator=(const QSet<T> &other) @@ -355,6 +364,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSET_H diff --git a/src/corelib/tools/qset.qdoc b/src/corelib/tools/qset.qdoc index ef7a4c4f52..cd90b4949b 100644 --- a/src/corelib/tools/qset.qdoc +++ b/src/corelib/tools/qset.qdoc @@ -103,6 +103,16 @@ \sa clear() */ +/*! \fn QSet::QSet(std::initializer_list<T> list) + \since 5.1 + + Constructs a set with a copy of each of the elements in the + initializer list \a list. + + This function is only available if the program is being + compiled in C++11 mode. +*/ + /*! \fn QSet::QSet(const QSet<T> &other) diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h index 276fef4446..00bf4cba2a 100644 --- a/src/corelib/tools/qshareddata.h +++ b/src/corelib/tools/qshareddata.h @@ -45,8 +45,6 @@ #include <QtCore/qglobal.h> #include <QtCore/qatomic.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -281,6 +279,4 @@ template<typename T> Q_DECLARE_TYPEINFO_BODY(QExplicitlySharedDataPointer<T>, Q_ QT_END_NAMESPACE -QT_END_HEADER - #endif // QSHAREDDATA_H diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp index df7a911f8c..bced1f4ece 100644 --- a/src/corelib/tools/qsharedpointer.cpp +++ b/src/corelib/tools/qsharedpointer.cpp @@ -136,23 +136,11 @@ \omit \secton1 QSharedPointer internals - QSharedPointer is in reality implemented by two ancestor classes: - QtSharedPointer::Basic and QtSharedPointer::ExternalRefCount. The reason - for having that split is now mostly legacy: in the beginning, - QSharedPointer was meant to support both internal reference counting and - external reference counting. - - QtSharedPointer::Basic implements the basic functionality that is shared - between internal- and external-reference counting. That is, it's mostly - the accessor functions into QSharedPointer. Those are all inherited by - QSharedPointer, which adds another level of shared functionality (the - constructors and assignment operators). The Basic class has one member - variable, which is the actual pointer being tracked. - - QtSharedPointer::ExternalRefCount implements the actual reference - counting and introduces the d-pointer for QSharedPointer. That d-pointer - itself is shared with other QSharedPointer objects as well as - QWeakPointer. + QSharedPointer has two "private" members: the pointer itself being tracked + and a d-pointer. Those members are private to the class, but QSharedPointer + is friends with QWeakPointer and other QSharedPointer with different + template arguments. (On some compilers, template friends are not supported, + so the members are technically public) The reason for keeping the pointer value itself outside the d-pointer is because of multiple inheritance needs. If you have two QSharedPointer @@ -178,17 +166,19 @@ QSharedObject instances that are attached to this Data. When the strong reference count decreases to zero, the object is deleted - (see below for information on custom deleters). The strong reference - count can also exceptionally be -1, indicating that there are no - QSharedPointers attached to an object, which is tracked too. The only - case where this is possible is that of QWeakPointers tracking a QObject. + (see below for information on custom deleters). The strong reference count + can also exceptionally be -1, indicating that there are no QSharedPointers + attached to an object, which is tracked too. The only case where this is + possible is that of QWeakPointers and QPointers tracking a QObject. Note + that QWeakPointers tracking a QObject is a deprecated feature as of Qt 5.0, + kept only for compatibility with Qt 4.x. The weak reference count controls the lifetime of the d-pointer itself. It can be thought of as an internal/intrusive reference count for ExternalRefCountData itself. This count is equal to the number of - QSharedPointers and QWeakPointers that are tracking this object. (In case - the object tracked derives from QObject, this number is increased by 1, - since QObjectPrivate tracks it too). + QSharedPointers and QWeakPointers that are tracking this object. In case + the object is a QObject being tracked by QPointer, this number is increased + by 1, since QObjectPrivate tracks it too. The third member is a pointer to the function that is used to delete the pointer being tracked. That happens when the destroy() function is called. @@ -199,18 +189,21 @@ \section3 QtSharedPointer::ExternalRefCountWithCustomDeleter - This class derives from ExternalRefCountData and is a - template class. As template parameters, it has the type of the pointer - being tracked (\tt T) and a \tt Deleter, which is anything. It adds two - fields to its parent class, matching those template parameters: a member - of type \tt Deleter and a member of type \tt T*. + This class derives from ExternalRefCountData and is a template class. As + template parameters, it has the type of the pointer being tracked (\tt T) + and a \tt Deleter, which is anything. It adds two fields to its parent + class, matching those template parameters: a member of type \tt Deleter and + a member of type \tt T*. Those members are actually inside a template + struct of type CustomDeleter, which is partially-specialized for normal + deletion. See below for more details on that. The purpose of this class is to store the pointer to be deleted and the deleter code along with the d-pointer. This allows the last strong reference to call any arbitrary function that disposes of the object. For example, this allows calling QObject::deleteLater() on a given object. - The pointer to the object is kept here to avoid the extra cost of keeping - the deleter in the generic case. + The pointer to the object is kept here because it needs to match the actual + deleter function's parameters, regardless of what template argument the + last QSharedPointer instance had. This class is never instantiated directly: the constructors and destructor are private and, in C++11, deleted. Only the create() function @@ -605,6 +598,37 @@ */ /*! + \fn QSharedPointer<T> QSharedPointer::create() + \since 5.1 + + Creates a QSharedPointer object and allocates a new item of type \tt T. The + QSharedPointer internals and the object are allocated in one single memory + allocation, which could help reduce memory fragmentation in a long-running + application. + + This function calls the default constructor for type \tt T. +*/ + +/*! + \fn QSharedPointer<T> QSharedPointer::create(...) + \overload + \since 5.1 + + Creates a QSharedPointer object and allocates a new item of type \tt T. The + QSharedPointer internals and the object are allocated in one single memory + allocation, which could help reduce memory fragmentation in a long-running + application. + + This function will attempt to call a constructor for type \tt T that can + accept all the arguments passed. Arguments will be perfectly-forwarded. + + \note This function is only available with a C++11 compiler that supports + perfect forwarding of an arbitrary number of arguments. If the compiler + does not support the necessary C++11 features, you must use the overload + that calls the default constructor. +*/ + +/*! \fn QWeakPointer<T> QSharedPointer::toWeakRef() const Returns a weak reference object that shares the pointer referenced diff --git a/src/corelib/tools/qsharedpointer.h b/src/corelib/tools/qsharedpointer.h index b4e70cebd2..7d1f00814d 100644 --- a/src/corelib/tools/qsharedpointer.h +++ b/src/corelib/tools/qsharedpointer.h @@ -50,8 +50,6 @@ # include <QtCore/qsharedpointer_impl.h> #else -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -95,6 +93,9 @@ public: template <class X> QSharedPointer<X> dynamicCast() const; template <class X> QSharedPointer<X> constCast() const; template <class X> QSharedPointer<X> objectCast() const; + + static inline QSharedPointer<T> create(); + static inline QSharedPointer<T> create(...); }; template <class T> @@ -149,8 +150,6 @@ template <class X, class T> QWeakPointer<X> qWeakPointerCast(const QWeakPointer< QT_END_NAMESPACE -QT_END_HEADER - #endif // Q_QDOC #endif // QSHAREDPOINTER_H diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index 881c60b6fd..5e30cf3ecb 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -46,14 +46,17 @@ #endif #if 0 +#pragma qt_sync_skip_header_check +#pragma qt_sync_stop_processing +#endif + +#if 0 // These macros are duplicated here to make syncqt not complain a about // this header, as we have a "qt_sync_stop_processing" below, which in turn // is here because this file contains a template mess and duplicates the // classes found in qsharedpointer.h -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_END_NAMESPACE -QT_END_HEADER #pragma qt_sync_stop_processing #endif @@ -62,7 +65,9 @@ QT_END_HEADER #include <QtCore/qobject.h> // for qobject_cast #include <QtCore/qhash.h> // for qHash -QT_BEGIN_HEADER +#if defined(Q_COMPILER_RVALUE_REFS) && defined(Q_COMPILER_VARIADIC_TEMPLATES) +# include <utility> // for std::forward +#endif QT_BEGIN_NAMESPACE @@ -389,6 +394,28 @@ public: QWeakPointer<T> toWeakRef() const; +#if defined(Q_COMPILER_RVALUE_REFS) && defined(Q_COMPILER_VARIADIC_TEMPLATES) + template <typename... Args> + static QSharedPointer<T> create(Args && ...arguments) + { + typedef QtSharedPointer::ExternalRefCountWithContiguousData<T> Private; +# ifdef QT_SHAREDPOINTER_TRACK_POINTERS + typename Private::DestroyerFn destroy = &Private::safetyCheckDeleter; +# else + typename Private::DestroyerFn destroy = &Private::deleter; +# endif + QSharedPointer<T> result(Qt::Uninitialized); + result.d = Private::create(&result.value, destroy); + + // now initialize the data + new (result.data()) T(std::forward<Args>(arguments)...); + result.d->setQObjectShared(result.value, true); +# ifdef QT_SHAREDPOINTER_TRACK_POINTERS + internalSafetyCheckAdd(result.d, result.value); +# endif + return result; + } +#else static inline QSharedPointer<T> create() { typedef QtSharedPointer::ExternalRefCountWithContiguousData<T> Private; @@ -408,6 +435,7 @@ public: result.d->setQObjectShared(result.value, true); return result; } +#endif private: explicit QSharedPointer(Qt::Initialization) {} @@ -616,7 +644,7 @@ private: public: #else template <class X> friend class QSharedPointer; - friend class QPointerBase; + template <class X> friend class QPointer; #endif template <class X> @@ -862,6 +890,4 @@ template<typename T> Q_DECLARE_TYPEINFO_BODY(QSharedPointer<T>, Q_MOVABLE_TYPE); QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h index 2156c2235f..b9d546452f 100644 --- a/src/corelib/tools/qsimd_p.h +++ b/src/corelib/tools/qsimd_p.h @@ -45,8 +45,6 @@ #include <qglobal.h> #include <qatomic.h> -QT_BEGIN_HEADER - /* * qt_module_config.prf defines the QT_COMPILER_SUPPORTS_XXX macros. * They mean the compiler supports the necessary flags and the headers @@ -252,6 +250,4 @@ inline uint qCpuHasFeature(CPUFeatures feature) QT_END_NAMESPACE -QT_END_HEADER - #endif // QSIMD_P_H diff --git a/src/corelib/tools/qsize.h b/src/corelib/tools/qsize.h index bb2cfaff29..76f2ae05f1 100644 --- a/src/corelib/tools/qsize.h +++ b/src/corelib/tools/qsize.h @@ -44,8 +44,6 @@ #include <QtCore/qnamespace.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -379,6 +377,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QSizeF &); QT_END_NAMESPACE -QT_END_HEADER - #endif // QSIZE_H diff --git a/src/corelib/tools/qstack.h b/src/corelib/tools/qstack.h index 158e1af6b2..135c4dd527 100644 --- a/src/corelib/tools/qstack.h +++ b/src/corelib/tools/qstack.h @@ -44,8 +44,6 @@ #include <QtCore/qvector.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -77,6 +75,4 @@ inline const T &QStack<T>::top() const QT_END_NAMESPACE -QT_END_HEADER - #endif // QSTACK_H diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 404e3be289..75ef07a96e 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -966,20 +966,21 @@ const QString::Null QString::null = { }; \sa utf16(), toLatin1(), toUtf8(), toLocal8Bit() */ -// ### replace with QCharIterator int QString::toUcs4_helper(const ushort *uc, int length, uint *out) { int i = 0; - for (; i < length; ++i) { - uint u = uc[i]; - if (QChar::isHighSurrogate(u) && i + 1 < length) { - ushort low = uc[i+1]; + const ushort *const e = uc + length; + while (uc < e) { + uint u = *uc; + if (QChar::isHighSurrogate(u) && uc + 1 < e) { + ushort low = uc[1]; if (QChar::isLowSurrogate(low)) { - ++i; + ++uc; u = QChar::surrogateToUcs4(u, low); } } - *out++ = u; + out[i++] = u; + ++uc; } return i; } @@ -2762,13 +2763,17 @@ int QString::lastIndexOf(const QStringRef &str, int from, Qt::CaseSensitivity cs str.size(), cs); } -#ifndef QT_NO_REGEXP + +#if !(defined(QT_NO_REGEXP) && defined(QT_NO_REGULAREXPRESSION)) struct QStringCapture { int pos; int len; int no; }; +#endif + +#ifndef QT_NO_REGEXP /*! \overload replace() @@ -2925,7 +2930,7 @@ QString& QString::replace(const QRegExp &rx, const QString &after) } #endif -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION #ifndef QT_BOOTSTRAPPED /*! \overload replace() @@ -3055,7 +3060,7 @@ QString &QString::replace(const QRegularExpression &re, const QString &after) return *this; } #endif // QT_BOOTSTRAPPED -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION /*! Returns the number of (potentially overlapping) occurrences of @@ -3256,7 +3261,7 @@ int QString::count(const QRegExp& rx) const } #endif // QT_NO_REGEXP -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION #ifndef QT_BOOTSTRAPPED /*! \overload indexOf() @@ -3336,6 +3341,33 @@ bool QString::contains(const QRegularExpression &re) const } /*! + \overload contains() + \since 5.1 + + Returns true if the regular expression \a re matches somewhere in this + string; otherwise returns false. + + If the match is successful and \a match is not a null pointer, it also + writes the results of the match into the QRegularExpressionMatch object + pointed by \a match. + + \sa QRegularExpression::match() +*/ + +bool QString::contains(const QRegularExpression &re, QRegularExpressionMatch *match) const +{ + if (!re.isValid()) { + qWarning("QString::contains: invalid QRegularExpresssion object"); + return false; + } + QRegularExpressionMatch m = re.match(*this); + bool hasMatch = m.hasMatch(); + if (hasMatch && match) + *match = m; + return hasMatch; +} + +/*! \overload count() \since 5.0 @@ -3366,7 +3398,7 @@ int QString::count(const QRegularExpression &re) const return count; } #endif // QT_BOOTSTRAPPED -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION /*! \fn int QString::count() const @@ -3487,7 +3519,7 @@ QString QString::section(const QString &sep, int start, int end, SectionFlags fl return ret; } -#ifndef QT_NO_REGEXP +#if !(defined(QT_NO_REGEXP) && defined(QT_NO_REGULAREXPRESSION)) class qt_section_chunk { public: qt_section_chunk(int l, QString s) { length = l; string = s; } @@ -3537,7 +3569,9 @@ static QString extractSections(const QList<qt_section_chunk> §ions, return ret; } +#endif +#ifndef QT_NO_REGEXP /*! \overload section() @@ -3575,7 +3609,7 @@ QString QString::section(const QRegExp ®, int start, int end, SectionFlags fl } #endif -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION #ifndef QT_BOOTSTRAPPED /*! \overload section() @@ -3621,7 +3655,7 @@ QString QString::section(const QRegularExpression &re, int start, int end, Secti return extractSections(sections, start, end, flags); } #endif // QT_BOOTSTRAPPED -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION /*! Returns a substring that contains the \a n leftmost characters @@ -6416,7 +6450,7 @@ QStringList QString::split(const QRegExp &rx, SplitBehavior behavior) const } #endif -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION #ifndef QT_BOOTSTRAPPED /*! \overload @@ -6470,7 +6504,7 @@ QStringList QString::split(const QRegularExpression &re, SplitBehavior behavior) return list; } #endif // QT_BOOTSTRAPPED -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION /*! \enum QString::NormalizationForm @@ -9160,6 +9194,356 @@ QVector<uint> QStringRef::toUcs4() const return v; } +/*! + Returns a string that has whitespace removed from the start and + the end. + + Whitespace means any character for which QChar::isSpace() returns + true. This includes the ASCII characters '\\t', '\\n', '\\v', + '\\f', '\\r', and ' '. + + Unlike QString::simplified(), trimmed() leaves internal whitespace alone. + + \since 5.1 + + \sa QString::trimmed() +*/ +QStringRef QStringRef::trimmed() const +{ + if (m_size == 0 || m_string == 0) + return *this; + const QChar *s = m_string->constData() + m_position; + int start = 0; + int end = m_size - 1; + while (start <= end && s[start].isSpace()) // skip white space from start + start++; + if (start <= end) { // only white space + while (end && s[end].isSpace()) // skip white space from end + end--; + } + int l = end - start + 1; + Q_ASSERT(l >= 0); + return QStringRef(m_string, m_position + start, l); +} + +/*! + Returns the string converted to a \c{long long} using base \a + base, which is 10 by default and must be between 2 and 36, or 0. + Returns 0 if the conversion fails. + + If a conversion error occurs, *\a{ok} is set to false; otherwise + *\a{ok} is set to true. + + If \a base is 0, the C language convention is used: If the string + begins with "0x", base 16 is used; if the string begins with "0", + base 8 is used; otherwise, base 10 is used. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toLongLong() + + \sa QString::toLongLong() + + \since 5.1 +*/ + +qint64 QStringRef::toLongLong(bool *ok, int base) const +{ +#if defined(QT_CHECK_RANGE) + if (base != 0 && (base < 2 || base > 36)) { + qWarning("QString::toLongLong: Invalid base (%d)", base); + base = 10; + } +#endif + + QLocale c_locale(QLocale::C); + return c_locale.d->stringToLongLong(*this, base, ok, QLocalePrivate::FailOnGroupSeparators); +} + +/*! + Returns the string converted to an \c{unsigned long long} using base \a + base, which is 10 by default and must be between 2 and 36, or 0. + Returns 0 if the conversion fails. + + If a conversion error occurs, *\a{ok} is set to false; otherwise + *\a{ok} is set to true. + + If \a base is 0, the C language convention is used: If the string + begins with "0x", base 16 is used; if the string begins with "0", + base 8 is used; otherwise, base 10 is used. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toULongLong() + + \sa QString::toULongLong() + + \since 5.1 +*/ + +quint64 QStringRef::toULongLong(bool *ok, int base) const +{ +#if defined(QT_CHECK_RANGE) + if (base != 0 && (base < 2 || base > 36)) { + qWarning("QString::toULongLong: Invalid base (%d)", base); + base = 10; + } +#endif + + QLocale c_locale(QLocale::C); + return c_locale.d->stringToUnsLongLong(*this, base, ok, QLocalePrivate::FailOnGroupSeparators); +} + +/*! + \fn long QStringRef::toLong(bool *ok, int base) const + + Returns the string converted to a \c long using base \a + base, which is 10 by default and must be between 2 and 36, or 0. + Returns 0 if the conversion fails. + + If a conversion error occurs, *\a{ok} is set to false; otherwise + *\a{ok} is set to true. + + If \a base is 0, the C language convention is used: If the string + begins with "0x", base 16 is used; if the string begins with "0", + base 8 is used; otherwise, base 10 is used. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toLong() + + \sa QString::toLong() + + \since 5.1 +*/ + +long QStringRef::toLong(bool *ok, int base) const +{ + qint64 v = toLongLong(ok, base); + if (v < LONG_MIN || v > LONG_MAX) { + if (ok) + *ok = false; + v = 0; + } + return long(v); +} + +/*! + \fn ulong QStringRef::toULong(bool *ok, int base) const + + Returns the string converted to an \c{unsigned long} using base \a + base, which is 10 by default and must be between 2 and 36, or 0. + Returns 0 if the conversion fails. + + If a conversion error occurs, *\a{ok} is set to false; otherwise + *\a{ok} is set to true. + + If \a base is 0, the C language convention is used: If the string + begins with "0x", base 16 is used; if the string begins with "0", + base 8 is used; otherwise, base 10 is used. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toULong() + + \sa QString::toULong() + + \since 5.1 +*/ + +ulong QStringRef::toULong(bool *ok, int base) const +{ + quint64 v = toULongLong(ok, base); + if (v > ULONG_MAX) { + if (ok) + *ok = false; + v = 0; + } + return ulong(v); +} + + +/*! + Returns the string converted to an \c int using base \a + base, which is 10 by default and must be between 2 and 36, or 0. + Returns 0 if the conversion fails. + + If a conversion error occurs, *\a{ok} is set to false; otherwise + *\a{ok} is set to true. + + If \a base is 0, the C language convention is used: If the string + begins with "0x", base 16 is used; if the string begins with "0", + base 8 is used; otherwise, base 10 is used. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toInt() + + \sa QString::toInt() + + \since 5.1 +*/ + +int QStringRef::toInt(bool *ok, int base) const +{ + qint64 v = toLongLong(ok, base); + if (v < INT_MIN || v > INT_MAX) { + if (ok) + *ok = false; + v = 0; + } + return int(v); +} + +/*! + Returns the string converted to an \c{unsigned int} using base \a + base, which is 10 by default and must be between 2 and 36, or 0. + Returns 0 if the conversion fails. + + If a conversion error occurs, *\a{ok} is set to false; otherwise + *\a{ok} is set to true. + + If \a base is 0, the C language convention is used: If the string + begins with "0x", base 16 is used; if the string begins with "0", + base 8 is used; otherwise, base 10 is used. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toUInt() + + \sa QString::toUInt() + + \since 5.1 +*/ + +uint QStringRef::toUInt(bool *ok, int base) const +{ + quint64 v = toULongLong(ok, base); + if (v > UINT_MAX) { + if (ok) + *ok = false; + v = 0; + } + return uint(v); +} + +/*! + Returns the string converted to a \c short using base \a + base, which is 10 by default and must be between 2 and 36, or 0. + Returns 0 if the conversion fails. + + If a conversion error occurs, *\a{ok} is set to false; otherwise + *\a{ok} is set to true. + + If \a base is 0, the C language convention is used: If the string + begins with "0x", base 16 is used; if the string begins with "0", + base 8 is used; otherwise, base 10 is used. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toShort() + + \sa QString::toShort() + + \since 5.1 +*/ + +short QStringRef::toShort(bool *ok, int base) const +{ + long v = toLongLong(ok, base); + if (v < SHRT_MIN || v > SHRT_MAX) { + if (ok) + *ok = false; + v = 0; + } + return short(v); +} + +/*! + Returns the string converted to an \c{unsigned short} using base \a + base, which is 10 by default and must be between 2 and 36, or 0. + Returns 0 if the conversion fails. + + If a conversion error occurs, *\a{ok} is set to false; otherwise + *\a{ok} is set to true. + + If \a base is 0, the C language convention is used: If the string + begins with "0x", base 16 is used; if the string begins with "0", + base 8 is used; otherwise, base 10 is used. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toUShort() + + \sa QString::toUShort() + + \since 5.1 +*/ + +ushort QStringRef::toUShort(bool *ok, int base) const +{ + ulong v = toULongLong(ok, base); + if (v > USHRT_MAX) { + if (ok) + *ok = false; + v = 0; + } + return ushort(v); +} + + +/*! + Returns the string converted to a \c double value. + + Returns 0.0 if the conversion fails. + + If a conversion error occurs, \c{*}\a{ok} is set to false; + otherwise \c{*}\a{ok} is set to true. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toDouble() + + For historic reasons, this function does not handle + thousands group separators. If you need to convert such numbers, + use QLocale::toDouble(). + + \sa QString::toDouble() + + \since 5.1 +*/ + +double QStringRef::toDouble(bool *ok) const +{ + QLocale c_locale(QLocale::C); + return c_locale.d->stringToDouble(*this, ok, QLocalePrivate::FailOnGroupSeparators); +} + +/*! + Returns the string converted to a \c float value. + + If a conversion error occurs, *\a{ok} is set to false; otherwise + *\a{ok} is set to true. Returns 0.0 if the conversion fails. + + The string conversion will always happen in the 'C' locale. For locale + dependent conversion use QLocale::toFloat() + + \sa QString::toFloat() + + \since 5.1 +*/ + +float QStringRef::toFloat(bool *ok) const +{ + bool myOk; + double d = toDouble(&myOk); + if (!myOk) { + if (ok != 0) + *ok = false; + return 0.0; + } + if (qIsInf(d)) + return float(d); + if (d > QT_MAX_FLOAT || d < -QT_MAX_FLOAT) { + if (ok != 0) + *ok = false; + return 0.0; + } + if (ok) + *ok = true; + return float(d); +} /*! \obsolete diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h index a6f03b2ce0..ac49bdcdf6 100644 --- a/src/corelib/tools/qstring.h +++ b/src/corelib/tools/qstring.h @@ -49,7 +49,7 @@ #include <string> -#if defined(Q_OS_LINUX_ANDROID) +#if defined(Q_OS_ANDROID) // std::wstring is disabled on android's glibc, as bionic lacks certain features // that libstdc++ checks for (like mbcslen). namespace std @@ -64,14 +64,13 @@ namespace std #error qstring.h must be included before any header file that defines truncate #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QCharRef; class QRegExp; class QRegularExpression; +class QRegularExpressionMatch; class QString; class QStringList; class QTextCodec; @@ -335,10 +334,11 @@ public: inline bool contains(QRegExp &rx) const { return indexOf(rx) != -1; } #endif -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION int indexOf(const QRegularExpression &re, int from = 0) const; int lastIndexOf(const QRegularExpression &re, int from = -1) const; bool contains(const QRegularExpression &re) const; + bool contains(const QRegularExpression &re, QRegularExpressionMatch *match) const; // ### Qt 6: merge overloads int count(const QRegularExpression &re) const; #endif @@ -356,7 +356,7 @@ public: #ifndef QT_NO_REGEXP QString section(const QRegExp ®, int start, int end = -1, SectionFlags flags = SectionDefault) const; #endif -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION QString section(const QRegularExpression &re, int start, int end = -1, SectionFlags flags = SectionDefault) const; #endif QString left(int n) const Q_REQUIRED_RESULT; @@ -432,7 +432,7 @@ public: inline QString &remove(const QRegExp &rx) { return replace(rx, QString()); } #endif -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION QString &replace(const QRegularExpression &re, const QString &after); inline QString &remove(const QRegularExpression &re) { return replace(re, QString()); } @@ -447,7 +447,7 @@ public: #ifndef QT_NO_REGEXP QStringList split(const QRegExp &sep, SplitBehavior behavior = KeepEmptyParts) const Q_REQUIRED_RESULT; #endif -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION QStringList split(const QRegularExpression &sep, SplitBehavior behavior = KeepEmptyParts) const Q_REQUIRED_RESULT; #endif enum NormalizationForm { @@ -884,6 +884,8 @@ public: QChar::Decomposition decompositionTag() const { return QChar(*this).decompositionTag(); } uchar combiningClass() const { return QChar(*this).combiningClass(); } + inline QChar::Script script() const { return QChar(*this).script(); } + QChar::UnicodeVersion unicodeVersion() const { return QChar(*this).unicodeVersion(); } inline uchar cell() const { return QChar(*this).cell(); } @@ -1171,13 +1173,17 @@ class Q_CORE_EXPORT QStringRef { int m_position; int m_size; public: + // ### Qt 6: make this constructor constexpr, after the destructor is made trivial inline QStringRef():m_string(0), m_position(0), m_size(0){} inline QStringRef(const QString *string, int position, int size); inline QStringRef(const QString *string); + + // ### Qt 6: remove this copy constructor, the implicit one is fine inline QStringRef(const QStringRef &other) :m_string(other.m_string), m_position(other.m_position), m_size(other.m_size) {} + // ### Qt 6: remove this destructor, the implicit one is fine inline ~QStringRef(){} inline const QString *string() const { return m_string; } inline int position() const { return m_position; } @@ -1271,6 +1277,18 @@ public: int localeAwareCompare(const QStringRef &s) const; static int localeAwareCompare(const QStringRef &s1, const QString &s2); static int localeAwareCompare(const QStringRef &s1, const QStringRef &s2); + + QStringRef trimmed() const Q_REQUIRED_RESULT; + short toShort(bool *ok = 0, int base = 10) const; + ushort toUShort(bool *ok = 0, int base = 10) const; + int toInt(bool *ok = 0, int base = 10) const; + uint toUInt(bool *ok = 0, int base = 10) const; + long toLong(bool *ok = 0, int base = 10) const; + ulong toULong(bool *ok = 0, int base = 10) const; + qlonglong toLongLong(bool *ok = 0, int base = 10) const; + qulonglong toULongLong(bool *ok = 0, int base = 10) const; + float toFloat(bool *ok = 0) const; + double toDouble(bool *ok = 0) const; }; Q_DECLARE_TYPEINFO(QStringRef, Q_PRIMITIVE_TYPE); @@ -1386,8 +1404,6 @@ QT_DEPRECATED inline QString escape(const QString &plain) { QT_END_NAMESPACE -QT_END_HEADER - #if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER) #include <QtCore/qstringbuilder.h> #endif diff --git a/src/corelib/tools/qstringbuilder.h b/src/corelib/tools/qstringbuilder.h index 67d5bde2ce..e09b02b5a9 100644 --- a/src/corelib/tools/qstringbuilder.h +++ b/src/corelib/tools/qstringbuilder.h @@ -54,8 +54,6 @@ #include <string.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -429,6 +427,4 @@ QString &operator+=(QString &a, const QStringBuilder<A, B> &b) QT_END_NAMESPACE -QT_END_HEADER - #endif // QSTRINGBUILDER_H diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp index f48db4a643..fa2e12b67b 100644 --- a/src/corelib/tools/qstringlist.cpp +++ b/src/corelib/tools/qstringlist.cpp @@ -320,7 +320,7 @@ QStringList QtPrivate::QStringList_filter(const QStringList *that, const QRegExp #endif #ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION /*! \fn QStringList QStringList::filter(const QRegularExpression &re) const \overload @@ -338,7 +338,7 @@ QStringList QtPrivate::QStringList_filter(const QStringList *that, const QRegula } return res; } -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION #endif // QT_BOOTSTRAPPED /*! @@ -395,7 +395,7 @@ void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegExp &r #endif #ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION /*! \fn QStringList &QStringList::replaceInStrings(const QRegularExpression &re, const QString &after) \overload @@ -424,7 +424,7 @@ void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegularEx for (int i = 0; i < that->size(); ++i) (*that)[i].replace(re, after); } -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION #endif // QT_BOOTSTRAPPED /*! @@ -619,7 +619,7 @@ int QtPrivate::QStringList_lastIndexOf(const QStringList *that, QRegExp &rx, int #endif #ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION /*! \fn int QStringList::indexOf(const QRegularExpression &re, int from) const \overload @@ -676,7 +676,7 @@ int QtPrivate::QStringList_lastIndexOf(const QStringList *that, const QRegularEx } return -1; } -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION #endif // QT_BOOTSTRAPPED /*! diff --git a/src/corelib/tools/qstringlist.h b/src/corelib/tools/qstringlist.h index 8ae6e3653a..a962b7c528 100644 --- a/src/corelib/tools/qstringlist.h +++ b/src/corelib/tools/qstringlist.h @@ -49,8 +49,6 @@ #include <QtCore/qstring.h> #include <QtCore/qstringmatcher.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -99,12 +97,12 @@ public: #endif #ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION inline QStringList filter(const QRegularExpression &re) const; inline QStringList &replaceInStrings(const QRegularExpression &re, const QString &after); inline int indexOf(const QRegularExpression &re, int from = 0) const; inline int lastIndexOf(const QRegularExpression &re, int from = -1) const; -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION #endif // QT_BOOTSTRAPPED #if !defined(Q_NO_USING_KEYWORD) @@ -141,12 +139,12 @@ namespace QtPrivate { #endif #ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION void Q_CORE_EXPORT QStringList_replaceInStrings(QStringList *that, const QRegularExpression &rx, const QString &after); QStringList Q_CORE_EXPORT QStringList_filter(const QStringList *that, const QRegularExpression &re); int Q_CORE_EXPORT QStringList_indexOf(const QStringList *that, const QRegularExpression &re, int from); int Q_CORE_EXPORT QStringList_lastIndexOf(const QStringList *that, const QRegularExpression &re, int from); -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION #endif // QT_BOOTSTRAPPED } @@ -220,7 +218,7 @@ inline int QStringList::lastIndexOf(QRegExp &rx, int from) const #endif #ifndef QT_BOOTSTRAPPED -#ifndef QT_NO_REGEXP +#ifndef QT_NO_REGULAREXPRESSION inline QStringList &QStringList::replaceInStrings(const QRegularExpression &rx, const QString &after) { QtPrivate::QStringList_replaceInStrings(this, rx, after); @@ -241,7 +239,7 @@ inline int QStringList::lastIndexOf(const QRegularExpression &rx, int from) cons { return QtPrivate::QStringList_lastIndexOf(this, rx, from); } -#endif // QT_NO_REGEXP +#endif // QT_NO_REGULAREXPRESSION #endif // QT_BOOTSTRAPPED #ifndef QT_NO_DATASTREAM @@ -257,6 +255,4 @@ inline QDataStream &operator<<(QDataStream &out, const QStringList &list) QT_END_NAMESPACE -QT_END_HEADER - #endif // QSTRINGLIST_H diff --git a/src/corelib/tools/qstringmatcher.h b/src/corelib/tools/qstringmatcher.h index 1634255f2e..792b97591a 100644 --- a/src/corelib/tools/qstringmatcher.h +++ b/src/corelib/tools/qstringmatcher.h @@ -44,8 +44,6 @@ #include <QtCore/qstring.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -97,6 +95,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSTRINGMATCHER_H diff --git a/src/corelib/tools/qtextboundaryfinder.cpp b/src/corelib/tools/qtextboundaryfinder.cpp index 9ccfe95b1d..51b4ece4b1 100644 --- a/src/corelib/tools/qtextboundaryfinder.cpp +++ b/src/corelib/tools/qtextboundaryfinder.cpp @@ -41,7 +41,6 @@ #include <QtCore/qtextboundaryfinder.h> #include <QtCore/qvarlengtharray.h> -#include <private/qunicodetables_p.h> #include <private/qunicodetools_p.h> QT_BEGIN_NAMESPACE @@ -61,15 +60,15 @@ static void init(QTextBoundaryFinder::BoundaryType type, const QChar *chars, int // correctly assign script, isTab and isObject to the script analysis const ushort *uc = unicode; const ushort *e = uc + length; - int script = QUnicodeTables::Common; - int lastScript = QUnicodeTables::Common; + uchar script = QChar::Script_Common; + uchar lastScript = QChar::Script_Common; const ushort *start = uc; while (uc < e) { - int s = QUnicodeTables::script(*uc); - if (s != QUnicodeTables::Inherited) + int s = QChar::script(*uc); + if (s != QChar::Script_Inherited) script = s; if (*uc == QChar::ObjectReplacementCharacter || *uc == QChar::LineSeparator || *uc == 9) - script = QUnicodeTables::Common; + script = QChar::Script_Common; if (script != lastScript) { if (uc != start) { QUnicodeTools::ScriptItem item; diff --git a/src/corelib/tools/qtextboundaryfinder.h b/src/corelib/tools/qtextboundaryfinder.h index e05547359f..81cd0dddf0 100644 --- a/src/corelib/tools/qtextboundaryfinder.h +++ b/src/corelib/tools/qtextboundaryfinder.h @@ -45,8 +45,6 @@ #include <QtCore/qchar.h> #include <QtCore/qstring.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -111,7 +109,5 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QTextBoundaryFinder::BoundaryReasons) QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/tools/qtimeline.h b/src/corelib/tools/qtimeline.h index 6b5c479cb1..be2a4ae734 100644 --- a/src/corelib/tools/qtimeline.h +++ b/src/corelib/tools/qtimeline.h @@ -45,8 +45,6 @@ #include <QtCore/qeasingcurve.h> #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -156,7 +154,5 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/corelib/tools/qunicodetables.cpp b/src/corelib/tools/qunicodetables.cpp index b9f91cdb74..764a4afa04 100644 --- a/src/corelib/tools/qunicodetables.cpp +++ b/src/corelib/tools/qunicodetables.cpp @@ -70,109 +70,41 @@ static const unsigned short uc_property_trie[] = { 10224, 10256, 10288, 10320, 10352, 10384, 10416, 10448, 10480, 10480, 10512, 10544, 10544, 10576, 10608, 10640, 10672, 10704, 10736, 10704, 10768, 10800, 10832, 10864, - 10896, 10704, 10928, 10960, 10992, 10704, 10704, 11024, - 11056, 10704, 10704, 10704, 10704, 10704, 10704, 10704, - 10704, 10704, 10704, 10704, 10704, 10704, 10704, 10704, - 10704, 10704, 10704, 11088, 11120, 11152, 11152, 11184, - 11216, 11248, 11280, 11312, 11344, 11376, 11408, 11440, - 11472, 10704, 11504, 11536, 10704, 11568, 11600, 11632, - 11664, 11696, 11728, 11760, 11792, 11824, 11856, 11888, - 11920, 11952, 11984, 12016, 12048, 12080, 9872, 9872, - 12112, 12144, 12176, 12208, 12240, 12272, 12304, 12336, - 12368, 12400, 12432, 12464, 9872, 9872, 12496, 12528, - 12560, 12592, 12624, 12656, 12688, 12720, 12752, 12784, - 6512, 6512, 6512, 6512, 12816, 6512, 6512, 12848, - 12880, 12912, 12944, 12976, 13008, 13040, 13072, 13104, - - 13136, 13168, 13200, 13232, 13264, 13296, 13328, 13360, - 13392, 13424, 13456, 13488, 13520, 13552, 13584, 13616, - 13648, 13680, 13712, 13744, 13776, 13808, 13840, 13872, - 13904, 13936, 13968, 14000, 14032, 14064, 14096, 14128, - 14160, 14192, 14224, 14256, 14288, 14320, 14352, 14384, - 14160, 14160, 14160, 14160, 14416, 14448, 14480, 14512, - 14544, 14576, 14160, 14608, 14640, 14672, 14704, 14736, - 14768, 14800, 14832, 14864, 14896, 14928, 14960, 14992, - 15024, 15024, 15024, 15024, 15024, 15024, 15024, 15024, - 15056, 15056, 15056, 15056, 15088, 15120, 15152, 15184, - 15056, 15216, 15056, 15248, 15280, 15312, 15344, 15376, - 15408, 15440, 15472, 9872, 9872, 9872, 9872, 9872, - 15504, 15536, 15568, 15600, 15632, 15632, 15632, 15664, - 15696, 15728, 15760, 15792, 15824, 15856, 15856, 15888, - 15920, 15952, 9872, 9872, 15984, 16016, 16016, 16048, - 16016, 16016, 16016, 16016, 16016, 16016, 16080, 16112, - - 16144, 16176, 16208, 16240, 16272, 16304, 16336, 16368, - 16400, 16432, 16464, 16464, 16496, 16528, 16560, 16592, - 16624, 16656, 16688, 16720, 16656, 16752, 16784, 16816, - 16848, 16848, 16880, 16912, 16944, 16944, 16976, 17008, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17040, 17040, 17040, - 17040, 17040, 17040, 17040, 17040, 17072, 17104, 17104, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, + 10896, 10704, 10928, 10960, 10992, 11024, 11024, 11056, + 11088, 11120, 11120, 11120, 11120, 11120, 11120, 11120, + 11120, 11120, 11120, 11120, 11120, 11120, 11120, 11120, + 11120, 11120, 11120, 11152, 11184, 11216, 11216, 11248, + 11280, 11312, 11344, 11376, 11408, 11440, 11472, 11504, + 11536, 11568, 11600, 11632, 11568, 11664, 11696, 11728, + 11760, 11792, 11824, 11856, 11888, 11920, 11952, 11984, + 12016, 12048, 12080, 12112, 12144, 12176, 9872, 9872, + 12208, 12240, 12272, 12304, 12336, 12368, 12400, 12432, + 12464, 12496, 12528, 12560, 9872, 9872, 12592, 12624, + 12656, 12688, 12720, 12752, 12784, 12816, 12848, 12880, + 6512, 6512, 6512, 6512, 12912, 6512, 6512, 12944, + 12976, 13008, 13040, 13072, 13104, 13136, 13168, 13200, + + 13232, 13264, 13296, 13328, 13360, 13392, 13424, 13456, + 13488, 13520, 13552, 13584, 13616, 13648, 13680, 13712, + 13744, 13776, 13808, 13840, 13872, 13904, 13936, 13968, + 14000, 14032, 14064, 14096, 14128, 14160, 14192, 14224, + 14256, 14288, 14320, 14352, 14384, 14416, 14448, 14480, + 14256, 14256, 14256, 14256, 14512, 14544, 14576, 14608, + 14640, 14672, 14256, 14704, 14736, 14768, 14800, 14832, + 14864, 14896, 14928, 14960, 14992, 15024, 15056, 15088, + 15120, 15120, 15120, 15120, 15120, 15120, 15120, 15120, + 15152, 15152, 15152, 15152, 15184, 15216, 15248, 15280, + 15152, 15312, 15152, 15344, 15376, 15408, 15440, 15472, + 15504, 15536, 15568, 9872, 9872, 9872, 9872, 9872, + 15600, 15632, 15664, 15696, 15728, 15728, 15728, 15760, + 15792, 15824, 15856, 15888, 15920, 15952, 15952, 15984, + 16016, 16048, 9872, 9872, 16080, 16112, 16112, 16144, + 16112, 16112, 16112, 16112, 16112, 16112, 16176, 16208, + + 16240, 16272, 16304, 16336, 16368, 16400, 16432, 16464, + 16496, 16528, 16560, 16560, 16592, 16624, 16656, 16688, + 16720, 16752, 16784, 16816, 16752, 16848, 16880, 16912, + 16944, 16944, 16976, 17008, 17040, 17040, 17072, 17104, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, @@ -199,674 +131,742 @@ static const unsigned short uc_property_trie[] = { 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 17136, 17136, 17136, 17136, 17168, 17200, 17232, - - 17264, 17296, 17296, 17296, 17296, 17296, 17296, 17296, - 17296, 17296, 17296, 17296, 17296, 17296, 17296, 17296, - 17296, 17296, 17296, 17296, 17296, 17296, 17296, 17296, - 17296, 17296, 17296, 17296, 17296, 17296, 17296, 17296, - 17296, 17296, 17296, 17296, 17328, 17360, 17392, 17424, - 12368, 12368, 12368, 12368, 12368, 12368, 12368, 12368, - 17456, 17488, 17520, 17552, 17584, 11600, 11600, 17616, - 17648, 17680, 17712, 17744, 17776, 17808, 9872, 17840, - 17872, 17904, 17936, 17968, 18000, 18032, 18064, 18096, - 18128, 18160, 18192, 18224, 18256, 18288, 18320, 9872, - 12368, 18352, 18384, 18416, 11952, 18448, 18480, 18512, - 18544, 18576, 9872, 9872, 9872, 9872, 11600, 18608, - 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18640, - 18672, 18704, 18736, 18768, 18800, 18832, 18640, 18672, - 18704, 18736, 18768, 18800, 18832, 18640, 18672, 18704, - 18736, 18768, 18800, 18832, 18640, 18672, 18704, 18736, - - 18768, 18800, 18832, 18640, 18672, 18704, 18736, 18768, - 18800, 18832, 18640, 18672, 18704, 18736, 18768, 18800, - 18832, 18640, 18672, 18704, 18736, 18768, 18800, 18832, - 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18640, - 18672, 18704, 18736, 18768, 18800, 18832, 18640, 18672, - 18704, 18736, 18768, 18800, 18832, 18640, 18672, 18704, - 18736, 18768, 18800, 18832, 18640, 18672, 18704, 18736, - 18768, 18800, 18832, 18640, 18672, 18704, 18736, 18768, - 18800, 18832, 18640, 18672, 18704, 18736, 18768, 18800, - 18832, 18640, 18672, 18704, 18736, 18768, 18800, 18832, - 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18640, - 18672, 18704, 18736, 18768, 18800, 18832, 18640, 18672, - 18704, 18736, 18768, 18800, 18832, 18640, 18672, 18704, - 18736, 18768, 18800, 18832, 18640, 18672, 18704, 18736, - 18768, 18800, 18832, 18640, 18672, 18704, 18736, 18768, - 18800, 18832, 18640, 18672, 18704, 18736, 18768, 18800, - - 18832, 18640, 18672, 18704, 18736, 18768, 18800, 18832, - 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18640, - 18672, 18704, 18736, 18768, 18800, 18832, 18640, 18672, - 18704, 18736, 18768, 18800, 18832, 18640, 18672, 18704, - 18736, 18768, 18800, 18832, 18640, 18672, 18704, 18736, - 18768, 18800, 18832, 18640, 18672, 18704, 18736, 18768, - 18800, 18832, 18640, 18672, 18704, 18736, 18768, 18800, - 18832, 18640, 18672, 18704, 18736, 18768, 18800, 18832, - 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18640, - 18672, 18704, 18736, 18768, 18800, 18832, 18640, 18672, - 18704, 18736, 18768, 18800, 18832, 18640, 18672, 18704, - 18736, 18768, 18800, 18832, 18640, 18672, 18704, 18736, - 18768, 18800, 18832, 18640, 18672, 18704, 18736, 18768, - 18800, 18832, 18640, 18672, 18704, 18736, 18768, 18800, - 18832, 18640, 18672, 18704, 18736, 18768, 18800, 18832, - 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18640, - - 18672, 18704, 18736, 18768, 18800, 18832, 18640, 18672, - 18704, 18736, 18768, 18800, 18832, 18640, 18672, 18704, - 18736, 18768, 18800, 18832, 18640, 18672, 18704, 18736, - 18768, 18800, 18832, 18640, 18672, 18704, 18736, 18768, - 18800, 18832, 18640, 18672, 18704, 18736, 18768, 18800, - 18832, 18640, 18672, 18704, 18736, 18768, 18800, 18832, - 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18640, - 18672, 18704, 18736, 18768, 18800, 18864, 18896, 18928, - 18960, 18960, 18960, 18960, 18960, 18960, 18960, 18960, - 18960, 18960, 18960, 18960, 18960, 18960, 18960, 18960, - 18960, 18960, 18960, 18960, 18960, 18960, 18960, 18960, - 18960, 18960, 18960, 18960, 18960, 18960, 18960, 18960, - 18960, 18960, 18960, 18960, 18960, 18960, 18960, 18960, - 18960, 18960, 18960, 18960, 18960, 18960, 18960, 18960, - 18960, 18960, 18960, 18960, 18960, 18960, 18960, 18960, - 18960, 18960, 18960, 18960, 18960, 18960, 18960, 18960, - - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 17136, 17136, 17136, 17136, 17136, 17136, 17136, 17136, - 17136, 19024, 19056, 19088, 19120, 19120, 19152, 17232, - 19184, 19216, 19248, 19280, 19280, 19312, 19344, 19280, - 19280, 19280, 19280, 19280, 19280, 19280, 19280, 19280, - 19280, 19376, 19408, 19280, 19440, 19280, 19472, 19504, - 19536, 19568, 19600, 19632, 19280, 19280, 19280, 19664, - 19696, 19728, 19760, 19792, 19824, 19856, 19888, 19920, - - 19952, 19984, 20016, 9872, 20048, 20048, 20048, 20080, - 20112, 20144, 20176, 20208, 20240, 9872, 20272, 20304, - 9872, 9872, 9872, 9872, 20336, 12368, 20368, 9872, - 20400, 20432, 20464, 9872, 20496, 15760, 20528, 9872, - 20560, 20592, 20624, 20048, 20656, 20688, 9872, 9872, + 17136, 17136, 17136, 17136, 17136, 17168, 17200, 17200, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 17232, 17232, 17232, 17232, 17264, 17296, 17328, + + 17360, 17392, 17392, 17392, 17392, 17392, 17392, 17392, + 17392, 17392, 17392, 17392, 17392, 17392, 17392, 17392, + 17392, 17392, 17392, 17392, 17392, 17392, 17392, 17392, + 17392, 17392, 17392, 17392, 17392, 17392, 17392, 17392, + 17392, 17392, 17392, 17392, 17424, 17456, 17488, 17520, + 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552, + 17584, 17616, 17648, 17680, 17712, 17744, 17744, 17776, + 17808, 17840, 17872, 17904, 17936, 17968, 9872, 18000, + 18032, 18064, 18096, 18128, 18160, 18192, 18224, 18256, + 18288, 18320, 18352, 18384, 18416, 18448, 18480, 9872, + 18512, 18544, 18576, 18608, 18640, 18672, 18704, 18736, + 18768, 18800, 9872, 9872, 9872, 9872, 18832, 18864, + 18896, 18928, 18960, 18992, 19024, 19056, 19088, 18896, + 18928, 18960, 18992, 19024, 19056, 19088, 18896, 18928, + 18960, 18992, 19024, 19056, 19088, 18896, 18928, 18960, + 18992, 19024, 19056, 19088, 18896, 18928, 18960, 18992, + + 19024, 19056, 19088, 18896, 18928, 18960, 18992, 19024, + 19056, 19088, 18896, 18928, 18960, 18992, 19024, 19056, + 19088, 18896, 18928, 18960, 18992, 19024, 19056, 19088, + 18896, 18928, 18960, 18992, 19024, 19056, 19088, 18896, + 18928, 18960, 18992, 19024, 19056, 19088, 18896, 18928, + 18960, 18992, 19024, 19056, 19088, 18896, 18928, 18960, + 18992, 19024, 19056, 19088, 18896, 18928, 18960, 18992, + 19024, 19056, 19088, 18896, 18928, 18960, 18992, 19024, + 19056, 19088, 18896, 18928, 18960, 18992, 19024, 19056, + 19088, 18896, 18928, 18960, 18992, 19024, 19056, 19088, + 18896, 18928, 18960, 18992, 19024, 19056, 19088, 18896, + 18928, 18960, 18992, 19024, 19056, 19088, 18896, 18928, + 18960, 18992, 19024, 19056, 19088, 18896, 18928, 18960, + 18992, 19024, 19056, 19088, 18896, 18928, 18960, 18992, + 19024, 19056, 19088, 18896, 18928, 18960, 18992, 19024, + 19056, 19088, 18896, 18928, 18960, 18992, 19024, 19056, + + 19088, 18896, 18928, 18960, 18992, 19024, 19056, 19088, + 18896, 18928, 18960, 18992, 19024, 19056, 19088, 18896, + 18928, 18960, 18992, 19024, 19056, 19088, 18896, 18928, + 18960, 18992, 19024, 19056, 19088, 18896, 18928, 18960, + 18992, 19024, 19056, 19088, 18896, 18928, 18960, 18992, + 19024, 19056, 19088, 18896, 18928, 18960, 18992, 19024, + 19056, 19088, 18896, 18928, 18960, 18992, 19024, 19056, + 19088, 18896, 18928, 18960, 18992, 19024, 19056, 19088, + 18896, 18928, 18960, 18992, 19024, 19056, 19088, 18896, + 18928, 18960, 18992, 19024, 19056, 19088, 18896, 18928, + 18960, 18992, 19024, 19056, 19088, 18896, 18928, 18960, + 18992, 19024, 19056, 19088, 18896, 18928, 18960, 18992, + 19024, 19056, 19088, 18896, 18928, 18960, 18992, 19024, + 19056, 19088, 18896, 18928, 18960, 18992, 19024, 19056, + 19088, 18896, 18928, 18960, 18992, 19024, 19056, 19088, + 18896, 18928, 18960, 18992, 19024, 19056, 19088, 18896, + + 18928, 18960, 18992, 19024, 19056, 19088, 18896, 18928, + 18960, 18992, 19024, 19056, 19088, 18896, 18928, 18960, + 18992, 19024, 19056, 19088, 18896, 18928, 18960, 18992, + 19024, 19056, 19088, 18896, 18928, 18960, 18992, 19024, + 19056, 19088, 18896, 18928, 18960, 18992, 19024, 19056, + 19088, 18896, 18928, 18960, 18992, 19024, 19056, 19088, + 18896, 18928, 18960, 18992, 19024, 19056, 19088, 18896, + 18928, 18960, 18992, 19024, 19056, 19120, 19152, 19184, + 19216, 19216, 19216, 19216, 19216, 19216, 19216, 19216, + 19216, 19216, 19216, 19216, 19216, 19216, 19216, 19216, + 19216, 19216, 19216, 19216, 19216, 19216, 19216, 19216, + 19216, 19216, 19216, 19216, 19216, 19216, 19216, 19216, + 19216, 19216, 19216, 19216, 19216, 19216, 19216, 19216, + 19216, 19216, 19216, 19216, 19216, 19216, 19216, 19216, + 19216, 19216, 19216, 19216, 19216, 19216, 19216, 19216, + 19216, 19216, 19216, 19216, 19216, 19216, 19216, 19216, + + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 19248, 19248, 19248, 19248, 19248, 19248, 19248, 19248, + 17232, 17232, 17232, 17232, 17232, 17232, 17232, 17232, + 17232, 19280, 19312, 19344, 19376, 19376, 19408, 17328, + 19440, 19472, 19504, 19536, 19536, 19568, 19600, 19536, + 19536, 19536, 19536, 19536, 19536, 19536, 19536, 19536, + 19536, 19632, 19664, 19536, 19696, 19536, 19728, 19760, + 19792, 19824, 19856, 19888, 19536, 19536, 19536, 19920, + 19952, 19984, 20016, 20048, 20080, 20112, 20144, 20176, + + 20208, 20240, 20272, 9872, 20304, 20304, 20304, 20336, + 20368, 20400, 20432, 20464, 20496, 9872, 20528, 20560, + 9872, 9872, 9872, 9872, 20592, 20624, 20656, 9872, + 20688, 20720, 20752, 9872, 20784, 20816, 20848, 9872, + 20880, 20912, 20944, 20976, 21008, 21040, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, 9872, - 20720, 20752, 20784, 8368, 8368, 8368, 8368, 8368, - 20816, 20848, 8368, 8368, 20880, 20912, 8368, 8368, - 20944, 20976, 21008, 21040, 8368, 8368, 8368, 8368, - 21072, 21104, 21136, 21168, 8368, 8368, 8368, 8368, - 21072, 21072, 21200, 8368, 8368, 8368, 8368, 8368, + 21072, 21104, 21136, 8368, 8368, 8368, 8368, 8368, + 21168, 21200, 8368, 8368, 21232, 21264, 8368, 8368, + 21296, 21328, 21360, 21392, 8368, 8368, 8368, 8368, + 21424, 21456, 21488, 21520, 8368, 8368, 8368, 8368, + 21552, 21552, 21584, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, - 8368, 8368, 8368, 21232, 8368, 8368, 8368, 8368, + 8368, 8368, 8368, 21616, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, 8368, // 0x11000 - 0x110000 - 21264, 21520, 21776, 21776, 21776, 21776, 22032, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 22288, 22288, 22288, 22544, 22800, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 23056, 23056, 23312, 23568, 23824, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 24080, 24080, 24336, 21776, 21776, 21776, 21776, 24592, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 24848, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 25104, 25360, 25616, 25872, 26128, 26384, 26640, 26896, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 27152, 27152, 27152, 27152, 27152, 27152, 27408, 27152, - 27664, 27920, 28176, 28432, 28688, 28944, 29200, 29456, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 29968, 29968, - 29968, 29968, 29968, 29968, 29968, 29968, 30224, 30480, - 30480, 30480, 30480, 30480, 30480, 30480, 30480, 30480, - 30480, 30480, 30480, 30480, 30480, 30480, 30480, 30736, - 30992, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 29968, 29968, 31504, 31248, 31248, 31248, 31248, 31760, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31248, - 31248, 31248, 31248, 31248, 31248, 31248, 31248, 31760, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 32016, 32272, 32528, 32528, 32528, 32528, 32528, 32528, - 32528, 32528, 32528, 32528, 32528, 32528, 32528, 32528, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 21776, - 21776, 21776, 21776, 21776, 21776, 21776, 21776, 29712, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 33040, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 32784, - 32784, 32784, 32784, 32784, 32784, 32784, 32784, 33040, + 21648, 21904, 22160, 22160, 22160, 22160, 22416, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22672, 22672, 22672, 22928, 23184, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 23440, 23440, 23696, 23952, 24208, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 24464, 24464, 24720, 22160, 22160, 22160, 22160, 24976, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 25232, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 25488, 25744, 26000, 26256, 26512, 26768, 27024, 27280, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 27536, 27536, 27536, 27536, 27536, 27536, 27792, 27536, + 28048, 28304, 28560, 28816, 29072, 29328, 29584, 29840, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30352, 30352, + 30352, 30352, 30352, 30352, 30352, 30352, 30608, 30864, + 30864, 30864, 30864, 30864, 30864, 30864, 30864, 30864, + 30864, 30864, 30864, 30864, 30864, 30864, 30864, 31120, + 31376, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 30352, 30352, 31888, 31632, 31632, 31632, 31632, 32144, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 31632, + 31632, 31632, 31632, 31632, 31632, 31632, 31632, 32144, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 32400, 32656, 32912, 32912, 32912, 32912, 32912, 32912, + 32912, 32912, 32912, 32912, 32912, 32912, 32912, 32912, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 22160, + 22160, 22160, 22160, 22160, 22160, 22160, 22160, 30096, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33424, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33168, + 33168, 33168, 33168, 33168, 33168, 33168, 33168, 33424, 0, 0, 0, 0, 0, 0, 0, 0, @@ -979,575 +979,555 @@ static const unsigned short uc_property_trie[] = { 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 144, 144, 144, 144, 144, - 142, 142, 42, 42, 42, 42, 143, 143, - 145, 143, 143, 143, 145, 143, 143, 143, + 145, 145, 42, 42, 42, 42, 143, 143, + 146, 143, 143, 143, 146, 143, 143, 143, 144, 144, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 146, + 42, 42, 42, 42, 42, 42, 42, 147, 142, 142, 142, 142, 142, 42, 42, 42, - 42, 42, 147, 147, 148, 147, 149, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 152, 153, 153, - 153, 153, 152, 154, 153, 153, 153, 153, - - 153, 155, 155, 153, 153, 153, 153, 155, - 155, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 156, 156, 156, 156, - 156, 153, 153, 153, 153, 151, 151, 151, - - 151, 151, 151, 151, 151, 157, 158, 159, - 159, 159, 158, 158, 158, 159, 159, 160, - 161, 161, 161, 162, 162, 162, 162, 161, - 163, 164, 164, 165, 166, 167, 167, 168, - - 169, 169, 170, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 172, 173, 172, 173, 143, 174, 172, 173, - 175, 175, 176, 177, 177, 177, 34, 175, - - 175, 175, 175, 175, 174, 42, 178, 61, - 179, 179, 179, 175, 180, 175, 181, 181, - 182, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - - 183, 183, 175, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 184, 185, 185, 185, - 186, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - - 187, 187, 188, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 189, 190, 190, 191, - 192, 193, 194, 194, 194, 195, 196, 197, - 198, 199, 200, 201, 200, 201, 200, 201, - - 200, 201, 67, 68, 67, 68, 67, 68, - 67, 68, 67, 68, 67, 68, 67, 68, - 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 209, 210, 212, 213, 213, 213, + 42, 42, 148, 148, 149, 150, 151, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 154, 155, 155, + 155, 155, 154, 156, 155, 155, 155, 155, + + 155, 157, 157, 155, 155, 155, 155, 157, + 157, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 158, 158, 158, 158, + 158, 155, 155, 155, 155, 153, 153, 153, + + 153, 153, 153, 153, 153, 159, 160, 161, + 161, 161, 160, 160, 160, 161, 161, 162, + 163, 163, 163, 164, 164, 164, 164, 163, + 165, 166, 166, 167, 168, 169, 169, 170, + + 171, 171, 172, 173, 173, 173, 173, 173, + 173, 173, 173, 173, 173, 173, 173, 173, + 174, 175, 174, 175, 143, 176, 174, 175, + 177, 177, 178, 179, 179, 179, 34, 177, + + 177, 177, 177, 177, 176, 42, 180, 61, + 181, 181, 181, 177, 182, 177, 183, 183, + 184, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, + + 185, 185, 177, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 186, 187, 187, 187, + 188, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + + 189, 189, 190, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 191, 192, 192, 193, + 194, 195, 196, 196, 196, 197, 198, 199, + 200, 201, 202, 203, 202, 203, 202, 203, + + 202, 203, 204, 205, 204, 205, 204, 205, + 204, 205, 204, 205, 204, 205, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 213, 214, 216, 217, 217, 217, - 214, 215, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 215, 215, 214, 215, 215, - 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, - - 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, - 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, - - 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, 218, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 218, 219, 219, + 220, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, + + 220, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, + 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + + 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + 222, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 223, 222, 223, 223, + + 224, 225, 224, 225, 224, 225, 224, 225, + 224, 225, 224, 225, 224, 225, 224, 225, + 224, 225, 224, 225, 224, 225, 224, 225, + 224, 225, 224, 225, 224, 225, 224, 225, + + 224, 225, 226, 227, 227, 153, 153, 228, + 229, 229, 230, 231, 232, 233, 232, 233, + 224, 225, 224, 225, 224, 225, 224, 225, + 224, 225, 224, 225, 224, 225, 224, 225, + + 234, 224, 225, 224, 225, 230, 231, 224, + 225, 230, 231, 224, 225, 230, 231, 235, + 224, 225, 224, 225, 224, 225, 224, 225, + 224, 225, 224, 225, 224, 225, 224, 225, + + 224, 225, 224, 225, 224, 225, 224, 225, + 224, 225, 224, 225, 232, 233, 224, 225, + 224, 225, 224, 225, 224, 225, 236, 237, + 224, 225, 238, 239, 238, 239, 238, 239, + + 230, 231, 230, 231, 230, 231, 230, 231, + 230, 231, 230, 231, 230, 231, 230, 231, + 238, 239, 238, 239, 240, 241, 240, 241, + 240, 241, 240, 241, 240, 241, 240, 241, + + 240, 241, 240, 241, 242, 243, 244, 245, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, + + 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 177, + 177, 247, 248, 248, 249, 250, 249, 248, + + 177, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, + + 251, 251, 251, 251, 251, 251, 251, 252, + 177, 253, 254, 177, 177, 177, 177, 255, + 256, 257, 258, 258, 258, 258, 257, 258, + 258, 258, 259, 257, 258, 258, 258, 258, + + 258, 258, 260, 257, 257, 257, 257, 257, + 258, 258, 257, 258, 258, 259, 261, 258, + 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, + + 278, 279, 280, 278, 258, 260, 281, 282, + 256, 256, 256, 256, 256, 256, 256, 256, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 256, 256, 256, 256, 256, + 283, 283, 283, 284, 285, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + + 286, 286, 286, 286, 287, 288, 289, 289, + 290, 291, 291, 292, 19, 293, 294, 294, + 295, 295, 295, 295, 295, 295, 296, 296, + 297, 298, 299, 300, 288, 288, 301, 302, + + 303, 304, 305, 305, 305, 305, 306, 305, + 306, 305, 306, 306, 306, 306, 306, 305, + 305, 305, 305, 306, 306, 306, 306, 306, + 306, 306, 306, 307, 307, 307, 307, 307, + + 308, 306, 306, 306, 306, 306, 306, 306, + 305, 306, 306, 309, 310, 311, 312, 313, + 314, 315, 316, 160, 160, 161, 317, 295, + 295, 318, 318, 318, 319, 318, 318, 320, + + 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 335, + 336, 305, 305, 305, 304, 305, 305, 305, + 306, 306, 306, 306, 306, 306, 306, 306, + + 306, 306, 306, 306, 306, 306, 306, 306, + 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 306, 306, 306, 306, 306, 306, + + 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, + 337, 337, 306, 306, 306, 306, 306, 337, + + 305, 306, 306, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 306, 305, 306, 338, + 306, 306, 305, 305, 339, 305, 340, 340, + 340, 340, 340, 340, 340, 341, 342, 340, + + 340, 340, 340, 343, 340, 344, 344, 340, + 340, 342, 343, 340, 340, 343, 345, 345, + 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 337, 337, 337, 356, 356, 357, + + 358, 358, 358, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 288, 360, + 361, 362, 363, 363, 363, 361, 361, 361, + 361, 361, 363, 363, 363, 363, 361, 363, + + 363, 363, 363, 363, 363, 363, 363, 363, + 361, 363, 361, 363, 361, 364, 364, 365, + 366, 367, 366, 366, 367, 366, 366, 367, + 367, 367, 366, 367, 367, 366, 367, 366, + + 366, 366, 367, 366, 367, 366, 367, 366, + 367, 366, 366, 288, 288, 365, 364, 364, + 368, 368, 368, 368, 368, 368, 368, 368, + 368, 369, 369, 369, 368, 368, 368, 368, - 220, 221, 220, 221, 220, 221, 220, 221, - 220, 221, 220, 221, 220, 221, 220, 221, - 220, 221, 220, 221, 220, 221, 220, 221, - 220, 221, 220, 221, 220, 221, 220, 221, - - 220, 221, 222, 223, 223, 151, 151, 224, - 225, 225, 226, 227, 228, 229, 228, 229, - 220, 221, 220, 221, 220, 221, 220, 221, - 220, 221, 220, 221, 220, 221, 220, 221, - - 230, 220, 221, 220, 221, 226, 227, 220, - 221, 226, 227, 220, 221, 226, 227, 231, - 220, 221, 220, 221, 220, 221, 220, 221, - 220, 221, 220, 221, 220, 221, 220, 221, - - 220, 221, 220, 221, 220, 221, 220, 221, - 220, 221, 220, 221, 228, 229, 220, 221, - 220, 221, 220, 221, 220, 221, 232, 233, - 220, 221, 234, 235, 234, 235, 234, 235, - - 226, 227, 226, 227, 226, 227, 226, 227, - 226, 227, 226, 227, 226, 227, 226, 227, - 234, 235, 234, 235, 236, 237, 236, 237, - 236, 237, 236, 237, 236, 237, 236, 237, - - 236, 237, 236, 237, 238, 239, 240, 241, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 242, 242, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 242, - - 242, 242, 242, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 175, - 175, 243, 244, 244, 245, 246, 245, 244, - - 175, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, - - 247, 247, 247, 247, 247, 247, 247, 248, - 175, 249, 250, 175, 175, 175, 175, 251, - 252, 253, 254, 254, 254, 254, 253, 254, - 254, 254, 255, 253, 254, 254, 254, 254, - - 254, 254, 256, 253, 253, 253, 253, 253, - 254, 254, 253, 254, 254, 255, 257, 254, - 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, - - 274, 275, 276, 274, 254, 256, 277, 278, - 252, 252, 252, 252, 252, 252, 252, 252, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 252, 252, 252, 252, 252, - 279, 279, 279, 280, 281, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - - 282, 282, 282, 282, 283, 284, 285, 285, - 286, 287, 287, 288, 19, 289, 290, 290, - 291, 291, 291, 291, 291, 291, 292, 292, - 293, 294, 295, 296, 284, 284, 297, 298, - - 299, 300, 301, 301, 301, 301, 302, 301, - 302, 301, 302, 302, 302, 302, 302, 301, - 301, 301, 301, 302, 302, 302, 302, 302, - 302, 302, 302, 303, 303, 303, 303, 303, - - 304, 302, 302, 302, 302, 302, 302, 302, - 301, 302, 302, 305, 306, 307, 308, 309, - 310, 311, 312, 158, 158, 159, 313, 291, - 291, 314, 314, 314, 315, 314, 314, 316, - - 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 331, - 332, 301, 301, 301, 300, 301, 301, 301, - 302, 302, 302, 302, 302, 302, 302, 302, - - 302, 302, 302, 302, 302, 302, 302, 302, - 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 302, 302, 302, 302, 302, 302, - - 302, 302, 302, 302, 302, 302, 302, 302, - 302, 302, 302, 302, 302, 302, 302, 302, - 302, 302, 302, 302, 302, 302, 302, 302, - 333, 333, 302, 302, 302, 302, 302, 333, - - 301, 302, 302, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 302, 301, 302, 334, - 302, 302, 301, 301, 335, 301, 336, 336, - 336, 336, 336, 336, 336, 337, 338, 336, - - 336, 336, 336, 339, 336, 340, 340, 336, - 336, 338, 339, 336, 336, 339, 341, 341, - 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 333, 333, 333, 352, 352, 353, - - 354, 354, 354, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 284, 356, - 357, 358, 359, 359, 359, 357, 357, 357, - 357, 357, 359, 359, 359, 359, 357, 359, - - 359, 359, 359, 359, 359, 359, 359, 359, - 357, 359, 357, 359, 357, 360, 360, 361, - 362, 363, 362, 362, 363, 362, 362, 363, - 363, 363, 362, 363, 363, 362, 363, 362, - - 362, 362, 363, 362, 363, 362, 363, 362, - 363, 362, 362, 284, 284, 361, 360, 360, - 364, 364, 364, 364, 364, 364, 364, 364, - 364, 365, 365, 365, 364, 364, 364, 364, - - 364, 364, 364, 364, 364, 364, 364, 364, - 364, 364, 364, 365, 365, 364, 303, 303, - 303, 366, 303, 366, 366, 303, 303, 303, - 366, 366, 303, 303, 303, 303, 303, 303, - - 367, 367, 367, 367, 367, 367, 367, 367, - 367, 367, 367, 367, 367, 367, 367, 367, - 367, 367, 367, 367, 367, 367, 367, 367, - 367, 367, 367, 367, 367, 367, 367, 367, - - 367, 367, 367, 367, 367, 367, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 369, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - - 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 380, 380, 380, 380, 380, - 380, 380, 380, 380, 380, 380, 380, 380, - 380, 380, 380, 380, 380, 380, 380, 380, - - 380, 380, 380, 380, 380, 380, 380, 380, - 380, 380, 380, 381, 381, 381, 381, 381, - 381, 381, 382, 381, 383, 383, 384, 385, - 386, 387, 388, 252, 252, 252, 252, 252, - - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 390, 390, - 390, 390, 391, 390, 390, 390, 390, 390, - - 390, 390, 390, 390, 391, 390, 390, 390, - 391, 390, 390, 390, 390, 390, 252, 252, - 392, 392, 392, 392, 392, 392, 392, 392, - 392, 392, 392, 392, 392, 392, 392, 252, - - 393, 394, 394, 394, 394, 394, 393, 394, - 394, 393, 394, 394, 394, 394, 394, 393, - 394, 394, 394, 394, 393, 394, 395, 395, - 395, 396, 396, 396, 252, 252, 397, 252, - - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - - 398, 284, 398, 398, 398, 398, 398, 398, - 398, 398, 399, 399, 399, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - - 284, 284, 284, 284, 400, 400, 401, 400, - 400, 401, 400, 400, 400, 401, 401, 401, - 402, 403, 404, 400, 400, 400, 401, 400, - 400, 401, 401, 400, 400, 400, 400, 284, - - 405, 406, 406, 407, 408, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 410, 411, 412, 409, 407, 407, - - 407, 406, 406, 406, 406, 406, 406, 406, - 406, 407, 407, 407, 407, 413, 414, 411, - 409, 151, 153, 415, 415, 405, 410, 410, - 409, 409, 409, 409, 409, 409, 409, 409, - - 409, 409, 406, 406, 416, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 430, 430, 430, 430, - 175, 431, 431, 432, 432, 433, 432, 432, - - 175, 434, 435, 435, 175, 436, 436, 436, - 436, 436, 436, 436, 436, 175, 175, 436, - 436, 175, 175, 436, 436, 436, 436, 436, - 436, 436, 436, 436, 436, 436, 436, 436, - - 436, 436, 436, 436, 436, 436, 436, 436, - 436, 175, 436, 436, 436, 436, 436, 436, - 436, 175, 436, 175, 175, 175, 436, 436, - 436, 436, 175, 175, 437, 438, 439, 435, - - 435, 434, 434, 434, 434, 175, 175, 435, - 435, 175, 175, 435, 435, 440, 441, 175, - 175, 175, 175, 175, 175, 175, 175, 439, - 175, 175, 175, 175, 436, 436, 175, 436, - - 436, 436, 434, 434, 175, 175, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, - 436, 436, 452, 452, 453, 453, 453, 453, - 453, 454, 455, 456, 175, 175, 175, 175, - - 175, 457, 458, 459, 175, 460, 460, 460, - 460, 460, 460, 175, 175, 175, 175, 460, - 460, 175, 175, 460, 460, 460, 460, 460, - 460, 460, 460, 460, 460, 460, 460, 460, - - 460, 460, 460, 460, 460, 460, 460, 460, - 460, 175, 460, 460, 460, 460, 460, 460, - 460, 175, 460, 460, 175, 460, 460, 175, - 460, 460, 175, 175, 461, 175, 462, 462, - - 462, 458, 458, 175, 175, 175, 175, 458, - 458, 175, 175, 458, 458, 463, 175, 175, - 175, 464, 175, 175, 175, 175, 175, 175, - 175, 460, 460, 460, 460, 175, 460, 175, - - 175, 175, 175, 175, 175, 175, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, - 458, 458, 460, 460, 460, 464, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 475, 475, 476, 175, 477, 477, 477, - 477, 477, 477, 477, 478, 477, 175, 477, - 477, 477, 175, 477, 477, 477, 477, 477, - 477, 477, 477, 477, 477, 477, 477, 477, - - 477, 477, 477, 477, 477, 477, 477, 477, - 477, 175, 477, 477, 477, 477, 477, 477, - 477, 175, 477, 477, 175, 477, 477, 477, - 477, 477, 175, 175, 479, 477, 476, 476, - - 476, 475, 475, 475, 475, 475, 175, 475, - 475, 476, 175, 476, 476, 480, 175, 175, - 477, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 477, 478, 481, 481, 175, 175, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 494, 495, 495, 175, 496, 496, 496, - 496, 496, 496, 496, 496, 175, 175, 496, - 496, 175, 175, 496, 496, 496, 496, 496, - 496, 496, 496, 496, 496, 496, 496, 496, - - 496, 496, 496, 496, 496, 496, 496, 496, - 496, 175, 496, 496, 496, 496, 496, 496, - 496, 175, 496, 496, 175, 497, 496, 496, - 496, 496, 175, 175, 498, 496, 499, 494, - - 495, 494, 494, 494, 500, 175, 175, 495, - 495, 175, 175, 495, 495, 501, 175, 175, - 175, 175, 175, 175, 175, 175, 494, 499, - 175, 175, 175, 175, 496, 496, 175, 496, - - 496, 496, 500, 500, 175, 175, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, - 512, 497, 513, 513, 513, 513, 513, 513, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 175, 514, 515, 175, 515, 515, 515, - 515, 515, 515, 175, 175, 175, 515, 515, - 515, 175, 515, 515, 515, 515, 175, 175, - 175, 515, 515, 175, 515, 175, 515, 515, - - 175, 175, 175, 515, 515, 175, 175, 175, - 515, 515, 515, 175, 175, 175, 515, 515, - 515, 515, 515, 515, 515, 515, 516, 515, - 515, 515, 175, 175, 175, 175, 517, 518, - - 514, 518, 518, 175, 175, 175, 518, 518, - 518, 175, 518, 518, 518, 519, 175, 175, - 520, 175, 175, 175, 175, 175, 175, 517, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 175, 175, 175, 175, 175, 521, 522, - 523, 524, 525, 526, 527, 528, 529, 530, - 531, 531, 531, 532, 532, 532, 532, 532, - 532, 533, 532, 175, 175, 175, 175, 175, - - 175, 534, 534, 534, 175, 535, 535, 535, - 535, 535, 535, 535, 535, 175, 535, 535, - 535, 175, 535, 535, 535, 535, 535, 535, - 535, 535, 535, 535, 535, 535, 535, 535, - - 535, 535, 535, 535, 535, 535, 535, 535, - 535, 175, 535, 535, 535, 535, 535, 535, - 535, 535, 535, 535, 175, 535, 535, 535, - 535, 535, 175, 175, 175, 536, 537, 537, - - 537, 534, 534, 534, 534, 175, 537, 537, - 537, 175, 537, 537, 537, 538, 175, 175, - 175, 175, 175, 175, 175, 539, 540, 175, - 536, 536, 175, 175, 175, 175, 175, 175, - - 535, 535, 541, 541, 175, 175, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, - 175, 175, 175, 175, 175, 175, 175, 175, - 552, 552, 552, 552, 552, 552, 552, 553, - - 175, 175, 554, 554, 175, 555, 555, 555, - 555, 555, 555, 555, 555, 175, 555, 555, - 555, 175, 555, 555, 555, 555, 555, 555, - 555, 555, 555, 555, 555, 555, 555, 555, - - 555, 555, 555, 555, 555, 555, 555, 555, - 555, 175, 555, 555, 555, 555, 555, 555, - 555, 555, 555, 555, 175, 555, 555, 555, - 555, 555, 175, 175, 556, 557, 554, 558, - - 554, 554, 559, 554, 554, 175, 558, 554, - 554, 175, 554, 554, 560, 561, 175, 175, - 175, 175, 175, 175, 175, 559, 559, 175, - 175, 175, 175, 175, 175, 175, 555, 175, - - 555, 555, 562, 562, 175, 175, 563, 564, - 565, 566, 567, 568, 569, 570, 571, 572, - 175, 573, 573, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 175, 574, 574, 175, 575, 575, 575, - 575, 575, 575, 575, 575, 175, 575, 575, - 575, 175, 575, 575, 575, 575, 575, 575, - 575, 575, 575, 575, 575, 575, 575, 575, - - 575, 575, 575, 575, 575, 575, 575, 575, - 575, 576, 575, 575, 575, 575, 575, 575, - 575, 575, 575, 575, 575, 575, 575, 575, - 575, 575, 576, 175, 175, 577, 578, 574, - - 574, 579, 579, 579, 580, 175, 574, 574, - 574, 175, 574, 574, 574, 581, 576, 175, - 175, 175, 175, 175, 175, 175, 175, 578, - 175, 175, 175, 175, 175, 175, 175, 175, - - 575, 575, 580, 580, 175, 175, 582, 583, - 584, 585, 586, 587, 588, 589, 590, 591, - 592, 592, 592, 592, 592, 592, 175, 175, - 175, 593, 577, 577, 577, 577, 577, 577, - - 175, 175, 594, 594, 175, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 175, - 175, 175, 595, 595, 595, 595, 595, 595, - - 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 175, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 175, 595, 175, 175, - - 595, 595, 595, 595, 595, 595, 595, 175, - 175, 175, 596, 175, 175, 175, 175, 597, - 594, 594, 598, 598, 598, 175, 598, 175, - 594, 594, 594, 594, 594, 594, 594, 597, - - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 594, 594, 599, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 600, 600, 600, 600, 600, 600, 600, - 600, 600, 600, 600, 600, 600, 600, 600, - 600, 600, 600, 600, 600, 600, 600, 600, - 600, 600, 600, 600, 600, 600, 600, 600, - - 600, 600, 600, 600, 600, 600, 600, 600, - 600, 600, 600, 600, 600, 600, 600, 600, - 600, 601, 600, 602, 601, 601, 601, 601, - 603, 603, 604, 175, 175, 175, 175, 12, - - 600, 600, 600, 600, 600, 600, 605, 601, - 606, 606, 606, 606, 601, 601, 601, 607, - 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 618, 175, 175, 175, 175, - - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 619, 619, 175, 619, 175, 175, 619, - 619, 175, 619, 175, 175, 619, 175, 175, - 175, 175, 175, 175, 619, 619, 619, 619, - 175, 619, 619, 619, 619, 619, 619, 619, - - 175, 619, 619, 619, 175, 619, 175, 619, - 175, 175, 619, 619, 175, 619, 619, 619, - 619, 620, 619, 621, 620, 620, 620, 620, - 622, 622, 175, 620, 620, 619, 175, 175, - - 619, 619, 619, 619, 619, 175, 623, 175, - 624, 624, 624, 624, 620, 620, 175, 175, - 625, 626, 627, 628, 629, 630, 631, 632, - 633, 634, 175, 175, 619, 619, 635, 635, - - 636, 637, 637, 637, 638, 639, 638, 638, - 640, 638, 638, 641, 640, 642, 642, 642, - 642, 642, 640, 643, 642, 643, 643, 643, - 644, 644, 643, 643, 643, 643, 643, 643, - - 645, 646, 647, 648, 649, 650, 651, 652, - 653, 654, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 656, 644, 643, 644, - 643, 657, 658, 659, 658, 659, 660, 660, - - 636, 636, 636, 636, 636, 636, 636, 636, - 175, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, - - 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 661, 662, 662, 175, 175, 175, - 175, 663, 664, 665, 666, 665, 665, 665, - 665, 665, 664, 664, 664, 664, 665, 667, - - 664, 665, 668, 668, 669, 641, 668, 668, - 636, 636, 636, 636, 670, 671, 671, 671, - 665, 665, 665, 665, 665, 665, 672, 665, - 175, 665, 665, 665, 665, 665, 665, 665, - - 665, 665, 665, 665, 665, 665, 665, 665, - 665, 665, 665, 665, 665, 665, 672, 672, - 672, 665, 665, 665, 665, 665, 665, 665, - 672, 665, 672, 672, 672, 175, 673, 673, - - 674, 674, 674, 674, 674, 674, 675, 674, - 674, 674, 674, 674, 674, 175, 676, 674, - 677, 677, 678, 679, 680, 681, 681, 681, - 681, 682, 682, 175, 175, 175, 175, 175, - - 683, 683, 683, 683, 683, 683, 683, 683, - 683, 683, 683, 683, 683, 683, 683, 683, - 683, 683, 683, 683, 683, 683, 683, 683, - 683, 683, 683, 683, 683, 683, 683, 683, - - 683, 683, 684, 683, 683, 683, 683, 683, - 684, 683, 683, 685, 686, 687, 687, 687, - 687, 688, 687, 689, 689, 689, 687, 690, - 686, 691, 692, 693, 693, 689, 689, 684, - - 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 704, 704, 705, 705, 705, 705, - 683, 683, 683, 683, 683, 683, 688, 688, - 687, 687, 684, 684, 684, 684, 689, 689, - - 689, 684, 685, 685, 685, 684, 684, 685, - 685, 685, 685, 685, 685, 685, 684, 684, - 684, 689, 689, 689, 689, 684, 684, 684, - 684, 684, 684, 684, 684, 684, 684, 684, - - 684, 684, 689, 685, 693, 689, 689, 685, - 685, 685, 685, 685, 685, 706, 684, 685, - 707, 708, 709, 710, 711, 712, 713, 714, - 715, 716, 717, 717, 717, 718, 719, 719, - - 720, 720, 720, 720, 720, 720, 720, 720, - 720, 720, 720, 720, 720, 720, 720, 720, - 720, 720, 720, 720, 720, 720, 720, 720, - 720, 720, 720, 720, 720, 720, 720, 720, - - 720, 720, 720, 720, 720, 720, 175, 721, - 175, 175, 175, 175, 175, 721, 175, 175, - 722, 722, 722, 722, 722, 722, 722, 722, - 722, 722, 722, 722, 722, 722, 722, 722, - - 722, 722, 722, 722, 722, 722, 722, 722, - 722, 722, 722, 722, 722, 722, 722, 722, - 722, 722, 722, 722, 722, 722, 722, 723, - 723, 724, 724, 725, 726, 727, 727, 727, - - 728, 728, 728, 728, 728, 728, 728, 728, - 728, 728, 728, 728, 728, 728, 728, 728, - 728, 728, 728, 728, 728, 728, 728, 728, - 728, 728, 728, 728, 728, 728, 728, 728, - - 728, 728, 728, 728, 728, 728, 728, 728, - 728, 728, 728, 728, 728, 728, 728, 728, - 728, 728, 728, 728, 728, 728, 728, 728, - 728, 728, 729, 729, 729, 729, 729, 728, - - 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 730, 730, - - 730, 730, 730, 731, 731, 731, 731, 731, - 732, 732, 732, 732, 732, 732, 732, 732, - 732, 732, 732, 732, 732, 732, 732, 732, - 732, 732, 732, 732, 732, 732, 732, 732, + 368, 368, 368, 369, 369, 368, 307, 307, + 307, 370, 307, 370, 370, 307, 307, 307, + 370, 370, 307, 307, 307, 307, 307, 307, + + 371, 371, 371, 371, 371, 371, 371, 371, + 371, 371, 371, 371, 371, 371, 371, 371, + 371, 371, 371, 371, 371, 371, 371, 371, + 371, 371, 371, 371, 371, 371, 371, 371, + + 371, 371, 371, 371, 371, 371, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 373, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + + 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 384, 384, 384, 384, 384, + 384, 384, 384, 384, 384, 384, 384, 384, + 384, 384, 384, 384, 384, 384, 384, 384, + + 384, 384, 384, 384, 384, 384, 384, 384, + 384, 384, 384, 385, 385, 385, 385, 385, + 385, 385, 386, 385, 387, 387, 388, 389, + 390, 391, 392, 256, 256, 256, 256, 256, + + 393, 393, 393, 393, 393, 393, 393, 393, + 393, 393, 393, 393, 393, 393, 393, 393, + 393, 393, 393, 393, 393, 393, 394, 394, + 394, 394, 395, 394, 394, 394, 394, 394, + + 394, 394, 394, 394, 395, 394, 394, 394, + 395, 394, 394, 394, 394, 394, 256, 256, + 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 256, + + 397, 398, 398, 398, 398, 398, 397, 398, + 398, 397, 398, 398, 398, 398, 398, 397, + 398, 398, 398, 398, 397, 398, 399, 399, + 399, 400, 400, 400, 256, 256, 401, 256, + + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + + 402, 288, 402, 402, 402, 402, 402, 402, + 402, 402, 403, 403, 403, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + + 288, 288, 288, 288, 404, 404, 405, 404, + 404, 405, 404, 404, 404, 405, 405, 405, + 406, 407, 408, 404, 404, 404, 405, 404, + 404, 405, 405, 404, 404, 404, 404, 288, + + 409, 410, 410, 411, 412, 413, 413, 413, + 413, 413, 413, 413, 413, 413, 413, 413, + 413, 413, 413, 413, 413, 413, 413, 413, + 413, 413, 413, 413, 413, 413, 413, 413, + + 413, 413, 413, 413, 413, 413, 413, 413, + 413, 413, 413, 413, 413, 413, 413, 413, + 413, 413, 413, 413, 413, 413, 413, 413, + 413, 413, 414, 415, 416, 413, 411, 411, + + 411, 410, 410, 410, 410, 410, 410, 410, + 410, 411, 411, 411, 411, 417, 418, 415, + 413, 153, 155, 419, 419, 409, 414, 414, + 413, 413, 413, 413, 413, 413, 413, 413, + + 413, 413, 410, 410, 420, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 434, 434, 434, 434, + 177, 435, 435, 436, 436, 437, 436, 436, + + 177, 438, 439, 439, 177, 440, 440, 440, + 440, 440, 440, 440, 440, 177, 177, 440, + 440, 177, 177, 440, 440, 440, 440, 440, + 440, 440, 440, 440, 440, 440, 440, 440, + + 440, 440, 440, 440, 440, 440, 440, 440, + 440, 177, 440, 440, 440, 440, 440, 440, + 440, 177, 440, 177, 177, 177, 440, 440, + 440, 440, 177, 177, 441, 442, 443, 439, + + 439, 438, 438, 438, 438, 177, 177, 439, + 439, 177, 177, 439, 439, 444, 445, 177, + 177, 177, 177, 177, 177, 177, 177, 443, + 177, 177, 177, 177, 440, 440, 177, 440, + + 440, 440, 438, 438, 177, 177, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, + 440, 440, 456, 456, 457, 457, 457, 457, + 457, 458, 459, 460, 177, 177, 177, 177, + + 177, 461, 462, 463, 177, 464, 464, 464, + 464, 464, 464, 177, 177, 177, 177, 464, + 464, 177, 177, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, + + 464, 464, 464, 464, 464, 464, 464, 464, + 464, 177, 464, 464, 464, 464, 464, 464, + 464, 177, 464, 464, 177, 464, 464, 177, + 464, 464, 177, 177, 465, 177, 466, 466, + + 466, 462, 462, 177, 177, 177, 177, 462, + 462, 177, 177, 462, 462, 467, 177, 177, + 177, 468, 177, 177, 177, 177, 177, 177, + 177, 464, 464, 464, 464, 177, 464, 177, + + 177, 177, 177, 177, 177, 177, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, + 462, 462, 464, 464, 464, 468, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 479, 479, 480, 177, 481, 481, 481, + 481, 481, 481, 481, 482, 481, 177, 481, + 481, 481, 177, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, + 481, 177, 481, 481, 481, 481, 481, 481, + 481, 177, 481, 481, 177, 481, 481, 481, + 481, 481, 177, 177, 483, 481, 480, 480, + + 480, 479, 479, 479, 479, 479, 177, 479, + 479, 480, 177, 480, 480, 484, 177, 177, + 481, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 481, 482, 485, 485, 177, 177, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 498, 499, 499, 177, 500, 500, 500, + 500, 500, 500, 500, 500, 177, 177, 500, + 500, 177, 177, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, + + 500, 500, 500, 500, 500, 500, 500, 500, + 500, 177, 500, 500, 500, 500, 500, 500, + 500, 177, 500, 500, 177, 501, 500, 500, + 500, 500, 177, 177, 502, 500, 503, 498, + + 499, 498, 498, 498, 504, 177, 177, 499, + 499, 177, 177, 499, 499, 505, 177, 177, + 177, 177, 177, 177, 177, 177, 498, 503, + 177, 177, 177, 177, 500, 500, 177, 500, + + 500, 500, 504, 504, 177, 177, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, + 516, 501, 517, 517, 517, 517, 517, 517, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 177, 518, 519, 177, 519, 519, 519, + 519, 519, 519, 177, 177, 177, 519, 519, + 519, 177, 519, 519, 519, 519, 177, 177, + 177, 519, 519, 177, 519, 177, 519, 519, + + 177, 177, 177, 519, 519, 177, 177, 177, + 519, 519, 519, 177, 177, 177, 519, 519, + 519, 519, 519, 519, 519, 519, 520, 519, + 519, 519, 177, 177, 177, 177, 521, 522, + + 518, 522, 522, 177, 177, 177, 522, 522, + 522, 177, 522, 522, 522, 523, 177, 177, + 524, 177, 177, 177, 177, 177, 177, 521, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 534, + 535, 535, 535, 536, 536, 536, 536, 536, + 536, 537, 536, 177, 177, 177, 177, 177, + + 177, 538, 538, 538, 177, 539, 539, 539, + 539, 539, 539, 539, 539, 177, 539, 539, + 539, 177, 539, 539, 539, 539, 539, 539, + 539, 539, 539, 539, 539, 539, 539, 539, + + 539, 539, 539, 539, 539, 539, 539, 539, + 539, 177, 539, 539, 539, 539, 539, 539, + 539, 539, 539, 539, 177, 539, 539, 539, + 539, 539, 177, 177, 177, 540, 541, 541, + + 541, 538, 538, 538, 538, 177, 541, 541, + 541, 177, 541, 541, 541, 542, 177, 177, + 177, 177, 177, 177, 177, 543, 544, 177, + 540, 540, 177, 177, 177, 177, 177, 177, + + 539, 539, 545, 545, 177, 177, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, + 177, 177, 177, 177, 177, 177, 177, 177, + 556, 556, 556, 556, 556, 556, 556, 557, + + 177, 177, 558, 558, 177, 559, 559, 559, + 559, 559, 559, 559, 559, 177, 559, 559, + 559, 177, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 559, + 559, 177, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 177, 559, 559, 559, + 559, 559, 177, 177, 560, 561, 558, 562, + + 558, 558, 563, 558, 558, 177, 562, 558, + 558, 177, 558, 558, 564, 565, 177, 177, + 177, 177, 177, 177, 177, 563, 563, 177, + 177, 177, 177, 177, 177, 177, 559, 177, + + 559, 559, 566, 566, 177, 177, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, + 177, 577, 577, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 177, 578, 578, 177, 579, 579, 579, + 579, 579, 579, 579, 579, 177, 579, 579, + 579, 177, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, + + 579, 579, 579, 579, 579, 579, 579, 579, + 579, 580, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 580, 177, 177, 581, 582, 578, + + 578, 583, 583, 583, 584, 177, 578, 578, + 578, 177, 578, 578, 578, 585, 580, 177, + 177, 177, 177, 177, 177, 177, 177, 582, + 177, 177, 177, 177, 177, 177, 177, 177, + + 579, 579, 584, 584, 177, 177, 586, 587, + 588, 589, 590, 591, 592, 593, 594, 595, + 596, 596, 596, 596, 596, 596, 177, 177, + 177, 597, 581, 581, 581, 581, 581, 581, + + 177, 177, 598, 598, 177, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 177, + 177, 177, 599, 599, 599, 599, 599, 599, + + 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 177, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 177, 599, 177, 177, + + 599, 599, 599, 599, 599, 599, 599, 177, + 177, 177, 600, 177, 177, 177, 177, 601, + 598, 598, 602, 602, 602, 177, 602, 177, + 598, 598, 598, 598, 598, 598, 598, 601, + + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 598, 598, 603, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, + + 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, + 604, 605, 604, 606, 605, 605, 605, 605, + 607, 607, 608, 177, 177, 177, 177, 12, + + 604, 604, 604, 604, 604, 604, 609, 605, + 610, 610, 610, 610, 605, 605, 605, 611, + 612, 613, 614, 615, 616, 617, 618, 619, + 620, 621, 622, 622, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 623, 623, 177, 623, 177, 177, 623, + 623, 177, 623, 177, 177, 623, 177, 177, + 177, 177, 177, 177, 623, 623, 623, 623, + 177, 623, 623, 623, 623, 623, 623, 623, + + 177, 623, 623, 623, 177, 623, 177, 623, + 177, 177, 623, 623, 177, 623, 623, 623, + 623, 624, 623, 625, 624, 624, 624, 624, + 626, 626, 177, 624, 624, 623, 177, 177, + + 623, 623, 623, 623, 623, 177, 627, 177, + 628, 628, 628, 628, 624, 624, 177, 177, + 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 177, 177, 623, 623, 639, 639, + + 640, 641, 641, 641, 642, 643, 642, 642, + 644, 642, 642, 645, 644, 646, 646, 646, + 646, 646, 644, 647, 646, 647, 647, 647, + 648, 648, 647, 647, 647, 647, 647, 647, + + 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 659, 659, 659, 659, 659, + 659, 659, 659, 659, 660, 648, 647, 648, + 647, 661, 662, 663, 662, 663, 664, 664, + + 640, 640, 640, 640, 640, 640, 640, 640, + 177, 640, 640, 640, 640, 640, 640, 640, + 640, 640, 640, 640, 640, 640, 640, 640, + 640, 640, 640, 640, 640, 640, 640, 640, + + 640, 640, 640, 640, 640, 640, 640, 640, + 640, 640, 665, 666, 666, 177, 177, 177, + 177, 667, 668, 669, 670, 669, 669, 669, + 669, 669, 668, 668, 668, 668, 669, 671, + + 668, 669, 672, 672, 673, 645, 672, 672, + 640, 640, 640, 640, 674, 675, 675, 675, + 669, 669, 669, 669, 669, 669, 676, 669, + 177, 669, 669, 669, 669, 669, 669, 669, + + 669, 669, 669, 669, 669, 669, 669, 669, + 669, 669, 669, 669, 669, 669, 676, 676, + 676, 669, 669, 669, 669, 669, 669, 669, + 676, 669, 676, 676, 676, 177, 677, 677, + + 678, 678, 678, 678, 678, 678, 679, 678, + 678, 678, 678, 678, 678, 177, 680, 678, + 681, 681, 682, 683, 684, 685, 685, 685, + 685, 686, 686, 177, 177, 177, 177, 177, + + 687, 687, 687, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 687, 687, + + 687, 687, 688, 687, 687, 687, 687, 687, + 688, 687, 687, 689, 690, 691, 691, 691, + 691, 692, 691, 693, 693, 693, 691, 694, + 690, 695, 696, 697, 697, 693, 693, 688, + + 698, 699, 700, 701, 702, 703, 704, 705, + 706, 707, 708, 708, 709, 709, 709, 709, + 687, 687, 687, 687, 687, 687, 692, 692, + 691, 691, 688, 688, 688, 688, 693, 693, + + 693, 688, 689, 689, 689, 688, 688, 689, + 689, 689, 689, 689, 689, 689, 688, 688, + 688, 693, 693, 693, 693, 688, 688, 688, + 688, 688, 688, 688, 688, 688, 688, 688, + + 688, 688, 693, 689, 697, 693, 693, 689, + 689, 689, 689, 689, 689, 710, 688, 689, + 711, 712, 713, 714, 715, 716, 717, 718, + 719, 720, 721, 721, 721, 722, 723, 723, + + 724, 724, 724, 724, 724, 724, 724, 724, + 724, 724, 724, 724, 724, 724, 724, 724, + 724, 724, 724, 724, 724, 724, 724, 724, + 724, 724, 724, 724, 724, 724, 724, 724, + + 724, 724, 724, 724, 724, 724, 177, 725, + 177, 177, 177, 177, 177, 725, 177, 177, + 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, + 727, 728, 728, 729, 730, 731, 731, 731, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, @@ -1557,82 +1537,97 @@ static const unsigned short uc_property_trie[] = { 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, - 732, 732, 733, 733, 733, 733, 733, 733, - - 734, 734, 734, 734, 734, 734, 734, 735, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - - 734, 734, 734, 734, 734, 734, 734, 735, - 734, 175, 734, 734, 734, 734, 175, 175, - 734, 734, 734, 734, 734, 734, 734, 175, - 734, 175, 734, 734, 734, 734, 175, 175, - - 734, 734, 734, 734, 734, 734, 734, 735, - 734, 175, 734, 734, 734, 734, 175, 175, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 735, - 734, 175, 734, 734, 734, 734, 175, 175, - 734, 734, 734, 734, 734, 734, 734, 175, - - 734, 175, 734, 734, 734, 734, 175, 175, - 734, 734, 734, 734, 734, 734, 734, 735, - 734, 734, 734, 734, 734, 734, 734, 175, - 734, 734, 734, 734, 734, 734, 734, 734, + 732, 732, 733, 733, 733, 733, 733, 732, 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 735, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, - - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 735, - 734, 175, 734, 734, 734, 734, 175, 175, - 734, 734, 734, 734, 734, 734, 734, 735, - - 734, 734, 734, 734, 734, 734, 734, 735, 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 175, 175, 736, 736, 737, - - 738, 739, 740, 741, 741, 741, 741, 740, - 740, 742, 743, 744, 745, 746, 747, 748, - 749, 750, 751, 751, 751, 751, 751, 751, - 751, 751, 751, 751, 751, 175, 175, 175, - - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, - 752, 752, 752, 752, 752, 752, 752, 752, - 752, 752, 175, 175, 175, 175, 175, 175, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, + 734, 734, 734, 735, 735, 735, 735, 735, + 736, 736, 736, 736, 736, 736, 736, 736, + 736, 736, 736, 736, 736, 736, 736, 736, + 736, 736, 736, 736, 736, 736, 736, 736, + + 736, 736, 736, 736, 736, 736, 736, 736, + 736, 736, 736, 736, 736, 736, 736, 736, + 736, 736, 736, 736, 736, 736, 736, 736, + 736, 736, 736, 736, 736, 736, 736, 736, + + 736, 736, 736, 736, 736, 736, 736, 736, + 736, 736, 736, 736, 736, 736, 736, 736, + 736, 736, 736, 736, 736, 736, 736, 736, + 736, 736, 737, 737, 737, 737, 737, 737, + + 738, 738, 738, 738, 738, 738, 738, 739, + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 739, + 738, 177, 738, 738, 738, 738, 177, 177, + 738, 738, 738, 738, 738, 738, 738, 177, + 738, 177, 738, 738, 738, 738, 177, 177, + + 738, 738, 738, 738, 738, 738, 738, 739, + 738, 177, 738, 738, 738, 738, 177, 177, + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 739, + 738, 177, 738, 738, 738, 738, 177, 177, + 738, 738, 738, 738, 738, 738, 738, 177, + + 738, 177, 738, 738, 738, 738, 177, 177, + 738, 738, 738, 738, 738, 738, 738, 739, + 738, 738, 738, 738, 738, 738, 738, 177, + 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 739, + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 739, + 738, 177, 738, 738, 738, 738, 177, 177, + 738, 738, 738, 738, 738, 738, 738, 739, + + 738, 738, 738, 738, 738, 738, 738, 739, + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 177, 177, 740, 740, 741, + + 742, 743, 744, 745, 745, 745, 745, 744, + 744, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 755, 755, 755, 755, 755, + 755, 755, 755, 755, 755, 177, 177, 177, + + 739, 739, 739, 739, 739, 739, 739, 739, + 739, 739, 739, 739, 739, 739, 739, 739, + 756, 756, 756, 756, 756, 756, 756, 756, + 756, 756, 177, 177, 177, 177, 177, 177, - 753, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, + 757, 757, 757, 757, 757, 757, 757, 757, + 757, 757, 757, 757, 757, 757, 757, 757, + 757, 757, 757, 757, 757, 757, 757, 757, + 757, 757, 757, 757, 757, 757, 757, 757, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 741, 740, 734, - 734, 734, 734, 734, 734, 734, 734, 754, - 754, 754, 754, 754, 754, 754, 754, 754, + 757, 757, 757, 757, 757, 757, 757, 757, + 757, 757, 757, 757, 757, 757, 757, 757, + 757, 757, 757, 757, 757, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, - 755, 756, 756, 756, 756, 756, 756, 756, - 756, 756, 756, 756, 756, 756, 756, 756, - 756, 756, 756, 756, 756, 756, 756, 756, - 756, 756, 756, 757, 758, 175, 175, 175, + 758, 759, 759, 759, 759, 759, 759, 759, + 759, 759, 759, 759, 759, 759, 759, 759, + 759, 759, 759, 759, 759, 759, 759, 759, + 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, @@ -1640,372 +1635,392 @@ static const unsigned short uc_property_trie[] = { 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, - 759, 759, 759, 739, 739, 739, 760, 760, - 760, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 761, 761, 761, 761, 761, 761, 761, 761, - 761, 761, 761, 761, 761, 175, 761, 761, - 761, 761, 762, 762, 763, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 761, 761, 761, 761, 761, 761, 761, 761, - 761, 761, 761, 761, 761, 761, 761, 761, - 761, 761, 762, 762, 763, 764, 764, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 761, 761, 761, 761, 761, 761, 761, 761, - 761, 761, 761, 761, 761, 761, 761, 761, - 761, 761, 762, 762, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 761, 761, 761, 761, 761, 761, 761, 761, - 761, 761, 761, 761, 761, 175, 761, 761, - 761, 175, 762, 762, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 765, 765, 765, 765, 765, 765, 765, 765, - 765, 765, 765, 765, 765, 765, 765, 765, - 765, 765, 765, 765, 765, 765, 765, 765, - 765, 765, 765, 765, 765, 765, 765, 765, - - 765, 765, 765, 765, 765, 765, 765, 765, - 765, 765, 765, 765, 765, 765, 765, 765, - 765, 765, 765, 765, 766, 766, 767, 766, - 766, 766, 766, 766, 766, 766, 767, 767, - - 767, 767, 767, 767, 767, 767, 766, 767, - 767, 766, 766, 766, 766, 766, 766, 766, - 766, 766, 768, 766, 769, 769, 770, 771, - 769, 772, 769, 773, 765, 774, 175, 175, - - 775, 776, 777, 778, 779, 780, 781, 782, - 783, 784, 175, 175, 175, 175, 175, 175, - 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 175, 175, 175, 175, 175, 175, - - 786, 786, 787, 788, 789, 789, 790, 786, - 787, 788, 786, 791, 791, 791, 792, 175, - 793, 794, 795, 796, 797, 798, 799, 800, - 801, 802, 175, 175, 175, 175, 175, 175, - - 734, 734, 734, 149, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, - 175, 175, 175, 175, 175, 175, 175, 175, - - 734, 734, 734, 734, 734, 734, 734, 734, - 734, 803, 804, 175, 175, 175, 175, 175, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 175, 175, 175, - - 806, 806, 806, 807, 807, 807, 807, 806, - 806, 807, 807, 807, 175, 175, 175, 175, - 807, 807, 806, 807, 807, 807, 807, 807, - 807, 808, 809, 810, 175, 175, 175, 175, - - 811, 175, 175, 175, 812, 812, 813, 814, - 815, 816, 817, 818, 819, 820, 821, 822, - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 175, 175, - 823, 823, 823, 823, 823, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 824, 824, 824, 824, 824, 824, 824, 824, - 824, 824, 824, 824, 824, 824, 824, 824, - 824, 824, 824, 824, 824, 824, 824, 824, - 824, 824, 824, 824, 824, 824, 824, 824, - - 824, 824, 824, 824, 824, 824, 824, 824, - 824, 824, 825, 825, 175, 175, 175, 175, - 826, 826, 826, 826, 826, 827, 827, 827, - 826, 826, 827, 826, 826, 826, 826, 826, - - 826, 824, 824, 824, 824, 824, 824, 824, - 826, 826, 175, 175, 175, 175, 175, 175, - 828, 829, 830, 831, 832, 833, 834, 835, - 836, 837, 838, 175, 175, 175, 839, 839, - - 840, 840, 840, 840, 840, 840, 840, 840, - 840, 840, 840, 840, 840, 840, 840, 840, - 840, 840, 840, 840, 840, 840, 840, 840, - 840, 840, 840, 840, 840, 840, 840, 840, - - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 737, - 841, 842, 842, 842, 175, 175, 738, 738, - - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 825, 825, - - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 843, 844, 843, - 844, 844, 844, 844, 844, 844, 844, 175, - - 845, 846, 844, 846, 846, 844, 844, 844, - 844, 844, 844, 844, 844, 843, 843, 843, - 843, 843, 843, 844, 844, 847, 847, 847, - 847, 847, 847, 847, 847, 175, 175, 848, - + 759, 759, 759, 759, 759, 760, 761, 759, + 759, 759, 759, 759, 759, 759, 759, 762, + 762, 762, 762, 762, 762, 762, 762, 762, + + 763, 764, 764, 764, 764, 764, 764, 764, + 764, 764, 764, 764, 764, 764, 764, 764, + 764, 764, 764, 764, 764, 764, 764, 764, + 764, 764, 764, 765, 766, 177, 177, 177, + + 767, 767, 767, 767, 767, 767, 767, 767, + 767, 767, 767, 767, 767, 767, 767, 767, + 767, 767, 767, 767, 767, 767, 767, 767, + 767, 767, 767, 767, 767, 767, 767, 767, + + 767, 767, 767, 767, 767, 767, 767, 767, + 767, 767, 767, 768, 768, 768, 769, 769, + 769, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 770, 770, 770, 770, 770, 770, 770, 770, + 770, 770, 770, 770, 770, 177, 770, 770, + 770, 770, 771, 771, 772, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 773, 773, 773, 773, 773, 773, 773, 773, + 773, 773, 773, 773, 773, 773, 773, 773, + 773, 773, 774, 774, 775, 776, 776, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 778, 778, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 779, 779, 779, 779, 779, 779, 779, 779, + 779, 779, 779, 779, 779, 177, 779, 779, + 779, 177, 780, 780, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 781, 781, 781, 781, 781, 781, 781, 781, + 781, 781, 781, 781, 781, 781, 781, 781, + 781, 781, 781, 781, 781, 781, 781, 781, + 781, 781, 781, 781, 781, 781, 781, 781, + + 781, 781, 781, 781, 781, 781, 781, 781, + 781, 781, 781, 781, 781, 781, 781, 781, + 781, 781, 781, 781, 782, 782, 783, 782, + 782, 782, 782, 782, 782, 782, 783, 783, + + 783, 783, 783, 783, 783, 783, 782, 783, + 783, 782, 782, 782, 782, 782, 782, 782, + 782, 782, 784, 782, 785, 785, 786, 787, + 785, 788, 785, 789, 781, 790, 177, 177, + + 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 177, 177, 177, 177, 177, 177, + 801, 801, 801, 801, 801, 801, 801, 801, + 801, 801, 177, 177, 177, 177, 177, 177, + + 802, 802, 803, 804, 805, 806, 807, 802, + 808, 809, 802, 810, 810, 810, 811, 177, + 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 177, 177, 177, 177, 177, 177, + + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + + 822, 822, 822, 823, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 177, 177, 177, 177, 177, 177, 177, 177, + + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 824, 825, 177, 177, 177, 177, 177, + 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, + + 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, + + 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 826, 826, 826, 826, 826, 826, 826, 826, + 826, 826, 826, 826, 826, 826, 826, 826, + 826, 826, 826, 826, 826, 826, 826, 826, + 826, 826, 826, 826, 826, 177, 177, 177, + + 827, 827, 827, 828, 828, 828, 828, 827, + 827, 828, 828, 828, 177, 177, 177, 177, + 828, 828, 827, 828, 828, 828, 828, 828, + 828, 829, 830, 831, 177, 177, 177, 177, + + 832, 177, 177, 177, 833, 833, 834, 835, + 836, 837, 838, 839, 840, 841, 842, 843, + 844, 844, 844, 844, 844, 844, 844, 844, + 844, 844, 844, 844, 844, 844, 844, 844, + + 844, 844, 844, 844, 844, 844, 844, 844, + 844, 844, 844, 844, 844, 844, 177, 177, + 844, 844, 844, 844, 844, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 845, 845, 845, 845, 845, 845, 845, 845, + 845, 845, 845, 845, 845, 845, 845, 845, + 845, 845, 845, 845, 845, 845, 845, 845, + 845, 845, 845, 845, 845, 845, 845, 845, + + 845, 845, 845, 845, 845, 845, 845, 845, + 845, 845, 846, 846, 177, 177, 177, 177, + 847, 847, 847, 847, 847, 848, 848, 848, + 847, 847, 848, 847, 847, 847, 847, 847, + + 847, 845, 845, 845, 845, 845, 845, 845, + 847, 847, 177, 177, 177, 177, 177, 177, 849, 850, 851, 852, 853, 854, 855, 856, - 857, 858, 175, 175, 175, 175, 175, 175, - 849, 850, 851, 852, 853, 854, 855, 856, - 857, 858, 175, 175, 175, 175, 175, 175, - - 859, 859, 859, 859, 859, 859, 859, 860, - 861, 861, 861, 861, 859, 859, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 862, 862, 862, 862, 863, 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, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 865, 863, 862, 862, - 862, 862, 862, 863, 862, 863, 863, 863, - - 863, 863, 862, 863, 866, 864, 864, 864, - 864, 864, 864, 864, 175, 175, 175, 175, - 867, 868, 869, 870, 871, 872, 873, 874, - 875, 876, 877, 877, 878, 879, 877, 877, - - 879, 880, 880, 880, 880, 880, 880, 880, - 880, 880, 880, 881, 882, 881, 881, 881, - 881, 881, 881, 881, 880, 880, 880, 880, - 880, 880, 880, 880, 880, 175, 175, 175, - - 883, 883, 884, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - - 804, 884, 883, 883, 883, 883, 884, 884, - 883, 883, 885, 886, 887, 887, 804, 804, - 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 898, 898, 898, 898, 898, 898, - - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - - 899, 899, 899, 899, 899, 899, 900, 901, - 902, 902, 901, 901, 901, 902, 901, 902, - 902, 902, 903, 903, 175, 175, 175, 175, - 175, 175, 175, 175, 904, 904, 904, 904, - - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - - 804, 804, 804, 804, 884, 884, 884, 884, - 884, 884, 884, 884, 883, 883, 883, 883, - 883, 883, 883, 883, 884, 884, 883, 905, - 175, 175, 175, 906, 906, 907, 907, 907, - - 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 175, 175, 175, 804, 804, 804, - 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 804, 804, 804, 804, 804, 804, - - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 908, 908, 908, 908, 908, 908, 906, 906, - - 909, 909, 909, 909, 909, 909, 909, 909, - 175, 175, 175, 175, 175, 175, 175, 175, - 910, 910, 910, 911, 912, 913, 913, 913, - 913, 913, 910, 910, 913, 913, 913, 913, - - 910, 914, 912, 912, 912, 912, 912, 912, - 912, 754, 754, 754, 754, 913, 754, 754, - 754, 754, 914, 887, 915, 898, 898, 175, - 175, 175, 175, 175, 175, 175, 175, 175, + 857, 858, 859, 177, 177, 177, 860, 860, + + 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 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, 863, + 864, 865, 865, 865, 177, 177, 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, + 867, 867, 867, 867, 867, 867, 867, 867, + + 867, 867, 867, 867, 867, 867, 867, 867, + 867, 867, 867, 867, 867, 867, 867, 867, + 867, 867, 867, 867, 867, 868, 869, 868, + 869, 869, 869, 869, 869, 869, 869, 177, + + 870, 871, 869, 871, 871, 869, 869, 869, + 869, 869, 869, 869, 869, 868, 868, 868, + 868, 868, 868, 869, 869, 872, 872, 872, + 872, 872, 872, 872, 872, 177, 177, 873, + + 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 177, 177, 177, 177, 177, 177, + 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 177, 177, 177, 177, 177, 177, + + 884, 884, 884, 884, 884, 884, 884, 885, + 886, 886, 886, 886, 884, 884, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 887, 887, 887, 887, 888, 889, 889, 889, + 889, 889, 889, 889, 889, 889, 889, 889, + 889, 889, 889, 889, 889, 889, 889, 889, + 889, 889, 889, 889, 889, 889, 889, 889, + + 889, 889, 889, 889, 889, 889, 889, 889, + 889, 889, 889, 889, 889, 889, 889, 889, + 889, 889, 889, 889, 890, 888, 887, 887, + 887, 887, 887, 888, 887, 888, 888, 888, + + 888, 888, 887, 888, 891, 889, 889, 889, + 889, 889, 889, 889, 177, 177, 177, 177, + 892, 893, 894, 895, 896, 897, 898, 899, + 900, 901, 902, 902, 903, 904, 902, 902, + + 904, 905, 905, 905, 905, 905, 905, 905, + 905, 905, 905, 906, 907, 906, 906, 906, + 906, 906, 906, 906, 905, 905, 905, 905, + 905, 905, 905, 905, 905, 177, 177, 177, + + 908, 908, 909, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, + + 910, 909, 908, 908, 908, 908, 909, 909, + 908, 908, 911, 912, 913, 913, 910, 910, + 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 924, 924, 924, 924, 924, + + 925, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, + + 925, 925, 925, 925, 925, 925, 926, 927, + 928, 928, 927, 927, 927, 928, 927, 928, + 928, 928, 929, 929, 177, 177, 177, 177, + 177, 177, 177, 177, 930, 930, 930, 930, + + 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, + + 931, 931, 931, 931, 932, 932, 932, 932, + 932, 932, 932, 932, 933, 933, 933, 933, + 933, 933, 933, 933, 932, 932, 933, 934, + 177, 177, 177, 935, 935, 936, 936, 936, + + 937, 938, 939, 940, 941, 942, 943, 944, + 945, 946, 177, 177, 177, 931, 931, 931, + 947, 948, 949, 950, 951, 952, 953, 954, + 955, 956, 957, 957, 957, 957, 957, 957, + + 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, + 958, 958, 958, 958, 958, 958, 959, 959, + + 960, 960, 960, 960, 960, 960, 960, 960, + 177, 177, 177, 177, 177, 177, 177, 177, + 961, 961, 961, 962, 963, 964, 964, 964, + 964, 964, 961, 961, 964, 964, 964, 964, + + 961, 965, 963, 963, 963, 963, 963, 963, + 963, 966, 966, 966, 966, 964, 966, 966, + 966, 966, 965, 967, 968, 969, 969, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 916, 916, - 916, 916, 916, 917, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, + 105, 105, 105, 105, 105, 105, 970, 970, + 970, 970, 970, 971, 972, 972, 972, 972, + 972, 972, 972, 972, 972, 972, 972, 972, + 972, 972, 972, 972, 972, 972, 972, 972, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 919, 919, 919, + 972, 972, 972, 972, 972, 972, 972, 972, + 972, 972, 972, 972, 972, 972, 972, 972, + 972, 972, 972, 972, 972, 972, 972, 972, + 972, 972, 972, 972, 972, 973, 973, 973, - 919, 919, 918, 918, 918, 918, 919, 919, - 919, 919, 919, 105, 106, 106, 106, 106, + 973, 973, 972, 972, 972, 972, 973, 973, + 973, 973, 973, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, - 920, 921, 106, 106, 106, 922, 106, 106, + 974, 975, 106, 106, 106, 976, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, - 106, 106, 106, 923, 923, 923, 923, 923, + 106, 106, 106, 977, 977, 977, 977, 977, - 923, 923, 923, 923, 923, 923, 923, 923, - 923, 923, 923, 923, 923, 923, 923, 923, - 923, 923, 923, 923, 923, 923, 923, 923, - 923, 923, 923, 923, 923, 923, 923, 924, + 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, 978, - 165, 165, 164, 165, 925, 925, 925, 925, - 925, 925, 926, 927, 927, 928, 929, 930, - 931, 927, 927, 927, 927, 927, 927, 927, - 927, 927, 927, 927, 927, 927, 927, 927, + 167, 167, 166, 167, 979, 979, 979, 979, + 979, 979, 980, 981, 981, 982, 983, 984, + 985, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 981, 981, 981, 981, 981, 981, - 927, 927, 927, 927, 927, 927, 927, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 932, 913, 925, 926, + 981, 981, 981, 981, 981, 981, 981, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 986, 964, 979, 980, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, - 67, 68, 67, 68, 67, 68, 933, 934, - 935, 936, 937, 938, 939, 939, 940, 939, + 67, 68, 67, 68, 67, 68, 987, 988, + 989, 990, 991, 992, 993, 993, 994, 993, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, - 67, 68, 941, 942, 941, 942, 941, 942, - - 943, 943, 943, 943, 943, 943, 943, 943, - 944, 944, 944, 944, 944, 944, 944, 944, - 943, 943, 943, 943, 943, 943, 175, 175, - 944, 944, 944, 944, 944, 944, 175, 175, - - 943, 943, 943, 943, 943, 943, 943, 943, - 944, 944, 944, 944, 944, 944, 944, 944, - 943, 943, 943, 943, 943, 943, 943, 943, - 944, 944, 944, 944, 944, 944, 944, 944, - - 943, 943, 943, 943, 943, 943, 175, 175, - 944, 944, 944, 944, 944, 944, 175, 175, - 945, 943, 946, 943, 947, 943, 948, 943, - 175, 944, 175, 944, 175, 944, 175, 944, - - 943, 943, 943, 943, 943, 943, 943, 943, - 944, 944, 944, 944, 944, 944, 944, 944, - 949, 949, 950, 950, 950, 950, 951, 951, - 952, 952, 953, 953, 954, 954, 175, 175, - - 955, 956, 957, 958, 959, 960, 961, 962, - 963, 964, 965, 966, 967, 968, 969, 970, - 971, 972, 973, 974, 975, 976, 977, 978, - 979, 980, 981, 982, 983, 984, 985, 986, - - 987, 988, 989, 990, 991, 992, 993, 994, - 995, 996, 997, 998, 999, 1000, 1001, 1002, - 943, 943, 1003, 1004, 1005, 175, 1006, 1007, - 944, 944, 1008, 1008, 1009, 174, 1010, 174, - - 174, 174, 1011, 1012, 1013, 175, 1014, 1015, - 1016, 1016, 1016, 1016, 1017, 174, 174, 174, - 943, 943, 1018, 182, 175, 175, 1019, 1020, - 944, 944, 1021, 1021, 175, 174, 174, 174, - - 943, 943, 1022, 186, 1023, 204, 1024, 1025, - 944, 944, 1026, 1026, 1027, 174, 174, 174, - 175, 175, 1028, 1029, 1030, 175, 1031, 1032, - 1033, 1033, 1034, 1034, 1035, 1036, 174, 175, - - 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1038, - 1037, 1037, 1037, 1039, 1040, 1041, 1042, 1043, - 1044, 1045, 1044, 1046, 1047, 1048, 14, 14, - 1049, 1050, 1051, 1052, 1052, 1053, 1051, 1052, - - 14, 14, 14, 14, 1054, 1055, 1055, 1056, - 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, - 13, 13, 13, 13, 13, 1065, 1065, 1065, - 14, 1066, 1067, 14, 1068, 1068, 14, 43, - - 43, 14, 14, 14, 1069, 16, 1070, 1071, - 1072, 1072, 786, 786, 786, 786, 1073, 1073, - 1073, 1073, 1074, 1075, 1076, 1077, 1078, 1073, - 1078, 1078, 1078, 1078, 1077, 1078, 1078, 1079, - - 1080, 1081, 1081, 1081, 1082, 1083, 1083, 1083, - 1083, 1083, 1084, 1084, 1084, 1084, 1084, 1084, - 1085, 1086, 175, 175, 1087, 1088, 1089, 1090, - 1091, 1092, 1093, 1093, 36, 16, 1070, 142, - - 1085, 62, 57, 58, 1087, 1088, 1089, 1090, - 1091, 1092, 1093, 1093, 36, 16, 1070, 175, - 923, 923, 923, 923, 923, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 175, 175, 175, + 67, 68, 995, 996, 995, 996, 995, 996, + + 997, 997, 997, 997, 997, 997, 997, 997, + 998, 998, 998, 998, 998, 998, 998, 998, + 997, 997, 997, 997, 997, 997, 177, 177, + 998, 998, 998, 998, 998, 998, 177, 177, + + 997, 997, 997, 997, 997, 997, 997, 997, + 998, 998, 998, 998, 998, 998, 998, 998, + 997, 997, 997, 997, 997, 997, 997, 997, + 998, 998, 998, 998, 998, 998, 998, 998, + + 997, 997, 997, 997, 997, 997, 177, 177, + 998, 998, 998, 998, 998, 998, 177, 177, + 999, 997, 1000, 997, 1001, 997, 1002, 997, + 177, 998, 177, 998, 177, 998, 177, 998, + + 997, 997, 997, 997, 997, 997, 997, 997, + 998, 998, 998, 998, 998, 998, 998, 998, + 1003, 1003, 1004, 1004, 1004, 1004, 1005, 1005, + 1006, 1006, 1007, 1007, 1008, 1008, 177, 177, + + 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, + 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, + 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, + 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, + + 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, + 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, + 997, 997, 1057, 1058, 1059, 177, 1060, 1061, + 998, 998, 1062, 1062, 1063, 176, 1064, 176, + + 176, 176, 1065, 1066, 1067, 177, 1068, 1069, + 1070, 1070, 1070, 1070, 1071, 176, 176, 176, + 997, 997, 1072, 184, 177, 177, 1073, 1074, + 998, 998, 1075, 1075, 177, 176, 176, 176, + + 997, 997, 1076, 188, 1077, 208, 1078, 1079, + 998, 998, 1080, 1080, 1081, 176, 176, 176, + 177, 177, 1082, 1083, 1084, 177, 1085, 1086, + 1087, 1087, 1088, 1088, 1089, 1090, 176, 177, + + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1092, + 1091, 1091, 1091, 1093, 1094, 1095, 1096, 1097, + 1098, 1099, 1098, 1100, 1101, 1102, 14, 14, + 1103, 1104, 1105, 1106, 1106, 1107, 1105, 1106, + + 14, 14, 14, 14, 1108, 1109, 1109, 1110, + 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, + 13, 13, 13, 13, 13, 1119, 1119, 1119, + 14, 1120, 1121, 14, 1122, 1122, 14, 43, + + 43, 14, 14, 14, 1123, 16, 1124, 1125, + 1126, 1126, 1127, 1127, 1127, 1127, 1128, 1128, + 1128, 1128, 1129, 1130, 1131, 1132, 1133, 1128, + 1133, 1133, 1133, 1133, 1132, 1133, 1133, 1134, + + 1135, 1136, 1136, 1136, 1137, 1138, 1138, 1138, + 1138, 1138, 1139, 1139, 1139, 1139, 1139, 1139, + 1140, 1141, 177, 177, 1142, 1143, 1144, 1145, + 1146, 1147, 1148, 1148, 36, 16, 1124, 142, + + 1140, 62, 57, 58, 1142, 1143, 1144, 1145, + 1146, 1147, 1148, 1148, 36, 16, 1124, 177, + 977, 977, 977, 977, 977, 1149, 1149, 1149, + 1149, 1149, 1149, 1149, 1149, 177, 177, 177, 12, 12, 12, 12, 12, 12, 12, 50, - 12, 12, 12, 1095, 1096, 1097, 1097, 1097, - 1098, 1098, 1099, 1099, 1099, 1099, 1100, 1101, - 1101, 1102, 1103, 175, 175, 175, 175, 175, - - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 151, 151, 156, 156, 151, 151, 151, 151, - 156, 156, 156, 151, 151, 1104, 1104, 1104, - - 1104, 151, 1105, 1105, 1106, 1107, 1107, 171, - 1108, 171, 1107, 1109, 926, 926, 926, 926, - 927, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 51, 51, 1110, 1111, 51, 51, 51, 1110, - 51, 1111, 71, 1110, 1110, 1110, 71, 71, - 1110, 1110, 1110, 71, 51, 1110, 1112, 51, - 36, 1110, 1110, 1110, 1110, 1110, 51, 51, - - 51, 51, 51, 51, 1110, 51, 1113, 51, - 1110, 51, 1114, 1115, 1110, 1110, 1116, 71, - 1110, 1110, 1117, 1110, 71, 93, 93, 93, - 93, 141, 1118, 811, 106, 1119, 1120, 1120, - - 1074, 1074, 1074, 1074, 1074, 1120, 1119, 1119, - 1119, 1119, 1121, 1074, 752, 1122, 1123, 1124, - 1125, 1125, 1125, 64, 64, 64, 64, 64, + 12, 12, 12, 1150, 1151, 1152, 1152, 1152, + 1153, 1153, 1154, 1154, 1154, 1154, 1155, 1156, + 1156, 1157, 1158, 177, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 153, 153, 158, 158, 153, 153, 153, 153, + 158, 158, 158, 153, 153, 1159, 1159, 1159, + + 1159, 153, 1160, 1160, 1161, 1162, 1162, 173, + 1163, 173, 1162, 1164, 980, 980, 980, 980, + 981, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 51, 51, 1165, 1166, 51, 51, 51, 1165, + 51, 1166, 1167, 1165, 1165, 1165, 1167, 1167, + 1165, 1165, 1165, 1167, 51, 1165, 1168, 51, + 36, 1165, 1165, 1165, 1165, 1165, 51, 51, + + 51, 51, 51, 51, 1165, 51, 1169, 51, + 1165, 51, 1170, 1171, 1165, 1165, 1172, 1167, + 1165, 1165, 1173, 1165, 1167, 1174, 1174, 1174, + 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1180, + + 1129, 1129, 1129, 1129, 1129, 1180, 1179, 1179, + 1179, 1179, 1181, 1129, 1182, 1183, 1184, 1185, + 1186, 1186, 1186, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, - 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, - 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, - 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, + 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, + 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, + 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1128, 1128, 1128, 102, 113, 1129, 1129, 1129, - 1129, 1125, 175, 175, 175, 175, 175, 175, + 1189, 1189, 1189, 102, 113, 1190, 1190, 1190, + 1190, 1186, 177, 177, 177, 177, 177, 177, 36, 36, 36, 36, 36, 51, 51, 51, 51, 51, 36, 36, 51, 51, 51, 51, @@ -2020,134 +2035,134 @@ static const unsigned short uc_property_trie[] = { 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 1118, 1118, 1118, 1118, 1118, - 1118, 1118, 1118, 1118, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, + 51, 51, 51, 1176, 1176, 1176, 1176, 1176, + 1176, 1176, 1176, 1176, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 36, 36, 36, 36, 36, 36, 36, 36, - 1130, 1130, 1130, 1131, 1131, 1131, 36, 36, - 36, 36, 18, 56, 36, 1132, 36, 36, + 1191, 1191, 1191, 1192, 1192, 1192, 36, 36, + 36, 36, 18, 56, 36, 1193, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 1133, 1134, 36, 36, + 36, 36, 36, 36, 1194, 1195, 36, 36, - 36, 36, 36, 1135, 36, 36, 36, 36, + 36, 36, 36, 1196, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 1133, 1134, 1133, 1134, 36, 36, + 36, 36, 1194, 1195, 1194, 1195, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 1133, 1134, 1133, 1134, - 1133, 1134, 1133, 1134, 36, 36, 1133, 1134, - 1133, 1134, 1133, 1134, 1133, 1134, 1133, 1134, - 1133, 1134, 1133, 1134, 1133, 1134, 1133, 1134, + 36, 36, 36, 36, 1194, 1195, 1194, 1195, + 1194, 1195, 1194, 1195, 36, 36, 1194, 1195, + 1194, 1195, 1194, 1195, 1194, 1195, 1194, 1195, + 1194, 1195, 1194, 1195, 1194, 1195, 1194, 1195, - 1133, 1134, 1133, 1134, 1133, 1134, 1133, 1134, - 1133, 1134, 1133, 1134, 36, 36, 36, 1133, - 1134, 1133, 1134, 36, 36, 36, 36, 36, - 1136, 36, 36, 36, 36, 36, 36, 36, + 1194, 1195, 1194, 1195, 1194, 1195, 1194, 1195, + 1194, 1195, 1194, 1195, 36, 36, 36, 1194, + 1195, 1194, 1195, 36, 36, 36, 36, 36, + 1197, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 1133, 1134, 36, 36, 1137, 36, - 1138, 1139, 36, 1139, 36, 36, 36, 36, - 1133, 1134, 1133, 1134, 1133, 1134, 1133, 1134, + 36, 36, 1194, 1195, 36, 36, 1198, 36, + 1199, 1200, 36, 1200, 36, 36, 36, 36, + 1194, 1195, 1194, 1195, 1194, 1195, 1194, 1195, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 1133, 1134, 1133, 1134, 1140, 36, 36, - 1133, 1134, 36, 36, 36, 36, 1133, 1134, - 1133, 1134, 1133, 1134, 1133, 1134, 1133, 1134, + 36, 1194, 1195, 1194, 1195, 1201, 36, 36, + 1194, 1195, 36, 36, 36, 36, 1194, 1195, + 1194, 1195, 1194, 1195, 1194, 1195, 1194, 1195, - 1133, 1134, 1133, 1134, 1133, 1134, 1133, 1134, - 1133, 1134, 1133, 1134, 1133, 1134, 36, 36, - 1133, 1134, 1141, 1141, 1141, 1074, 1142, 1142, - 1074, 1074, 1143, 1143, 1143, 1144, 1144, 1074, + 1194, 1195, 1194, 1195, 1194, 1195, 1194, 1195, + 1194, 1195, 1194, 1195, 1194, 1195, 36, 36, + 1194, 1195, 1202, 1202, 1202, 1129, 1203, 1203, + 1129, 1129, 1204, 1204, 1204, 1205, 1205, 1129, - 51, 1118, 51, 51, 51, 51, 51, 51, - 1133, 1134, 1133, 1134, 51, 51, 51, 51, + 51, 1176, 51, 51, 51, 51, 51, 51, + 1194, 1195, 1194, 1195, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 1145, 1145, 51, 51, 51, 51, + 51, 51, 1206, 1206, 51, 51, 51, 51, 36, 36, 51, 51, 51, 51, 51, 51, - 51, 16, 1070, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 1146, 1146, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 1146, 1146, 1146, 1118, 1074, 1118, 1118, 1118, - - 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, - 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, - 1118, 1118, 1118, 1118, 1118, 1147, 1118, 1118, - 1118, 1118, 1118, 1074, 1074, 1074, 1074, 1074, - - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1121, 1121, 1121, 1121, - 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, - - 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, - 1121, 1121, 1121, 1121, 1121, 1121, 1121, 811, - 811, 752, 752, 752, 752, 752, 752, 752, - 752, 752, 752, 752, 1148, 1148, 1148, 1148, - - 1148, 1148, 1122, 1122, 1122, 1122, 1122, 1122, - 1149, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1151, 1151, 1151, 1151, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, + 51, 16, 1124, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 1207, 1207, + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1176, 1129, 1176, 1176, 1176, + + 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, + 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, + 1176, 1176, 1176, 1176, 1176, 1208, 1176, 1176, + 1176, 1176, 1176, 1129, 1129, 1129, 1129, 1129, + + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1181, 1181, 1181, 1181, + 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, + + 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, + 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1177, + 1177, 1182, 1182, 1182, 1182, 1182, 1182, 1182, + 1182, 1182, 1182, 1182, 1209, 1209, 1209, 1209, + + 1209, 1209, 1183, 1183, 1183, 1183, 1183, 1183, + 1210, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1212, 1212, 1212, 1212, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 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, 1118, 1118, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, + 51, 51, 51, 51, 51, 1176, 1176, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, + 51, 51, 51, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, - 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, - 1160, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 1152, 1153, 1154, 1155, - 1156, 1157, 1158, 1159, 1160, 64, 64, 64, + 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, + 1221, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 1213, 1214, 1215, 1216, + 1217, 1218, 1219, 1220, 1221, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 62, 57, 58, 1087, 1088, 1089, 1090, 1091, - 1092, 1161, 1161, 1161, 1161, 1161, 1161, 1161, - 1161, 1161, 1161, 1161, 1146, 1146, 1146, 1146, + 62, 57, 58, 1142, 1143, 1144, 1145, 1146, + 1147, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1207, 1207, 1207, 1207, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 1146, 1146, 1146, 1146, 1146, 1146, 1162, 1162, - 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1207, 1207, 1207, 1223, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, - 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, - 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, - 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, - 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, + 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, + 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, - 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, - 1163, 1163, 1164, 1165, 1165, 1165, 1165, 1165, - 1165, 1165, 1165, 1165, 1165, 1166, 1167, 1168, - 1169, 1170, 1171, 1172, 1173, 1174, 1165, 1175, + 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, + 1224, 1224, 1225, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1227, 1228, 1229, + 1230, 1231, 1232, 1233, 1234, 1235, 1226, 1236, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 1121, 1121, - 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 51, 51, 51, 51, 51, 51, 1181, 1181, + 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, @@ -2161,721 +2176,196 @@ static const unsigned short uc_property_trie[] = { 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, + 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, - 1145, 1145, 1145, 1145, 51, 51, 51, 51, + 1206, 1206, 1206, 1206, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 1176, 1176, 1121, 1121, - 1177, 1118, 1145, 1145, 1145, 1145, 1145, 1145, + 51, 51, 51, 51, 1237, 1237, 1181, 1181, + 1238, 1176, 1206, 1206, 1206, 1206, 1206, 1206, 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, 1145, 1145, 1145, 51, 51, 51, 51, + 51, 1206, 1206, 1206, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 1145, 51, 51, 51, 51, 51, 51, 36, - 1118, 1118, 1121, 1121, 1121, 1121, 1121, 1121, - 1121, 1121, 1121, 1121, 1121, 1121, 752, 1177, - - 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, - 1121, 1121, 811, 811, 811, 811, 811, 811, - 811, 811, 752, 752, 752, 752, 752, 752, - 752, 752, 752, 752, 752, 1178, 1149, 1149, - - 811, 811, 752, 752, 752, 752, 752, 752, - 752, 752, 752, 752, 1179, 752, 752, 752, - 752, 752, 1122, 1178, 1178, 1178, 1178, 1178, - 1178, 1178, 1178, 1178, 1178, 1180, 1180, 1180, - - 1181, 1181, 1181, 1181, 1180, 1180, 1180, 1180, - 1180, 1149, 1149, 1149, 1149, 1180, 1150, 1180, - 1180, 1180, 1149, 1180, 1180, 1149, 1149, 1149, - 1180, 1180, 1149, 1149, 1180, 1149, 1149, 1180, - - 1180, 1180, 1150, 1149, 1150, 1150, 1150, 1150, - 1149, 1149, 1180, 1149, 1149, 1149, 1149, 1149, - 1149, 1180, 1180, 1180, 1180, 1180, 1149, 1180, - 1180, 1180, 1180, 1149, 1149, 1180, 1180, 1180, - - 175, 1145, 1145, 1145, 1145, 1150, 51, 51, - 1145, 1145, 1151, 1151, 1145, 1145, 51, 51, + 1206, 51, 51, 51, 51, 51, 51, 36, + 1176, 1176, 1181, 1181, 1181, 1181, 1181, 1181, + 1181, 1181, 1181, 1181, 1181, 1181, 1182, 1238, + + 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, + 1181, 1181, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1182, 1182, 1182, 1182, 1182, 1182, + 1182, 1182, 1182, 1182, 1182, 1239, 1210, 1210, + + 1177, 1177, 1182, 1182, 1182, 1182, 1182, 1182, + 1182, 1182, 1182, 1182, 1240, 1182, 1182, 1182, + 1182, 1182, 1183, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1241, 1241, 1241, + + 1242, 1242, 1242, 1242, 1241, 1241, 1241, 1241, + 1241, 1210, 1210, 1210, 1210, 1241, 1211, 1241, + 1241, 1241, 1210, 1241, 1241, 1210, 1210, 1210, + 1241, 1241, 1210, 1210, 1241, 1210, 1210, 1241, + + 1241, 1241, 1211, 1210, 1211, 1211, 1211, 1211, + 1210, 1210, 1241, 1210, 1210, 1210, 1210, 1210, + 1210, 1241, 1241, 1241, 1241, 1241, 1210, 1241, + 1241, 1241, 1241, 1210, 1210, 1241, 1241, 1241, + + 177, 1206, 1206, 1206, 1206, 1211, 51, 51, + 1206, 1206, 1212, 1212, 1206, 1206, 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, - 1150, 51, 51, 51, 51, 51, 51, 51, + 1211, 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, 1150, 51, 1150, 51, - 51, 51, 51, 1150, 1150, 1150, 51, 1149, - 51, 51, 51, 1182, 1182, 1182, 1182, 1150, - - 1150, 51, 1183, 1183, 51, 51, 51, 51, - 1184, 1185, 1184, 1185, 1184, 1185, 1184, 1185, - 1184, 1185, 1184, 1185, 1184, 1185, 1152, 1153, - 1154, 1155, 1156, 1157, 1158, 1159, 1160, 64, - - 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, - 1160, 64, 1152, 1153, 1154, 1155, 1156, 1157, - 1158, 1159, 1160, 64, 51, 1150, 1150, 1150, + 51, 51, 51, 51, 1211, 51, 1211, 51, + 51, 51, 51, 1211, 1211, 1211, 51, 1210, + 51, 51, 51, 1243, 1243, 1243, 1243, 1211, + + 1211, 51, 1244, 1244, 51, 51, 51, 51, + 1245, 1246, 1245, 1246, 1245, 1246, 1245, 1246, + 1245, 1246, 1245, 1246, 1245, 1246, 1213, 1214, + 1215, 1216, 1217, 1218, 1219, 1220, 1221, 64, + + 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, + 1221, 64, 1213, 1214, 1215, 1216, 1217, 1218, + 1219, 1220, 1221, 64, 51, 1211, 1211, 1211, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 1150, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 1150, - - 1186, 1186, 1186, 1187, 1188, 1189, 1190, 1148, - 1191, 1192, 1148, 1193, 1194, 1195, 1196, 1196, - 1074, 1074, 1074, 1074, 1074, 1197, 1198, 1074, - 1074, 1074, 1074, 1074, 1074, 1197, 1198, 1074, - - 1074, 1074, 1197, 1198, 1197, 1198, 1184, 1185, - 1184, 1185, 1184, 1185, 1199, 1200, 1199, 1200, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - - 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, - 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, - 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, - 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, - - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - - 1074, 1074, 1074, 1184, 1185, 1184, 1185, 1184, - 1185, 1184, 1185, 1184, 1185, 1201, 1202, 1203, - 1204, 1184, 1185, 1184, 1185, 1184, 1185, 1184, - 1185, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1205, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - - 1197, 1198, 1074, 1074, 1197, 1198, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1197, - 1198, 1197, 1198, 1074, 1197, 1198, 1074, 1074, - 1184, 1185, 1184, 1185, 1074, 1074, 1074, 1074, - - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1206, 1074, 1074, - 1197, 1198, 1074, 1074, 1184, 1185, 1074, 1074, - - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1197, 1198, 1197, 1198, 1074, - 1074, 1074, 1074, 1074, 1197, 1198, 1074, 1074, - 1074, 1074, 1074, 1074, 1197, 1198, 1074, 1074, - - 1074, 1074, 1074, 1074, 1197, 1198, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, - 1074, 1197, 1198, 1074, 1074, 1197, 1198, 1197, - - 1198, 1197, 1198, 1197, 1198, 1074, 1074, 1074, - 1074, 1074, 1074, 1197, 1198, 1074, 1074, 1074, - 1074, 1197, 1198, 1197, 1198, 1197, 1198, 1197, - 1198, 1197, 1198, 1197, 1198, 1074, 1074, 1074, - - 1074, 1197, 1198, 1074, 1074, 1074, 1197, 1198, - 1197, 1198, 1197, 1198, 1197, 1198, 1074, 1197, - 1198, 1074, 1074, 1197, 1198, 1074, 1074, 1074, - 1074, 1074, 1074, 1197, 1198, 1197, 1198, 1197, - - 1198, 1197, 1198, 1197, 1198, 1197, 1198, 1074, - 1074, 1074, 1074, 1074, 1074, 1197, 1198, 1197, - 1198, 1197, 1198, 1197, 1198, 1197, 1198, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1207, 1074, - - 1074, 1074, 1074, 1208, 1209, 1208, 1074, 1074, - 1074, 1074, 1074, 1074, 1197, 1198, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1197, - 1198, 1197, 1198, 1074, 1074, 1074, 1074, 1074, - - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 752, 752, - 752, 752, 752, 752, 1122, 1122, 1122, 1122, - 1122, 1122, 1122, 1178, 1178, 1178, 1178, 1178, - - 1122, 1122, 1122, 1122, 1178, 1178, 1178, 1178, - 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - - 1194, 1194, 1194, 1194, 1194, 1178, 1178, 1194, - 1194, 1194, 1194, 1194, 1194, 175, 175, 175, - 1178, 1178, 1178, 1178, 1178, 1149, 1149, 1149, - 1149, 1149, 175, 175, 175, 175, 175, 175, - - 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, - 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, - 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, - 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, - - 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, - 1210, 1210, 1210, 1210, 1210, 1210, 1210, 175, - 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, - 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 1211, + + 1247, 1247, 1247, 1248, 1249, 1250, 1251, 1209, + 1252, 1253, 1209, 1254, 1255, 1256, 1257, 1257, + 1129, 1129, 1129, 1129, 1129, 1258, 1259, 1129, + 1129, 1129, 1129, 1129, 1129, 1258, 1259, 1129, + + 1129, 1129, 1258, 1259, 1258, 1259, 1245, 1246, + 1245, 1246, 1245, 1246, 1260, 1261, 1260, 1261, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + + 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, + 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, + 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, + 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, + + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + + 1129, 1129, 1129, 1245, 1246, 1245, 1246, 1245, + 1246, 1245, 1246, 1245, 1246, 1263, 1264, 1265, + 1266, 1245, 1246, 1245, 1246, 1245, 1246, 1245, + 1246, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1267, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + + 1258, 1259, 1129, 1129, 1258, 1259, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1258, + 1259, 1258, 1259, 1129, 1258, 1259, 1129, 1129, + 1245, 1246, 1245, 1246, 1129, 1129, 1129, 1129, + + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1268, 1129, 1129, + 1258, 1259, 1129, 1129, 1245, 1246, 1129, 1129, + + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1258, 1259, 1258, 1259, 1129, + 1129, 1129, 1129, 1129, 1258, 1259, 1129, 1129, + 1129, 1129, 1129, 1129, 1258, 1259, 1129, 1129, + + 1129, 1129, 1129, 1129, 1258, 1259, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1258, 1259, 1129, 1129, 1258, 1259, 1258, + + 1259, 1258, 1259, 1258, 1259, 1129, 1129, 1129, + 1129, 1129, 1129, 1258, 1259, 1129, 1129, 1129, + 1129, 1258, 1259, 1258, 1259, 1258, 1259, 1258, + 1259, 1258, 1259, 1258, 1259, 1129, 1129, 1129, + + 1129, 1258, 1259, 1129, 1129, 1129, 1258, 1259, + 1258, 1259, 1258, 1259, 1258, 1259, 1129, 1258, + 1259, 1129, 1129, 1258, 1259, 1129, 1129, 1129, + 1129, 1129, 1129, 1258, 1259, 1258, 1259, 1258, + + 1259, 1258, 1259, 1258, 1259, 1258, 1259, 1129, + 1129, 1129, 1129, 1129, 1129, 1258, 1259, 1258, + 1259, 1258, 1259, 1258, 1259, 1258, 1259, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1269, 1129, + + 1129, 1129, 1129, 1270, 1271, 1270, 1129, 1129, + 1129, 1129, 1129, 1129, 1258, 1259, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1258, + 1259, 1258, 1259, 1129, 1129, 1129, 1129, 1129, - 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, - 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, - 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, - 1211, 1211, 1211, 1211, 1211, 1211, 1211, 175, - - 117, 113, 1212, 1213, 1214, 1215, 1216, 117, - 113, 117, 113, 117, 113, 1217, 1218, 1219, - 1220, 939, 941, 942, 1221, 117, 113, 1221, - 939, 939, 939, 939, 1222, 1222, 1223, 1223, - - 108, 109, 108, 109, 108, 109, 108, 109, - 108, 109, 108, 109, 108, 109, 108, 109, - 108, 109, 108, 109, 108, 109, 108, 109, - 108, 109, 108, 109, 108, 109, 108, 109, - - 108, 109, 108, 109, 106, 752, 752, 752, - 752, 752, 752, 1224, 1225, 1224, 1225, 390, - 390, 390, 1226, 1227, 175, 175, 175, 175, - 175, 1228, 1078, 1078, 1078, 1229, 1228, 1078, - - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - - 1230, 1230, 1230, 1230, 1230, 1230, 175, 1231, - 175, 175, 175, 175, 175, 1231, 175, 175, - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, - - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, - - 735, 735, 735, 735, 735, 735, 898, 898, - 175, 175, 175, 175, 175, 175, 175, 1232, - 1233, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 1234, - - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 735, 735, 735, 735, 735, 735, 735, 175, - 735, 735, 735, 735, 735, 735, 735, 175, - 735, 735, 735, 735, 735, 735, 735, 175, - 735, 735, 735, 735, 735, 735, 735, 175, - - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, - - 1235, 1235, 1236, 1237, 1236, 1237, 1235, 1235, - 1235, 1236, 1237, 1235, 1236, 1237, 1078, 1078, - 1078, 1078, 1078, 1078, 1078, 1078, 1077, 1238, - 1239, 1240, 1241, 1242, 1236, 1237, 1242, 1242, - - 1243, 1244, 1199, 1200, 1199, 1200, 1199, 1200, - 1199, 1200, 1240, 1240, 1240, 1240, 1245, 1246, - 1240, 1247, 1248, 1249, 1249, 1248, 1248, 1248, - 1248, 1248, 1250, 1250, 175, 175, 175, 175, - - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 175, 1251, 1251, 1251, 1251, 1251, - - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 175, 175, 175, 175, - - 1252, 1253, 1254, 1255, 1145, 1256, 1257, 1258, - 16, 1070, 16, 1070, 16, 1070, 16, 1070, - 16, 1070, 1145, 1145, 16, 1070, 16, 1070, - 16, 1070, 16, 1070, 1259, 1051, 1260, 1260, - - 1145, 1258, 1258, 1258, 1258, 1258, 1258, 1258, - 1258, 1258, 1261, 1262, 152, 1263, 1264, 1264, - 1265, 1266, 1266, 1266, 1266, 1266, 1145, 1145, - 1267, 1267, 1267, 1268, 1269, 1270, 1251, 1145, - - 175, 1271, 1257, 1271, 1257, 1271, 1257, 1271, - 1257, 1271, 1257, 1257, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - - 1257, 1257, 1257, 1271, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - - 1257, 1257, 1257, 1271, 1257, 1271, 1257, 1271, - 1257, 1257, 1257, 1257, 1257, 1257, 1271, 1257, - 1257, 1257, 1257, 1257, 1257, 1272, 1272, 175, - 175, 1273, 1273, 1274, 1274, 1275, 1275, 1276, - - 1277, 1278, 1279, 1278, 1279, 1278, 1279, 1278, - 1279, 1278, 1279, 1279, 1279, 1279, 1279, 1279, - 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, - 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, - - 1279, 1279, 1279, 1278, 1279, 1279, 1279, 1279, - 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, - 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, - 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, - - 1279, 1279, 1279, 1278, 1279, 1278, 1279, 1278, - 1279, 1279, 1279, 1279, 1279, 1279, 1278, 1279, - 1279, 1279, 1279, 1279, 1279, 1278, 1278, 1279, - 1279, 1279, 1279, 1280, 1281, 1281, 1281, 1282, - - 175, 175, 175, 175, 175, 1283, 1283, 1283, - 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, - 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, - 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, - - 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, - 1283, 1283, 1283, 1283, 1283, 1284, 175, 175, - 175, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - - 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - - 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1285, 1285, 1285, 175, - 1286, 1286, 1287, 1287, 1287, 1287, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1289, 1289, 1289, 175, 175, 175, 175, 175, - - 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, + 1177, 1177, 1177, 1177, 1177, 1177, 1182, 1182, + 1182, 1182, 1182, 1182, 1183, 1183, 1183, 1183, + 1183, 1183, 1183, 1239, 1239, 1239, 1239, 1239, + + 1183, 1183, 1183, 1183, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1239, 1239, 1255, + 1255, 1255, 1255, 1255, 1255, 177, 177, 177, + 1239, 1239, 1239, 1239, 1239, 1210, 1210, 1210, + 1210, 1210, 177, 177, 177, 177, 177, 177, + + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 177, + 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, + 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, + + 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, + 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, + 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, + 1273, 1273, 1273, 1273, 1273, 1273, 1273, 177, + + 117, 113, 1274, 1275, 1276, 1277, 1278, 117, + 113, 117, 113, 117, 113, 1279, 1280, 1281, + 1282, 993, 995, 996, 1283, 117, 113, 1283, + 993, 993, 993, 993, 1284, 1284, 1285, 1285, + + 1286, 1287, 1286, 1287, 1286, 1287, 1286, 1287, + 1286, 1287, 1286, 1287, 1286, 1287, 1286, 1287, + 1286, 1287, 1286, 1287, 1286, 1287, 1286, 1287, + 1286, 1287, 1286, 1287, 1286, 1287, 1286, 1287, + + 1286, 1287, 1286, 1287, 1288, 1289, 1289, 1289, + 1289, 1289, 1289, 1290, 1291, 1290, 1291, 1292, + 1292, 1292, 1293, 1294, 177, 177, 177, 177, + 177, 1295, 1296, 1296, 1296, 1297, 1295, 1296, - 1181, 1181, 1181, 1181, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, - 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, - - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - 1291, 1291, 1291, 1291, 1291, 1292, 1292, 175, - - 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, - 1287, 1287, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - - 1286, 1286, 1286, 1286, 1293, 1293, 1293, 1293, - 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, - 1176, 1295, 1295, 1295, 1295, 1295, 1295, 1295, - 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, - - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - 1291, 1291, 1291, 1291, 1292, 1292, 1296, 1286, - - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1295, 1295, 1295, 1295, 1295, 1295, 1295, - 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, - - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1176, 1176, 1176, 1176, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 175, - - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1176, - 1176, 1176, 1176, 1286, 1286, 1286, 1286, 1286, - - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1176, 1176, - - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1176, - - 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, - 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, - 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, - 1298, 1298, 1298, 1298, 1298, 1298, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - - 1257, 1257, 1257, 1257, 1257, 1257, 1300, 1300, - 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, - 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, - 1300, 1300, 1300, 1300, 1301, 1301, 1301, 1301, - - 1301, 1301, 1301, 1301, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1303, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1304, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 175, 175, 175, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - - 1251, 1251, 1305, 1305, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1305, 1251, 1251, 1251, - 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, - - 1251, 1305, 1251, 1251, 1251, 1305, 1251, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 1306, 1306, 1306, 1306, 1306, 1306, 1307, 1308, - - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 908, 1240, 1245, 1309, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - - 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 804, 804, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 236, 237, 236, 237, 236, 237, 236, 237, - 236, 237, 236, 237, 236, 237, 236, 237, - 236, 237, 236, 237, 236, 237, 236, 237, - 236, 237, 236, 237, 236, 237, 236, 237, - - 240, 241, 236, 237, 236, 237, 236, 237, - 236, 237, 236, 237, 236, 237, 1310, 224, - 1311, 1311, 1311, 1312, 1313, 1313, 1313, 1313, - 1313, 1313, 1313, 1313, 224, 224, 1312, 1314, - - 236, 237, 236, 237, 236, 237, 236, 237, - 236, 237, 236, 237, 236, 237, 236, 237, - 236, 237, 236, 237, 236, 237, 236, 237, - 175, 175, 175, 175, 175, 175, 175, 1313, - - 754, 754, 754, 754, 754, 754, 1315, 1315, - 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, - 390, 390, 911, 1308, 1307, 1307, 1307, 1308, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, - 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, - 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1317, - 1317, 1317, 1317, 1246, 1246, 1246, 1246, 1246, - - 1318, 1318, 941, 942, 941, 942, 941, 942, - 941, 942, 941, 942, 941, 942, 941, 942, - 939, 939, 941, 942, 941, 942, 941, 942, - 941, 942, 941, 942, 941, 942, 941, 942, - - 941, 942, 941, 942, 941, 942, 941, 942, - 941, 942, 941, 942, 941, 942, 941, 942, - 941, 942, 941, 942, 941, 942, 941, 942, - 941, 942, 941, 942, 941, 942, 941, 942, - - 941, 942, 941, 942, 941, 942, 941, 942, - 941, 942, 941, 942, 941, 942, 941, 942, - 1222, 939, 939, 939, 939, 939, 939, 939, - 939, 941, 942, 941, 942, 1319, 941, 942, - - 941, 942, 941, 942, 941, 942, 941, 942, - 1246, 1320, 1320, 941, 942, 1321, 1322, 175, - 1323, 1324, 1226, 1227, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1323, 1324, 1323, 1324, 1323, 1324, 1323, 1324, - 1323, 1324, 1325, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1326, 1326, 1322, 804, 804, 804, 804, 804, - - 735, 735, 1327, 735, 735, 735, 1328, 735, - 735, 735, 735, 1327, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, - - 735, 735, 735, 842, 842, 1327, 1327, 842, - 752, 752, 752, 752, 175, 175, 175, 175, - 1294, 1294, 1294, 1294, 1294, 1294, 681, 681, - 1100, 1329, 175, 175, 175, 175, 175, 175, - - 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, - - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 1330, 1330, 1331, 1331, - 175, 175, 175, 175, 175, 175, 175, 175, - - 884, 884, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 884, 884, 884, 884, - 884, 884, 884, 884, 884, 884, 884, 884, - - 884, 884, 884, 884, 1332, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 906, 906, - 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 175, 175, 175, 175, 175, 175, - - 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, - 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, - 1333, 1333, 431, 431, 431, 431, 431, 431, - 1334, 1334, 1334, 431, 175, 175, 175, 175, - - 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - - 804, 804, 804, 804, 804, 804, 883, 883, - 883, 883, 883, 1335, 1335, 1335, 907, 906, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - - 804, 804, 804, 804, 804, 804, 804, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 884, 885, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 1336, - - 729, 729, 729, 729, 729, 729, 729, 729, - 729, 729, 729, 729, 729, 729, 729, 729, - 729, 729, 729, 729, 729, 729, 729, 729, - 729, 729, 729, 729, 729, 175, 175, 175, - - 1337, 1337, 1337, 914, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 1338, 914, 914, 1337, 1337, - 1337, 1337, 914, 914, 1337, 914, 914, 914, - - 1339, 911, 911, 911, 911, 911, 911, 1307, - 1308, 1308, 911, 911, 911, 911, 175, 1306, - 849, 850, 851, 852, 853, 854, 855, 856, - 857, 858, 175, 175, 175, 175, 911, 911, - - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 883, 883, 883, 883, 883, 883, 884, - 884, 883, 883, 884, 884, 883, 883, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 804, 804, 804, 883, 804, 804, 804, 804, - 804, 804, 804, 804, 883, 884, 175, 175, - 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 175, 175, 1336, 906, 906, 906, - - 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, - 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, - 1341, 1340, 1340, 1340, 1340, 1340, 1340, 1342, - 1342, 1342, 1340, 717, 175, 175, 175, 175, - - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 825, 825, - 847, 825, 847, 847, 1343, 825, 825, 847, - 847, 825, 825, 825, 825, 825, 847, 847, - - 825, 847, 825, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 825, 825, 860, 859, 859, - - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 887, 1344, 1344, 887, 887, - 1345, 1345, 898, 1346, 1346, 887, 886, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 899, 899, 899, 899, 899, 899, 175, - 175, 899, 899, 899, 899, 899, 899, 175, - 175, 899, 899, 899, 899, 899, 899, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 899, 899, 899, 899, 899, 899, 899, 175, - 899, 899, 899, 899, 899, 899, 899, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 754, 754, 754, 914, 914, 1337, 914, 914, - 1337, 914, 914, 1308, 914, 1347, 175, 175, - 849, 850, 851, 852, 853, 854, 855, 856, - 857, 858, 175, 175, 175, 175, 175, 175, - - 1348, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1348, 1349, 1349, 1349, - - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1348, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1348, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1348, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1348, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1348, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - - 1349, 1349, 1349, 1349, 1348, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, - - 1349, 1349, 1349, 1349, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 731, 731, 731, 731, 731, 731, 731, 731, - 731, 731, 731, 731, 731, 731, 731, 731, - - 731, 731, 731, 731, 731, 731, 731, 175, - 175, 175, 175, 733, 733, 733, 733, 733, - 733, 733, 733, 733, 733, 733, 733, 733, - 733, 733, 733, 733, 733, 733, 733, 733, - - 733, 733, 733, 733, 733, 733, 733, 733, - 733, 733, 733, 733, 733, 733, 733, 733, - 733, 733, 733, 733, 733, 733, 733, 733, - 733, 733, 733, 733, 175, 175, 175, 175, - 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, - 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, - 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, - 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, - - 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, - 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, - 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, - 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, - - 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, - 1257, 1257, 1257, 1257, 1257, 1257, 1303, 1303, - 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, - 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, - - 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, - 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, - 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, - 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, - - 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, - 1276, 1276, 1276, 1302, 1302, 1302, 1299, 1299, + 1298, 1298, 1298, 1298, 1298, 1298, 177, 1299, + 177, 177, 177, 177, 177, 1299, 177, 177, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, @@ -2884,1886 +2374,2456 @@ static const unsigned short uc_property_trie[] = { 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, - 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, - 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, - 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, - 1300, 1300, 1299, 1299, 1299, 1299, 1299, 1299, - - 1352, 1353, 1354, 1355, 1356, 1357, 1357, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 1358, 1359, 1360, 1361, 1362, - 175, 175, 175, 175, 175, 1363, 1364, 279, - - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 1365, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 252, - 279, 279, 279, 279, 279, 252, 279, 252, - - 279, 279, 252, 279, 279, 252, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 1366, 1366, 1366, 1366, 1366, 1366, - 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, - - 1366, 1366, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 1051, 1260, - - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, + 1300, 1300, 1300, 1300, 1300, 1300, 1301, 1301, + 177, 177, 177, 177, 177, 177, 177, 1302, + 1303, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 1304, + + 739, 739, 739, 739, 739, 739, 739, 739, + 739, 739, 739, 739, 739, 739, 739, 739, + 739, 739, 739, 739, 739, 739, 739, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 739, 739, 739, 739, 739, 739, 739, 177, + 739, 739, 739, 739, 739, 739, 739, 177, + 739, 739, 739, 739, 739, 739, 739, 177, + 739, 739, 739, 739, 739, 739, 739, 177, + + 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, + + 1305, 1305, 1306, 1307, 1306, 1307, 1305, 1305, + 1305, 1306, 1307, 1305, 1306, 1307, 1133, 1133, + 1133, 1133, 1133, 1133, 1133, 1133, 1132, 1308, + 1309, 1310, 1311, 1312, 1306, 1307, 1312, 1312, + + 1313, 1314, 1260, 1261, 1260, 1261, 1260, 1261, + 1260, 1261, 1310, 1310, 1310, 1310, 1315, 1316, + 1310, 1317, 1318, 1319, 1319, 1318, 1318, 1318, + 1318, 1318, 1320, 1320, 177, 177, 177, 177, + + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 177, 1321, 1321, 1321, 1321, 1321, + + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1322, 1322, 177, 177, 177, 177, + + 1323, 1324, 1325, 1326, 1206, 1327, 1328, 1329, + 16, 1124, 16, 1124, 16, 1124, 16, 1124, + 16, 1124, 1206, 1206, 16, 1124, 16, 1124, + 16, 1124, 16, 1124, 1330, 1105, 1331, 1331, + + 1206, 1329, 1329, 1329, 1329, 1329, 1329, 1329, + 1329, 1329, 1332, 1333, 154, 1334, 1335, 1335, + 1336, 1337, 1337, 1337, 1337, 1337, 1206, 1206, + 1338, 1338, 1338, 1339, 1340, 1341, 1322, 1206, + + 177, 1342, 1343, 1342, 1343, 1342, 1343, 1342, + 1343, 1342, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + + 1343, 1343, 1343, 1342, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + + 1343, 1343, 1343, 1342, 1343, 1342, 1343, 1342, + 1343, 1343, 1343, 1343, 1343, 1343, 1342, 1343, + 1343, 1343, 1343, 1343, 1343, 1344, 1344, 177, + 177, 1345, 1345, 1346, 1346, 1347, 1347, 1348, + + 1349, 1350, 1351, 1350, 1351, 1350, 1351, 1350, + 1351, 1350, 1351, 1351, 1351, 1351, 1351, 1351, + 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, + 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - 284, 284, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, + 1351, 1351, 1351, 1350, 1351, 1351, 1351, 1351, + 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, + 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, + 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, - 300, 300, 300, 300, 300, 300, 300, 300, - 284, 284, 284, 284, 284, 284, 284, 284, - 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, + 1351, 1351, 1351, 1350, 1351, 1350, 1351, 1350, + 1351, 1351, 1351, 1351, 1351, 1351, 1350, 1351, + 1351, 1351, 1351, 1351, 1351, 1350, 1350, 1351, + 1351, 1351, 1351, 1352, 1353, 1354, 1354, 1355, + + 177, 177, 177, 177, 177, 1356, 1356, 1356, + 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, + 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, + 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, + + 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, + 1356, 1356, 1356, 1356, 1356, 1357, 177, 177, + 177, 1358, 1358, 1358, 1358, 1358, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, + + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, + + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 177, + 1359, 1359, 1360, 1360, 1360, 1360, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1362, 1362, 1362, 177, 177, 177, 177, 177, + + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + + 1242, 1242, 1242, 1242, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, + 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, + + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1365, 1365, 177, + + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + + 1359, 1359, 1359, 1359, 1366, 1366, 1366, 1366, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, + 1237, 1368, 1368, 1368, 1368, 1368, 1368, 1368, + 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, + + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, + 1364, 1364, 1364, 1364, 1365, 1365, 1369, 1359, + + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1368, 1368, 1368, 1368, 1368, 1368, 1368, + 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, + + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1237, 1237, 1237, 1237, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 177, + + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1237, + 1237, 1237, 1237, 1359, 1359, 1359, 1359, 1359, + + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1237, 1237, + + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1237, + + 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, + 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, + 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, + 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, + + 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, + 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, + 1371, 1371, 1371, 1371, 1371, 1371, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, - 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, - 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 1368, 811, 284, 284, - - 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, - 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, - 1370, 1371, 1372, 1373, 1374, 1228, 1228, 1375, - 1376, 1377, 175, 175, 175, 175, 175, 175, - - 151, 151, 151, 151, 927, 927, 927, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1255, 1378, 1378, 1379, 1379, 1051, 1260, 1051, - 1260, 1051, 1260, 1051, 1260, 1051, 1260, 1051, - - 1260, 1051, 1260, 1051, 1260, 1270, 1270, 1380, - 1381, 1255, 1255, 1255, 1255, 1379, 1379, 1379, - 1382, 1383, 1384, 175, 1385, 1386, 9, 9, - 1378, 16, 1070, 16, 1070, 16, 1070, 1387, - - 1255, 1255, 1388, 1389, 1390, 1391, 1392, 175, - 1255, 12, 13, 1255, 175, 175, 175, 175, - 300, 300, 300, 1393, 300, 284, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 284, 284, 1394, - - 175, 9, 1255, 1387, 12, 13, 1255, 1395, - 16, 1070, 1255, 1388, 1382, 1389, 1384, 1396, - 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, - 1405, 1406, 1386, 1385, 1407, 1392, 1408, 9, - - 1255, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, - 1409, 1409, 1409, 39, 1255, 46, 1410, 1379, - - 1410, 1411, 1411, 1411, 1411, 1411, 1411, 1411, - 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, - 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, - 1411, 1411, 1411, 39, 1392, 46, 1392, 1184, - - 1185, 1254, 16, 1070, 1253, 1280, 1412, 1278, - 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, - 1281, 1412, 1412, 1412, 1412, 1412, 1412, 1412, - 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, + + 1373, 1373, 1373, 1373, 1373, 1373, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1375, 1375, 1375, 1375, + + 1375, 1375, 1375, 1375, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1377, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1379, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 177, 177, 177, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + + 1380, 1380, 1381, 1381, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1381, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + + 1380, 1381, 1380, 1380, 1380, 1381, 1380, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1383, 1383, 1383, 1383, 1383, 1383, 1384, 1385, + + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1387, 1388, 1389, 1390, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + + 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, + 1399, 1400, 1386, 1386, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 240, 241, 240, 241, 240, 241, 240, 241, + 240, 241, 240, 241, 240, 241, 240, 241, + 240, 241, 240, 241, 240, 241, 240, 241, + 240, 241, 240, 241, 240, 241, 240, 241, + + 244, 245, 240, 241, 240, 241, 240, 241, + 240, 241, 240, 241, 240, 241, 1401, 228, + 1402, 1402, 1402, 1403, 1404, 1404, 1404, 1404, + 1404, 1404, 1404, 1404, 228, 228, 1403, 1405, + + 240, 241, 240, 241, 240, 241, 240, 241, + 240, 241, 240, 241, 240, 241, 240, 241, + 240, 241, 240, 241, 240, 241, 240, 241, + 177, 177, 177, 177, 177, 177, 177, 1404, + + 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, + 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, + 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, + 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, + + 1406, 1406, 1406, 1406, 1406, 1406, 1407, 1407, + 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, + 1408, 1408, 1409, 1410, 1411, 1411, 1411, 1410, + 177, 177, 177, 177, 177, 177, 177, 177, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, - 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, - 1412, 1412, 1412, 1412, 1412, 1412, 1413, 1413, - - 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, - 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, - 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, - 1414, 1414, 1414, 1414, 1414, 1414, 1414, 175, - - 175, 175, 1414, 1414, 1414, 1414, 1414, 1414, - 175, 175, 1414, 1414, 1414, 1414, 1414, 1414, - 175, 175, 1414, 1414, 1414, 1414, 1414, 1414, - 175, 175, 1414, 1414, 1414, 175, 175, 175, - - 50, 12, 1392, 1410, 1145, 12, 12, 175, - 51, 36, 36, 36, 36, 51, 51, 175, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1415, 1415, 1415, 1416, 51, 1417, 1417, - - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 175, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - - 805, 805, 805, 805, 805, 805, 805, 175, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 175, 805, 805, 175, 805, - - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 175, 175, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 175, 175, - - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 175, 175, 175, 175, 175, - - 1418, 1419, 1418, 175, 175, 175, 175, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 175, 175, 175, 1421, - 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, - - 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, - 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, - 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, - 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, - - 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, - 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, - 1422, 1422, 1422, 1422, 1422, 1423, 1423, 1423, - 1423, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1423, 175, 175, 175, 175, 175, - 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, - 1178, 1178, 1178, 1178, 175, 175, 175, 175, - - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 1124, 1124, 1124, 1124, 1124, 930, 175, 175, - - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 175, 175, 175, - - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 804, 804, - 804, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, - 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, - 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, - 1425, 1425, 1425, 1425, 1425, 1425, 1425, 175, - - 1426, 1426, 1426, 1426, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, - 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, - - 1425, 1427, 1425, 1425, 1425, 1425, 1425, 1425, - 1425, 1425, 1427, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 175, 1418, - - 735, 735, 735, 735, 175, 175, 175, 175, - 735, 735, 735, 735, 735, 735, 735, 735, - 1428, 1429, 1429, 1429, 1429, 1429, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, - 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, - 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, - 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, + 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1413, + 1413, 1413, 1413, 1316, 1316, 1316, 1316, 1316, + + 1414, 1414, 995, 996, 995, 996, 995, 996, + 995, 996, 995, 996, 995, 996, 995, 996, + 993, 993, 995, 996, 995, 996, 995, 996, + 995, 996, 995, 996, 995, 996, 995, 996, + + 995, 996, 995, 996, 995, 996, 995, 996, + 995, 996, 995, 996, 995, 996, 995, 996, + 995, 996, 995, 996, 995, 996, 995, 996, + 995, 996, 995, 996, 995, 996, 995, 996, + + 995, 996, 995, 996, 995, 996, 995, 996, + 995, 996, 995, 996, 995, 996, 995, 996, + 1284, 993, 993, 993, 993, 993, 993, 993, + 993, 995, 996, 995, 996, 1415, 995, 996, + + 995, 996, 995, 996, 995, 996, 995, 996, + 1316, 1416, 1416, 995, 996, 1417, 1418, 177, + 1419, 1420, 1421, 1422, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1419, 1420, 1419, 1420, 1419, 1420, 1419, 1420, + 1419, 1420, 1423, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1424, 1424, 1418, 1425, 1425, 1425, 1425, 1425, + + 1426, 1426, 1427, 1426, 1426, 1426, 1428, 1426, + 1426, 1426, 1426, 1427, 1426, 1426, 1426, 1426, + 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, + 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, + + 1426, 1426, 1426, 1429, 1429, 1427, 1427, 1429, + 1430, 1430, 1430, 1430, 177, 177, 177, 177, + 1367, 1367, 1367, 1367, 1367, 1367, 685, 685, + 1155, 1431, 177, 177, 177, 177, 177, 177, - 1430, 1430, 1430, 1430, 1430, 1430, 1431, 1431, + 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, - 1432, 1432, 1432, 1432, 1432, 1432, 1433, 1433, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 175, 175, - - 813, 814, 815, 816, 817, 818, 819, 820, - 821, 822, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1434, 1434, 1434, 1434, 1434, 1434, 252, 252, - 1434, 252, 1434, 1434, 1434, 1434, 1434, 1434, - 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, - 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, - - 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, - 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, - 1434, 1434, 1434, 1434, 1434, 1434, 252, 1434, - 1434, 252, 252, 252, 1434, 252, 252, 1434, - - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 252, 1435, - 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, + 1432, 1432, 1432, 1432, 1433, 1433, 1434, 1434, + 177, 177, 177, 177, 177, 177, 177, 177, - 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, - 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, - 1437, 1437, 1437, 1437, 1437, 1437, 1438, 1438, - 1438, 1438, 1436, 1436, 252, 252, 252, 1439, - - 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, - 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, - 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, - 1440, 1440, 252, 252, 252, 252, 252, 1441, - - 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, - 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, - 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, - 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, - - 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, - 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, - 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, - 252, 252, 252, 252, 252, 252, 1442, 1442, - - 1443, 1327, 1327, 1327, 252, 1327, 1327, 252, - 252, 252, 252, 252, 1327, 841, 1327, 737, - 1443, 1443, 1443, 1443, 252, 1443, 1443, 1443, - 252, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - - 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - 1443, 1443, 1443, 1443, 252, 252, 252, 252, - 737, 1444, 841, 252, 252, 252, 252, 1328, - - 1445, 1446, 1447, 1448, 1449, 1449, 1449, 1449, - 252, 252, 252, 252, 252, 252, 252, 252, - 1450, 1450, 1450, 1450, 1450, 1450, 1451, 1451, - 1452, 252, 252, 252, 252, 252, 252, 252, - - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 1436, 1436, 392, - - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 252, 252, - 252, 1247, 1247, 1247, 1247, 1247, 1247, 1247, - - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 252, 252, + 1435, 1435, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 252, 252, 252, 252, 252, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1435, 1435, 1435, 1435, + 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, + + 1435, 1435, 1435, 1435, 1437, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 1438, 1438, + 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, + 1447, 1448, 177, 177, 177, 177, 177, 177, + + 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + 1449, 1449, 435, 435, 435, 435, 435, 435, + 1450, 1450, 1450, 435, 177, 177, 177, 177, + + 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, + 1459, 1460, 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, 1461, 1462, 1462, + 1462, 1462, 1462, 1463, 1463, 1463, 1464, 1465, + 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, + 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, + + 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1467, + 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, + 1467, 1467, 1468, 1469, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 1470, + + 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 177, 177, 177, + + 1471, 1471, 1471, 1472, 1473, 1473, 1473, 1473, + 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, + 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, + 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, + + 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, + 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, + 1473, 1473, 1473, 1474, 1472, 1472, 1471, 1471, + 1471, 1471, 1472, 1472, 1471, 1472, 1472, 1472, + + 1475, 1476, 1476, 1476, 1476, 1476, 1476, 1477, + 1478, 1478, 1476, 1476, 1476, 1476, 177, 1479, + 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, + 1488, 1489, 177, 177, 177, 177, 1476, 1476, + + 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, + 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, + 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, + 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, + + 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, + 1490, 1491, 1491, 1491, 1491, 1491, 1491, 1492, + 1492, 1491, 1491, 1492, 1492, 1491, 1491, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1490, 1490, 1490, 1491, 1490, 1490, 1490, 1490, + 1490, 1490, 1490, 1490, 1491, 1492, 177, 177, + 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, + 1501, 1502, 177, 177, 1503, 1504, 1504, 1504, + + 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, + 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, + 1506, 1505, 1505, 1505, 1505, 1505, 1505, 1507, + 1507, 1507, 1505, 721, 177, 177, 177, 177, + + 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, + 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, + 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, + 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, + + 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, + 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, + 1509, 1508, 1509, 1509, 1510, 1508, 1508, 1509, + 1509, 1508, 1508, 1508, 1508, 1508, 1509, 1509, + + 1508, 1509, 1508, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 1508, 1508, 1511, 1512, 1512, - 389, 389, 389, 389, 389, 389, 389, 389, - 389, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - - 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, - 1461, 1462, 1462, 1462, 1462, 1462, 1462, 1462, - 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, - 1462, 1462, 1462, 1462, 1462, 1462, 1462, 252, - - 901, 902, 901, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 902, 902, 902, 902, 902, 902, 902, 902, - 902, 902, 902, 902, 902, 902, 1234, 1463, - 1463, 904, 904, 904, 904, 904, 175, 175, - 175, 175, 1464, 1465, 1466, 1467, 1468, 1469, - 1470, 1471, 1472, 1473, 1473, 1473, 1473, 1473, - 1473, 1473, 1473, 1473, 1473, 1473, 1474, 1475, - 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1337, 1337, 914, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 914, 914, 914, 1337, 1337, 1337, 1337, 914, - 914, 1347, 1338, 911, 911, 1484, 1308, 1308, - 1308, 1308, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 175, 175, 175, 175, 175, 175, 175, - 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, - 1493, 1494, 175, 175, 175, 175, 175, 175, - - 1495, 1495, 1495, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 1344, - 1344, 1344, 1344, 1344, 887, 1344, 1344, 1344, - 1344, 1344, 1344, 886, 886, 175, 1485, 1486, - 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, - 1496, 1345, 1345, 1345, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1344, 1344, 887, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 887, 887, 887, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 887, - 1497, 898, 898, 898, 898, 1345, 1345, 909, - 1496, 175, 175, 175, 175, 175, 175, 175, - 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, - 1493, 1494, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 1344, 887, 1344, 887, 887, - 1344, 1344, 1344, 1344, 1344, 1344, 1497, 1498, - 175, 175, 175, 175, 175, 175, 175, 175, - 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, - 1493, 1494, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 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, - 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, - 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, - 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, - 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, - 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, - 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, - 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, - - 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, - 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, - 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, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 879, 879, 879, 879, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 1500, 1500, 1500, 1501, 1501, 1501, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 1501, 754, 754, 754, 1500, 1501, - 1500, 1501, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 1500, 1501, 1501, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, - 899, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 898, 898, 898, - 898, 898, 898, 898, 898, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 898, 887, 887, 887, 887, 887, 887, 887, - 887, 887, 887, 887, 887, 887, 887, 887, - 887, 887, 887, 887, 887, 887, 887, 887, - 887, 887, 887, 887, 887, 887, 887, 887, - 887, 887, 887, 887, 887, 887, 887, 887, - 887, 887, 887, 887, 887, 887, 887, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 1344, - 1344, 1344, 1344, 1346, 1346, 1346, 1346, 1346, - 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1502, 1503, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 175, - 175, 1124, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1505, 1506, 1507, - 1507, 1507, 1504, 1504, 1504, 1508, 1505, 1505, - 1505, 1505, 1505, 1509, 1509, 1509, 1509, 1509, - 1509, 1509, 1509, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1504, 1504, 1511, 1511, 1511, - 1511, 1511, 1510, 1510, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1511, 1511, 1511, 1511, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1512, 1512, 1512, 1424, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 811, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, - 1513, 1513, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 175, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1514, 175, 1514, 1514, - 175, 175, 1514, 175, 175, 1514, 1514, 175, - 175, 1514, 1514, 1514, 1514, 175, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1515, 1515, - 1515, 1515, 175, 1515, 175, 1515, 1515, 1515, - 1515, 105, 1515, 1515, 175, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - - 1515, 1515, 1515, 1515, 1514, 1514, 175, 1514, - 1514, 1514, 1514, 175, 175, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 175, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 175, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1514, 1514, 175, 1514, 1514, 1514, 1514, 175, - 1514, 1514, 1514, 1514, 1514, 175, 1514, 175, - 175, 175, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 175, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 106, 106, 175, 175, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1516, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1517, 1515, 1515, 1515, 1515, - 1515, 1515, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1516, 1515, 1515, 1515, 1515, - - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1517, 1515, 1515, - 1515, 1515, 1515, 1515, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1516, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1517, - 1515, 1515, 1515, 1515, 1515, 1515, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1516, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1517, 1515, 1515, 1515, 1515, 1515, 1515, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1516, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1515, 1515, 1515, 1517, 1515, 1515, 1515, 1515, - 1515, 1515, 1518, 1221, 175, 175, 1519, 1520, - 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, - 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, - 1527, 1528, 1519, 1520, 1521, 1522, 1523, 1524, - 1525, 1526, 1527, 1528, 1519, 1520, 1521, 1522, - 1523, 1524, 1525, 1526, 1527, 1528, 1519, 1520, - 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, - - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, - - 1529, 1529, 1529, 1529, 284, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 284, 1529, 1529, 284, 1529, 284, 284, 1529, - 284, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 284, 1529, 1529, 1529, 1529, - 284, 1529, 284, 1529, 284, 284, 284, 284, - 284, 284, 1529, 284, 284, 284, 284, 1529, - 284, 1529, 284, 1529, 284, 1529, 1529, 1529, - 284, 1529, 1529, 284, 1529, 284, 284, 1529, - 284, 1529, 284, 1529, 284, 1529, 284, 1529, - 284, 1529, 1529, 284, 1529, 284, 284, 1529, - 1529, 1529, 1529, 284, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 284, 1529, 1529, 1529, 1529, - 284, 1529, 1529, 1529, 1529, 284, 1529, 284, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 284, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 284, 284, 284, 284, - 284, 1529, 1529, 1529, 284, 1529, 1529, 1529, - 1529, 1529, 284, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 1530, 1530, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, + 1513, 1513, 1513, 1514, 1515, 1515, 1514, 1514, + 1516, 1516, 1513, 1517, 1517, 1514, 1518, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 1519, 1519, 1519, 1519, 1519, 1519, 177, + 177, 1519, 1519, 1519, 1519, 1519, 1519, 177, + 177, 1519, 1519, 1519, 1519, 1519, 1519, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1519, 1519, 1519, 1519, 1519, 1519, 1519, 177, + 1519, 1519, 1519, 1519, 1519, 1519, 1519, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, + 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, + 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, + 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, + + 1520, 1520, 1520, 1521, 1521, 1522, 1521, 1521, + 1522, 1521, 1521, 1523, 1521, 1524, 177, 177, + 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, + 1533, 1534, 177, 177, 177, 177, 177, 177, + + 1535, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1535, 1536, 1536, 1536, + + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1535, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1535, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1535, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1535, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1535, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + + 1536, 1536, 1536, 1536, 1535, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + + 1536, 1536, 1536, 1536, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 735, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 175, 175, 175, 175, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, - 1181, 1181, 1181, 1181, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 175, - 175, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 175, - 175, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 175, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1531, 1531, 1532, 1533, 1534, 1535, 1536, 1537, - 1538, 1539, 1540, 175, 175, 175, 175, 175, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 175, - 1541, 681, 1541, 1541, 1541, 1541, 1541, 1541, - 1541, 1541, 1541, 1541, 1541, 681, 1541, 681, - 1541, 1541, 681, 1541, 1541, 1541, 681, 1541, - 1541, 1541, 681, 681, 681, 681, 681, 1541, - 1541, 1541, 1541, 1541, 1541, 1541, 1541, 681, - 1541, 1541, 1541, 1541, 1541, 1541, 1541, 681, - 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, - 1541, 1541, 1542, 1542, 175, 175, 175, 175, - 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, - 1541, 681, 1541, 681, 681, 1541, 1541, 681, - 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, - 1541, 1541, 681, 681, 681, 681, 1541, 1541, - 681, 1541, 1541, 1541, 1541, 1541, 1541, 1541, - 1541, 1541, 1541, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 1543, 1543, - 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, - 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, - 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, - - 1293, 1544, 1544, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, - 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, - 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, - 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, - 1293, 1293, 1544, 1544, 1544, 1544, 1544, 1544, - 1544, 1544, 1544, 175, 175, 175, 175, 175, - 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, - 1293, 175, 175, 175, 175, 175, 175, 175, - 1544, 1544, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 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, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1151, 1151, 1151, 1151, 1151, 1151, 175, 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, 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, 175, 175, 175, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1150, 1150, 1151, - 1151, 1151, 1151, 1151, 1150, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 175, 1151, 1151, - 1151, 1151, 1151, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 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, 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, 175, - 1151, 175, 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, - 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, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1150, 1151, 1150, 1151, 1150, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1150, - 1151, 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, 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, - 175, 1151, 1151, 1151, 1151, 175, 175, 175, - - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 175, 175, - 1542, 1542, 1542, 1542, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 1151, 1151, 1151, 1151, 1151, - - 1545, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 1545, 1151, 1151, 1151, 1545, 1151, 1545, - 1151, 1545, 1151, 1545, 1151, 1151, 1151, 1545, - 1151, 1151, 1151, 1151, 1151, 1151, 1545, 1545, - 1151, 1151, 1151, 1151, 1545, 1151, 1545, 1545, - 1151, 1151, 1151, 1151, 1545, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 1151, 175, 175, 175, 175, 1151, 1151, 1151, - 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 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, 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, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 1546, 1546, - - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1547, 1547, 1547, 1547, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, - 1299, 1299, 1299, 1299, 1299, 1299, 1546, 1546, - - 1083, 1509, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 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, 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, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 735, 735, 735, 735, 735, 735, 735, 177, + 177, 177, 177, 737, 737, 737, 737, 737, + 737, 737, 737, 737, 737, 737, 737, 737, + 737, 737, 737, 737, 737, 737, 737, 737, + + 737, 737, 737, 737, 737, 737, 737, 737, + 737, 737, 737, 737, 737, 737, 737, 737, + 737, 737, 737, 737, 737, 737, 737, 737, + 737, 737, 737, 737, 177, 177, 177, 177, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, + 1373, 1373, 1373, 1373, 1373, 1373, 1377, 1377, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1376, 1376, 1376, 1372, 1372, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1372, 1372, 1372, 1372, 1372, 1372, + + 1540, 1541, 1542, 1543, 1544, 1545, 1545, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 1546, 1547, 1548, 1549, 1550, + 177, 177, 177, 177, 177, 1551, 1552, 283, + + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 1553, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 256, + 283, 283, 283, 283, 283, 256, 283, 256, + + 283, 283, 256, 283, 283, 256, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + + 1554, 1554, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 1105, 1331, + + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + 288, 288, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + + 304, 304, 304, 304, 304, 304, 304, 304, + 288, 288, 288, 288, 288, 288, 288, 288, + 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, + 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, + + 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, + 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 1556, 1177, 288, 288, + + 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, + 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, + 1558, 1559, 1560, 1561, 1562, 1563, 1563, 1564, + 1565, 1566, 177, 177, 177, 177, 177, 177, + + 153, 153, 153, 153, 981, 981, 981, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1326, 1567, 1567, 1568, 1568, 1105, 1331, 1105, + 1331, 1105, 1331, 1105, 1331, 1105, 1331, 1105, + + 1331, 1105, 1331, 1105, 1331, 1341, 1341, 1569, + 1570, 1326, 1326, 1326, 1326, 1568, 1568, 1568, + 1571, 1572, 1573, 177, 1574, 1575, 9, 9, + 1567, 16, 1124, 16, 1124, 16, 1124, 1576, + + 1326, 1326, 1577, 1578, 1579, 1580, 1581, 177, + 1326, 12, 13, 1326, 177, 177, 177, 177, + 304, 304, 304, 1582, 304, 288, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 288, 288, 1583, + + 177, 9, 1326, 1576, 12, 13, 1326, 1584, + 16, 1124, 1326, 1577, 1571, 1578, 1573, 1585, + 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, + 1594, 1595, 1575, 1574, 1596, 1581, 1597, 9, + + 1326, 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, 39, 1326, 46, 1599, 1568, + + 1599, 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, 39, 1581, 46, 1581, 1245, + + 1246, 1325, 16, 1124, 1324, 1352, 1601, 1350, + 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, + 1353, 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, 1602, 1602, + + 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, + 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, + 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, + 1603, 1603, 1603, 1603, 1603, 1603, 1603, 177, + + 177, 177, 1603, 1603, 1603, 1603, 1603, 1603, + 177, 177, 1603, 1603, 1603, 1603, 1603, 1603, + 177, 177, 1603, 1603, 1603, 1603, 1603, 1603, + 177, 177, 1603, 1603, 1603, 177, 177, 177, + + 50, 12, 1581, 1599, 1206, 12, 12, 177, + 51, 36, 36, 36, 36, 51, 51, 177, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1604, 1604, 1604, 1605, 51, 1606, 1606, + + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 177, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 177, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 177, 1607, 1607, 177, 1607, + + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 177, 177, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 177, 177, + + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, + 1607, 1607, 1607, 177, 177, 177, 177, 177, + + 1608, 1609, 1608, 177, 177, 177, 177, 1610, + 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, + 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, + 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, + + 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, + 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, + 1610, 1610, 1610, 1610, 177, 177, 177, 1611, + 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, + + 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, 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, 1612, 1612, 1612, 1613, 1613, 1613, + 1613, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1613, 177, 177, 177, 177, 177, + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, + 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, + + 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, + 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, + 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, + 1185, 1185, 1185, 1185, 1185, 984, 177, 177, + + 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, 177, 177, 177, + + 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, 1616, + 1616, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, + 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, + 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, + 1617, 1617, 1617, 1617, 1617, 1617, 1617, 177, + + 1618, 1618, 1618, 1618, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, + 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, + + 1619, 1620, 1619, 1619, 1619, 1619, 1619, 1619, + 1619, 1619, 1620, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, + 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, + 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, + 1621, 1621, 1621, 1621, 1621, 1621, 177, 1622, + + 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + + 1623, 1623, 1623, 1623, 177, 177, 177, 177, + 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + 1624, 1625, 1625, 1625, 1625, 1625, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + + 1626, 1626, 1626, 1626, 1626, 1626, 1627, 1627, + 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, + 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, + 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, + + 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, + 1628, 1628, 1628, 1628, 1628, 1628, 1629, 1629, + 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, + 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, + + 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, + 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, + 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, + 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, + + 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, + 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, + 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, + 1631, 1631, 1631, 1631, 1631, 1631, 177, 177, + + 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, + 1640, 1641, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1642, 1642, 1642, 1642, 1642, 1642, 256, 256, + 1642, 256, 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, + 1642, 1642, 1642, 1642, 1642, 1642, 256, 1642, + 1642, 256, 256, 256, 1642, 256, 256, 1642, + + 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, + 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, + 1643, 1643, 1643, 1643, 1643, 1643, 256, 1644, + 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, + + 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, + 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, + 1646, 1646, 1646, 1646, 1646, 1646, 1647, 1647, + 1647, 1647, 1648, 1648, 256, 256, 256, 1649, + + 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, + 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, + 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, + 1650, 1650, 256, 256, 256, 256, 256, 1651, + + 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, + 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, + 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, + 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, + + 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, + 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, + 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, + 256, 256, 256, 256, 256, 256, 1653, 1653, + + 1654, 1655, 1655, 1655, 256, 1655, 1655, 256, + 256, 256, 256, 256, 1655, 1656, 1655, 1657, + 1654, 1654, 1654, 1654, 256, 1654, 1654, 1654, + 256, 1654, 1654, 1654, 1654, 1654, 1654, 1654, + + 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, + 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, + 1654, 1654, 1654, 1654, 256, 256, 256, 256, + 1657, 1658, 1656, 256, 256, 256, 256, 1659, + + 1660, 1661, 1662, 1663, 1664, 1664, 1664, 1664, + 256, 256, 256, 256, 256, 256, 256, 256, + 1665, 1665, 1665, 1665, 1665, 1665, 1666, 1666, + 1667, 256, 256, 256, 256, 256, 256, 256, + + 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, + 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, + 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, + 1668, 1668, 1668, 1668, 1668, 1669, 1669, 1670, + + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 256, 256, + 256, 1672, 1672, 1672, 1672, 1672, 1672, 1672, + + 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, + 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, + 1673, 1673, 1673, 1673, 1673, 1673, 256, 256, + 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, + + 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, + 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, + 1675, 1675, 1675, 256, 256, 256, 256, 256, + 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, + + 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, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + + 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, + 1686, 1687, 1687, 1687, 1687, 1687, 1687, 1687, + 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, + 1687, 1687, 1687, 1687, 1687, 1687, 1687, 256, + + 1688, 1689, 1688, 1690, 1690, 1690, 1690, 1690, + 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, + 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, + 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, + 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, + 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, + 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, + 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, + 1689, 1689, 1689, 1689, 1689, 1689, 1691, 1692, + 1692, 1693, 1693, 1693, 1693, 1693, 177, 177, + 177, 177, 1694, 1695, 1696, 1697, 1698, 1699, + 1700, 1701, 1702, 1703, 1703, 1703, 1703, 1703, + 1703, 1703, 1703, 1703, 1703, 1703, 1704, 1705, + 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1714, 1714, 1715, 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, 1716, 1716, 1716, + 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, + 1715, 1715, 1715, 1714, 1714, 1714, 1714, 1715, + 1715, 1717, 1718, 1719, 1719, 1720, 1721, 1721, + 1721, 1721, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 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, 177, 177, 177, 177, 177, 177, 177, + 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, + 1731, 1732, 177, 177, 177, 177, 177, 177, + + 1733, 1733, 1733, 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, 1734, 1734, 1734, 1734, 1735, + 1735, 1735, 1735, 1735, 1736, 1735, 1735, 1735, + 1735, 1735, 1735, 1737, 1737, 177, 1738, 1739, + 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, + 1748, 1749, 1749, 1749, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1750, 1750, 1751, 1752, 1752, 1752, 1752, 1752, + 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, + 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, + 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, + 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, + 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, + 1752, 1752, 1752, 1751, 1751, 1751, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1751, + 1753, 1752, 1752, 1752, 1752, 1754, 1754, 1755, + 1756, 177, 177, 177, 177, 177, 177, 177, + 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, + 1765, 1766, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1768, 1769, 1768, 1769, 1769, + 1768, 1768, 1768, 1768, 1768, 1768, 1770, 1771, + 177, 177, 177, 177, 177, 177, 177, 177, + 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, + 1780, 1781, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1782, 1782, 1782, 1782, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 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, 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, 1783, 1783, 1783, 1783, + 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, + 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, + 1783, 1783, 1783, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1784, 1784, 1784, 1784, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1786, 1786, 1786, 1787, 1787, 1787, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1787, 1785, 1785, 1785, 1786, 1787, + 1786, 1787, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1786, 1787, 1787, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1785, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, + 1788, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + 1789, 1789, 1789, 1789, 1789, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1789, 1790, 1790, 1790, 1790, 1790, 1790, 1790, + 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, + 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, + 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, + 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, + 1790, 1790, 1790, 1790, 1790, 1790, 1790, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 1791, + 1791, 1791, 1791, 1792, 1792, 1792, 1792, 1792, + 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1793, 1794, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 177, + 177, 1185, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1796, 1797, 1798, + 1798, 1798, 1795, 1795, 1795, 1799, 1796, 1796, + 1796, 1796, 1796, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1801, 1801, 1801, 1801, 1801, + 1801, 1801, 1801, 1795, 1795, 1802, 1802, 1802, + 1802, 1802, 1801, 1801, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1802, 1802, 1802, 1802, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1803, 1803, 1803, 1614, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, - 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, 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, 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, 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, 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, 1548, 1548, 1548, 1548, 1548, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, - - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1549, 1549, 1546, 1546, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, + 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, + 1804, 1804, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 177, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1805, 177, 1805, 1805, + 177, 177, 1805, 177, 177, 1805, 1805, 177, + 177, 1805, 1805, 1805, 1805, 177, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1806, 1806, + 1806, 1806, 177, 1806, 177, 1806, 1806, 1806, + 1806, 1807, 1806, 1806, 177, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + + 1806, 1806, 1806, 1806, 1805, 1805, 177, 1805, + 1805, 1805, 1805, 177, 177, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 177, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 177, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1805, 1805, 177, 1805, 1805, 1805, 1805, 177, + 1805, 1805, 1805, 1805, 1805, 177, 1805, 177, + 177, 177, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 177, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1178, 1178, 177, 177, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1808, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1809, 1806, 1806, 1806, 1806, + 1806, 1806, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1808, 1806, 1806, 1806, 1806, + + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1809, 1806, 1806, + 1806, 1806, 1806, 1806, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1808, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1809, + 1806, 1806, 1806, 1806, 1806, 1806, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1808, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1809, 1806, 1806, 1806, 1806, 1806, 1806, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, + 1805, 1808, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1809, 1806, 1806, 1806, 1806, + 1806, 1806, 1810, 1811, 177, 177, 1812, 1813, + 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, + 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, + 1820, 1821, 1812, 1813, 1814, 1815, 1816, 1817, + 1818, 1819, 1820, 1821, 1812, 1813, 1814, 1815, + 1816, 1817, 1818, 1819, 1820, 1821, 1812, 1813, + 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, + + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + + 1822, 1822, 1822, 1822, 288, 1822, 1822, 1822, + 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, + 288, 1822, 1822, 288, 1822, 288, 288, 1822, + 288, 1822, 1822, 1822, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 288, 1822, 1822, 1822, 1822, + 288, 1822, 288, 1822, 288, 288, 288, 288, + 288, 288, 1822, 288, 288, 288, 288, 1822, + 288, 1822, 288, 1822, 288, 1822, 1822, 1822, + 288, 1822, 1822, 288, 1822, 288, 288, 1822, + 288, 1822, 288, 1822, 288, 1822, 288, 1822, + 288, 1822, 1822, 288, 1822, 288, 288, 1822, + 1822, 1822, 1822, 288, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 288, 1822, 1822, 1822, 1822, + 288, 1822, 1822, 1822, 1822, 288, 1822, 288, + 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, + 1822, 1822, 288, 1822, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 1822, 288, 288, 288, 288, + 288, 1822, 1822, 1822, 288, 1822, 1822, 1822, + 1822, 1822, 288, 1822, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 1822, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 1823, 1823, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 177, 177, 177, 177, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 177, + 177, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 177, + 177, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 177, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1824, 1824, 1825, 1826, 1827, 1828, 1829, 1830, + 1831, 1832, 1833, 177, 177, 177, 177, 177, + 685, 685, 685, 685, 685, 685, 685, 685, + 685, 685, 685, 685, 685, 685, 685, 685, + 685, 685, 685, 685, 685, 685, 685, 685, + 685, 685, 685, 685, 685, 685, 685, 177, + 1834, 685, 1834, 1834, 1834, 1834, 1834, 1834, + 1834, 1834, 1834, 1834, 1834, 685, 1834, 685, + 1834, 1834, 685, 1834, 1834, 1834, 685, 1834, + 1834, 1834, 685, 685, 685, 685, 685, 1834, + 1834, 1834, 1834, 1834, 1834, 1834, 1834, 685, + 1834, 1834, 1834, 1834, 1834, 1834, 1834, 685, + 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, + 1834, 1834, 1835, 1835, 177, 177, 177, 177, + 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, + 1834, 685, 1834, 685, 685, 1834, 1834, 685, + 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, + 1834, 1834, 685, 685, 685, 685, 1834, 1834, + 685, 1834, 1834, 1834, 1834, 1834, 1834, 1834, + 1834, 1834, 1834, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 1836, 1836, + 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, + 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, + 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, + + 1837, 1838, 1838, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, + 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, + 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, + 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, + 1366, 1366, 1838, 1838, 1838, 1838, 1838, 1838, + 1838, 1838, 1838, 177, 177, 177, 177, 177, + 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, + 1366, 177, 177, 177, 177, 177, 177, 177, + 1838, 1838, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1212, 1212, 1212, 1212, 1212, 1212, 177, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 177, 177, 177, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1211, 1211, 1212, + 1212, 1212, 1212, 1212, 1211, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 177, 1212, 1212, + 1212, 1212, 1212, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 177, + 1212, 177, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1211, 1212, 1211, 1212, 1211, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1211, + 1212, 1211, 1211, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 177, 1212, 1212, 1212, 1212, 177, 177, 177, + + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 177, 177, + 1835, 1835, 1835, 1835, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 1212, 1212, 1212, 1212, 1212, + + 1839, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1839, 1212, 1212, 1212, 1839, 1212, 1839, + 1212, 1839, 1212, 1839, 1212, 1212, 1212, 1839, + 1212, 1212, 1212, 1212, 1212, 1212, 1839, 1839, + 1212, 1212, 1212, 1212, 1839, 1212, 1839, 1839, + 1212, 1212, 1212, 1212, 1839, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 177, 177, 177, 177, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, + 1212, 1212, 1212, 1212, 1212, 1212, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 1840, 1840, + + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1376, 1376, 1376, 1376, 1376, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 1841, 1841, 1841, 1841, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1372, 1372, 1840, 1840, + + 1138, 1800, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + + 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, 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, 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, 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, + 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, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, + + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, + 1844, 1844, 1844, 1844, 1844, 1844, 1840, 1840, }; #define GET_PROP_INDEX(ucs4) \ @@ -4775,488 +4835,427 @@ static const unsigned short uc_property_trie[] = { (uc_property_trie[uc_property_trie[ucs2>>5] + (ucs2 & 0x1f)]) static const Properties uc_properties[] = { - { 9, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 21, 0 }, - { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 5, 17, 0 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 34, 0 }, - { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 5, 35, 0 }, - { 9, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 5, 35, 0 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 33, 0 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 21, 0 }, - { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 21, 0 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 32, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 6, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 0 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 0 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 13, 3, 0 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 0 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 2, 0 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 0 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 11, 8, 0 }, - { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 16, 0 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 10, 8, 0 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 8, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 0, 8, 0 }, - { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 0 }, - { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 2, 0 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 12, 0, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 17, 0 }, - { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 1, 0 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 35, 0 }, - { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 4, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 23, 10, 0, 0, -1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 0 }, - { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 17, 0 }, - { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0 }, - { 26, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 0 }, - { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 18, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 743, 743, 775, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 0, 12, 0 }, - { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 24, 10, 0, 0, -1, -16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 0 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 16, 13, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 121, 121, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 19, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -232, -232, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 98, 98, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -121, 0, 0, -121, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -300, -300, -268, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 195, 195, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 210, 0, 0, 210, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 206, 0, 0, 206, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 205, 0, 0, 205, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 79, 0, 0, 79, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 202, 0, 0, 202, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 203, 0, 0, 203, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 207, 0, 0, 207, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 97, 97, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 211, 0, 0, 211, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 209, 0, 0, 209, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 163, 163, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 213, 0, 0, 213, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 214, 0, 0, 214, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 218, 0, 0, 218, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 217, 0, 0, 217, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 219, 0, 0, 219, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 56, 56, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 2, 0, 1, 2, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 16, 0, 0, 0, -1, 0, 1, -1, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -2, -1, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -79, -79, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 109, 109, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -97, 0, 0, -97, 0, 0, 0, 0, 4, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -56, 0, 0, -56, 0, 0, 0, 0, 4, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -130, 0, 0, -130, 0, 0, 0, 0, 6, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 10795, 0, 0, 10795, 0, 0, 0, 0, 8, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -163, 0, 0, -163, 0, 0, 0, 0, 8, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 10792, 0, 0, 10792, 0, 0, 0, 0, 8, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 10815, 10815, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -195, 0, 0, -195, 0, 0, 0, 0, 9, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 69, 0, 0, 69, 0, 0, 0, 0, 9, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 71, 0, 0, 71, 0, 0, 0, 0, 9, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 9, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 10783, 10783, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 10780, 10780, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 10782, 10782, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -210, -210, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -206, -206, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -205, -205, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -202, -202, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -203, -203, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -207, -207, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 3, 3, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -209, -209, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -211, -211, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 10743, 10743, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 10749, 10749, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -213, -213, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -214, -214, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 10727, 10727, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -218, -218, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -69, -69, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -217, -217, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -71, -71, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -219, -219, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 0 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 18, 0 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 18, 0 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 0 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 232, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 202, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 240, 0, -1, 0, 0, 84, 84, 116, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 28 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 28 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 4, 28 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 28 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 28 }, - { 0, 17, 232, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 28 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 28 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 28 }, - { 0, 17, 233, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 4, 28 }, - { 0, 17, 234, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 4, 28 }, - { 0, 17, 233, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 4, 28 }, - { 0, 17, 234, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 4, 28 }, - { 0, 17, 233, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 28 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 28 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 1 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 1 }, + { 9, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 21, 2 }, + { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 5, 17, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 34, 2 }, + { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 5, 35, 2 }, + { 9, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 5, 35, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 33, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 21, 2 }, + { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 21, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 32, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 6, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 13, 3, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 2, 2 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 11, 8, 2 }, + { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 16, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 10, 8, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 2 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 0, 8, 2 }, + { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 2 }, + { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 2, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 12, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 17, 2 }, + { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 1, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 35, 2 }, + { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 4, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 23, 10, 0, 0, -1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 2 }, + { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 17, 2 }, + { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 2 }, + { 26, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 2 }, + { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 18, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 743, 743, 775, 0, 0, 0, 0, 1, 0, 7, 6, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 0, 12, 2 }, + { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 24, 10, 0, 0, -1, -16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 16, 13, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 121, 121, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 19, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -232, -232, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 98, 98, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -121, 0, 0, -121, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -300, -300, -268, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 195, 195, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 210, 0, 0, 210, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 206, 0, 0, 206, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 205, 0, 0, 205, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 79, 0, 0, 79, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 202, 0, 0, 202, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 203, 0, 0, 203, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 207, 0, 0, 207, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 97, 97, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 211, 0, 0, 211, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 209, 0, 0, 209, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 163, 163, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 213, 0, 0, 213, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 214, 0, 0, 214, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 218, 0, 0, 218, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 217, 0, 0, 217, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 219, 0, 0, 219, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 56, 56, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 2, 0, 1, 2, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 16, 0, 0, 0, -1, 0, 1, -1, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -2, -1, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -79, -79, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 109, 109, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -97, 0, 0, -97, 0, 0, 0, 0, 4, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -56, 0, 0, -56, 0, 0, 0, 0, 4, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -130, 0, 0, -130, 0, 0, 0, 0, 6, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 10795, 0, 0, 10795, 0, 0, 0, 0, 8, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -163, 0, 0, -163, 0, 0, 0, 0, 8, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 10792, 0, 0, 10792, 0, 0, 0, 0, 8, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 10815, 10815, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -195, 0, 0, -195, 0, 0, 0, 0, 9, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 69, 0, 0, 69, 0, 0, 0, 0, 9, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 71, 0, 0, 71, 0, 0, 0, 0, 9, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 9, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 10783, 10783, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 10780, 10780, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 10782, 10782, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -210, -210, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -206, -206, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -205, -205, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -202, -202, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -203, -203, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -207, -207, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 3, 3, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -209, -209, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -211, -211, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 10743, 10743, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 10749, 10749, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -213, -213, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -214, -214, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 10727, 10727, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -218, -218, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -69, -69, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -217, -217, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -71, -71, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -219, -219, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 2 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 18, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 18, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 36 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 2 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 232, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 202, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 240, 0, -1, 0, 0, 84, 84, 116, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 1 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 4, 1 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 1 }, + { 0, 17, 232, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 1 }, + { 0, 17, 233, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 4, 1 }, + { 0, 17, 234, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 4, 1 }, + { 0, 17, 233, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 4, 1 }, + { 0, 17, 234, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 4, 1 }, + { 0, 17, 233, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 1 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 1 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 4 }, { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 38, 0, 0, 38, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 37, 0, 0, 37, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 64, 0, 0, 64, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 63, 0, 0, 63, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 101, 101, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -38, -38, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -37, -37, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 105, 105, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -31, -31, 1, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -64, -64, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -63, -63, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 8, 0, 0, 8, 0, 0, 0, 0, 10, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -62, -62, -30, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -57, -57, -25, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -47, -47, -15, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -54, -54, -22, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -8, -8, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 6, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 6, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -86, -86, -54, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, -48, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 7, 7, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -60, 0, 0, -60, 0, 0, 0, 0, 5, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -96, -96, -64, 0, 0, 0, 0, 5, 0, 7, 6, 12, 1 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 7, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -7, 0, 0, -7, 0, 0, 0, 0, 7, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -130, 0, 0, -130, 0, 0, 0, 0, 8, 0, 7, 7, 12, 1 }, - { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 4, 0, 7, 7, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 1, 0, 7, 7, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 2 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 2 }, - { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 2 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 6, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 6, 0, 7, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 15, 0, 0, 15, 0, 0, 0, 0, 1, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -15, -15, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 9, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 11, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 11, 0, 7, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 12, 0, 7, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 12, 0, 7, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 48, 0, 0, 48, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 3 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 3 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 12, 3 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -48, -48, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 65, 62, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 12, 8, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 3 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 9, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 38, 0, 0, 38, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 37, 0, 0, 37, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 64, 0, 0, 64, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 63, 0, 0, 63, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 101, 101, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -38, -38, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -37, -37, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 105, 105, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -31, -31, 1, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -64, -64, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -63, -63, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 8, 0, 0, 8, 0, 0, 0, 0, 10, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -62, -62, -30, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -57, -57, -25, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -47, -47, -15, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -54, -54, -22, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -8, -8, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 6, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 6, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, -86, -86, -54, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -80, -80, -48, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 7, 7, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -60, 0, 0, -60, 0, 0, 0, 0, 5, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -96, -96, -64, 0, 0, 0, 0, 5, 0, 7, 6, 12, 4 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 7, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -7, 0, 0, -7, 0, 0, 0, 0, 7, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -130, 0, 0, -130, 0, 0, 0, 0, 8, 0, 7, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 4, 0, 7, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 1, 0, 7, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 5 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 5 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 5 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 5 }, + { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 5 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 6, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 6, 0, 7, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 15, 0, 0, 15, 0, 0, 0, 0, 1, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -15, -15, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 9, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 11, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 11, 0, 7, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 12, 0, 7, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 12, 0, 7, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 48, 0, 0, 48, 0, 0, 0, 0, 1, 0, 7, 7, 12, 6 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, -48, -48, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 65, 62, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 12, 8, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 6 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 9, 6 }, { 13, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 4 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 4 }, - { 0, 17, 222, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 4 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 4 }, - { 0, 17, 228, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 4 }, - { 0, 17, 10, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 11, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 12, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 13, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 14, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 15, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 16, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 17, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 18, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 19, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 19, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 4 }, - { 0, 17, 20, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 21, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 22, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 20, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 17, 4 }, - { 0, 17, 23, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 4 }, - { 0, 17, 24, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 0, 17, 25, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 6, 4 }, - { 0, 17, 18, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 4 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 13, 4 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 4 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 0, 12, 4 }, - { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 4, 4, 12, 5 }, - { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 3, 4, 4, 12, 5 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 7 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 7 }, + { 0, 17, 222, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 7 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 7 }, + { 0, 17, 228, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 7 }, + { 0, 17, 10, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 11, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 12, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 13, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 14, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 15, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 16, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 17, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 18, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 19, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 19, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 7 }, + { 0, 17, 20, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 21, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 22, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 20, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 17, 7 }, + { 0, 17, 23, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 7 }, + { 0, 17, 24, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 0, 17, 25, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 6, 7 }, + { 0, 17, 18, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 7 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 13, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 0, 12, 7 }, + { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 4, 4, 12, 8 }, + { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 3, 4, 4, 12, 8 }, { 13, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 5 }, - { 26, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 5 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 5 }, - { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 10, 5 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 10, 11, 8, 5 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 5 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 5 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 5 }, - { 0, 17, 30, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 5 }, - { 0, 17, 31, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 5 }, - { 0, 17, 32, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 5 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 6, 5 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 6, 0 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 5 }, - { 17, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 0 }, - { 0, 17, 27, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 28, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 29, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 30, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 31, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 32, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 33, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 34, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 5 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 5 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 5 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 5 }, - { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 0 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 5 }, - { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 9, 11, 5 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 5 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 5 }, - { 0, 17, 35, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 5 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 6, 5 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 5 }, - { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 5 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 5 }, - { 17, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 5 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 5 }, - { 29, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 5 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 5 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 12, 6 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6 }, - { 10, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 4, 4, 12, 6 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 6 }, - { 0, 17, 36, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 6 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 6 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 6 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 6 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 6 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 6 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 7 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 7 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 7 }, - { 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 3, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 3, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 3, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 3, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 3, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 3, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 3, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 27 }, - { 18, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 27 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 27 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 27 }, - { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 27 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 27 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 27 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 10, 11, 8, 27 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 12, 6, 27 }, - { 17, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 27 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 0 }, - { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 0 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 0 }, - { 18, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 0 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 0 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 0 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 5 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 5 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 5 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 5 }, - { 0, 17, 27, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 5 }, - { 0, 17, 28, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 5 }, - { 0, 17, 29, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 5 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 8 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 8 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 8 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 8 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 8 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 8 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 4, 4, 21, 8 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 8 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 8 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 21, 8 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 8 }, + { 26, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 8 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 8 }, + { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 10, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 10, 11, 8, 8 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 8 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 8 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 8 }, + { 0, 17, 30, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 8 }, + { 0, 17, 31, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 8 }, + { 0, 17, 32, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 2 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 6, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 6, 2 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 8 }, + { 17, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 2 }, + { 0, 17, 27, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 28, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 29, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 30, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 31, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 32, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 33, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 34, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 8 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 8 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 8 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 8 }, + { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 8 }, + { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 9, 11, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 8 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 8 }, + { 0, 17, 35, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 6, 8 }, { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 8 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 17, 0 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 8 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 8 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 8 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 8 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 8 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 8 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 8 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 9 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 9 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 9 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 9 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 9 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 9 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 9 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 9 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 9 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 9 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 9 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 9 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 9 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 9, 9 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 10 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 10 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 4, 21, 10 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 10 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 10 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 10 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 10 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 10 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 10 }, + { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 8 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 8 }, + { 17, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 8 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 8 }, + { 29, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 8 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 12, 9 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 9 }, + { 10, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 4, 4, 12, 9 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 9 }, + { 0, 17, 36, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 9 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 9 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 9 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 9 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 9 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 9 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 10 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 10 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 10 }, + { 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 3, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 3, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 3, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 3, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 3, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 3, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 3, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 66 }, + { 18, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 66 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 66 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 66 }, + { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 66 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 66 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 66 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 10, 11, 8, 66 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 12, 6, 66 }, + { 17, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 66 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 82 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 82 }, + { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 82 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 82 }, + { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 95 }, + { 18, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 95 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 95 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 95 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 95 }, + { 18, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 8 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 8 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 8 }, + { 0, 17, 27, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 8 }, + { 0, 17, 28, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 8 }, + { 0, 17, 29, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 8 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 11 }, { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 11 }, { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 11 }, { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 11 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 11 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 4, 4, 21, 11 }, { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 11 }, { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 11 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 11 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 21, 11 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 11 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 17, 2 }, { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 11 }, { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 11 }, { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 11 }, @@ -5267,16 +5266,21 @@ static const Properties uc_properties[] = { { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 11 }, { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 11 }, { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 11 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 11 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 9, 11 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 11 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 11 }, { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 12 }, { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 12 }, { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 12 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 12 }, { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 12 }, { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 12 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 12 }, { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 12 }, { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 12 }, { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 12 }, { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 12 }, @@ -5287,16 +5291,20 @@ static const Properties uc_properties[] = { { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 12 }, { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 12 }, { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 12 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 12 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 12 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 12 }, { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 12 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 12 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 9, 12 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 13 }, { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 13 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 4, 21, 13 }, { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 13 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 13 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 13 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 13 }, { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 13 }, { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 13 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 13 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 13 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 13 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 13 }, { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 13 }, { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 13 }, { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 13 }, @@ -5306,17 +5314,13 @@ static const Properties uc_properties[] = { { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 13 }, { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 13 }, { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 13 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 13 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 13 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 9, 13 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 14 }, { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 14 }, { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 14 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 14 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 14 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 14 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 14 }, { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 14 }, - { 0, 17, 84, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 14 }, - { 0, 17, 91, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 14 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 14 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 14 }, { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 14 }, { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 14 }, { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 14 }, @@ -5327,17 +5331,16 @@ static const Properties uc_properties[] = { { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 14 }, { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 14 }, { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 14 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 14 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 14 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 14 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 9, 14 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 15 }, { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 15 }, { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 15 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 15 }, { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 15 }, - { 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 15 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 15 }, { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 15 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 15 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 15 }, { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 15 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 15 }, { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 15 }, { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 15 }, { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 15 }, @@ -5348,16 +5351,16 @@ static const Properties uc_properties[] = { { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 15 }, { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 15 }, { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 15 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 15 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 16 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 15 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 15 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 16 }, { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 16 }, { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 16 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 16 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 16 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 16 }, { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 16 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 16 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 16 }, { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 16 }, { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 16 }, { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 16 }, @@ -5367,22 +5370,38 @@ static const Properties uc_properties[] = { { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 16 }, { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 16 }, { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 16 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 16 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 16 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 4, 21, 17 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 17 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 17 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 17 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 17 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 17 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 30, 18 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 18 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 0, 8, 30, 18 }, - { 0, 17, 103, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 18 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 18 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 30, 18 }, - { 0, 17, 107, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 18 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 18 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 16 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 16 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 9, 16 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 17 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 17 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 17 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 17 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 17 }, + { 0, 17, 84, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 17 }, + { 0, 17, 91, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 17 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 17 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 17 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 18 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 18 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 18 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 18 }, + { 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 18 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 18 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 18 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 18 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 18 }, { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 18 }, { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 18 }, { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 18 }, @@ -5393,13 +5412,15 @@ static const Properties uc_properties[] = { { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 18 }, { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 18 }, { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 18 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 17, 18 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 30, 19 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 19 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 0, 8, 30, 19 }, - { 0, 17, 118, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 19 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 30, 19 }, - { 0, 17, 122, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 18 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 4, 21, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 19 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 19 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 19 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 19 }, { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 19 }, { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 19 }, { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 19 }, @@ -5410,920 +5431,1254 @@ static const Properties uc_properties[] = { { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 19 }, { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 19 }, { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 19 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 30, 19 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 8, 12, 20 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 18, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 18, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 12, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 20 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 12, 20 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 20 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 20 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 12, 20 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 20 }, - { 0, 17, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 20 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 13, 0, 20 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 13, 1, 20 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 4, 4, 21, 20 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 19 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 4, 21, 20 }, { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 20 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 20 }, - { 0, 17, 129, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 20 }, - { 0, 17, 130, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 20 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 20 }, - { 0, 17, 132, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 20 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 4, 4, 17, 20 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 20 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 20 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 20 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 20 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 20 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 20 }, { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 20 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 20 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 20 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 20 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 18, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 17, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 18, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 20 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 4, 20 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 30, 21 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 30, 21 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 30, 21 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 30, 21 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 21 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 4, 30, 21 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 30, 21 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 21 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 21 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 30, 21 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 30, 21 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 21 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 17, 21 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 21 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 30, 21 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 21 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 30, 21 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 21 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 30, 21 }, - { 14, 0, 0, 0, -1, 0, 7264, 0, 0, 7264, 0, 0, 0, 0, 1, 0, 7, 7, 12, 22 }, - { 14, 0, 0, 0, -1, 0, 7264, 0, 0, 7264, 0, 0, 0, 0, 13, 0, 7, 7, 12, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 22 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 7, 8, 25, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 8, 7, 8, 25, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 7, 8, 26, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 9, 7, 8, 26, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 7, 8, 27, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 10, 7, 8, 27, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 12, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 0 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 17, 24 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 24 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 13, 0, 24 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 13, 1, 24 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 25 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 0 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 12, 17, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 30, 26 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 26 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 4, 30, 26 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 26 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 26 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 26 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 30, 26 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 26 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 9, 26 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 30, 26 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 26 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 26 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 11, 6, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 6, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 18, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 0 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 4, 0 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 0 }, - { 0, 17, 228, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 4, 21, 0 }, - { 0, 17, 222, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 0 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 12, 6, 0 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 30, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 30, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 30, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 4, 4, 30, 0 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 0 }, - { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 30, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 30, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 26 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 4, 4, 21, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 30, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 0 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 30, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 0 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 0 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 30, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 30, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 4, 4, 21, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 0 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 0 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 4, 4, 21, 0 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 12, 17, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 17, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 0 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 21, 0 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 21, 0 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 0 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 0 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 0 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 4, 4, 21, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 0 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 4, 4, 21, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 17, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 17, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 28 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 28 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 28 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 21, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 28 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 1 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 5, 5, 0, 0, 1, 1, 0, 8, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 3814, 3814, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 1 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 28 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 28 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 28 }, - { 0, 17, 234, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 28 }, - { 0, 17, 214, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 28 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 28 }, - { 0, 17, 202, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 28 }, - { 0, 17, 233, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 28 }, - { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 115, 115, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 118, 118, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 121, 121, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 124, 124, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -59, -59, -58, 0, 0, 0, 0, 2, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -7615, 0, 0, -7615, 0, 0, 0, 0, 10, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 8, 8, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -8, 0, 0, -8, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 127, 127, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 134, 134, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 138, 138, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 74, 74, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 86, 86, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 128, 128, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 126, 126, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 176, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 179, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 182, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 185, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 188, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 191, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 194, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 197, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 176, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 179, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 182, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 185, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 188, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 191, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 194, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 197, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 200, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 203, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 206, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 209, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 212, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 215, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 218, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 221, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 200, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 203, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 206, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 209, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 212, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 215, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 218, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 221, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 224, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 227, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 230, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 233, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 236, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 239, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 242, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 245, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 224, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 227, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 230, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 233, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 236, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 239, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 242, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -8, 245, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 260, 257, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 248, 9, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 266, 263, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 142, 142, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 297, 293, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -74, 0, 0, -74, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -9, 248, 0, -9, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, -7205, -7205, -7173, 0, 0, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 272, 269, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 251, 9, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 278, 275, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 145, 145, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 305, 301, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -86, 0, 0, -86, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -9, 251, 0, -9, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 148, 148, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 152, 152, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 155, 155, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -100, 0, 0, -100, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 159, 159, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 163, 163, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 166, 166, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 169, 169, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -112, 0, 0, -112, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -7, 0, 0, -7, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 284, 281, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 254, 9, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 290, 287, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 173, 173, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 313, 309, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -128, 0, 0, -128, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -126, 0, 0, -126, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 16, 0, 0, 0, -1, 0, -9, 254, 0, -9, 0, 1, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 18, 1 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 17, 0 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 4, 0 }, - { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 4, 20, 0 }, - { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 10, 18, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 10, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 0 }, - { 10, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 17, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 17, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 19, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 13, 3, 0 }, - { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 13, 3, 0 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 0 }, - { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 0 }, - { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 10, 15, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 15, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 0, 17, 0 }, - { 7, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 35, 0 }, - { 8, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 35, 0 }, - { 10, 11, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 0 }, - { 10, 14, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 0 }, - { 10, 16, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 0 }, - { 10, 12, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 0 }, - { 10, 15, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 0 }, - { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 4, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0 }, - { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 0 }, - { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 5, 0 }, - { 26, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 0, 8, 0 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 1, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 12, 5, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 5, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 0 }, - { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 12, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 17, 0 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 5, 17, 0 }, - { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 4, 4, 22, 0 }, - { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 4, 4, 12, 0 }, - { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 4, 4, 12, 0 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 20 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 30, 21 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 21 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 0, 8, 30, 21 }, + { 0, 17, 103, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 21 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 21 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 30, 21 }, + { 0, 17, 107, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 21 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 21 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 21 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 17, 21 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 30, 22 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 0, 8, 30, 22 }, + { 0, 17, 118, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 22 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 30, 22 }, + { 0, 17, 122, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 30, 22 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 9, 11, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 30, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 8, 12, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 12, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 12, 23 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 23 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 9, 11, 23 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 12, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 23 }, + { 0, 17, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 23 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 13, 0, 23 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 13, 1, 23 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 4, 4, 21, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 23 }, + { 0, 17, 129, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 23 }, + { 0, 17, 130, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 23 }, + { 0, 17, 132, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 23 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 4, 4, 17, 23 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 23 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 21, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 23 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 23 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 17, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 4, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 30, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 30, 24 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 4, 30, 24 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 30, 24 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 24 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 24 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 30, 24 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 24 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 17, 24 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 24 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 30, 24 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 30, 24 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 24 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 30, 24 }, + { 14, 0, 0, 0, -1, 0, 7264, 0, 0, 7264, 0, 0, 0, 0, 1, 0, 7, 7, 12, 25 }, + { 14, 0, 0, 0, -1, 0, 7264, 0, 0, 7264, 0, 0, 0, 0, 13, 0, 7, 7, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 25 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 7, 8, 25, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 8, 7, 8, 25, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 7, 8, 26, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 9, 7, 8, 26, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 7, 8, 27, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 10, 7, 8, 27, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 27 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 27 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 27 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 12, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 27 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 27 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 28 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 29 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 29 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 29 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 12, 29 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 29 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 17, 30 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 30 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 13, 0, 30 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 13, 1, 30 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 31 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 31 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 42 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 42 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 42 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 43 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 43 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 43 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 12, 17, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 44 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 44 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 45 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 45 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 30, 32 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 32 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 4, 30, 32 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 30, 32 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 32 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 32 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 30, 32 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 32 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 9, 32 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 30, 32 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 32 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 32 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 11, 6, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 6, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 18, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 11, 6, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 6, 33 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 33 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 4, 33 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 11, 9, 11, 33 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 33 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 12, 33 }, + { 0, 17, 228, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 33 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 33 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 47 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 47 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 4, 4, 21, 47 }, + { 0, 17, 222, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 47 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 47 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 47 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 47 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 12, 6, 47 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 47 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 30, 48 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 30, 56 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 56 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 30, 56 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 4, 4, 30, 56 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 11, 9, 11, 56 }, + { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 30, 56 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 30, 56 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 32 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 55 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 55 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 55 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 4, 4, 21, 55 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 55 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 78 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 30, 78 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 78 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 78 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 30, 78 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 78 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 78 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 78 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 30, 78 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 78 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 30, 78 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 62 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 4, 4, 21, 62 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 62 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 62 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 4, 4, 21, 62 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 11, 9, 11, 62 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 12, 17, 62 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 62 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 17, 62 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 62 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 62 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 62 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 67 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 21, 67 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 67 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 21, 67 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 67 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 67 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 67 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 67 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 93 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 93 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 4, 4, 21, 93 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 93 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 4, 4, 21, 93 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 93 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 68 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 21, 68 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 68 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 68 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 17, 68 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 17, 68 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 68 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 69 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 69 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 69 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 17, 69 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 67 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 1 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 1 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 21, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 2 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 2 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 1 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 5 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 4 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 5, 5, 0, 0, 1, 1, 0, 8, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 3814, 3814, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 4 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 1 }, + { 0, 17, 234, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 1 }, + { 0, 17, 214, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 1 }, + { 0, 17, 202, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 1 }, + { 0, 17, 233, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 1 }, + { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 115, 115, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 118, 118, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 121, 121, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 124, 124, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -59, -59, -58, 0, 0, 0, 0, 2, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -7615, 0, 0, -7615, 0, 0, 0, 0, 10, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 8, 8, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -8, 0, 0, -8, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 127, 127, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 134, 134, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 138, 138, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 74, 74, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 86, 86, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 128, 128, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 126, 126, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 176, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 179, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 182, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 185, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 188, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 191, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 194, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 197, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 176, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 179, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 182, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 185, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 188, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 191, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 194, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 197, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 200, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 203, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 206, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 209, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 212, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 215, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 218, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 221, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 200, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 203, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 206, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 209, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 212, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 215, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 218, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 221, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 224, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 227, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 230, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 233, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 236, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 239, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 242, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 245, 8, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 224, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 227, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 230, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 233, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 236, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 239, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 242, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -8, 245, 0, -8, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 260, 257, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 248, 9, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 266, 263, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 142, 142, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 297, 293, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -74, 0, 0, -74, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -9, 248, 0, -9, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, -7205, -7205, -7173, 0, 0, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 272, 269, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 251, 9, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 278, 275, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 145, 145, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 305, 301, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -86, 0, 0, -86, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -9, 251, 0, -9, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 148, 148, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 152, 152, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 155, 155, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -100, 0, 0, -100, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 159, 159, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 163, 163, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 166, 166, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 169, 169, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -112, 0, 0, -112, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -7, 0, 0, -7, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 284, 281, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 254, 9, 0, 0, 1, 0, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 290, 287, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 173, 173, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 313, 309, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -128, 0, 0, -128, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -126, 0, 0, -126, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, -9, 254, 0, -9, 0, 1, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 18, 4 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 17, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 4, 2 }, + { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 4, 20, 2 }, + { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 10, 18, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 10, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 2 }, + { 10, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 19, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 13, 3, 2 }, + { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 13, 3, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 2 }, + { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 10, 15, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 15, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 0, 17, 2 }, + { 7, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 35, 2 }, + { 8, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 35, 2 }, + { 10, 11, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 2 }, + { 10, 14, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 2 }, + { 10, 16, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 2 }, + { 10, 12, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 2 }, + { 10, 15, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 2 }, + { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 4, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 2 }, + { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 5, 2 }, + { 26, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 0, 8, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 12, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 12, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 2 }, + { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 12, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 17, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 5, 17, 2 }, + { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 4, 4, 22, 2 }, + { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 4, 4, 12, 2 }, + { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 4, 4, 12, 2 }, { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 12, 0 }, - { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 0 }, - { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 6, 12, 0 }, - { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 6, 12, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 9, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 9, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 9, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 9, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 10, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 9, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 9, 0 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 9, 0 }, - { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 28 }, - { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 28 }, - { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 28 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 28 }, - { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 28 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 0 }, - { 14, 0, 0, 0, -1, 0, -7517, 0, 0, -7517, 0, 0, 0, 0, 1, 0, 7, 7, 12, 1 }, - { 14, 0, 0, 0, -1, 0, -8383, 0, 0, -8383, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -8262, 0, 0, -8262, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 28, 0, 0, 28, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 7, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -28, -28, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 4, 0, 0, 0, -1, 0, 16, 0, 0, 16, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 4, 0, 0, 0, -1, 0, 0, -16, -16, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 0 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 0 }, - { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 2016, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 1824, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 2108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 14, 0 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 29, 0, 0, 0, -1, 0, 26, 0, 0, 26, 0, 0, 0, 0, 1, 0, 7, 7, 12, 0 }, - { 29, 0, 0, 0, -1, 0, 0, -26, -26, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 0 }, - { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 14, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 14, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 14, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 14, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 0, 0 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 1, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 0, 0 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 1, 0 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 0, 0 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 1, 0 }, - { 21, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 0, 0 }, - { 22, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 1, 0 }, - { 21, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 0, 0 }, - { 22, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 1, 0 }, - { 26, 10, 0, 0, -1, -1824, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -2016, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -2104, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -2106, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, -2108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 48, 0, 0, 48, 0, 0, 0, 0, 8, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -48, -48, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -10743, 0, 0, -10743, 0, 0, 0, 0, 9, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -3814, 0, 0, -3814, 0, 0, 0, 0, 9, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -10727, 0, 0, -10727, 0, 0, 0, 0, 9, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -10795, -10795, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -10792, -10792, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -10780, 0, 0, -10780, 0, 0, 0, 0, 10, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -10749, 0, 0, -10749, 0, 0, 0, 0, 10, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -10783, 0, 0, -10783, 0, 0, 0, 0, 10, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -10782, 0, 0, -10782, 0, 0, 0, 0, 11, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, -10815, 0, 0, -10815, 0, 0, 0, 0, 11, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 11, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 11, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 13, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 13, 0, 7, 6, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 6, 0 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -7264, -7264, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 22 }, - { 15, 0, 0, 0, -1, 0, 0, -7264, -7264, 0, 0, 0, 0, 0, 13, 0, 7, 6, 12, 22 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 17, 0 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 3, 0 }, - { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 3, 0 }, - { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 3, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 17, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 17, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 0 }, - { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 3, 0 }, - { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 3, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 6, 0 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 17, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 19, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 14, 0 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 14, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 1, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 1, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 5, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 14, 0 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 14, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 1, 0 }, - { 0, 17, 218, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 228, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 0, 17, 222, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 1, 0, 224, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 23 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 14, 0 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 14, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 5, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 5, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 5, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 5, 0 }, - { 0, 17, 8, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 28 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 5, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 5, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 14, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 5, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 5, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 14, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 5, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 8, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 14, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 8, 5, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 23 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 14, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 14, 0 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 14, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 14, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 14, 0 }, - { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 14, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 5, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 14, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 17, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 17, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 2 }, - { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 2 }, + { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 21, 2 }, + { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 6, 12, 3 }, + { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 6, 12, 3 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 10, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 9, 2 }, + { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 21, 1 }, + { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 1 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 7, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 2 }, + { 14, 0, 0, 0, -1, 0, -7517, 0, 0, -7517, 0, 0, 0, 0, 1, 0, 7, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, -8383, 0, 0, -8383, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -8262, 0, 0, -8262, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 28, 0, 0, 28, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 6, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 6, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 7, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, -28, -28, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 3 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 4, 0, 0, 0, -1, 0, 16, 0, 0, 16, 0, 0, 0, 0, 1, 0, 7, 7, 12, 3 }, + { 4, 0, 0, 0, -1, 0, 0, -16, -16, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 3 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 3 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 3 }, + { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2016, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1824, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 14, 2 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 26, 0, 0, 26, 0, 0, 0, 0, 1, 0, 7, 7, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, -26, -26, 0, 0, 0, 0, 0, 1, 0, 7, 6, 12, 2 }, + { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 3, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 1, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 1, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 1, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 54 }, + { 21, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 1, 2 }, + { 21, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 13, 1, 2 }, + { 26, 10, 0, 0, -1, -1824, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2016, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2104, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2106, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 48, 0, 0, 48, 0, 0, 0, 0, 8, 0, 7, 7, 12, 57 }, + { 15, 0, 0, 0, -1, 0, 0, -48, -48, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 57 }, + { 14, 0, 0, 0, -1, 0, -10743, 0, 0, -10743, 0, 0, 0, 0, 9, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -3814, 0, 0, -3814, 0, 0, 0, 0, 9, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -10727, 0, 0, -10727, 0, 0, 0, 0, 9, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -10795, -10795, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -10792, -10792, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -10780, 0, 0, -10780, 0, 0, 0, 0, 10, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -10749, 0, 0, -10749, 0, 0, 0, 0, 10, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -10783, 0, 0, -10783, 0, 0, 0, 0, 10, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -10782, 0, 0, -10782, 0, 0, 0, 0, 11, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, -10815, 0, 0, -10815, 0, 0, 0, 0, 11, 0, 7, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 7, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 46 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 46 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 11, 0, 7, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 11, 0, 7, 6, 12, 46 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 46 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 13, 0, 7, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 13, 0, 7, 6, 12, 46 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 6, 46 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 17, 46 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, -7264, -7264, 0, 0, 0, 0, 0, 8, 0, 7, 6, 12, 25 }, + { 15, 0, 0, 0, -1, 0, 0, -7264, -7264, 0, 0, 0, 0, 0, 13, 0, 7, 6, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 58 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 58 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 58 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 17, 58 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 58 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 3, 2 }, + { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 3, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 2 }, { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 2 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 2 }, + { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 3, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 6, 2 }, { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 2 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 0 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 0 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 7, 0, 0, 7, 1, 0, 0, 1, 10, 0, 7, 7, 12, 0 }, - { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 9, 0, 0, 9, 1, 0, 0, 1, 12, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 12, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 12, 0, 7, 6, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 11, 0, 0, 11, 1, 0, 0, 1, 13, 0, 7, 7, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 6, 12, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 0 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 0 }, - { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 18, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 12, 6, 0 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 8 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 0 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 0 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 21, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 21 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 21 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 30, 21 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 12, 17, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 0 }, - { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 11, 7, 8, 23, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 7, 8, 24, 23 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 19, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 14, 37 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 14, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 14, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 5, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 14, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 14, 37 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 1, 2 }, + { 0, 17, 218, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 228, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 0, 17, 222, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 1, 0, 224, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 26 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 14, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 14, 37 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 5, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 14, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 5, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 14, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 5, 34 }, + { 0, 17, 8, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 1 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 5, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 14, 34 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 5, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 5, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 14, 35 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 5, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 8, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 14, 26 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 8, 5, 35 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 26 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 14, 26 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 14, 2 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 14, 26 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 14, 37 }, + { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 14, 38 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 5, 38 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 14, 38 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 14, 38 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 83 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 83 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 83 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 17, 83 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 70 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 70 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 17, 70 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 6, 70 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 17, 70 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 70 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 5 }, + { 2, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 5 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 5 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 5 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 5 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 84 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 84 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 84 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 84 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 17, 84 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 84 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 2 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 7, 0, 0, 7, 1, 0, 0, 1, 10, 0, 7, 7, 12, 3 }, + { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 9, 0, 0, 9, 1, 0, 0, 1, 12, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 12, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 12, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 13, 0, 7, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 13, 0, 7, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 11, 0, 0, 11, 1, 0, 0, 1, 13, 0, 7, 7, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 6, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 59 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 59 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 59 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 4, 4, 21, 59 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 59 }, + { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 65 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 18, 65 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 12, 6, 65 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 21, 71 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 71 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 71 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 17, 71 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 71 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 11 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 11 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 72 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 72 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 72 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 72 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 17, 72 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 17, 72 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 73 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 73 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 21, 73 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 21, 73 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 73 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 85 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 21, 85 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 85 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 85 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 21, 85 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 85 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 85 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 17, 85 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 85 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 85 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 77 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 4, 4, 21, 77 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 4, 4, 21, 77 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 9, 11, 77 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 77 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 12, 17, 77 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 24 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 24 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 30, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 79 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 79 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 30, 79 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 30, 79 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 30, 79 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 86 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 86 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 86 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 12, 17, 86 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 86 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 86 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 27 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 86 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 21, 86 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 86 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 17, 86 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 86 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 9, 11, 86 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 11, 7, 8, 23, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 7, 8, 24, 26 }, { 11, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 31, 0 }, { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 25, 22, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 31, 28, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 37, 34, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 44, 40, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 52, 48, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 59, 56, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 71, 68, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 77, 74, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 83, 80, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 89, 86, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 95, 92, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 13, 4 }, - { 0, 17, 26, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 4 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 4 }, - { 28, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 5 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 14, 37 }, + { 15, 0, 0, 0, -1, 0, 0, 25, 22, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 31, 28, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 37, 34, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 44, 40, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 52, 48, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 59, 56, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 71, 68, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 77, 74, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 83, 80, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 89, 86, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 95, 92, 0, 0, 1, 1, 0, 1, 0, 7, 6, 12, 6 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 8, 13, 7 }, + { 0, 17, 26, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 21, 7 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 7 }, + { 28, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 8 }, { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 12, 0 }, - { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 10, 5 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 28 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 10, 11, 8, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 11, 1, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 9, 11, 8, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 10, 0, 8, 0 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 0, 0 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 1, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 15, 0 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 14, 0 }, - { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 12, 0, 14, 0 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 13, 0, 0 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 13, 1, 0 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 11, 1, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 14, 0 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 10, 1, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 0, 5, 0 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 11, 5, 0 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 14, 0 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 5 }, - { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 22, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 0, 14, 0 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 7, 7, 14, 0 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 7, 6, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 5, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 23 }, - { 10, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 4, 4, 21, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 29, 0 }, + { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 10, 8 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 4, 21, 1 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 10, 11, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 9, 11, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 10, 0, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 6, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 13, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 15, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 14, 2 }, + { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 12, 0, 14, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 13, 1, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 14, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 10, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 0, 5, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 11, 5, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 14, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 8, 12, 8 }, + { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 4, 22, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 0, 14, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 7, 7, 14, 3 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 2 }, + { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 7, 6, 14, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 8, 12, 35 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 5, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 8, 12, 26 }, + { 10, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 4, 4, 21, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 29, 2 }, { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 17, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 17, 0 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 0 }, - { 4, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 1 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 1 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 1 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 8, 12, 0 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 12, 0 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 8, 12, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 17, 0 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 40, 0, 0, 40, 0, 0, 0, 0, 5, 0, 7, 7, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 40, 0, 0, 40, 0, 0, 0, 0, 7, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -40, -40, 0, 0, 0, 0, 0, 5, 0, 7, 6, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, -40, -40, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 0 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 0 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 0 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 0 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 0 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 17, 0 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 0 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 0 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 0 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 0 }, - { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 0 }, - { 5, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 5, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 5, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 5, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 17, 0 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 12, 17, 0 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0 }, - { 5, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 5, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 5, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 5, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 5, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 5, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 5, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 5, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 5 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 12, 17, 0 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 0 }, - { 10, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 3, 4, 4, 12, 0 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 0 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 0 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 17, 0 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 0 }, - { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 0 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 0, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 1, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 6, 8, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 14, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 12, 0 }, - { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 21, 0 }, - { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 4, 4, 21, 0 }, - { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 21, 28 }, - { 1, 0, 226, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 4, 4, 21, 0 }, - { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 4, 4, 21, 0 }, - { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 21, 28 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 21, 28 }, - { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 1 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 7, 12, 0 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 6, 12, 0 }, - { 26, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 12, 0 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 7, 12, 0 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 0 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 5 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 5 }, - { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 5, 5, 0, 28, 0 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 14, 0 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 49 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 17, 2 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 2 }, + { 4, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 4 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 4 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 4 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 74 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 75 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 8, 12, 39 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 12, 39 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 8, 12, 40 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 8, 12, 40 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 50 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 17, 50 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 60 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 17, 60 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 60 }, + { 14, 0, 0, 0, -1, 0, 40, 0, 0, 40, 0, 0, 0, 0, 5, 0, 7, 7, 12, 41 }, + { 14, 0, 0, 0, -1, 0, 40, 0, 0, 40, 0, 0, 0, 0, 7, 0, 7, 7, 12, 41 }, + { 15, 0, 0, 0, -1, 0, 0, -40, -40, 0, 0, 0, 0, 0, 5, 0, 7, 6, 12, 41 }, + { 15, 0, 0, 0, -1, 0, 0, -40, -40, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 41 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 51 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 52 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 11, 9, 11, 52 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 8, 12, 53 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 87 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 87 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 87 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 64 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 64 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 64 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 17, 64 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 8, 12, 76 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 76 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 98 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 97 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 8, 12, 61 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 61 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 61 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 61 }, + { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 61 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 61 }, + { 5, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 61 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 17, 61 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 12, 17, 61 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 61 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 88 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 88 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 88 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 80 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, 80 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 89 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 89 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 90 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 90 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 91 }, + { 5, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 8 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 4, 4, 21, 94 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 94 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 94 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 4, 4, 21, 94 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 12, 17, 94 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 94 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 11, 9, 11, 94 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 92 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 4, 21, 92 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 92 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 92 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 4, 4, 21, 92 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 92 }, + { 10, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 3, 4, 4, 12, 92 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 17, 92 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 101 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 101 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 96 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 96 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 96 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 96 }, + { 0, 17, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 96 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 96 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 17, 96 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 12, 17, 96 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 100 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 100 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 100 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 12, 17, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 17, 100 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 100 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 102 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 102 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 102 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 102 }, + { 0, 17, 7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 102 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 9, 11, 102 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 63 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 8, 12, 63 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 17, 63 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 12, 81 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 0, 81 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 8, 1, 81 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 8, 12, 84 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 99 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 7, 4, 4, 21, 99 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 4, 4, 4, 21, 99 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 99 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 6, 8, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 14, 34 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 12, 2 }, + { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 21, 2 }, + { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 4, 4, 21, 2 }, + { 0, 17, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 21, 1 }, + { 1, 0, 226, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 4, 4, 21, 2 }, + { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 4, 4, 21, 2 }, + { 0, 17, 220, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 4, 4, 21, 4 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 7, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 6, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 12, 2 }, + { 26, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 7, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 6, 12, 2 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 11, 9, 11, 2 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 8, 12, 8 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 8 }, + { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 5, 5, 0, 28, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 14, 34 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 14, 2 }, { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 14, 0 }, - { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 28 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 14, 37 }, + { 0, 17, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 21, 1 }, { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 12, 0 } }; @@ -6369,11 +6724,6 @@ Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4) return (LineBreakClass)qGetProp(ucs4)->lineBreakClass; } -Q_CORE_EXPORT Script QT_FASTCALL script(uint ucs4) -{ - return (Script)qGetProp(ucs4)->script; -} - static const ushort specialCaseMap[] = { 0x0, // placeholder diff --git a/src/corelib/tools/qunicodetables_p.h b/src/corelib/tools/qunicodetables_p.h index 74b022d8ef..8f0b7aabad 100644 --- a/src/corelib/tools/qunicodetables_p.h +++ b/src/corelib/tools/qunicodetables_p.h @@ -83,119 +83,12 @@ struct Properties { ushort wordBreakClass : 8; /* 4 used */ ushort sentenceBreakClass : 8; /* 4 used */ ushort lineBreakClass : 8; /* 6 used */ - ushort script : 8; /* 5 used */ + ushort script : 8; /* 7 used */ }; Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4); Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2); -// See http://www.unicode.org/reports/tr24/tr24-5.html -enum Script { - Common, - Greek, - Cyrillic, - Armenian, - Hebrew, - Arabic, - Syriac, - Thaana, - Devanagari, - Bengali, - Gurmukhi, - Gujarati, - Oriya, - Tamil, - Telugu, - Kannada, - Malayalam, - Sinhala, - Thai, - Lao, - Tibetan, - Myanmar, - Georgian, - Hangul, - Ogham, - Runic, - Khmer, - Nko, - Inherited, - ScriptCount = Inherited, - Latin = Common, - Ethiopic = Common, - Cherokee = Common, - CanadianAboriginal = Common, - Mongolian = Common, - Hiragana = Common, - Katakana = Common, - Bopomofo = Common, - Han = Common, - Yi = Common, - OldItalic = Common, - Gothic = Common, - Deseret = Common, - Tagalog = Common, - Hanunoo = Common, - Buhid = Common, - Tagbanwa = Common, - Limbu = Common, - TaiLe = Common, - LinearB = Common, - Ugaritic = Common, - Shavian = Common, - Osmanya = Common, - Cypriot = Common, - Braille = Common, - Buginese = Common, - Coptic = Common, - NewTaiLue = Common, - Glagolitic = Common, - Tifinagh = Common, - SylotiNagri = Common, - OldPersian = Common, - Kharoshthi = Common, - Balinese = Common, - Cuneiform = Common, - Phoenician = Common, - PhagsPa = Common, - Sundanese = Common, - Lepcha = Common, - OlChiki = Common, - Vai = Common, - Saurashtra = Common, - KayahLi = Common, - Rejang = Common, - Lycian = Common, - Carian = Common, - Lydian = Common, - Cham = Common, - TaiTham = Common, - TaiViet = Common, - Avestan = Common, - EgyptianHieroglyphs = Common, - Samaritan = Common, - Lisu = Common, - Bamum = Common, - Javanese = Common, - MeeteiMayek = Common, - ImperialAramaic = Common, - OldSouthArabian = Common, - InscriptionalParthian = Common, - InscriptionalPahlavi = Common, - OldTurkic = Common, - Kaithi = Common, - Batak = Common, - Brahmi = Common, - Mandaic = Common, - Chakma = Common, - MeroiticCursive = Common, - MeroiticHieroglyphs = Common, - Miao = Common, - Sharada = Common, - SoraSompeng = Common, - Takri = Common -}; - enum GraphemeBreakClass { GraphemeBreak_Other, GraphemeBreak_CR, @@ -274,10 +167,6 @@ Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4); inline LineBreakClass lineBreakClass(QChar ch) { return lineBreakClass(ch.unicode()); } -Q_CORE_EXPORT Script QT_FASTCALL script(uint ucs4); -inline Script script(QChar ch) -{ return script(ch.unicode()); } - } // namespace QUnicodeTables QT_END_NAMESPACE diff --git a/src/corelib/tools/qunicodetools.cpp b/src/corelib/tools/qunicodetools.cpp index 060c9adb05..01aa1c4d52 100644 --- a/src/corelib/tools/qunicodetools.cpp +++ b/src/corelib/tools/qunicodetools.cpp @@ -45,6 +45,7 @@ #include "qvarlengtharray.h" #include <private/harfbuzz-shaper.h> +#include <private/qharfbuzz_p.h> #define FLAG(x) (1 << (x)) @@ -610,12 +611,12 @@ Q_CORE_EXPORT void initCharAttributes(const ushort *string, int length, scriptItems.reserve(numItems); int start = 0; for (int i = start + 1; i < numItems; ++i) { - if (items[i].script == items[start].script) + if (script_to_hbscript(items[i].script) == script_to_hbscript(items[start].script)) continue; HB_ScriptItem item; item.pos = items[start].position; item.length = items[i].position - items[start].position; - item.script = (HB_Script)items[start].script; + item.script = script_to_hbscript(items[start].script); item.bidiLevel = 0; // unused scriptItems.append(item); start = i; @@ -624,7 +625,7 @@ Q_CORE_EXPORT void initCharAttributes(const ushort *string, int length, HB_ScriptItem item; item.pos = items[start].position; item.length = length - items[start].position; - item.script = (HB_Script)items[start].script; + item.script = script_to_hbscript(items[start].script); item.bidiLevel = 0; // unused scriptItems.append(item); } diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h index 5e57de5767..3a2028057d 100644 --- a/src/corelib/tools/qvarlengtharray.h +++ b/src/corelib/tools/qvarlengtharray.h @@ -50,8 +50,6 @@ #include <string.h> #include <stdlib.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -103,6 +101,7 @@ public: inline bool isEmpty() const { return (s == 0); } inline void resize(int size); inline void clear() { resize(0); } + inline void squeeze(); inline int capacity() const { return a; } inline void reserve(int size); @@ -244,6 +243,10 @@ Q_OUTOFLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::append(const T *abuf, in } template <class T, int Prealloc> +Q_INLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::squeeze() +{ realloc(s, s); } + +template <class T, int Prealloc> Q_OUTOFLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::realloc(int asize, int aalloc) { Q_ASSERT(aalloc >= asize); @@ -415,6 +418,4 @@ bool operator!=(const QVarLengthArray<T, Prealloc1> &l, const QVarLengthArray<T, QT_END_NAMESPACE -QT_END_HEADER - #endif // QVARLENGTHARRAY_H diff --git a/src/corelib/tools/qvarlengtharray.qdoc b/src/corelib/tools/qvarlengtharray.qdoc index 5e78946892..93aa5e993e 100644 --- a/src/corelib/tools/qvarlengtharray.qdoc +++ b/src/corelib/tools/qvarlengtharray.qdoc @@ -210,7 +210,7 @@ initialized. For other types, the elements are initialized with a \l{default-constructed value}. - \sa size() + \sa size(), squeeze() */ /*! \fn int QVarLengthArray::capacity() const @@ -223,7 +223,7 @@ need to call this function. If you want to know how many items are in the array, call size(). - \sa reserve() + \sa reserve(), squeeze() */ /*! \fn void QVarLengthArray::reserve(int size) @@ -240,7 +240,21 @@ rarely ever need to call this function. If you want to change the size of the array, call resize(). - \sa capacity() + \sa capacity(), squeeze() +*/ + +/*! \fn void QVarLengthArray::squeeze() + \since 5.1 + + Releases any memory not required to store the items. + If the container can fit its storage on the stack allocation, + it will free the heap allocation and copy the elements back to the stack. + + The sole purpose of this function is to provide a means of fine + tuning QVarLengthArray's memory usage. In general, you will rarely ever + need to call this function. + + \sa reserve(), capacity(), resize() */ /*! \fn T &QVarLengthArray::operator[](int i) diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 94f3008274..7d5cf91324 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -56,8 +56,6 @@ #include <initializer_list> #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QRegion; @@ -813,6 +811,4 @@ Q_TEMPLATE_EXTERN template class Q_CORE_EXPORT QVector<QPoint>; QT_END_NAMESPACE -QT_END_HEADER - #endif // QVECTOR_H diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index 564aff9ab9..9b80b7c4fe 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -29,6 +29,7 @@ HEADERS += \ tools/qlocale_data_p.h \ tools/qmap.h \ tools/qmargins.h \ + tools/qmessageauthenticationcode.h \ tools/qcontiguouscache.h \ tools/qpodlist_p.h \ tools/qpair.h \ @@ -82,6 +83,7 @@ SOURCES += \ tools/qpoint.cpp \ tools/qmap.cpp \ tools/qmargins.cpp \ + tools/qmessageauthenticationcode.cpp \ tools/qcontiguouscache.cpp \ tools/qrect.cpp \ tools/qregexp.cpp \ @@ -146,7 +148,8 @@ SOURCES += ../3rdparty/harfbuzz/src/harfbuzz-buffer.c \ HEADERS += tools/qharfbuzz_p.h INCLUDEPATH += ../3rdparty/md5 \ - ../3rdparty/md4 + ../3rdparty/md4 \ + ../3rdparty/sha3 # Note: libm should be present by default becaue this is C++ !macx-icc:!vxworks:unix:LIBS_PRIVATE += -lm diff --git a/src/corelib/xml/qxmlstream.h b/src/corelib/xml/qxmlstream.h index e3336122f9..8a9c2fcb76 100644 --- a/src/corelib/xml/qxmlstream.h +++ b/src/corelib/xml/qxmlstream.h @@ -50,8 +50,6 @@ #include <QtCore/qvector.h> #include <QtCore/qscopedpointer.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -426,7 +424,5 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_XMLSTREAM #endif // QXMLSTREAM_H |