Module Name:    src
Committed By:   nat
Date:           Sat May 27 10:54:47 UTC 2017

Modified Files:
        src/sys/dev: audiobell.c
Added Files:
        src/sys/dev: audiobelldata.h

Log Message:
The audio bell is now in 16 bit slinear format.

It is possible to use a frequency of 44.1 kHz as apposed to 8 kHz if
you specifiy:

options HIRES_BELL

in your kernel config file.

Changes to the way in which the wave is generated help reducing pops and
ticks in the bell.

The output of the high resolution bell has been tested extensively using
frequency spectographs generated by pkgsrc package audio/audacity.

This addresses PR kern/51784.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/dev/audiobell.c
cvs rdiff -u -r0 -r1.1 src/sys/dev/audiobelldata.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/audiobell.c
diff -u src/sys/dev/audiobell.c:1.16 src/sys/dev/audiobell.c:1.17
--- src/sys/dev/audiobell.c:1.16	Mon Feb 27 23:31:00 2017
+++ src/sys/dev/audiobell.c	Sat May 27 10:54:47 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: audiobell.c,v 1.16 2017/02/27 23:31:00 mrg Exp $	*/
+/*	$NetBSD: audiobell.c,v 1.17 2017/05/27 10:54:47 nat Exp $	*/
 
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/types.h>
-__KERNEL_RCSID(0, "$NetBSD: audiobell.c,v 1.16 2017/02/27 23:31:00 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audiobell.c,v 1.17 2017/05/27 10:54:47 nat Exp $");
 
 #include <sys/audioio.h>
 #include <sys/conf.h>
@@ -50,63 +50,44 @@ __KERNEL_RCSID(0, "$NetBSD: audiobell.c,
 #include <dev/audio_if.h>
 #include <dev/audiovar.h>
 #include <dev/audiobellvar.h>
+#ifdef HIRES_BELL
+#include <dev/audiobelldata.h>
 
-/* Convert a %age volume to an amount to add to u-law values */
-/* XXX Probably highly inaccurate -- should be regenerated */
-static const uint8_t volmap[] = {
-	0x7f, 0x67, 0x5b, 0x53, 0x49, 0x45, 0x41, 0x3e, 0x3a, 0x38,
-	0x36, 0x32, 0x30, 0x2f, 0x2e, 0x2c, 0x2b, 0x2a, 0x28, 0x27,
-	0x26, 0x25, 0x23, 0x22, 0x21, 0x1f, 0x1f, 0x1e, 0x1e, 0x1d,
-	0x1c, 0x1c, 0x1b, 0x1a, 0x1a, 0x19, 0x18, 0x18, 0x17, 0x17,
-	0x16, 0x15, 0x15, 0x14, 0x13, 0x13, 0x12, 0x11, 0x11, 0x10,
-	0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0d, 0x0d, 0x0d,
-	0x0c, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x09,
-	0x09, 0x09, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x06,
-	0x06, 0x06, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04,	0x03, 0x03,
-	0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
-	0x00
-};
+/* 44.1 kHz should reduce hum at higher pitches. */
+#define BELL_SAMPLE_RATE	44100
+#define BELL_SHIFT		19
+#else
+#define BELL_SAMPLE_RATE	8000
+#define BELL_SHIFT		24
+#endif
 
+#ifndef HIRES_BELL
 /* 1/4 cycle sine wave in u-law */
 /* XXX Probably highly inaccurate -- should be regenerated */
-static const uint8_t sinewave[] = {
-	0xff, 0xd3, 0xc5, 0xbc, 0xb6, 0xb0, 0xad, 0xaa,
-	0xa7, 0xa3, 0xa0, 0x9e, 0x9d, 0x9b, 0x9a, 0x98,
-	0x97, 0x96, 0x94, 0x93, 0x91, 0x90, 0x8f, 0x8e,
-	0x8e, 0x8d, 0x8c, 0x8c, 0x8b, 0x8b, 0x8a, 0x89,
-	0x89, 0x88, 0x88, 0x87, 0x87, 0x86, 0x86, 0x85,
-	0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x82,
-	0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80,
+static const int16_t sinewave[] = {
+	0x0000, 0x0324, 0x0647, 0x096a, 0x0c8b, 0x0fab, 0x12c8, 0x15e2, 
+	0x18f8, 0x1c0b, 0x1f19, 0x2223, 0x2528, 0x2826, 0x2b1f, 0x2e11, 
+	0x30fb, 0x33de, 0x36ba, 0x398c, 0x3c56, 0x3f17, 0x41ce, 0x447a, 
+	0x471c, 0x49b4, 0x4c3f, 0x4ebf, 0x5133, 0x539b, 0x55f5, 0x5842, 
+	0x5a82, 0x5cb4, 0x5ed7, 0x60ec, 0x62f2, 0x64e8, 0x66cf, 0x68a6, 
+	0x6a6d, 0x6c24, 0x6dca, 0x6f5f, 0x70e2, 0x7255, 0x73b5, 0x7504, 
+	0x7641, 0x776c, 0x7884, 0x798a, 0x7a7d, 0x7b5d, 0x7c29, 0x7ce3, 
+	0x7d8a, 0x7e1d, 0x7e9d, 0x7f09, 0x7f62, 0x7fa7, 0x7fd8, 0x7ff6, 
 };
-
-static inline uint8_t
-audiobell_ulawscale(uint8_t val, uint8_t vol)
-{
-	uint8_t result;
-
-	result = val + vol;
-	/* Spot underflow and just return silence */
-	if ((result ^ val) & 0x80)
-		return 0x7f;
-	return result;
-}
+#endif
 
 static inline void
-audiobell_expandwave(uint8_t *buf, int volume)
+audiobell_expandwave(int16_t *buf, int volume)
 {
 	u_int i;
-	int uvol;
 
 	KASSERT(volume >= 0 && volume <= 100);
-	uvol = volmap[volume];
-	for (i = 0; i < 65; i++)
-		buf[i] = audiobell_ulawscale(sinewave[i], uvol);
-	for (i = 65; i < 128; i++)
-		 buf[i] = buf[128 - i];
-	for (i = 128; i < 256; i++)
-		buf[i] = buf[i - 128] ^ 0x80;
+	for (i = 0; i < __arraycount(sinewave); i++)
+		buf[i] = (int32_t)sinewave[i] * (int32_t)volume / 100;
+	for (i = __arraycount(sinewave); i < __arraycount(sinewave) * 2; i++)
+		 buf[i] = buf[__arraycount(sinewave) * 2 - i - 1];
+	for (i = __arraycount(sinewave) * 2; i < __arraycount(sinewave) * 4; i++)
+		buf[i] = -buf[__arraycount(sinewave) * 4 - i - 1];
 }
 
 /*
@@ -114,21 +95,21 @@ audiobell_expandwave(uint8_t *buf, int v
  * Reference Manual (pp1624--1628).
  */
 static inline int
-audiobell_synthesize(uint8_t *buf, u_int pitch, u_int period, u_int volume)
+audiobell_synthesize(int16_t *buf, u_int pitch, u_int period, u_int volume,
+    uint32_t *phase)
 {
-	uint8_t *wave;
-	uint16_t phase;
+	int16_t *wave;
 
-	wave = malloc(256, M_TEMP, M_WAITOK);
+	wave = malloc(sizeof(sinewave) * 4, M_TEMP, M_WAITOK);
 	if (wave == NULL) return -1;
 	audiobell_expandwave(wave, volume);
-	pitch = pitch * 65536 / 8000;
-	period = period * 8; /* 8000 / 1000 */
-	phase = 0;
+	pitch = pitch * ((sizeof(sinewave) * 4) << BELL_SHIFT) /
+	    BELL_SAMPLE_RATE / 2;
+	period = period * BELL_SAMPLE_RATE / 1000 / 2;
 
 	for (; period != 0; period--) {
-		*buf++ = wave[phase >> 8];
-		phase += pitch;
+		*buf++ = wave[*phase >> BELL_SHIFT];
+		*phase += pitch;
 	}
 
 	free(wave, M_TEMP);
@@ -138,12 +119,13 @@ audiobell_synthesize(uint8_t *buf, u_int
 void
 audiobell(void *v, u_int pitch, u_int period, u_int volume, int poll)
 {
-	uint8_t *buf;
+	int16_t *buf;
+	uint32_t phase;
 	struct audio_info ai;
 	struct uio auio;
 	struct iovec aiov;
 	struct file *fp;
-	int size, len, offset;
+	int size, len;
 
 	fp = NULL;
 	dev_t audio = AUDIO_DEVICE | device_unit((device_t)v);
@@ -160,22 +142,36 @@ audiobell(void *v, u_int pitch, u_int pe
 		return;
 	}
 
+	ai.play.sample_rate = BELL_SAMPLE_RATE;
+	ai.play.precision = 16;
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+	ai.play.encoding = AUDIO_ENCODING_SLINEAR_LE;
+#else
+	ai.play.encoding = AUDIO_ENCODING_SLINEAR_BE;
+#endif
+
+	if (audiobellioctl(fp, AUDIO_SETINFO, &ai) != 0) {
+		audiobellclose(fp);
+		return;
+	}
 	buf = NULL;
 
-	if (ai.blocksize < 8192)
-		ai.blocksize = 8192;
+	if (ai.blocksize < BELL_SAMPLE_RATE)
+		ai.blocksize = BELL_SAMPLE_RATE;
 
-	len = period * 8;
+	len = period * BELL_SAMPLE_RATE / 1000 * 2;
 	size = min(len, ai.blocksize);
 	if (size == 0) goto out;
 
 	buf = malloc(size, M_TEMP, M_WAITOK);
 	if (buf == NULL) goto out;
-
-	offset = 0;
+ 
+	phase = 0;
 	while (len > 0) {
 		size = min(len, ai.blocksize);
-		if (audiobell_synthesize(buf, pitch, size / 8, volume) != 0)
+		if (audiobell_synthesize(buf, pitch, size *
+				1000 / BELL_SAMPLE_RATE, volume, &phase) != 0)
 			goto out;
 		aiov.iov_base = (void *)buf;
 		aiov.iov_len = size;
@@ -188,7 +184,6 @@ audiobell(void *v, u_int pitch, u_int pe
 
 		audiobellwrite(fp, NULL, &auio, NULL, 0);
 		len -= size;
-		offset += size;
 	}
 out:
 	if (buf != NULL) free(buf, M_TEMP);

Added files:

Index: src/sys/dev/audiobelldata.h
diff -u /dev/null src/sys/dev/audiobelldata.h:1.1
--- /dev/null	Sat May 27 10:54:47 2017
+++ src/sys/dev/audiobelldata.h	Sat May 27 10:54:47 2017
@@ -0,0 +1,285 @@
+/*-
+ * Copyright (c) 2017 Nathanial Sloss <nathanialsl...@yahoo.com.au>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+ */
+
+/* High resolution 1/4 cycle sine wave in 16 bit-slinear */
+static const uint16_t sinewave[] = {
+	0x0000, 0x0019, 0x0032, 0x004b, 0x0064, 0x007d, 0x0096, 0x00af, 
+	0x00c9, 0x00e2, 0x00fb, 0x0114, 0x012d, 0x0146, 0x015f, 0x0178, 
+	0x0192, 0x01ab, 0x01c4, 0x01dd, 0x01f6, 0x020f, 0x0228, 0x0242, 
+	0x025b, 0x0274, 0x028d, 0x02a6, 0x02bf, 0x02d8, 0x02f1, 0x030b, 
+	0x0324, 0x033d, 0x0356, 0x036f, 0x0388, 0x03a1, 0x03ba, 0x03d4, 
+	0x03ed, 0x0406, 0x041f, 0x0438, 0x0451, 0x046a, 0x0483, 0x049c, 
+	0x04b6, 0x04cf, 0x04e8, 0x0501, 0x051a, 0x0533, 0x054c, 0x0565, 
+	0x057f, 0x0598, 0x05b1, 0x05ca, 0x05e3, 0x05fc, 0x0615, 0x062e, 
+	0x0647, 0x0660, 0x067a, 0x0693, 0x06ac, 0x06c5, 0x06de, 0x06f7, 
+	0x0710, 0x0729, 0x0742, 0x075b, 0x0775, 0x078e, 0x07a7, 0x07c0, 
+	0x07d9, 0x07f2, 0x080b, 0x0824, 0x083d, 0x0856, 0x086f, 0x0888, 
+	0x08a2, 0x08bb, 0x08d4, 0x08ed, 0x0906, 0x091f, 0x0938, 0x0951, 
+	0x096a, 0x0983, 0x099c, 0x09b5, 0x09ce, 0x09e7, 0x0a00, 0x0a19, 
+	0x0a33, 0x0a4c, 0x0a65, 0x0a7e, 0x0a97, 0x0ab0, 0x0ac9, 0x0ae2, 
+	0x0afb, 0x0b14, 0x0b2d, 0x0b46, 0x0b5f, 0x0b78, 0x0b91, 0x0baa, 
+	0x0bc3, 0x0bdc, 0x0bf5, 0x0c0e, 0x0c27, 0x0c40, 0x0c59, 0x0c72, 
+	0x0c8b, 0x0ca4, 0x0cbd, 0x0cd6, 0x0cef, 0x0d08, 0x0d21, 0x0d3a, 
+	0x0d53, 0x0d6c, 0x0d85, 0x0d9e, 0x0db7, 0x0dd0, 0x0de9, 0x0e02, 
+	0x0e1b, 0x0e34, 0x0e4d, 0x0e66, 0x0e7f, 0x0e98, 0x0eb1, 0x0eca, 
+	0x0ee3, 0x0efc, 0x0f15, 0x0f2e, 0x0f47, 0x0f60, 0x0f79, 0x0f92, 
+	0x0fab, 0x0fc4, 0x0fdd, 0x0ff5, 0x100e, 0x1027, 0x1040, 0x1059, 
+	0x1072, 0x108b, 0x10a4, 0x10bd, 0x10d6, 0x10ef, 0x1108, 0x1121, 
+	0x1139, 0x1152, 0x116b, 0x1184, 0x119d, 0x11b6, 0x11cf, 0x11e8, 
+	0x1201, 0x1219, 0x1232, 0x124b, 0x1264, 0x127d, 0x1296, 0x12af, 
+	0x12c8, 0x12e0, 0x12f9, 0x1312, 0x132b, 0x1344, 0x135d, 0x1376, 
+	0x138e, 0x13a7, 0x13c0, 0x13d9, 0x13f2, 0x140b, 0x1423, 0x143c, 
+	0x1455, 0x146e, 0x1487, 0x149f, 0x14b8, 0x14d1, 0x14ea, 0x1503, 
+	0x151b, 0x1534, 0x154d, 0x1566, 0x157f, 0x1597, 0x15b0, 0x15c9, 
+	0x15e2, 0x15fa, 0x1613, 0x162c, 0x1645, 0x165d, 0x1676, 0x168f, 
+	0x16a8, 0x16c0, 0x16d9, 0x16f2, 0x170a, 0x1723, 0x173c, 0x1755, 
+	0x176d, 0x1786, 0x179f, 0x17b7, 0x17d0, 0x17e9, 0x1802, 0x181a, 
+	0x1833, 0x184c, 0x1864, 0x187d, 0x1896, 0x18ae, 0x18c7, 0x18e0, 
+	0x18f8, 0x1911, 0x192a, 0x1942, 0x195b, 0x1973, 0x198c, 0x19a5, 
+	0x19bd, 0x19d6, 0x19ef, 0x1a07, 0x1a20, 0x1a38, 0x1a51, 0x1a6a, 
+	0x1a82, 0x1a9b, 0x1ab3, 0x1acc, 0x1ae4, 0x1afd, 0x1b16, 0x1b2e, 
+	0x1b47, 0x1b5f, 0x1b78, 0x1b90, 0x1ba9, 0x1bc1, 0x1bda, 0x1bf2, 
+	0x1c0b, 0x1c24, 0x1c3c, 0x1c55, 0x1c6d, 0x1c86, 0x1c9e, 0x1cb7, 
+	0x1ccf, 0x1ce8, 0x1d00, 0x1d19, 0x1d31, 0x1d49, 0x1d62, 0x1d7a, 
+	0x1d93, 0x1dab, 0x1dc4, 0x1ddc, 0x1df5, 0x1e0d, 0x1e25, 0x1e3e, 
+	0x1e56, 0x1e6f, 0x1e87, 0x1ea0, 0x1eb8, 0x1ed0, 0x1ee9, 0x1f01, 
+	0x1f19, 0x1f32, 0x1f4a, 0x1f63, 0x1f7b, 0x1f93, 0x1fac, 0x1fc4, 
+	0x1fdc, 0x1ff5, 0x200d, 0x2025, 0x203e, 0x2056, 0x206e, 0x2087, 
+	0x209f, 0x20b7, 0x20d0, 0x20e8, 0x2100, 0x2118, 0x2131, 0x2149, 
+	0x2161, 0x2179, 0x2192, 0x21aa, 0x21c2, 0x21da, 0x21f3, 0x220b, 
+	0x2223, 0x223b, 0x2254, 0x226c, 0x2284, 0x229c, 0x22b4, 0x22cd, 
+	0x22e5, 0x22fd, 0x2315, 0x232d, 0x2345, 0x235e, 0x2376, 0x238e, 
+	0x23a6, 0x23be, 0x23d6, 0x23ee, 0x2407, 0x241f, 0x2437, 0x244f, 
+	0x2467, 0x247f, 0x2497, 0x24af, 0x24c7, 0x24df, 0x24f7, 0x2510, 
+	0x2528, 0x2540, 0x2558, 0x2570, 0x2588, 0x25a0, 0x25b8, 0x25d0, 
+	0x25e8, 0x2600, 0x2618, 0x2630, 0x2648, 0x2660, 0x2678, 0x2690, 
+	0x26a8, 0x26c0, 0x26d8, 0x26f0, 0x2707, 0x271f, 0x2737, 0x274f, 
+	0x2767, 0x277f, 0x2797, 0x27af, 0x27c7, 0x27df, 0x27f7, 0x280e, 
+	0x2826, 0x283e, 0x2856, 0x286e, 0x2886, 0x289d, 0x28b5, 0x28cd, 
+	0x28e5, 0x28fd, 0x2915, 0x292c, 0x2944, 0x295c, 0x2974, 0x298c, 
+	0x29a3, 0x29bb, 0x29d3, 0x29eb, 0x2a02, 0x2a1a, 0x2a32, 0x2a49, 
+	0x2a61, 0x2a79, 0x2a91, 0x2aa8, 0x2ac0, 0x2ad8, 0x2aef, 0x2b07, 
+	0x2b1f, 0x2b36, 0x2b4e, 0x2b66, 0x2b7d, 0x2b95, 0x2bad, 0x2bc4, 
+	0x2bdc, 0x2bf3, 0x2c0b, 0x2c23, 0x2c3a, 0x2c52, 0x2c69, 0x2c81, 
+	0x2c99, 0x2cb0, 0x2cc8, 0x2cdf, 0x2cf7, 0x2d0e, 0x2d26, 0x2d3d, 
+	0x2d55, 0x2d6c, 0x2d84, 0x2d9b, 0x2db3, 0x2dca, 0x2de2, 0x2df9, 
+	0x2e11, 0x2e28, 0x2e3f, 0x2e57, 0x2e6e, 0x2e86, 0x2e9d, 0x2eb5, 
+	0x2ecc, 0x2ee3, 0x2efb, 0x2f12, 0x2f29, 0x2f41, 0x2f58, 0x2f70, 
+	0x2f87, 0x2f9e, 0x2fb6, 0x2fcd, 0x2fe4, 0x2ffb, 0x3013, 0x302a, 
+	0x3041, 0x3059, 0x3070, 0x3087, 0x309e, 0x30b6, 0x30cd, 0x30e4, 
+	0x30fb, 0x3113, 0x312a, 0x3141, 0x3158, 0x316f, 0x3186, 0x319e, 
+	0x31b5, 0x31cc, 0x31e3, 0x31fa, 0x3211, 0x3229, 0x3240, 0x3257, 
+	0x326e, 0x3285, 0x329c, 0x32b3, 0x32ca, 0x32e1, 0x32f8, 0x330f, 
+	0x3326, 0x333d, 0x3354, 0x336b, 0x3383, 0x339a, 0x33b1, 0x33c7, 
+	0x33de, 0x33f5, 0x340c, 0x3423, 0x343a, 0x3451, 0x3468, 0x347f, 
+	0x3496, 0x34ad, 0x34c4, 0x34db, 0x34f2, 0x3509, 0x351f, 0x3536, 
+	0x354d, 0x3564, 0x357b, 0x3592, 0x35a8, 0x35bf, 0x35d6, 0x35ed, 
+	0x3604, 0x361a, 0x3631, 0x3648, 0x365f, 0x3675, 0x368c, 0x36a3, 
+	0x36ba, 0x36d0, 0x36e7, 0x36fe, 0x3714, 0x372b, 0x3742, 0x3758, 
+	0x376f, 0x3786, 0x379c, 0x37b3, 0x37ca, 0x37e0, 0x37f7, 0x380e, 
+	0x3824, 0x383b, 0x3851, 0x3868, 0x387e, 0x3895, 0x38ab, 0x38c2, 
+	0x38d9, 0x38ef, 0x3906, 0x391c, 0x3933, 0x3949, 0x395f, 0x3976, 
+	0x398c, 0x39a3, 0x39b9, 0x39d0, 0x39e6, 0x39fd, 0x3a13, 0x3a29, 
+	0x3a40, 0x3a56, 0x3a6c, 0x3a83, 0x3a99, 0x3aaf, 0x3ac6, 0x3adc, 
+	0x3af2, 0x3b09, 0x3b1f, 0x3b35, 0x3b4c, 0x3b62, 0x3b78, 0x3b8e, 
+	0x3ba5, 0x3bbb, 0x3bd1, 0x3be7, 0x3bfe, 0x3c14, 0x3c2a, 0x3c40, 
+	0x3c56, 0x3c6c, 0x3c83, 0x3c99, 0x3caf, 0x3cc5, 0x3cdb, 0x3cf1, 
+	0x3d07, 0x3d1d, 0x3d33, 0x3d4a, 0x3d60, 0x3d76, 0x3d8c, 0x3da2, 
+	0x3db8, 0x3dce, 0x3de4, 0x3dfa, 0x3e10, 0x3e26, 0x3e3c, 0x3e52, 
+	0x3e68, 0x3e7e, 0x3e93, 0x3ea9, 0x3ebf, 0x3ed5, 0x3eeb, 0x3f01, 
+	0x3f17, 0x3f2d, 0x3f43, 0x3f58, 0x3f6e, 0x3f84, 0x3f9a, 0x3fb0, 
+	0x3fc5, 0x3fdb, 0x3ff1, 0x4007, 0x401d, 0x4032, 0x4048, 0x405e, 
+	0x4073, 0x4089, 0x409f, 0x40b5, 0x40ca, 0x40e0, 0x40f6, 0x410b, 
+	0x4121, 0x4137, 0x414c, 0x4162, 0x4177, 0x418d, 0x41a3, 0x41b8, 
+	0x41ce, 0x41e3, 0x41f9, 0x420e, 0x4224, 0x4239, 0x424f, 0x4264, 
+	0x427a, 0x428f, 0x42a5, 0x42ba, 0x42d0, 0x42e5, 0x42fa, 0x4310, 
+	0x4325, 0x433b, 0x4350, 0x4365, 0x437b, 0x4390, 0x43a5, 0x43bb, 
+	0x43d0, 0x43e5, 0x43fb, 0x4410, 0x4425, 0x443b, 0x4450, 0x4465, 
+	0x447a, 0x4490, 0x44a5, 0x44ba, 0x44cf, 0x44e4, 0x44fa, 0x450f, 
+	0x4524, 0x4539, 0x454e, 0x4563, 0x4578, 0x458e, 0x45a3, 0x45b8, 
+	0x45cd, 0x45e2, 0x45f7, 0x460c, 0x4621, 0x4636, 0x464b, 0x4660, 
+	0x4675, 0x468a, 0x469f, 0x46b4, 0x46c9, 0x46de, 0x46f3, 0x4708, 
+	0x471c, 0x4731, 0x4746, 0x475b, 0x4770, 0x4785, 0x479a, 0x47ae, 
+	0x47c3, 0x47d8, 0x47ed, 0x4802, 0x4816, 0x482b, 0x4840, 0x4855, 
+	0x4869, 0x487e, 0x4893, 0x48a8, 0x48bc, 0x48d1, 0x48e6, 0x48fa, 
+	0x490f, 0x4924, 0x4938, 0x494d, 0x4961, 0x4976, 0x498b, 0x499f, 
+	0x49b4, 0x49c8, 0x49dd, 0x49f1, 0x4a06, 0x4a1a, 0x4a2f, 0x4a43, 
+	0x4a58, 0x4a6c, 0x4a81, 0x4a95, 0x4aa9, 0x4abe, 0x4ad2, 0x4ae7, 
+	0x4afb, 0x4b0f, 0x4b24, 0x4b38, 0x4b4c, 0x4b61, 0x4b75, 0x4b89, 
+	0x4b9e, 0x4bb2, 0x4bc6, 0x4bda, 0x4bef, 0x4c03, 0x4c17, 0x4c2b, 
+	0x4c3f, 0x4c54, 0x4c68, 0x4c7c, 0x4c90, 0x4ca4, 0x4cb8, 0x4ccc, 
+	0x4ce1, 0x4cf5, 0x4d09, 0x4d1d, 0x4d31, 0x4d45, 0x4d59, 0x4d6d, 
+	0x4d81, 0x4d95, 0x4da9, 0x4dbd, 0x4dd1, 0x4de5, 0x4df9, 0x4e0d, 
+	0x4e21, 0x4e34, 0x4e48, 0x4e5c, 0x4e70, 0x4e84, 0x4e98, 0x4eac, 
+	0x4ebf, 0x4ed3, 0x4ee7, 0x4efb, 0x4f0f, 0x4f22, 0x4f36, 0x4f4a, 
+	0x4f5e, 0x4f71, 0x4f85, 0x4f99, 0x4fac, 0x4fc0, 0x4fd4, 0x4fe7, 
+	0x4ffb, 0x500f, 0x5022, 0x5036, 0x5049, 0x505d, 0x5070, 0x5084, 
+	0x5098, 0x50ab, 0x50bf, 0x50d2, 0x50e6, 0x50f9, 0x510c, 0x5120, 
+	0x5133, 0x5147, 0x515a, 0x516e, 0x5181, 0x5194, 0x51a8, 0x51bb, 
+	0x51ce, 0x51e2, 0x51f5, 0x5208, 0x521c, 0x522f, 0x5242, 0x5255, 
+	0x5269, 0x527c, 0x528f, 0x52a2, 0x52b5, 0x52c9, 0x52dc, 0x52ef, 
+	0x5302, 0x5315, 0x5328, 0x533b, 0x534e, 0x5362, 0x5375, 0x5388, 
+	0x539b, 0x53ae, 0x53c1, 0x53d4, 0x53e7, 0x53fa, 0x540d, 0x5420, 
+	0x5433, 0x5445, 0x5458, 0x546b, 0x547e, 0x5491, 0x54a4, 0x54b7, 
+	0x54ca, 0x54dc, 0x54ef, 0x5502, 0x5515, 0x5528, 0x553a, 0x554d, 
+	0x5560, 0x5573, 0x5585, 0x5598, 0x55ab, 0x55bd, 0x55d0, 0x55e3, 
+	0x55f5, 0x5608, 0x561a, 0x562d, 0x5640, 0x5652, 0x5665, 0x5677, 
+	0x568a, 0x569c, 0x56af, 0x56c1, 0x56d4, 0x56e6, 0x56f9, 0x570b, 
+	0x571d, 0x5730, 0x5742, 0x5755, 0x5767, 0x5779, 0x578c, 0x579e, 
+	0x57b0, 0x57c3, 0x57d5, 0x57e7, 0x57f9, 0x580c, 0x581e, 0x5830, 
+	0x5842, 0x5855, 0x5867, 0x5879, 0x588b, 0x589d, 0x58af, 0x58c2, 
+	0x58d4, 0x58e6, 0x58f8, 0x590a, 0x591c, 0x592e, 0x5940, 0x5952, 
+	0x5964, 0x5976, 0x5988, 0x599a, 0x59ac, 0x59be, 0x59d0, 0x59e2, 
+	0x59f3, 0x5a05, 0x5a17, 0x5a29, 0x5a3b, 0x5a4d, 0x5a5e, 0x5a70, 
+	0x5a82, 0x5a94, 0x5aa6, 0x5ab7, 0x5ac9, 0x5adb, 0x5aec, 0x5afe, 
+	0x5b10, 0x5b21, 0x5b33, 0x5b45, 0x5b56, 0x5b68, 0x5b79, 0x5b8b, 
+	0x5b9d, 0x5bae, 0x5bc0, 0x5bd1, 0x5be3, 0x5bf4, 0x5c06, 0x5c17, 
+	0x5c29, 0x5c3a, 0x5c4b, 0x5c5d, 0x5c6e, 0x5c80, 0x5c91, 0x5ca2, 
+	0x5cb4, 0x5cc5, 0x5cd6, 0x5ce8, 0x5cf9, 0x5d0a, 0x5d1b, 0x5d2d, 
+	0x5d3e, 0x5d4f, 0x5d60, 0x5d71, 0x5d83, 0x5d94, 0x5da5, 0x5db6, 
+	0x5dc7, 0x5dd8, 0x5de9, 0x5dfa, 0x5e0b, 0x5e1d, 0x5e2e, 0x5e3f, 
+	0x5e50, 0x5e61, 0x5e72, 0x5e82, 0x5e93, 0x5ea4, 0x5eb5, 0x5ec6, 
+	0x5ed7, 0x5ee8, 0x5ef9, 0x5f0a, 0x5f1a, 0x5f2b, 0x5f3c, 0x5f4d, 
+	0x5f5e, 0x5f6e, 0x5f7f, 0x5f90, 0x5fa1, 0x5fb1, 0x5fc2, 0x5fd3, 
+	0x5fe3, 0x5ff4, 0x6005, 0x6015, 0x6026, 0x6036, 0x6047, 0x6057, 
+	0x6068, 0x6078, 0x6089, 0x609a, 0x60aa, 0x60ba, 0x60cb, 0x60db, 
+	0x60ec, 0x60fc, 0x610d, 0x611d, 0x612d, 0x613e, 0x614e, 0x615e, 
+	0x616f, 0x617f, 0x618f, 0x619f, 0x61b0, 0x61c0, 0x61d0, 0x61e0, 
+	0x61f1, 0x6201, 0x6211, 0x6221, 0x6231, 0x6241, 0x6251, 0x6261, 
+	0x6272, 0x6282, 0x6292, 0x62a2, 0x62b2, 0x62c2, 0x62d2, 0x62e2, 
+	0x62f2, 0x6301, 0x6311, 0x6321, 0x6331, 0x6341, 0x6351, 0x6361, 
+	0x6371, 0x6380, 0x6390, 0x63a0, 0x63b0, 0x63c0, 0x63cf, 0x63df, 
+	0x63ef, 0x63fe, 0x640e, 0x641e, 0x642d, 0x643d, 0x644d, 0x645c, 
+	0x646c, 0x647b, 0x648b, 0x649b, 0x64aa, 0x64ba, 0x64c9, 0x64d9, 
+	0x64e8, 0x64f8, 0x6507, 0x6516, 0x6526, 0x6535, 0x6545, 0x6554, 
+	0x6563, 0x6573, 0x6582, 0x6591, 0x65a1, 0x65b0, 0x65bf, 0x65ce, 
+	0x65de, 0x65ed, 0x65fc, 0x660b, 0x661a, 0x6629, 0x6639, 0x6648, 
+	0x6657, 0x6666, 0x6675, 0x6684, 0x6693, 0x66a2, 0x66b1, 0x66c0, 
+	0x66cf, 0x66de, 0x66ed, 0x66fc, 0x670b, 0x671a, 0x6729, 0x6737, 
+	0x6746, 0x6755, 0x6764, 0x6773, 0x6782, 0x6790, 0x679f, 0x67ae, 
+	0x67bd, 0x67cb, 0x67da, 0x67e9, 0x67f7, 0x6806, 0x6815, 0x6823, 
+	0x6832, 0x6840, 0x684f, 0x685e, 0x686c, 0x687b, 0x6889, 0x6898, 
+	0x68a6, 0x68b5, 0x68c3, 0x68d2, 0x68e0, 0x68ee, 0x68fd, 0x690b, 
+	0x6919, 0x6928, 0x6936, 0x6944, 0x6953, 0x6961, 0x696f, 0x697d, 
+	0x698c, 0x699a, 0x69a8, 0x69b6, 0x69c4, 0x69d3, 0x69e1, 0x69ef, 
+	0x69fd, 0x6a0b, 0x6a19, 0x6a27, 0x6a35, 0x6a43, 0x6a51, 0x6a5f, 
+	0x6a6d, 0x6a7b, 0x6a89, 0x6a97, 0x6aa5, 0x6ab3, 0x6ac1, 0x6ace, 
+	0x6adc, 0x6aea, 0x6af8, 0x6b06, 0x6b14, 0x6b21, 0x6b2f, 0x6b3d, 
+	0x6b4a, 0x6b58, 0x6b66, 0x6b74, 0x6b81, 0x6b8f, 0x6b9c, 0x6baa, 
+	0x6bb8, 0x6bc5, 0x6bd3, 0x6be0, 0x6bee, 0x6bfb, 0x6c09, 0x6c16, 
+	0x6c24, 0x6c31, 0x6c3f, 0x6c4c, 0x6c59, 0x6c67, 0x6c74, 0x6c81, 
+	0x6c8f, 0x6c9c, 0x6ca9, 0x6cb7, 0x6cc4, 0x6cd1, 0x6cde, 0x6cec, 
+	0x6cf9, 0x6d06, 0x6d13, 0x6d20, 0x6d2d, 0x6d3a, 0x6d48, 0x6d55, 
+	0x6d62, 0x6d6f, 0x6d7c, 0x6d89, 0x6d96, 0x6da3, 0x6db0, 0x6dbd, 
+	0x6dca, 0x6dd7, 0x6de3, 0x6df0, 0x6dfd, 0x6e0a, 0x6e17, 0x6e24, 
+	0x6e30, 0x6e3d, 0x6e4a, 0x6e57, 0x6e63, 0x6e70, 0x6e7d, 0x6e8a, 
+	0x6e96, 0x6ea3, 0x6eaf, 0x6ebc, 0x6ec9, 0x6ed5, 0x6ee2, 0x6eee, 
+	0x6efb, 0x6f07, 0x6f14, 0x6f20, 0x6f2d, 0x6f39, 0x6f46, 0x6f52, 
+	0x6f5f, 0x6f6b, 0x6f77, 0x6f84, 0x6f90, 0x6f9c, 0x6fa9, 0x6fb5, 
+	0x6fc1, 0x6fcd, 0x6fda, 0x6fe6, 0x6ff2, 0x6ffe, 0x700a, 0x7016, 
+	0x7023, 0x702f, 0x703b, 0x7047, 0x7053, 0x705f, 0x706b, 0x7077, 
+	0x7083, 0x708f, 0x709b, 0x70a7, 0x70b3, 0x70bf, 0x70cb, 0x70d6, 
+	0x70e2, 0x70ee, 0x70fa, 0x7106, 0x7112, 0x711d, 0x7129, 0x7135, 
+	0x7141, 0x714c, 0x7158, 0x7164, 0x716f, 0x717b, 0x7187, 0x7192, 
+	0x719e, 0x71a9, 0x71b5, 0x71c0, 0x71cc, 0x71d7, 0x71e3, 0x71ee, 
+	0x71fa, 0x7205, 0x7211, 0x721c, 0x7227, 0x7233, 0x723e, 0x7249, 
+	0x7255, 0x7260, 0x726b, 0x7277, 0x7282, 0x728d, 0x7298, 0x72a3, 
+	0x72af, 0x72ba, 0x72c5, 0x72d0, 0x72db, 0x72e6, 0x72f1, 0x72fc, 
+	0x7307, 0x7312, 0x731d, 0x7328, 0x7333, 0x733e, 0x7349, 0x7354, 
+	0x735f, 0x736a, 0x7375, 0x7380, 0x738a, 0x7395, 0x73a0, 0x73ab, 
+	0x73b5, 0x73c0, 0x73cb, 0x73d6, 0x73e0, 0x73eb, 0x73f6, 0x7400, 
+	0x740b, 0x7415, 0x7420, 0x742b, 0x7435, 0x7440, 0x744a, 0x7455, 
+	0x745f, 0x746a, 0x7474, 0x747e, 0x7489, 0x7493, 0x749e, 0x74a8, 
+	0x74b2, 0x74bd, 0x74c7, 0x74d1, 0x74db, 0x74e6, 0x74f0, 0x74fa, 
+	0x7504, 0x750f, 0x7519, 0x7523, 0x752d, 0x7537, 0x7541, 0x754b, 
+	0x7555, 0x755f, 0x7569, 0x7573, 0x757d, 0x7587, 0x7591, 0x759b, 
+	0x75a5, 0x75af, 0x75b9, 0x75c3, 0x75cd, 0x75d6, 0x75e0, 0x75ea, 
+	0x75f4, 0x75fd, 0x7607, 0x7611, 0x761b, 0x7624, 0x762e, 0x7638, 
+	0x7641, 0x764b, 0x7654, 0x765e, 0x7668, 0x7671, 0x767b, 0x7684, 
+	0x768e, 0x7697, 0x76a1, 0x76aa, 0x76b3, 0x76bd, 0x76c6, 0x76cf, 
+	0x76d9, 0x76e2, 0x76eb, 0x76f5, 0x76fe, 0x7707, 0x7710, 0x771a, 
+	0x7723, 0x772c, 0x7735, 0x773e, 0x7748, 0x7751, 0x775a, 0x7763, 
+	0x776c, 0x7775, 0x777e, 0x7787, 0x7790, 0x7799, 0x77a2, 0x77ab, 
+	0x77b4, 0x77bd, 0x77c5, 0x77ce, 0x77d7, 0x77e0, 0x77e9, 0x77f1, 
+	0x77fa, 0x7803, 0x780c, 0x7814, 0x781d, 0x7826, 0x782e, 0x7837, 
+	0x7840, 0x7848, 0x7851, 0x7859, 0x7862, 0x786b, 0x7873, 0x787c, 
+	0x7884, 0x788d, 0x7895, 0x789d, 0x78a6, 0x78ae, 0x78b7, 0x78bf, 
+	0x78c7, 0x78d0, 0x78d8, 0x78e0, 0x78e8, 0x78f1, 0x78f9, 0x7901, 
+	0x7909, 0x7911, 0x791a, 0x7922, 0x792a, 0x7932, 0x793a, 0x7942, 
+	0x794a, 0x7952, 0x795a, 0x7962, 0x796a, 0x7972, 0x797a, 0x7982, 
+	0x798a, 0x7992, 0x7999, 0x79a1, 0x79a9, 0x79b1, 0x79b9, 0x79c0, 
+	0x79c8, 0x79d0, 0x79d8, 0x79df, 0x79e7, 0x79ef, 0x79f6, 0x79fe, 
+	0x7a05, 0x7a0d, 0x7a15, 0x7a1c, 0x7a24, 0x7a2b, 0x7a33, 0x7a3a, 
+	0x7a42, 0x7a49, 0x7a50, 0x7a58, 0x7a5f, 0x7a67, 0x7a6e, 0x7a75, 
+	0x7a7d, 0x7a84, 0x7a8b, 0x7a92, 0x7a9a, 0x7aa1, 0x7aa8, 0x7aaf, 
+	0x7ab6, 0x7abd, 0x7ac5, 0x7acc, 0x7ad3, 0x7ada, 0x7ae1, 0x7ae8, 
+	0x7aef, 0x7af6, 0x7afd, 0x7b04, 0x7b0b, 0x7b12, 0x7b19, 0x7b1f, 
+	0x7b26, 0x7b2d, 0x7b34, 0x7b3b, 0x7b42, 0x7b48, 0x7b4f, 0x7b56, 
+	0x7b5d, 0x7b63, 0x7b6a, 0x7b71, 0x7b77, 0x7b7e, 0x7b84, 0x7b8b, 
+	0x7b92, 0x7b98, 0x7b9f, 0x7ba5, 0x7bac, 0x7bb2, 0x7bb9, 0x7bbf, 
+	0x7bc5, 0x7bcc, 0x7bd2, 0x7bd9, 0x7bdf, 0x7be5, 0x7bec, 0x7bf2, 
+	0x7bf8, 0x7bfe, 0x7c05, 0x7c0b, 0x7c11, 0x7c17, 0x7c1d, 0x7c23, 
+	0x7c2a, 0x7c30, 0x7c36, 0x7c3c, 0x7c42, 0x7c48, 0x7c4e, 0x7c54, 
+	0x7c5a, 0x7c60, 0x7c66, 0x7c6c, 0x7c71, 0x7c77, 0x7c7d, 0x7c83, 
+	0x7c89, 0x7c8f, 0x7c94, 0x7c9a, 0x7ca0, 0x7ca6, 0x7cab, 0x7cb1, 
+	0x7cb7, 0x7cbc, 0x7cc2, 0x7cc8, 0x7ccd, 0x7cd3, 0x7cd8, 0x7cde, 
+	0x7ce3, 0x7ce9, 0x7cee, 0x7cf4, 0x7cf9, 0x7cff, 0x7d04, 0x7d09, 
+	0x7d0f, 0x7d14, 0x7d19, 0x7d1f, 0x7d24, 0x7d29, 0x7d2f, 0x7d34, 
+	0x7d39, 0x7d3e, 0x7d43, 0x7d49, 0x7d4e, 0x7d53, 0x7d58, 0x7d5d, 
+	0x7d62, 0x7d67, 0x7d6c, 0x7d71, 0x7d76, 0x7d7b, 0x7d80, 0x7d85, 
+	0x7d8a, 0x7d8f, 0x7d94, 0x7d99, 0x7d9d, 0x7da2, 0x7da7, 0x7dac, 
+	0x7db1, 0x7db5, 0x7dba, 0x7dbf, 0x7dc3, 0x7dc8, 0x7dcd, 0x7dd1, 
+	0x7dd6, 0x7ddb, 0x7ddf, 0x7de4, 0x7de8, 0x7ded, 0x7df1, 0x7df6, 
+	0x7dfa, 0x7dff, 0x7e03, 0x7e07, 0x7e0c, 0x7e10, 0x7e14, 0x7e19, 
+	0x7e1d, 0x7e21, 0x7e26, 0x7e2a, 0x7e2e, 0x7e32, 0x7e37, 0x7e3b, 
+	0x7e3f, 0x7e43, 0x7e47, 0x7e4b, 0x7e4f, 0x7e53, 0x7e57, 0x7e5b, 
+	0x7e5f, 0x7e63, 0x7e67, 0x7e6b, 0x7e6f, 0x7e73, 0x7e77, 0x7e7b, 
+	0x7e7f, 0x7e83, 0x7e86, 0x7e8a, 0x7e8e, 0x7e92, 0x7e95, 0x7e99, 
+	0x7e9d, 0x7ea1, 0x7ea4, 0x7ea8, 0x7eab, 0x7eaf, 0x7eb3, 0x7eb6, 
+	0x7eba, 0x7ebd, 0x7ec1, 0x7ec4, 0x7ec8, 0x7ecb, 0x7ecf, 0x7ed2, 
+	0x7ed5, 0x7ed9, 0x7edc, 0x7edf, 0x7ee3, 0x7ee6, 0x7ee9, 0x7eed, 
+	0x7ef0, 0x7ef3, 0x7ef6, 0x7ef9, 0x7efd, 0x7f00, 0x7f03, 0x7f06, 
+	0x7f09, 0x7f0c, 0x7f0f, 0x7f12, 0x7f15, 0x7f18, 0x7f1b, 0x7f1e, 
+	0x7f21, 0x7f24, 0x7f27, 0x7f2a, 0x7f2d, 0x7f2f, 0x7f32, 0x7f35, 
+	0x7f38, 0x7f3b, 0x7f3d, 0x7f40, 0x7f43, 0x7f45, 0x7f48, 0x7f4b, 
+	0x7f4d, 0x7f50, 0x7f53, 0x7f55, 0x7f58, 0x7f5a, 0x7f5d, 0x7f5f, 
+	0x7f62, 0x7f64, 0x7f67, 0x7f69, 0x7f6b, 0x7f6e, 0x7f70, 0x7f73, 
+	0x7f75, 0x7f77, 0x7f79, 0x7f7c, 0x7f7e, 0x7f80, 0x7f82, 0x7f85, 
+	0x7f87, 0x7f89, 0x7f8b, 0x7f8d, 0x7f8f, 0x7f91, 0x7f93, 0x7f95, 
+	0x7f97, 0x7f99, 0x7f9b, 0x7f9d, 0x7f9f, 0x7fa1, 0x7fa3, 0x7fa5, 
+	0x7fa7, 0x7fa9, 0x7faa, 0x7fac, 0x7fae, 0x7fb0, 0x7fb1, 0x7fb3, 
+	0x7fb5, 0x7fb7, 0x7fb8, 0x7fba, 0x7fbc, 0x7fbd, 0x7fbf, 0x7fc0, 
+	0x7fc2, 0x7fc3, 0x7fc5, 0x7fc6, 0x7fc8, 0x7fc9, 0x7fcb, 0x7fcc, 
+	0x7fce, 0x7fcf, 0x7fd0, 0x7fd2, 0x7fd3, 0x7fd4, 0x7fd6, 0x7fd7, 
+	0x7fd8, 0x7fd9, 0x7fda, 0x7fdc, 0x7fdd, 0x7fde, 0x7fdf, 0x7fe0, 
+	0x7fe1, 0x7fe2, 0x7fe3, 0x7fe4, 0x7fe5, 0x7fe6, 0x7fe7, 0x7fe8, 
+	0x7fe9, 0x7fea, 0x7feb, 0x7fec, 0x7fed, 0x7fee, 0x7fef, 0x7fef, 
+	0x7ff0, 0x7ff1, 0x7ff2, 0x7ff2, 0x7ff3, 0x7ff4, 0x7ff4, 0x7ff5, 
+	0x7ff6, 0x7ff6, 0x7ff7, 0x7ff7, 0x7ff8, 0x7ff8, 0x7ff9, 0x7ff9, 
+	0x7ffa, 0x7ffa, 0x7ffb, 0x7ffb, 0x7ffc, 0x7ffc, 0x7ffc, 0x7ffd, 
+	0x7ffd, 0x7ffd, 0x7ffe, 0x7ffe, 0x7ffe, 0x7ffe, 0x7fff, 0x7fff, 
+	0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 
+};

Reply via email to