From 6a49f7c7db8405ad64d382ecbe7f6a570e8da684 Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@2ndquadrant.com>
Date: Fri, 15 May 2020 11:17:08 +0800
Subject: [PATCH v1 3/3] Use perfect hashing for NFKC Unicode normalization
 quick check

This is about 45% faster than binary search, at the cost of 19kB of binary
space. Also remove the ability to use binary search for quick check.
---
 .../generate-unicode_normprops_table.pl       |    3 -
 src/common/unicode_norm.c                     |   20 +-
 src/include/common/unicode_normprops_table.h  | 1257 +++++++++++++++++
 3 files changed, 1258 insertions(+), 22 deletions(-)

diff --git a/src/common/unicode/generate-unicode_normprops_table.pl b/src/common/unicode/generate-unicode_normprops_table.pl
index 7f00cb0ae4..e0a201b6d1 100644
--- a/src/common/unicode/generate-unicode_normprops_table.pl
+++ b/src/common/unicode/generate-unicode_normprops_table.pl
@@ -105,9 +105,6 @@ foreach my $prop (sort keys %data)
 
 	# Emit the definition of the hash function.
 
-	# To save space, skip building the function for the larger "C" form.
-	next if $prop eq "NFKC_QC";
-
 	my $funcname = $prop . '_hash_func';
 
 	my $f = PerfectHash::generate_hash_function(\@cp_packed, $funcname,
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index 1714837e64..5d951fc2e0 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -465,17 +465,6 @@ get_canonical_class(pg_wchar ch)
 		return entry->comb_class;
 }
 
-static int
-qc_compare(const void *p1, const void *p2)
-{
-	uint32		v1,
-				v2;
-
-	v1 = ((const pg_unicode_normprops *) p1)->codepoint;
-	v2 = ((const pg_unicode_normprops *) p2)->codepoint;
-	return (v1 - v2);
-}
-
 static const pg_unicode_normprops *
 qc_hash_lookup(pg_wchar ch, const unicode_norm_info * norminfo)
 {
@@ -510,22 +499,15 @@ qc_hash_lookup(pg_wchar ch, const unicode_norm_info * norminfo)
 static UnicodeNormalizationQC
 qc_is_allowed(UnicodeNormalizationForm form, pg_wchar ch)
 {
-	pg_unicode_normprops key;
 	const pg_unicode_normprops *found = NULL;
 
-	key.codepoint = ch;
-
 	switch (form)
 	{
 		case UNICODE_NFC:
 			found = qc_hash_lookup(ch, &UnicodeNormInfo_NFC_QC);
 			break;
 		case UNICODE_NFKC:
-			found = bsearch(&key,
-							UnicodeNormProps_NFKC_QC,
-							lengthof(UnicodeNormProps_NFKC_QC),
-							sizeof(pg_unicode_normprops),
-							qc_compare);
+			found = qc_hash_lookup(ch, &UnicodeNormInfo_NFKC_QC);
 			break;
 		default:
 			Assert(false);
diff --git a/src/include/common/unicode_normprops_table.h b/src/include/common/unicode_normprops_table.h
index 4e8d2c46d6..bd2894855a 100644
--- a/src/include/common/unicode_normprops_table.h
+++ b/src/include/common/unicode_normprops_table.h
@@ -6509,3 +6509,1260 @@ static const pg_unicode_normprops UnicodeNormProps_NFKC_QC[] = {
 	{0x2FA1C, UNICODE_NORM_QC_NO},
 	{0x2FA1D, UNICODE_NORM_QC_NO},
 };
+
+static int
+NFKC_QC_hash_func(const void *key)
+{
+	static const int16 h[9837] = {
+		-2472, -2472, -2472, -2472, -2472, -2472, -2472, -2472,
+		-2472, -2472, -2472, -2472, -2472, -2472, -2472, -2472,
+		-2472, -2472, -2472, -2472, -2472, -2472, -2472, -2472,
+		-2472, -2472, -2472, -2472, -2472, 32767, 32767, 32767,
+		-2475, -2475, -2475, -2475, -2475, -2475, -2475, -2475,
+		-2475, -2475, -2475, -2475, -2475, -2475, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 865, 865, 865, 865, 865, 865, 865,
+		865, 865, 865, 865, -2255, 32767, -5207, 32767,
+		-5207, 860, 860, 860, 860, 860, 860, 860,
+		860, 860, 4250, 861, 861, 861, 3339, 3339,
+		3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339,
+		3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339,
+		32767, 3338, 3338, 3338, 3338, 3338, 3338, 3338,
+		3338, 3338, 3338, 3338, 3338, 3338, 3338, 3338,
+		3338, 3338, 3338, 3338, 3338, 3338, 3338, 3338,
+		3338, 3338, 3338, 3338, 3338, 3338, 3338, 3338,
+		3338, 9, 10, 32767, 11, 12, 0, 32767,
+		0, 2913, 2914, 2915, 2916, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 2917, 32767, 2918, -100,
+		2919, 2920, 2921, 840, 840, 840, 2922, 0,
+		0, 0, 0, 0, 2206, 0, 2923, 0,
+		2924, 2925, 2926, 0, 0, 0, -2590, 0,
+		0, 0, 0, 0, 0, 0, 2934, 0,
+		2474, 2931, 2932, 0, 0, 0, 0, 0,
+		14, 805, 0, 0, 2933, 0, 2934, 0,
+		2935, 2936, 0, 0, 0, 16, 17, 0,
+		0, 0, 0, 0, 0, 0, 0, 18,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, -790, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, -1675, 0, 0, 19, 0, -1679,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, -1694,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 20, 21, 22, 23, 24, 25,
+		26, 27, 28, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 29, 30, 31, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 724, 2668, 724, 4350, -2633, -2633,
+		2533, 2534, 2535, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 2518, 2519, 2520, 1431, 45, 46,
+		32767, 32767, 47, 48, 49, 50, 51, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, -3011, 53, -1125, -3010, -3010,
+		32767, -3334, -1123, -3011, 60, 61, 62, 63,
+		32767, 32767, 64, 32767, 65, 32767, 66, 67,
+		32767, 32767, 32767, 32767, 32767, 32767, 2268, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 69, 70,
+		71, 72, 73, 74, 32767, 32767, 32767, 32767,
+		75, 76, 32767, 77, 281, 32767, 32767, 32767,
+		32767, 32767, 32767, 811, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 1341, 1342, 1343, 1344, 1345,
+		1346, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 86,
+		32767, 32767, 32767, 32767, 32767, 4550, 32767, 32767,
+		32767, 1135, 32767, 32767, 32767, 32767, 32767, 1130,
+		3016, 32767, 3017, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 677, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 2858, 2859, 651, 2861, -438,
+		2863, 2864, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, -5305, -5305, -5305, 32767, -5306,
+		-5306, 32767, 32767, 32767, 2871, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 3022, 3023, 680, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, -272, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 4308, 4309, 4310,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 4311, 4312, 4313,
+		4314, 4315, 4316, 4317, 4318, 4319, 4320, 4321,
+		4322, 4323, 4324, 4325, 4326, 4307, 4307, 4307,
+		4307, 4307, 4307, 4307, 4307, 4307, 4336, 4337,
+		4338, 4339, 4340, 4341, 4342, 4343, 4344, 4345,
+		4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353,
+		4354, 32767, 32767, 32767, 32767, 4355, 4356, 4357,
+		4358, 4359, 4360, 4361, 4362, 4363, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 4364, 4365, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 2202, 0, 0, 0, 59, 0,
+		0, 35, 0, 0, 0, 3549, 0, 0,
+		0, 0, 0, 3394, 0, 0, 3399, 0,
+		0, 0, 0, 0, 0, 0, 0, 2012,
+		0, 0, 0, 0, 87, 2022, 0, 7490,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		2255, 0, 2256, 2256, 2256, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 32767, 0, 0,
+		0, 0, 0, 0, -1759, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 4767, 0, 0, 4772,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 32767, 5977, 0,
+		892, 32767, 0, 32767, 32767, 0, 0, 32767,
+		32767, 2344, 4834, 4835, 4836, 32767, 0, 4840,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 32767, 0, 32767, 0, 0, 0,
+		0, 0, 0, 0, 32767, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		32767, 32767, 0, 32767, 0, 0, 0, 32767,
+		32767, 32767, 32767, 3261, 3262, 32767, 3007, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 106, 107, 108, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 109, 110, 111, 112, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 0, 0, -2344,
+		-2344, 0, 32767, 0, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, -1642, 1469, -1641, 1469, -1640, 1469,
+		1469, 1457, 1469, 1469, 1469, -4254, -4254, -4254,
+		-4254, -4254, -4254, -4254, -4254, -4254, -4254, -4254,
+		-4254, -4254, -4254, -4254, -4254, -4254, -3359, -4254,
+		-4254, -4254, -4254, -4254, -4254, -4254, -4254, -4254,
+		-4254, -4254, -4254, -4254, -4254, -4254, -4254, -4254,
+		-4254, -4254, -4254, -4254, -4254, -4254, -4254, -4254,
+		-4254, -4254, -4254, -4254, -4254, -4254, -4254, -4254,
+		-4254, -4254, -4254, -4254, -4254, -4254, -4254, -4103,
+		-1478, 0, -4254, -4254, -4254, -4254, -4254, -4254,
+		-4254, -4254, -4254, -2433, -4254, -4254, -4254, -3658,
+		-4254, -4254, -4254, -4254, -4254, -4254, -4254, -4254,
+		-4254, -4254, 0, -4253, -4253, -4253, -4253, -4253,
+		-4253, -4253, -4253, -4253, -678, -677, -676, -675,
+		-674, -673, -672, -4253, 314, -4253, -4253, -4253,
+		-4253, -4253, -4253, -4253, -4253, -4253, -4253, -4253,
+		-4253, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 1464, 1465, 1466, 1467,
+		1468, 1469, 0, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+		0, 0, 0, 0, 32767, 32767, 32767, 32767,
+		32767, 0, 32767, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 827, 828, 829, -2469, -2469, -260, 0,
+		0, 32767, 0, 32767, 0, 0, 32767, 0,
+		0, 32767, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		3575, 3576, 3577, 3578, 3579, 3580, 3581, 0,
+		4567, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 2201, 4411, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, -3338, 0, 0, 0,
+		0, 0, 0, 0, -3337, 0, -3336, 0,
+		0, 0, 0, -3335, 0, 0, -3334, -3333,
+		-3332, -3331, 0, 0, -3330, 0, 0, 32767,
+		0, 0, 13, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 3073,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		-2556, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		3074, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 2355, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, -488, -488, -488, -302, -3067, -3067,
+		-3067, -3067, -488, -488, -488, -488, 2999, -488,
+		2999, -488, -488, -488, -3067, -3067, -3067, -488,
+		-488, -3067, -3067, -3067, -488, -488, -488, 2463,
+		-488, -488, -488, -301, 2465, -488, 2466, 2467,
+		-3600, -493, -3599, -488, -3598, -488, -3597, -488,
+		-488, -500, -488, -488, -488, -488, -488, 2470,
+		2471, 2472, -488, -488, -254, -488, -488, -488,
+		-488, -488, -104, -488, -488, -488, -102, -101,
+		-100, -99, -98, -97, -96, -95, -94, -93,
+		-92, -488, -488, -488, -488, -488, -488, -488,
+		-488, -488, -2194, -2194, -2194, -2194, -2194, -2194,
+		-2194, -2194, -2194, -2194, 5211, 3269, 5213, 3269,
+		6895, -88, -88, 5078, 5079, 5080, 1773, -92,
+		-92, 1773, 1773, 1773, 1773, 1773, 1773, 5072,
+		5073, 2865, 5075, 1776, 5077, 5078, 1778, 1778,
+		6942, 6943, 1778, 1778, 1778, 5086, 6952, 6953,
+		5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096,
+		4007, 5098, 2333, 2334, 2335, 2336, 2337, -3066,
+		-3066, -3066, 2341, -3066, -3066, 2344, 2345, 2346,
+		5114, 317, 2349, 848, 849, 850, 2353, 852,
+		853, 854, 855, 856, 857, 858, 859, 860,
+		861, 692, 692, 692, 692, 692, 692, 692,
+		692, 692, 692, 692, 692, 692, 692, 692,
+		692, 692, 692, 692, 692, 692, 692, 692,
+		692, 692, 692, 692, 692, 692, 692, 692,
+		692, 692, 692, 692, 692, 692, 692, 692,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 3093, 3094, 3095, 3096, 3097, 3098, 3099,
+		3100, 3101, 3102, 901, 3104, 3105, 3106, 3048,
+		3108, 3109, 3075, 3111, 3112, 3113, -435, 3115,
+		3116, 3117, 3118, 3119, -274, 3121, 3122, -276,
+		3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131,
+		1120, 3133, 3134, 3135, 3136, 3050, 1116, 3139,
+		-4350, 3141, 3142, 3143, 3144, 3145, 3146, 3147,
+		3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155,
+		3156, 902, 3158, 903, 904, 905, 3162, 3163,
+		3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171,
+		3172, 3173, 3174, 3175, 3176, 3177, 32767, 3178,
+		3179, 3180, 3181, 3182, 3183, 4943, 3185, 3186,
+		3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194,
+		3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202,
+		3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210,
+		3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218,
+		3219, 3220, 3221, 3222, 3223, -1543, 3225, 3226,
+		-1545, 3228, 3229, 3230, 3231, 3232, 3233, 3234,
+		3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242,
+		3243, 3244, 3245, 3246, 3247, 3248, -1251, -2728,
+		3250, 32767, 32767, 3251, 906, 907, 3252, 3253,
+		32767, 32767, 910, -1579, -1579, -1579, 32767, 3258,
+		-1581, 3260, 3261, 3262, 3263, 3264, 3265, 3266,
+		3267, 3268, 3269, 32767, 3270, 32767, 3271, 3272,
+		3273, 3274, 3275, 3276, 3277, 32767, 3278, 3279,
+		3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287,
+		3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295,
+		3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303,
+		3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311,
+		3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319,
+		3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327,
+		3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335,
+		3336, 32767, 3337, 3338, 3339, 3340, 3341, 3342,
+		0, 3343, 3344, 3345, 3346, 32767, 32767, 3347,
+		3348, 3349, 3350, 3351, 3352, 3353, 3354, 32767,
+		3355, 3356, 3357, 3358, 3359, 3360, 3361, 32767,
+		3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369,
+		3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377,
+		3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385,
+		3386, 3387, 3388, 3389, 0, 3390, 3391, 3392,
+		915, 916, 917, 918, 919, 920, 921, 922,
+		923, 924, 925, 926, 927, 928, 929, 930,
+		931, 932, 933, 934, 935, 936, 937, 938,
+		939, 940, 941, 942, 943, 944, 945, 946,
+		947, 948, 949, 950, 951, 952, 953, 954,
+		955, 956, 957, 958, 959, 960, 961, 962,
+		963, 964, 965, 966, 967, 968, 969, 970,
+		971, 972, 973, 974, 975, 976, 3449, 3450,
+		3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458,
+		3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466,
+		3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474,
+		3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482,
+		3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490,
+		3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498,
+		3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506,
+		3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514,
+		3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522,
+		3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530,
+		3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538,
+		3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546,
+		3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554,
+		3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562,
+		3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570,
+		3571, 3572, 3573, 3574, 3575, 3576, 3577, 6056,
+		6057, 6058, 32767, 3581, 3582, 3583, 3584, 3585,
+		4157, 4158, 4159, 3589, 4162, -4510, -1558, -1557,
+		-1556, -1742, -4507, -1553, -4506, -4506, 1562, -1544,
+		1563, -1547, 1564, -1545, 1565, -1543, -1542, -1529,
+		-1540, -1539, -1538, -1537, -1536, -4493, -4493, -4493,
+		-1532, -1531, -1764, -1529, 3622, -1528, -1527, -1526,
+		-1909, -1524, -1523, -1522, -1907, -1907, -1907, -1907,
+		-1907, -1907, -1907, -1907, -1907, -1907, -1907, -1510,
+		-1509, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
+		1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085,
+		1086, 1087, 1088, 1089, 1090, 3663, 3664, 3665,
+		3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673,
+		3674, 1095, 1096, 1097, 1098, 1099, 1100, 1101,
+		3682, 1103, 3684, 1105, 3686, 3687, 3688, 1109,
+		1110, 1111, 3692, 1113, 1114, 1115, 1116, 1117,
+		1118, 1119, 3700, 1121, 3702, 3703, 3704, 1125,
+		1126, 1127, -1809, -1809, -1809, -1809, -1809, -1809,
+		3720, 3721, 3722, 3717, 3718, 3719, 3720, 1140,
+		1141, 1142, 1143, -1802, 1145, 1146, 1147, 1148,
+		3730, -1797, 3732, 1152, 3734, 3735, 1155, 1156,
+		3738, 3739, 3740, 3741, 3742, 3743, -1785, -1785,
+		-1785, -1779, -1324, 1168, 1169, 1170, 1171, 1172,
+		3752, 3753, 1175, 1176, 1177, 992, 3758, 3759,
+		3760, 3761, 1183, 1184, 1185, 1186, -2300, 1188,
+		-2298, 1190, 1191, 1192, 3772, 3773, 3774, 1196,
+		1197, 3777, 3778, 3779, 1201, 1202, 1203, -1747,
+		1205, 1206, 1207, 1021, -1744, 1210, -1743, -1743,
+		4325, 1219, 4326, 1216, 4327, 1218, 4328, 1220,
+		1221, 1234, 1223, 1224, 1225, 1226, 1227, -1730,
+		-1730, -1730, 1231, 1232, 999, 1234, 1235, 1236,
+		1237, 1238, 855, 1240, 1241, 1242, 857, 857,
+		857, 857, 857, 857, 857, 857, 857, 857,
+		857, 1254, 1255, 1256, 1257, 1258, 1259, 1260,
+		1261, 1262, 2969, 2970, 2971, 2972, 2973, 2974,
+		2975, 2976, 2977, 2978, -4426, -2483, -4426, -2481,
+		-6106, 878, 879, -4286, -4286, -4286, -978, 888,
+		889, -975, -974, -973, -972, -971, -970, -4268,
+		-4268, -2059, -4268, -968, -4268, -4268, -967, -966,
+		-6129, -6129, -963, -962, -961, -4268, -6133, -6133,
+		-4268, -4268, -4268, -4268, -4268, -4268, -4268, -4268,
+		-3178, -4268, -1502, -1502, -1502, -1502, -1502, 3902,
+		3903, 3904, -1502, 3906, 3907, -1502, -1502, -1502,
+		-4269, 529, -1502, 0, 0, 0, -1502, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 170, 171, 172, 173, 174, 175, 176,
+		177, 178, 179, 180, 181, 182, 183, 184,
+		185, 186, 187, 188, 189, 190, 191, 192,
+		193, 194, 195, 196, 197, 198, 199, 200,
+		201, 202, 203, 204, 205, 206, 207, 208,
+		209, 210, 211, 212, 213, 214, 215, 216,
+		217, 218, 219, -3194, 221, 222, 223, 224,
+		-1657, 226, 227, -1657, 229, 230, -1655, 555,
+		-1655, 234, 235, 236, 732, 238, 239, 240,
+		241, 242, 243, -1655, 245, 246, 247, 248,
+		-1655, 250, -1655, 252, -1655, -1655, -1655, -1655,
+		-1655, -1655, 259, -1655, -1655, -1655, -1655, 264,
+		-1655, 266, -1655, 268, -1655, -3620, 271, 272,
+		-1655, 274, 275, -1655, 277, -1655, -1655, 280,
+		-1655, 282, 5746, 5747, 5748, 5749, -1655, 288,
+		-1655, 290, -3335, 3649, 3650, -1515, -1515, -1515,
+		1793, 3659, 3660, 1796, 1797, 1798, 1799, 1800,
+		1801, -1497, -1497, 712, -1497, 1803, -1497, -1497,
+		1804, 1805, -3358, -3358, 1808, 1809, 1810, -1497,
+		-3362, -3362, -1497, -1497, -1497, -1497, -1497, -1497,
+		-1497, -1497, -407, -1497, -1497, -1497, -1497, -1497,
+		-1497, 3667, 3668, -1497, -1497, -1497, 1811, 3677,
+		3678, 32767, 1814, 32767, 1815, 32767, 32767, 1816,
+		1817, 32767, 32767, 32767, 1818, 1819, 1820, 1821,
+		-3342, -3342, 1824, 1825, 1826, 1827, 1828, 1829,
+		1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837,
+		1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845,
+		1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853,
+		1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861,
+		1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869,
+		1870, 1871, 1872, 1873, 1874, 1875, 1876, -1537,
+		1878, 1879, 1880, 1881, 0, 1883, 1884, 0,
+		529, 0, 0, 2210, 0, 1889, 1890, 1891,
+		2387, 1893, 1894, 1895, 1896, 1897, 1898, 0,
+		1900, 1901, 1902, 1903, 0, 1905, 0, 1907,
+		0, 0, 0, 0, 0, 0, 1914, 0,
+		0, 0, 0, 1919, 0, 1921, 0, 1923,
+		0, -1965, 1926, 1927, 0, 1929, 1930, 0,
+		1932, 0, 0, 1935, 0, 1937, 7401, 7402,
+		7403, 7404, 0, 1943, 0, 1945, 1946, 0,
+		1948, 0, 0, 1951, 1952, 1953, 1954, 0,
+		1956, 1957, 1958, 1959, 1960, 1961, 1962, 0,
+		1964, 1965, 1966, 1967, 0, 1969, 1970, 1971,
+		1972, 0, 1974, 0, 1976, 1977, 1978, 1979,
+		1980, 1981, 1982, 1983, 1984, 1985, 0, 1987,
+		1988, 1989, 1990, 1991, 566, 566, 566, 5141,
+		5142, 566, 566, 566, 566, 566, 566, 566,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 8673, 5722, 5722, 5722, 0, 8676,
+		5723, 8677, 8678, 2611, 5718, 2612, 5723, 2613,
+		5723, 2614, 5723, 5723, 5711, 5723, 5723, 5723,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 895, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 151, 2776, 4254, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 1821, 0,
+		0, 0, 596, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, -2856, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, -2901, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, -1025, 32767, 32767, 32767,
+		32767, -2910, 32767, 32767, 32767, 32767, 157, 32767,
+		32767, 32767, 32767, 158, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		2359, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 160, 32767, 161, 162, 163, 164,
+		165, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		898, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 1428, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 1254, 32767, 32767, 32767,
+		32767, 1250, 32767, 32767, 32767, 32767, 1246, 32767,
+		32767, 32767, 32767, 1243, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		1231, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 1842, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		3177, 1235, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, -4323,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 0, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 174, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 1830, -112, 1832, -112, 3514, -3469,
+		-3469, 1697, 1698, 1699, -1608, -3473, -3473, -1608,
+		-1608, -1608, -1608, -1608, -1608, 1691, 1692, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, -1623, -1623, -1623, 3541, 3542, -1623, -1623,
+		-1623, -1623, -1623, -1623, -1623, -1623, -1623, -1623,
+		-1623, -1623, -1623, -1623, -1623, -1623, -1623, -1623,
+		-1623, -1623, -1623, -1623, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, -766, 2253, 2254, 2255, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		1531, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 0, 0, 32767, 0, 0, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, -173, -173, -173, -173, -173,
+		-173, -173, -173, -173, -173, -173, -173, 3241,
+		-173, -173, -173, -173, 1709, -173, -173, 1712,
+		-173, -173, 1713, -496, 1715, -173, -173, -173,
+		-668, -173, -173, -173, -173, -173, -173, 1726,
+		-173, -173, -173, -173, 1731, -173, 1733, -173,
+		1735, 1736, 1737, 1738, 1739, 1740, -173, 1742,
+		1743, 1744, 1745, -173, 1747, -173, 1749, -173,
+		1751, 3717, -173, -173, 1755, -173, -173, 1758,
+		-173, 1760, 1761, -173, 1763, -173, -5636, -5636,
+		-5636, -5636, 1769, -173, 1771, -173, 3453, -3530,
+		-3530, 1636, 1637, 1638, -1669, -3534, -3534, -1669,
+		-1669, -1669, -1669, -1669, -1669, 1630, 1631, -577,
+		1633, -1666, 1635, 1636, -1664, -1664, 3500, 3501,
+		-1664, -1664, -1664, 1644, 3510, 3511, 1647, 1648,
+		1649, 1650, 1651, 1652, 1653, 1654, 565, 1656,
+		1657, 1658, 1659, 1660, 1661, -3502, -3502, 1664,
+		1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672,
+		1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680,
+		1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688,
+		1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696,
+		1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704,
+		1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712,
+		1713, 1714, 1715, 1716, -1697, 1718, 1719, 1720,
+		1721, -160, 1723, 1724, -160, 1726, 1727, -158,
+		2052, -158, 1731, 1732, 1733, 2229, 1735, 1736,
+		1737, 1738, 1739, 1740, -158, 1742, 1743, 1744,
+		1745, -158, 1747, -158, 1749, -158, -158, -158,
+		-158, -158, -158, 1756, -158, -158, -158, -158,
+		1761, -158, 1763, -158, 1765, -158, -2123, 1768,
+		1769, -158, 1771, 1772, -158, 1774, -158, -158,
+		1777, -158, 1779, 7243, 7244, 7245, 7246, -158,
+		1785, -158, 1787, -1838, 5146, 5147, -18, -18,
+		-18, 3290, 5156, 5157, 3293, 3294, 3295, 3296,
+		3297, 3298, 0, 0, 2209, 0, 3300, 0,
+		0, 3301, 3302, -1861, -1861, 3305, 3306, 3307,
+		0, -1865, -1865, 0, 0, 0, 0, 0,
+		0, 0, 0, 1090, 0, 0, 0, 0,
+		0, 0, 5164, 5165, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 3414, 0, 0, 0, 0, 1882, 0,
+		0, 1885, 0, 0, 1886, -323, 1888, 0,
+		0, 0, -495, 0, 0, 0, 0, 0,
+		0, 1899, 0, 0, 0, 0, 1904, 0,
+		1906, 0, 1908, 1909, 1910, 1911, 1912, 1913,
+		0, 1915, 1916, 1917, 1918, 0, 1920, 0,
+		1922, 0, 1924, 3890, 0, 0, 1928, 0,
+		0, 1931, 0, 1933, 1934, 0, 1936, 0,
+		-5463, -5463, -5463, -5463, 1942, 0, 1944, 0,
+		0, 1947, 0, 1949, 1950, 0, 0, 0,
+		0, 1955, 0, 0, 0, 0, 0, 0,
+		0, 1963, 0, 0, 0, 0, 1968, 0,
+		0, 0, 0, 1973, 0, 1975, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		1986, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 527, 527, 527, 527, 0,
+		528, 528, 528, 528, 528, 528, 528, 528,
+		528, 528, 528, 1998, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		1999, 2000, 2001, 2002, 2003, 32767, 32767, 32767,
+		32767, 32767, 2004, 32767, 2005, 2006, 2007, 2008,
+		2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
+		2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024,
+		2025, 2026, 1200, 1200, 32767, 4498, 4499, 2291,
+		2032, 2033, 32767, 2034, 32767, 2035, 2036, 32767,
+		2037, 2038, 32767, 2039, 2040, 2041, 2042, 2043,
+		2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051,
+		2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059,
+		2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067,
+		2068, -1506, -1506, -1506, -1506, -1506, -1506, -1506,
+		2076, -2490, 2078, 2079, 2080, 2081, 2082, 2083,
+		2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091,
+		2092, 2093, 2094, 2095, -105, -2314, 2098, 2099,
+		2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107,
+		2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115,
+		2116, 2117, 2118, 2119, 2120, 5459, 2122, 2123,
+		2124, 2125, 2126, 2127, 2128, 5466, 2130, 5467,
+		2132, 2133, 2134, 2135, 5471, 2137, 2138, 5473,
+		5473, 5473, 5473, 2143, 2144, 5475, 2146, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154,
+		2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162,
+		2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170,
+		2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178,
+		2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186,
+		2187, 2188, 2189, 2190, 2191, 32767, -726, 2293,
+		-725, -725, -725, 1357, 1358, 1359, -722, 2201,
+		2202, 2203, 2204, 2205, 0, 2207, -715, 2209,
+		-714, -714, -714, 2213, 2214, 2215, 4806, 2217,
+		2218, 2219, 2220, 2221, 2222, 2223, -710, 2225,
+		-248, -704, -704, 2229, 2230, 2231, 2232, 2233,
+		2220, 1430, 2236, 2237, -695, 2239, -694, 2241,
+		-693, -693, 2244, 2245, 2246, 2231, 2231, 2249,
+		2250, 2251, 2252, 2253, 2254, 2255, 2256, 2239,
+		2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265,
+		2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273,
+		2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281,
+		2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289,
+		2290, 2291, 2292, 2293, 3084, 2295, 2296, 2297,
+		2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305,
+		2306, 2307, 3983, 2309, 2310, 2292, 2312, 3992,
+		2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321,
+		2322, 2323, 2324, 2325, 2326, 2327, 2328, 4023,
+		2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337,
+		2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345,
+		2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353,
+		2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361,
+		2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369,
+		2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377,
+		2378, 2379, 2360, 2360, 2360, 2360, 2360, 2360,
+		2360, 2360, 2360, 2389, 2390, 2391, 2392, 2393,
+		2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401,
+		2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409,
+		2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417,
+		2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425,
+		2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433,
+		2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441,
+		2442, 2443, 2444, 2445, 2446, 2447, 32767, 2448,
+		2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456,
+		2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464,
+		2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472,
+		2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480,
+		2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488,
+		2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496,
+		2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504,
+		2505, 2506, 2507, 2508, 2509, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 2510,
+		2511, 2512, 2513, 3266, 3266, 3266, 3266, 2518,
+		3267, 3267, 3267, 2522, 3268, 3268, 3268, 3268,
+		3268, 3268, 3268, 6682, 3268, 3268, 3268, 2534,
+		5151, 3269, 2537, 2538, 3271, 3271, 5157, 2948,
+		5159, 2544, 2545, 3273, 2778, 3273, 2549, 3274,
+		2551, 3275, 2553, 5175, 2555, 3277, 3277, 3277,
+		5181, 2560, 5184, 3278, 5186, 2564, 5189, 5190,
+		5191, 5192, 3279, 5194, 5195, 2572, 5198, 32767,
+		32767, 3278, 5200, 3278, 2577, 2578, 2579, 2580,
+		5210, 3282, 3282, 5213, 3282, 2586, 2587, 2588,
+		2589, 2590, 2591, -2175, -2175, -2175, 5230, 3288,
+		5232, 3288, 6914, -69, -69, 5097, 5098, 5099,
+		1792, -73, -73, 1792, 1792, 1792, 1792, 1792,
+		1792, 5091, 5092, 2884, 5094, 1795, 5096, 5097,
+		1797, 1797, 6961, 6962, 1797, 1797, 1797, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 2578, 2578, 2578, 2578, 2578,
+		2578, 872, 872, 872, 872, 872, 872, 872,
+		872, 872, 872, 8277, 6335, 8279, 6335, 9961,
+		2978, 2978, 8144, 8145, 8146, 4839, 2974, 2974,
+		4839, 4839, 4839, 4839, 4839, 4839, 8138, 8139,
+		5931, 8141, 4842, 8143, 8144, 4844, 4844, 10008,
+		10009, 4844, 4844, 4844, 8152, 10018, 10019, 8155,
+		8156, 8157, 8158, 8159, 8160, 8161, 8162, 7073,
+		8164, 5399, 5400, 5401, 5402, 5403, 0, 0,
+		0, 5407, 0, 0, 5410, 5411, 5412, 8180,
+		3383, 5415, 3914, 3915, 3916, 5419, 3918, 3919,
+		3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927,
+		3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
+		3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
+		3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
+		3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
+		3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
+		3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
+		3758, 3758, 7172, 3758, 3758, 3758, 3758, 5640,
+		3758, 3758, 5643, 3758, 3758, 5644, 3435, 5646,
+		3758, 3758, 3758, 3263, 3758, 3758, 3758, 3758,
+		3758, 3758, 5657, 3758, 3758, 3758, 3758, 5662,
+		3758, 5664, 3758, 5666, 5667, 5668, 5669, 5670,
+		5671, 3758, 5673, 5674, 5675, 5676, 3758, 5678,
+		3758, 5680, 3758, 5682, 7648, 3758, 3758, 5686,
+		3758, 3758, 5689, 3758, 5691, 5692, 3758, -1707,
+		-1707, -1707, -1707, -1707, -1707, 5698, 3756, 5700,
+		3756, 7382, 399, 399, 5565, 5566, 5567, 2260,
+		395, 395, 2260, 2260, 2260, 2260, 2260, 2260,
+		5559, 5560, 3352, 5562, 2263, 5564, 5565, 2265,
+		2265, 7429, 7430, 2265, 2265, 2265, 5573, 7439,
+		7440, 5576, 5577, 5578, 5579, 5580, 5581, 5582,
+		5583, 4494, 5585, 2820, 2821, 2822, 2823, 2824,
+		-2579, -2579, -2579, 2828, -2579, -2579, 2831, 2832,
+		2833, 5601, 804, 2836, 1335, 1336, 1337, 2840,
+		1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346,
+		1347, 1348, 1179, 1179, 1179, 1179, 1179, 1179,
+		1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+		1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+		1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+		1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+		1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+		1179, 1179, 1179, 1179, 4593, 1179, 1179, 1179,
+		1179, 3061, 1179, 1179, 3064, 1179, 1179, 3065,
+		856, 3067, 1179, 1179, 1179, 684, 1179, 1179,
+		1179, 1179, 1179, 1179, 3078, 1179, 1179, 1179,
+		1179, 3083, 1179, 3085, 1179, 3087, 3088, 3089,
+		3090, 3091, 3092, 1179, 3094, 3095, 3096, 3097,
+		1179, 3099, 1179, 3101, 1179, 3103, 5069, 1179,
+		1179, 3107, 1179, 1179, 3110, 1179, 3112, 3113,
+		1179, 3115, 1179, -4284, -4284, -4284, -4284, 3121,
+		1179, 3123, 1179, 4805, -2178, -2178, 2988, 2989,
+		2990, -317, -2182, -2182, -317, -317, -317, -317,
+		-317, -317, 2982, 2983, 775, 2985, -314, 2987,
+		2988, -312, -312, 4852, 4853, -312, -312, -312,
+		2996, 4862, 4863, 2999, 3000, 3001, 3002, 3003,
+		3004, 3005, 3006, 1917, 3008, 3009, 3010, 3011,
+		3012, 3013, -2150, -2150, 3016, 3017, 3018, 3019,
+		3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027,
+		3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035,
+		32767, 32767, 32767, 3036, 3037, 3038, 3039, 3040,
+		3041, 32767, 32767, 3042, 3043, 3044, 3045, 3046,
+		3047, 32767, 32767, 3048, 3049, 3050, 3051, 3052,
+		3053, 32767, 32767, 3054, 3055, 3056, 32767, 32767,
+		32767, -357, 3058, 3059, 3060, 3061, 1180, 3063,
+		0, 1179, 3065, 3066, 1181, 3391, 1181, 3070,
+		0, 0, 0, 0, 32767, 0, 0, 32767,
+		0, 32767, 0, 0, -4973, 32767, 32767, -7368,
+		-2202, -2201, -2200, -5507, -7372, -7372, -5507, -5507,
+		-5507, 32767, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 32767, 0, 0, 32767, 0,
+		-203, -2234, -732, -732, -732, -2234, -732, -732,
+		-2763, -1261, -1261, -1261, -2763, -1261, -1261, -1261,
+		-1261, -1261, -1261, -1261, -1261, -1261, -1261, -1091,
+		-1090, -1089, -1088, -1087, 32767, 32767, -1086, -1085,
+		-1084, -1083, -1082, -1081, -1080, -1079, -1078, -1077,
+		-1076, -1075, 32767, -1074, -1073, -1072, -1071, -1070,
+		-1069, -1068, -1067, -1066, -1065, -1064, -1063, -1062,
+		-1061, -1060, -1059, -1058, -1057, -1056, 32767, -1055,
+		-1054, -1053, -1052, 0, 32767, 32767, 32767, -1051,
+		-1050, -4463, 32767, -1048, 32767, -1047, -2928, -1045,
+		-1044, -2928, -1042, -1041, -2926, -716, -2926, -1037,
+		-1036, -1035, -539, -1033, -1032, -1031, -1030, -1029,
+		-1028, -2926, -1026, -1025, -1024, -1023, -2926, -1021,
+		-2926, -1019, -2926, -2926, -2926, -2926, -2926, -2926,
+		-1012, -2926, -2926, -2926, -2926, -1007, -2926, -1005,
+		-2926, -1003, -2926, -4891, -1000, -999, -2926, -997,
+		-996, -2926, -994, -2926, -2926, -991, 4475, 4476,
+		4477, 4478, 4479, 4480, -2924, -981, -2924, -979,
+		-4604, 2380, 2381, -2784, -2784, -2784, 524, 2390,
+		2391, 527, 528, 529, 530, 531, 532, -2766,
+		-2766, -557, -2766, 534, -2766, -2766, 535, 536,
+		-4627, -4627, 539, 540, 541, -2766, -4631, -4631,
+		-2766, -2766, -2766, -2766, -2766, -2766, -2766, -2766,
+		-1676, -2766, 0, 0, 0, 0, 0, 5404,
+		5405, 5406, 0, 5408, 5409, 0, 0, 0,
+		-2767, 2031, 0, 1502, 1502, 1502, 0, 1502,
+		1502, 1502, 1502, 1502, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 224, 225, 226, 32767, 227, 228, 229,
+		230, 231, 232, 233, 234, 235, 236, 67,
+		32767, 66, 66, 66, 66, 66, 66, 66,
+		66, 66, 66, 66, 66, 66, 66, 66,
+		66, 66, 66, 32767, 65, 65, 65, 65,
+		65, 65, 65, 65, 65, 65, 65, 65,
+		65, 65, 65, 65, 65, 65, 65, 65,
+		65, 65, 65, 65, 65, 65, 65, 65,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, -271, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		1940, 18, 1942, 3908, 18, 18, 1946, 18,
+		18, 1949, 18, 1951, 1952, 18, 1954, 18,
+		-5445, -5445, -5445, -5445, 1960, 18, 1962, 18,
+		3644, -3339, -3339, 1827, 1828, 1829, -1478, -3343,
+		-3343, -1478, -1478, -1478, -1478, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+		0, 32767, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 1340, 1341,
+		1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349,
+		-2064, 1351, 1352, 1353, 1354, 32767, 1355, 1356,
+		32767, 0, 32767, 32767, 1679, 32767, 1357, 1358,
+		1359, 1855, 1361, 1362, 1363, 1364, 1365, 1366,
+		32767, 1367, 1368, 1369, 1370, 32767, 1371, 32767,
+		1372, 32767, 32767, 32767, 32767, 32767, 32767, 1373,
+		32767, 32767, 32767, 32767, 1374, 32767, 1375, 32767,
+		1376, 32767, -2513, 1378, 1379, 32767, 1380, 1381,
+		32767, 1382, 32767, 32767, 1383, 32767, 1384, 32767,
+		6848, 32767, 6849, 32767, 1387, 32767, 1388, 1389,
+		32767, 1390, 32767, 32767, 1391, 1392, 1393, 1394,
+		32767, 1395, 1396, 1397, 1398, 1399, 1400, 1401,
+		32767, 1402, 1403, 1404, 1405, 32767, 1406, 1407,
+		1408, 1409, 32767, 1410, 32767, 1411, 1412, 1413,
+		1414, 1415, 1416, 1417, 1418, 1419, 1420, 32767,
+		1421, 1422, 1423, 1424, 1425, 0, 0, 0,
+		4575, 4576, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, -571, -571,
+		-571, 0, -572, 8101, 5150, 5150, 5150, 5337,
+		8103, 5150, 8104, 8105, 2038, 5145, 2039, 5150,
+		2040, 5150, 2041, 5150, 5150, 5138, 5150, 5150,
+		5150, 5150, 5150, 8108, 8109, 8110, 5150, 5150,
+		5384, 5150, 0, 5151, 5151, 5151, 5535, 5151,
+		5151, 5151, 5537, 5538, 5539, 5540, 5541, 5542,
+		5543, 5544, 5545, 5546, 5547, 5151, 5151, 2572,
+		2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
+		2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
+		2572, 2572, 2572, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 2580,
+		2580, 2580, 2580, 2580, 2580, 2580, 0, 2580,
+		0, 2580, 0, 0, 0, 2580, 2580, 2580,
+		0, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+		0, 2580, 0, 0, 0, 2580, 2580, 2580,
+		5517, 5518, 5519, 5520, 5521, 5522, -6, -6,
+		-6, 0, 0, 0, 0, 2581, 2581, 2581,
+		2581, 5527, 2581, 2581, 2581, 2581, 0, 5528,
+		0, 2581, 0, 0, 2581, 2581, 0, 0,
+		0, 0, 0, 0, 5529, 5530, 5531, 32767,
+		32767, 2579, 2579, 2579, 2579, 2579, 0, 0,
+		2579, 2579, 2579, 2765, 0, 0, 0, 0,
+		2579, 2579, 2579, 2579, 6066, 2579, 6066, 2579,
+		2579, 2579, 0, 0, 0, 2579, 2579, 0,
+		0, 0, 2579, 2579, 2579, 5530, 2579, 2579,
+		2579, 2766, 5532, 2579, 5533, 5534, -533, 2574,
+		-532, 2579, -531, 2579, -530, 2579, 2579, 2567,
+		2579, 2579, 2579, 2579, 2579, 5537, 5538, 5539,
+		2579, 2579, 2813, 2579, 2579, 2579, 2579, 2579,
+		2963, 2579, 2579, 2579, 2965, 2966, 2967, 2968,
+		2969, 2970, 2971, 2972, 2973, 2974, 2975, 2579,
+		2579, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 32767, 32767, 32767,
+		32767, 32767, 331, 32767, 332, -2580, -2580, -2580,
+		-2580, 0, 0, 0, 0, 0, 0, 0,
+		-2580, 0, -2580, 0, -2580, -2580, -2580, 0,
+		0, 0, -2580, 0, 0, 0, 0, 0,
+		0, 0, -2580, 0, -2580, -2580, -2580, 0,
+		0, 0, 2937, 2938, 2939, 2940, 2941, 2942,
+		-2586, -2586, -2586, -2580, -2125, -2581, -2581, 0,
+		0, 0, 0, 2946, 0, 0, 0, 0,
+		-2581, 2947, -2581, 0, -2581, -2581, 0, 0,
+		-2581, -2581, -2581, -2581, -2581, -2581, 2948, 2949,
+		2950, 2945, 2491, 0, 0, 0, 0, 0,
+		-2579, -2579, 0, 0, 0, 186, -2579, -2579,
+		-2579, -2579, 0, 0, 0, 0, 3487, 0,
+		3487, 0, 0, 0, -2579, -2579, -2579, 0,
+		0, -2579, -2579, -2579, 0, 0, 0, 2951,
+		0, 0, 0, 187, 2953, 0, 2954, 2955,
+		-3112, -5, -3111, 0, -3110, 0, -3109, 0,
+		0, -12, 0, 0, 0, 0, 0, 2958,
+		2959, 2960, 0, 0, 234, 0, 0, 0,
+		0, 0, 384, 0, 0, 0, 386, 387,
+		388, 389, 390, 391, 392, 393, 394, 395,
+		396, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, -1706, -1706, -1706, 0, 0, 0,
+		0, 385, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 397,
+		398, 399, 400, 401, 402, 403, 404, 405,
+		2112, 2113, 2114, 409, 410, 411, 412, 32767,
+		413, 414, 415, 416, 417, 418, 419, 420,
+		421, 422, 423, 424, 425, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		-1688, 32767, 32767, 32767, 32767, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+		0, -752, -751, -750, -749, 0, -748, -747,
+		-746, 0, -745, -744, -743, -742, -741, -740,
+		-739, -4152, -737, -736, -735, 0, -2616, -733,
+		0, 0, -732, -731, -2616, -406, -2616, 0,
+		0, -727, -231, -725, 0, -724, 0, -723,
+		0, -2621, 0, -721, -720, -719, -2622, 0,
+		-2623, -716, -2623, 0, -2624, -2624, -2624, -2624,
+		-710, -2624, -2624, 0, -2625, -706, -2625, -704,
+		-2625, -702, 0, 0, 0, 0, -2629, -700,
+		-699, -2629, -697, 0, 0, 0, 0, 0,
+		0, 4767, 4768, 4769, -2635, -692, -2635, -690,
+		-4315, 2669, 2670, -2495, -2495, -2495, 813, 2679,
+		2680, 816, 817, 818, 819, 820, 821, -2477,
+		-2477, -268, -2477, 823, -2477, -2477, 824, 825,
+		-4338, -4338, 828, 829, 830, -2477, -4342, -4342,
+		-2477, -2477, -2477, -2477, -2477, -2477, -2477, -2477,
+		-1387, 0, 0, 32767, 32767, 0, 0, 0,
+		0, 0, -2486, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 1756, 1757, 1758,
+		1759, -5645, -3702, -5645, -3700, -7325, -341, -340,
+		-5505, -5505, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 532, 533,
+		32767, 534, 535, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, -781, 1084, 1084, 1084, 1084,
+		1084, 1084, 4383, 4384, 2176, 4386, 1087, 4388,
+		4389, 1089, 1089, 6253, 6254, 1089, 1089, 1089,
+		4397, 6263, 6264, 4400, 4401, 4402, 4403, 4404,
+		4405, 4406, 4407, 3318, 4409, 4410, 4411, 4412,
+		4413, 4414, -749, -749, 4417, 4418, 4419, 4420,
+		4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428,
+		4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436,
+		4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444,
+		4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452,
+		4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460,
+		4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468,
+		4469, 1056, 4471, 4472, 4473, 4474, 2593, 4476,
+		4477, 2593, 4479, 4480, 2595, 4805, 2595, 4484,
+		4485, 4486, 4982, 4488, 4489, 4490, 4491, 4492,
+		4493, 2595, 4495, 4496, 4497, 4498, 2595, 4500,
+		2595, 4502, 2595, 2595, 2595, 2595, 2595, 2595,
+		4509, 2595, 2595, 2595, 2595, 4514, 2595, 4516,
+		2595, 4518, 2595, 630, 4521, 4522, 2595, 4524,
+		4525, 2595, 4527, 2595, 2595, 4530, 2595, 4532,
+		9996, 9997, 9998, 9999, 2595, 4538, 2595, 4540,
+		4541, 2595, 4543, 2595, 2595, 4546, 4547, 4548,
+		4549, 2595, 4551, 4552, 4553, 4554, 4555, 4556,
+		4557, 2595, 4559, 4560, 4561, 4562, 2595, 4564,
+		4565, 4566, 4567, 2595, 4569, 2595, 4571, 4572,
+		4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580,
+		2595, 4582, 4583, 4584, 4585, 4586, 4587, 4588,
+		4589, 4590, 4591, 4592, 4593, 4594, 4595, 4596,
+		4597, 4598, 4599, 4600, 4601, 4602, 4603, 4604,
+		4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612,
+		4613, 4614, 4615, 4089, 4090, 4091, 4092, 4620,
+		4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100,
+		4101, 4102, 4103, 4104, 2765, 2765, 2765, 2765,
+		2765, 2765, 2765, 2765, 2765, 2765, 6179, 2765,
+		2765, 2765, 2765, 4647, 2765, 2765, 4650, 4122,
+		4652, 4653, 2444, 4655, 2767, 2767, 2767, 2272,
+		2767, 2767, 2767, 2767, 2767, 2767, 4666, 2767,
+		2767, 2767, 2767, 4671, 2767, 4673, 2767, 4675,
+		4676, 4677, 4678, 4679, 4680, 2767, 4682, 4683,
+		4684, 4685, 2767, 4687, 2767, 4689, 2767, 4691,
+		6657, 2767, 2767, 4695, 2767, 2767, 4698, 2767,
+		4700, 4701, 2767, 4703, 2767, -2696, -2696, -2696,
+		-2696, 4709, 2767, 4711, 2767, 2767, 4714, 2767,
+		4716, 4717, 2767, 2767, 2767, 2767, 4722, 2767,
+		2767, 2767, 2767, 2767, 2767, 2767, 4730, 2767,
+		2767, 2767, 2767, 4735, 2767, 2767, 2767, 2767,
+		4740, 2767, 4742, 2767, 2767, 2767, 2767, 2767,
+		2767, 2767, 2767, 2767, 2767, 4753, 2767, 2767,
+		2767, 2767, 2767, 4193, 4194, 4195, -379, -379,
+		4198, 4199, 4200, 4201, 4202, 4203, 4204, 4771,
+		4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779,
+		4780, -3892, -940, -939, -938, 4785, -3890, -936,
+		-3889, -3889, 2179, -927, 2180, -930, 2181, -928,
+		2182, -926, -925, -912, -923, -922, -921, 4803,
+		4804, 4805, 4806, 4807, 4808, 4809, 4810, 4811,
+		4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819,
+		3925, 4821, 4822, 4823, 4824, 4825, 4826, 4827,
+		4828, 4829, 4830, 4831, 4832, 4833, 4834, 4835,
+		4836, 4837, 4838, 4839, 4840, 4841, 4842, 4843,
+		4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851,
+		4852, 4853, 4854, 4855, 4856, 4857, 4858, 4859,
+		4860, 4710, 2086, 609, 4864, 4865, 4866, 4867,
+		4868, 4869, 4870, 4871, 4872, 3052, 4874, 4875,
+		4876, 4281, 4878, 4879, 4880, 4881, 4882, 4883,
+		4884, 4885, 4886, 4887, 634, 4888, 4889, 4890,
+		4891, 4892, 4893, 4894, 4895, 4896, 1322, 1322,
+		1322, 1322, 1322, 1322, 1322, 4904, 338, 4906,
+		4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914,
+		4915, 4916, 4917, 665, 666, 667, 668, 669,
+		670, 671, 672, 673, 674, 675, 676, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+		32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+		0, 0, 0, 0, 0, 32767, 0, 0,
+		0, 0, 32767, 32767, 0, 0, 0, 0,
+		0, 0, 0, 0, 32767, 0, 0, 0,
+		0, 0, 0, 0, 32767, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 32767, 0, 0, 0, 2478, 32767, 2477,
+		2477, 2477, 2477, 2477, 32767, 2476, 32767, 32767,
+		32767, 2473, 2473, 2473, 2473, 2473, 2473, 2473,
+		32767, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
+		2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
+		2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
+		2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
+		2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
+		2472, 2472, 2472, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, -2478, -2478, -2478, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0,
+	};
+
+	const unsigned char *k = (const unsigned char *) key;
+	size_t		keylen = 4;
+	uint32		a = 0;
+	uint32		b = 1;
+
+	while (keylen--)
+	{
+		unsigned char c = *k++;
+
+		a = a * 257 + c;
+		b = b * 8191 + c;
+	}
+	return h[a % 9837] + h[b % 9837];
+}
+
+static const unicode_norm_info UnicodeNormInfo_NFKC_QC = {
+	UnicodeNormProps_NFKC_QC,
+	NFKC_QC_hash_func,
+	4918
+};
-- 
2.22.0

