Index: src/sys/dev/audiobell.c
===================================================================
RCS file: /cvsroot/src/sys/dev/audiobell.c,v
retrieving revision 1.16
diff -u -p -r1.16 audiobell.c
--- src/sys/dev/audiobell.c	27 Feb 2017 23:31:00 -0000	1.16
+++ src/sys/dev/audiobell.c	24 May 2017 00:38:46 -0000
@@ -50,6 +50,16 @@ __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>
+
+/* 44.1 kHz should reduce hum at higher pitches. */
+#define BELL_SAMPLE_RATE	44100
+#define BELL_SHIFT		3
+#else
+#define BELL_SAMPLE_RATE	8000
+#define BELL_SHIFT		8
+#endif
 
 /* Convert a %age volume to an amount to add to u-law values */
 /* XXX Probably highly inaccurate -- should be regenerated */
@@ -67,6 +77,7 @@ static const uint8_t volmap[] = {
 	0x00
 };
 
+#ifndef HIRES_BELL
 /* 1/4 cycle sine wave in u-law */
 /* XXX Probably highly inaccurate -- should be regenerated */
 static const uint8_t sinewave[] = {
@@ -80,6 +91,7 @@ static const uint8_t sinewave[] = {
 	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 	0x80,
 };
+#endif
 
 static inline uint8_t
 audiobell_ulawscale(uint8_t val, uint8_t vol)
@@ -101,12 +113,12 @@ audiobell_expandwave(uint8_t *buf, int v
 
 	KASSERT(volume >= 0 && volume <= 100);
 	uvol = volmap[volume];
-	for (i = 0; i < 65; i++)
+	for (i = 0; i < sizeof(sinewave); 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 = sizeof(sinewave); i < (sizeof(sinewave) -1) * 2; i++)
+		 buf[i] = buf[(sizeof(sinewave) -1) * 2 - i];
+	for (i = (sizeof(sinewave) -1) * 2; i < (sizeof(sinewave) -1) * 4; i++)
+		buf[i] = buf[i - (sizeof(sinewave) -1) * 2] ^ 0x80;
 }
 
 /*
@@ -119,15 +131,15 @@ audiobell_synthesize(uint8_t *buf, u_int
 	uint8_t *wave;
 	uint16_t phase;
 
-	wave = malloc(256, M_TEMP, M_WAITOK);
+	wave = malloc((sizeof(sinewave) -1) * 4, M_TEMP, M_WAITOK);
 	if (wave == NULL) return -1;
 	audiobell_expandwave(wave, volume);
-	pitch = pitch * 65536 / 8000;
-	period = period * 8; /* 8000 / 1000 */
+	pitch = pitch * 65536 / BELL_SAMPLE_RATE;
+	period = period * BELL_SAMPLE_RATE / 1000;
 	phase = 0;
 
 	for (; period != 0; period--) {
-		*buf++ = wave[phase >> 8];
+		*buf++ = wave[phase >> BELL_SHIFT];
 		phase += pitch;
 	}
 
@@ -143,7 +155,7 @@ audiobell(void *v, u_int pitch, u_int pe
 	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,23 +172,35 @@ audiobell(void *v, u_int pitch, u_int pe
 		return;
 	}
 
+	ai.play.sample_rate = BELL_SAMPLE_RATE;
+	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;
 	size = min(len, ai.blocksize);
 	if (size == 0) goto out;
 
 	buf = malloc(size, M_TEMP, M_WAITOK);
 	if (buf == NULL) goto out;
 
-	offset = 0;
+	if (audiobell_synthesize(buf, pitch, size * 1000 /
+				BELL_SAMPLE_RATE, volume) != 0)
+		goto out;
+
 	while (len > 0) {
+		int oldsize = size;
 		size = min(len, ai.blocksize);
-		if (audiobell_synthesize(buf, pitch, size / 8, volume) != 0)
-			goto out;
+		if (size != oldsize) {
+			if (audiobell_synthesize(buf, pitch, size *
+				1000 / BELL_SAMPLE_RATE, volume) != 0)
+					goto out;
+		}
 		aiov.iov_base = (void *)buf;
 		aiov.iov_len = size;
 		auio.uio_iov = &aiov;
@@ -188,7 +212,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);
--- /dev/null	2017-05-24 10:36:34.000000000 +1000
+++ src/sys/dev/audiobelldata.h	2017-05-24 09:37:25.000000000 +1000
@@ -0,0 +1,286 @@
+/*-
+ * Copyright (c) 2017 Nathanial Sloss <nathanialsloss@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 u-law */
+static const uint8_t sinewave[] = {
+	0xff, 0xfb, 0xf8, 0xf5, 0xf2, 0xf0, 0xee, 0xec, 
+	0xea, 0xe8, 0xe6, 0xe5, 0xe4, 0xe2, 0xe1, 0xe0, 
+	0xdf, 0xde, 0xdd, 0xdc, 0xdb, 0xda, 0xd9, 0xd8, 
+	0xd7, 0xd7, 0xd6, 0xd5, 0xd4, 0xd4, 0xd3, 0xd2, 
+	0xd2, 0xd1, 0xd1, 0xd0, 0xcf, 0xcf, 0xce, 0xce, 
+	0xcd, 0xcd, 0xcc, 0xcc, 0xcb, 0xcb, 0xca, 0xca, 
+	0xc9, 0xc9, 0xc9, 0xc8, 0xc8, 0xc7, 0xc7, 0xc7, 
+	0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc4, 
+	0xc3, 0xc3, 0xc3, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 
+	0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xbf, 0xbf, 0xbf, 
+	0xbf, 0xbe, 0xbe, 0xbe, 0xbe, 0xbd, 0xbd, 0xbd, 
+	0xbd, 0xbc, 0xbc, 0xbc, 0xbc, 0xbb, 0xbb, 0xbb, 
+	0xbb, 0xba, 0xba, 0xba, 0xba, 0xba, 0xb9, 0xb9, 
+	0xb9, 0xb9, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb7, 
+	0xb7, 0xb7, 0xb7, 0xb7, 0xb6, 0xb6, 0xb6, 0xb6, 
+	0xb6, 0xb6, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb4, 
+	0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb3, 0xb3, 0xb3, 
+	0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 
+	0xb2, 0xb2, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 
+	0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xaf, 
+	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xae, 
+	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xad, 0xad, 
+	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 
+	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xab, 
+	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xaa, 
+	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 
+	0xa9, 0xa9, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 
+	0xa8, 0xa8, 0xa8, 0xa8, 0xa7, 0xa7, 0xa7, 0xa7, 
+	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 
+	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 
+	0xa6, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 
+	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 
+	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 
+	0xa4, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 
+	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xa2, 0xa2, 
+	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 
+	0xa2, 0xa2, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 
+	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 
+	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 
+	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x9f, 0x9f, 
+	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 
+	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9e, 0x9e, 0x9e, 
+	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 
+	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9d, 0x9d, 0x9d, 
+	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 
+	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9c, 0x9c, 0x9c, 
+	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 
+	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9b, 0x9b, 
+	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 
+	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 
+	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 
+	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 
+	0x9a, 0x9a, 0x9a, 0x99, 0x99, 0x99, 0x99, 0x99, 
+	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 
+	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 
+	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 
+	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 
+	0x98, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 
+	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 
+	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 
+	0x97, 0x97, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 
+	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 
+	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 
+	0x96, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 
+	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 
+	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 
+	0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 
+	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 
+	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 
+	0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x93, 0x93, 
+	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 
+	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 
+	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 
+	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 
+	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 
+	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 
+	0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 
+	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 
+	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 
+	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 
+	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 
+	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 
+	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 
+	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 
+	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 
+	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 
+	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 
+	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 
+	0x8f, 0x8f, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 
+	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 
+	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 
+	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 
+	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8d, 0x8d, 
+	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 
+	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 
+	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 
+	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 
+	0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c, 
+	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 
+	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 
+	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 
+	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 
+	0x8c, 0x8c, 0x8c, 0x8c, 0x8b, 0x8b, 0x8b, 0x8b, 
+	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 
+	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 
+	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 
+	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 
+	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 
+	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 
+	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 
+	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 
+	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 
+	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 
+	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x89, 0x89, 
+	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 
+	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 
+	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 
+	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 
+	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 
+	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 
+	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 
+	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 
+	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 
+	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 
+	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 
+	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 
+	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 
+	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
+	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
+	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
+	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
+	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
+	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
+	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
+	0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 
+	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 
+	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 
+	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 
+	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 
+	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 
+	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 
+	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 
+	0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x85, 
+	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 
+	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 
+	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 
+	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 
+	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 
+	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 
+	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 
+	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 
+	0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+	0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 
+	0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 
+	0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
+	0x80
+};
