AMD64 - Refactor uio_resid and size_t assumptions.
[dragonfly.git] / sys / net / i4b / driver / i4b_tel.c
CommitLineData
984263bc
MD
1/*
2 * Copyright (c) 1997, 2001 Hellmuth Michaelis. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 *
25 *---------------------------------------------------------------------------
26 *
27 * i4b_tel.c - device driver for ISDN telephony
28 * --------------------------------------------
29 *
30 * $FreeBSD: src/sys/i4b/driver/i4b_tel.c,v 1.10.2.4 2001/12/16 15:12:57 hm Exp $
4b1cf444 31 * $DragonFly: src/sys/net/i4b/driver/i4b_tel.c,v 1.15 2006/12/22 23:44:55 swildner Exp $
984263bc
MD
32 *
33 * last edit-date: [Sat Aug 11 18:07:05 2001]
34 *
35 *---------------------------------------------------------------------------*/
36
1f2de5d4 37#include "use_i4btel.h"
984263bc
MD
38
39#if NI4BTEL > 0
40
41#undef I4BTELDEBUG
42
43#include <sys/param.h>
44#include <sys/systm.h>
45
984263bc
MD
46#include <sys/poll.h>
47
48#include <sys/conf.h>
49#include <sys/uio.h>
50#include <sys/kernel.h>
51#include <sys/mbuf.h>
52#include <sys/socket.h>
53#include <net/if.h>
f18302b6 54#include <sys/thread2.h>
984263bc
MD
55#include <sys/tty.h>
56
57#ifdef DEVFS
58#include <sys/devfsext.h>
59#endif
60
1f2de5d4
MD
61#include <net/i4b/include/machine/i4b_ioctl.h>
62#include <net/i4b/include/machine/i4b_tel_ioctl.h>
63#include <net/i4b/include/machine/i4b_debug.h>
984263bc 64
1f2de5d4
MD
65#include "../include/i4b_global.h"
66#include "../include/i4b_mbuf.h"
67#include "../include/i4b_l3l4.h"
68#include "../layer4/i4b_l4.h"
984263bc
MD
69
70/* minor number: lower 6 bits = unit number */
71
72#define UNITBITS 6
73#define UNITMASK 0x3f
74#define UNIT(n) (minor(n) & UNITMASK)
75
76/* minor number: upper 2 bits = function number */
77
78#define FUNCMASK 0x03
79#define FUNC(n) (((minor(n)) >> UNITBITS) & FUNCMASK)
80
81#define FUNCTEL 0 /* 0 = normal i4btel device */
82#define FUNCDIAL 1 /* 1 = i4bteld dialout device */
83
84#define NOFUNCS 2 /* number of device classes */
85
86typedef struct {
87
88 /* used only in func = FUNCTEL */
89
90 drvr_link_t drvr_linktab; /* driver linktab */
91 isdn_link_t *isdn_linktab; /* isdn linktab */
92 int audiofmt; /* audio format conversion */
93 u_char *rcvttab; /* conversion table on read */
94 u_char *wcvttab; /* conversion table on write */
95 call_desc_t *cdp; /* call descriptor pointer */
96
97 /* used only in func = FUNCDIAL */
98
99 char result; /* result code for dial dev */
100
101 /* used in func = FUNCDIAL and func = FUNCTEL*/
102
103 int devstate; /* state of this unit */
104#define ST_IDLE 0x00 /* idle */
105#define ST_CONNECTED 0x01 /* isdn connected state */
106#define ST_ISOPEN 0x02 /* userland opened */
107#define ST_RDWAITDATA 0x04 /* userland read waiting */
108#define ST_WRWAITEMPTY 0x08 /* userland write waiting */
109#define ST_TONE 0x10 /* tone generator */
110
111 struct selinfo selp; /* select / poll */
112
113 struct i4b_tel_tones tones;
114 int toneidx;
115 int toneomega;
116 int tonefreq;
117
118} tel_sc_t;
119
120static tel_sc_t tel_sc[NI4BTEL][NOFUNCS];
121
122/* forward decl */
123
124static void tel_rx_data_rdy(int unit);
125static void tel_tx_queue_empty(int unit);
126static void tel_init_linktab(int unit);
127static void tel_connect(int unit, void *cdp);
128static void tel_disconnect(int unit, void *cdp);
129static void tel_tone(tel_sc_t *sc);
130
131/* audio format conversion tables */
132static unsigned char a2u_tab[];
133static unsigned char u2a_tab[];
134static unsigned char bitreverse[];
135static u_char sinetab[];
136
137#define PDEVSTATIC static
138
139PDEVSTATIC d_open_t i4btelopen;
140PDEVSTATIC d_close_t i4btelclose;
141PDEVSTATIC d_read_t i4btelread;
fef8985e 142PDEVSTATIC d_write_t i4btelwrite;
984263bc
MD
143PDEVSTATIC d_ioctl_t i4btelioctl;
144
984263bc
MD
145PDEVSTATIC d_poll_t i4btelpoll;
146#define POLLFIELD i4btelpoll
984263bc
MD
147
148#define CDEV_MAJOR 56
149
fef8985e
MD
150static struct dev_ops i4btel_ops = {
151 { "i4btel", CDEV_MAJOR, 0 },
152 .d_open = i4btelopen,
153 .d_close = i4btelclose,
154 .d_read = i4btelread,
155 .d_write = i4btelwrite,
156 .d_ioctl = i4btelioctl,
157 .d_poll = POLLFIELD,
984263bc
MD
158};
159
984263bc
MD
160PDEVSTATIC void i4btelattach(void *);
161
162PSEUDO_SET(i4btelattach, i4b_tel);
163
164/*===========================================================================*
165 * DEVICE DRIVER ROUTINES
166 *===========================================================================*/
167
168/*---------------------------------------------------------------------------*
984263bc
MD
169 * interface attach routine
170 *---------------------------------------------------------------------------*/
171PDEVSTATIC void
172i4btelattach(void *dummy)
173{
174 int i, j;
175
4b1cf444 176 kprintf("i4btel: %d ISDN telephony interface device(s) attached\n", NI4BTEL);
984263bc
MD
177
178 for(i=0; i < NI4BTEL; i++)
179 {
180 for(j=0; j < NOFUNCS; j++)
181 {
182 tel_sc[i][j].devstate = ST_IDLE;
183 tel_sc[i][j].audiofmt = CVT_NONE;
184 tel_sc[i][j].rcvttab = 0;
185 tel_sc[i][j].wcvttab = 0;
186 tel_sc[i][j].result = 0;
187
188 switch(j)
189 {
190 case FUNCTEL: /* normal i4btel device */
fef8985e 191 make_dev(&i4btel_ops, i,
984263bc
MD
192 UID_ROOT, GID_WHEEL,
193 0600, "i4btel%d", i);
194 break;
195
196 case FUNCDIAL: /* i4bteld dialout device */
fef8985e 197 make_dev(&i4btel_ops, i+(1<<UNITBITS),
984263bc
MD
198 UID_ROOT, GID_WHEEL,
199 0600, "i4bteld%d", i);
200 break;
201 }
202 }
203 tel_init_linktab(i);
204 }
205}
206
207/*---------------------------------------------------------------------------*
208 * open tel device
209 *---------------------------------------------------------------------------*/
210PDEVSTATIC int
fef8985e 211i4btelopen(struct dev_open_args *ap)
984263bc 212{
b13267a5 213 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
214 int unit = UNIT(dev);
215 int func = FUNC(dev);
216
217 tel_sc_t *sc;
218
219 if(unit >= NI4BTEL)
220 return(ENXIO);
221
222 sc = &tel_sc[unit][func];
223
224 if(sc->devstate & ST_ISOPEN)
225 return(EBUSY);
226
227 sc->devstate |= ST_ISOPEN;
228
229 if(func == FUNCDIAL)
230 {
231 sc->result = 0;
232 }
233
234 return(0);
235}
236
237/*---------------------------------------------------------------------------*
238 * close tel device
239 *---------------------------------------------------------------------------*/
240PDEVSTATIC int
fef8985e 241i4btelclose(struct dev_close_args *ap)
984263bc 242{
b13267a5 243 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
244 int unit = UNIT(dev);
245 int func = FUNC(dev);
246 tel_sc_t *sc;
247 int error = 0;
984263bc
MD
248
249 if(unit > NI4BTEL)
250 return(ENXIO);
251
252 sc = &tel_sc[unit][func];
253
f18302b6 254 crit_enter();
984263bc
MD
255 sc->devstate &= ~ST_TONE;
256
257 if((func == FUNCTEL) &&
258 (sc->isdn_linktab != NULL && sc->isdn_linktab->tx_queue != NULL))
259 {
260 while(!(IF_QEMPTY(sc->isdn_linktab->tx_queue)))
261 {
262 sc->devstate |= ST_WRWAITEMPTY;
263
264 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
377d4740 265 PCATCH, "wtcl", 0)) != 0)
984263bc
MD
266 {
267 break;
268 }
269 }
270 sc->devstate &= ~ST_WRWAITEMPTY;
271 }
272
273 sc->devstate &= ~ST_ISOPEN;
f18302b6 274 crit_exit();
984263bc
MD
275 wakeup((caddr_t) &sc->tones);
276
277 return(error);
278}
279
280/*---------------------------------------------------------------------------*
281 * i4btelioctl - device driver ioctl routine
282 *---------------------------------------------------------------------------*/
283PDEVSTATIC int
fef8985e 284i4btelioctl(struct dev_ioctl_args *ap)
984263bc 285{
b13267a5 286 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
287 int unit = UNIT(dev);
288 int func = FUNC(dev);
289 int error = 0;
290 struct mbuf *m;
984263bc
MD
291
292 tel_sc_t *sc = &tel_sc[unit][func];
293
294 if(func == FUNCTEL)
295 {
fef8985e 296 switch(ap->a_cmd)
984263bc
MD
297 {
298 case I4B_TEL_GETAUDIOFMT:
fef8985e 299 *(int *)ap->a_data = sc->audiofmt;
984263bc
MD
300 break;
301
302 case I4B_TEL_SETAUDIOFMT:
fef8985e 303 switch (*(int *)ap->a_data)
984263bc
MD
304 {
305 case CVT_NONE:
306 sc->rcvttab = 0;
307 sc->wcvttab = 0;
308 break;
309 case CVT_ALAW2ULAW:
310 /* ISDN: a-law */
311 /* user: u-law */
312 sc->rcvttab = a2u_tab;
313 sc->wcvttab = u2a_tab;
314 break;
315 case CVT_ULAW2ALAW:
316 /* ISDN: u-law */
317 /* user: a-law */
318 sc->rcvttab = u2a_tab;
319 sc->wcvttab = a2u_tab;
320 break;
321 default:
322 error = ENODEV;
323 break;
324 }
325 if(error == 0)
fef8985e 326 sc->audiofmt = *(int *)ap->a_data;
984263bc
MD
327 break;
328
329 case I4B_TEL_EMPTYINPUTQUEUE:
f18302b6 330 crit_enter();
984263bc
MD
331 while((sc->devstate & ST_CONNECTED) &&
332 (sc->devstate & ST_ISOPEN) &&
333 !IF_QEMPTY(sc->isdn_linktab->rx_queue))
334 {
335 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
336 if(m)
337 i4b_Bfreembuf(m);
338 }
f18302b6 339 crit_exit();
984263bc
MD
340 break;
341
342 case I4B_TEL_VR_REQ:
343 {
344 msg_vr_req_t *mvr;
345
fef8985e 346 mvr = (msg_vr_req_t *)ap->a_data;
984263bc
MD
347
348 mvr->version = VERSION;
349 mvr->release = REL;
350 mvr->step = STEP;
351 break;
352 }
353 case I4B_TEL_TONES:
354 {
355 struct i4b_tel_tones *tt;
356
fef8985e 357 tt = (struct i4b_tel_tones *)ap->a_data;
f18302b6 358 crit_enter();
984263bc
MD
359 while ((sc->devstate & ST_TONE) &&
360 sc->tones.duration[sc->toneidx] != 0) {
361 if((error = tsleep((caddr_t) &sc->tones,
377d4740 362 PCATCH, "rtone", 0 )) != 0) {
f18302b6 363 crit_exit();
984263bc
MD
364 return(error);
365 }
366 }
367 if(!(sc->devstate & ST_ISOPEN)) {
f18302b6 368 crit_exit();
984263bc
MD
369 return (EIO);
370 }
371 if(!(sc->devstate & ST_CONNECTED)) {
f18302b6 372 crit_exit();
984263bc
MD
373 return (EIO);
374 }
375
376 sc->tones = *tt;
377 sc->toneidx = 0;
378 sc->tonefreq = tt->frequency[0];
379 sc->devstate |= ST_TONE;
f18302b6 380 crit_exit();
984263bc
MD
381 tel_tone(sc);
382 break;
383 }
384
385 default:
386 error = ENOTTY;
387 break;
388 }
389 }
390 else if(func == FUNCDIAL)
391 {
fef8985e 392 switch(ap->a_cmd)
984263bc
MD
393 {
394 default:
395 error = ENOTTY;
396 break;
397 }
398 }
399 return(error);
400}
401
402/*---------------------------------------------------------------------------*
403 * read from tel device
404 *---------------------------------------------------------------------------*/
405PDEVSTATIC int
fef8985e 406i4btelread(struct dev_read_args *ap)
984263bc 407{
b13267a5 408 cdev_t dev = ap->a_head.a_dev;
fef8985e 409 struct uio *uio = ap->a_uio;
984263bc
MD
410 int unit = UNIT(dev);
411 int func = FUNC(dev);
412
413 struct mbuf *m;
984263bc
MD
414 int error = 0;
415
416 tel_sc_t *sc = &tel_sc[unit][func];
417
418 if(!(sc->devstate & ST_ISOPEN))
419 return(EIO);
420
421 if(func == FUNCTEL)
422 {
f18302b6 423 crit_enter();
984263bc
MD
424
425 while((sc->devstate & ST_ISOPEN) &&
426 (sc->devstate & ST_CONNECTED) &&
427 IF_QEMPTY(sc->isdn_linktab->rx_queue))
428 {
429 sc->devstate |= ST_RDWAITDATA;
430
431 NDBGL4(L4_TELDBG, "i4btel%d, queue empty!", unit);
432
984263bc 433 if((error = tsleep((caddr_t) &sc->isdn_linktab->rx_queue,
377d4740 434 PCATCH, "rtel", 0 )) != 0)
984263bc
MD
435 {
436 sc->devstate &= ~ST_RDWAITDATA;
f18302b6 437 crit_exit();
984263bc
MD
438 return(error);
439 }
440 }
441
442 if(!(sc->devstate & ST_ISOPEN))
443 {
f18302b6 444 crit_exit();
984263bc
MD
445 return(EIO);
446 }
447
448 if(!(sc->devstate & ST_CONNECTED))
449 {
f18302b6 450 crit_exit();
984263bc
MD
451 return(EIO);
452 }
453
454
fd81ccf9 455 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
984263bc
MD
456
457 if(m && m->m_len > 0)
458 {
94332c29 459 int i;
984263bc
MD
460
461 for(i = 0; i < m->m_len; i++)
462 {
463 /* always reverse bit order from line */
464 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
465
466 /* convert if necessary */
467 if(sc->rcvttab)
468 mtod(m,u_char *)[i] = sc->rcvttab[mtod(m,u_char *)[i]];
469 }
470 error = uiomove(m->m_data, m->m_len, uio);
471
472 NDBGL4(L4_TELDBG, "i4btel%d, mbuf (%d bytes), uiomove %d!", unit, m->m_len, error);
473 }
474 else
475 {
476 NDBGL4(L4_TELDBG, "i4btel%d, empty mbuf from queue!", unit);
477 error = EIO;
478 }
479
480 if(m)
481 i4b_Bfreembuf(m);
482
f18302b6 483 crit_exit();
984263bc
MD
484 }
485 else if(func == FUNCDIAL)
486 {
f18302b6 487 crit_enter();
984263bc
MD
488 while((sc->result == 0) && (sc->devstate & ST_ISOPEN))
489 {
490 sc->devstate |= ST_RDWAITDATA;
491
492 if((error = tsleep((caddr_t) &sc->result,
377d4740 493 PCATCH, "rtel1", 0 )) != 0)
984263bc
MD
494 {
495 sc->devstate &= ~ST_RDWAITDATA;
f18302b6 496 crit_exit();
984263bc
MD
497 return(error);
498 }
499 }
500
501 if(!(sc->devstate & ST_ISOPEN))
502 {
f18302b6 503 crit_exit();
984263bc
MD
504 return(EIO);
505 }
506
507 if(sc->result != 0)
508 {
509 error = uiomove(&sc->result, 1, uio);
510 sc->result = 0;
511 }
512 else
513 {
514 error = EIO;
515 }
516
f18302b6 517 crit_exit();
984263bc
MD
518 }
519 return(error);
520}
521
522/*---------------------------------------------------------------------------*
523 * write to tel device
524 *---------------------------------------------------------------------------*/
525PDEVSTATIC int
fef8985e 526i4btelwrite(struct dev_write_args *ap)
984263bc 527{
b13267a5 528 cdev_t dev = ap->a_head.a_dev;
fef8985e 529 struct uio *uio = ap->a_uio;
984263bc
MD
530 int unit = UNIT(dev);
531 int func = FUNC(dev);
532 struct mbuf *m;
984263bc
MD
533 int error = 0;
534 tel_sc_t *sc = &tel_sc[unit][func];
535
536 if(!(sc->devstate & ST_ISOPEN))
537 {
538 return(EIO);
539 }
540
541 if(func == FUNCTEL)
542 {
f18302b6 543 crit_enter();
984263bc
MD
544
545 if(!(sc->devstate & ST_CONNECTED)) {
f18302b6 546 crit_exit();
984263bc
MD
547 return(EIO);
548 }
549
550 sc->devstate &= ~ST_TONE;
fd81ccf9 551 while((IF_QFULL(sc->isdn_linktab->tx_queue)) &&
984263bc
MD
552 (sc->devstate & ST_ISOPEN))
553 {
554 sc->devstate |= ST_WRWAITEMPTY;
555
984263bc 556 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
377d4740 557 PCATCH, "wtel", 0)) != 0)
984263bc
MD
558 {
559 sc->devstate &= ~ST_WRWAITEMPTY;
f18302b6 560 crit_exit();
984263bc
MD
561 return(error);
562 }
563 }
984263bc
MD
564
565 if(!(sc->devstate & ST_ISOPEN))
566 {
f18302b6 567 crit_exit();
984263bc
MD
568 return(EIO);
569 }
570
571 if(!(sc->devstate & ST_CONNECTED))
572 {
f18302b6 573 crit_exit();
984263bc
MD
574 return(EIO);
575 }
576
577 if((m = i4b_Bgetmbuf(BCH_MAX_DATALEN)) != NULL)
578 {
94332c29 579 int i;
984263bc 580
e54488bb 581 m->m_len = (int)szmin(BCH_MAX_DATALEN, uio->uio_resid);
984263bc 582
e54488bb 583 error = uiomove(m->m_data, (size_t)m->m_len, uio);
984263bc
MD
584
585 for(i = 0; i < m->m_len; i++)
586 {
587 /* convert if necessary */
588 if(sc->wcvttab)
589 mtod(m,u_char *)[i] = sc->wcvttab[mtod(m,u_char *)[i]];
590
591 /* always reverse bitorder to line */
592 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
593 }
594
984263bc
MD
595 if(IF_QFULL(sc->isdn_linktab->tx_queue))
596 m_freem(m);
597 else
598 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
984263bc
MD
599 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
600 }
601
f18302b6 602 crit_exit();
984263bc
MD
603 }
604 else if(func == FUNCDIAL)
605 {
606#define CMDBUFSIZ 80
607 char cmdbuf[CMDBUFSIZ];
e54488bb 608 int len = (int)szmin(CMDBUFSIZ-1, uio->uio_resid);
984263bc 609
e54488bb 610 error = uiomove(cmdbuf, (size_t)len, uio);
984263bc
MD
611
612 if(cmdbuf[0] == CMD_DIAL)
613 {
614 i4b_l4_dialoutnumber(BDRV_TEL, unit, len-1, &cmdbuf[1]);
615 }
616 else if(cmdbuf[0] == CMD_HUP)
617 {
618 i4b_l4_drvrdisc(BDRV_TEL, unit);
619 }
620 else if(cmdbuf[0] == CMD_KEYP)
621 {
622 i4b_l4_keypad(BDRV_TEL, unit, len-1, &cmdbuf[1]);
623 }
624 }
625 else
626 {
627 error = EIO;
628 }
629
630 return(error);
631}
632
633/*---------------------------------------------------------------------------*
634 *
635 *---------------------------------------------------------------------------*/
636#define NTONESAMP 32
637static void
638tel_tone(tel_sc_t *sc)
639{
640 struct mbuf *m;
641 u_char *p;
642 int i;
643
644 if((m = i4b_Bgetmbuf(NTONESAMP)) == NULL) {
4b1cf444 645 kprintf("no mbuf in tel_tone\n");
984263bc
MD
646 return;
647 }
648 p = m->m_data;
649 m->m_len = 0;
650 for (i = 0; i < NTONESAMP && (sc->devstate & ST_TONE); i++) {
651
652 if (sc->tones.duration[sc->toneidx] > 0) {
653 if (--sc->tones.duration[sc->toneidx] == 0) {
654 sc->toneidx++;
655 if (sc->toneidx == I4B_TEL_MAXTONES) {
656 sc->devstate &= ~ST_TONE;
657 sc->toneomega = 0;
658 sc->tonefreq = 0;
659 } else if (sc->tones.frequency[sc->toneidx] == 0 &&
660 sc->tones.duration[sc->toneidx] == 0) {
661 sc->devstate &= ~ST_TONE;
662 sc->toneomega = 0;
663 sc->tonefreq = 0;
664 } else {
665 sc->tonefreq = sc->tones.frequency[sc->toneidx];
666 }
667 if (sc->tones.duration[sc->toneidx] == 0) {
668 wakeup((caddr_t) &sc->tones);
669 }
670 }
671 }
672
673 sc->toneomega += sc->tonefreq;
674 if (sc->toneomega >= 8000)
675 sc->toneomega -= 8000;
676 *p++ = bitreverse[sinetab[sc->toneomega]];
677 m->m_len++;
678 }
679 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
680 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
681}
682
984263bc
MD
683/*---------------------------------------------------------------------------*
684 * device driver poll
685 *---------------------------------------------------------------------------*/
686PDEVSTATIC int
fef8985e 687i4btelpoll(struct dev_poll_args *ap)
984263bc 688{
b13267a5 689 cdev_t dev = ap->a_head.a_dev;
984263bc 690 int revents = 0; /* Events we found */
984263bc
MD
691 int unit = UNIT(dev);
692 int func = FUNC(dev);
693
694 tel_sc_t *sc = &tel_sc[unit][func];
695
f18302b6 696 crit_enter();
984263bc
MD
697
698 if(!(sc->devstate & ST_ISOPEN))
699 {
700 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
f18302b6 701 crit_exit();
fef8985e 702 ap->a_events = 0;
984263bc
MD
703 return(0);
704 }
705
706 if(func == FUNCTEL)
707 {
708 /*
709 * Writes are OK if we are connected and the
710 * transmit queue can take them
711 */
712
fef8985e 713 if((ap->a_events & (POLLOUT|POLLWRNORM)) &&
984263bc
MD
714 (sc->devstate & ST_CONNECTED) &&
715 (sc->isdn_linktab != NULL) &&
fd81ccf9 716 (!IF_QFULL(sc->isdn_linktab->tx_queue)))
984263bc
MD
717 {
718 NDBGL4(L4_TELDBG, "i4btel%d, POLLOUT", unit);
fef8985e 719 revents |= (ap->a_events & (POLLOUT|POLLWRNORM));
984263bc
MD
720 }
721
722 /* ... while reads are OK if we have any data */
723
fef8985e 724 if((ap->a_events & (POLLIN|POLLRDNORM)) &&
984263bc
MD
725 (sc->devstate & ST_CONNECTED) &&
726 (sc->isdn_linktab != NULL) &&
727 (!IF_QEMPTY(sc->isdn_linktab->rx_queue)))
728 {
729 NDBGL4(L4_TELDBG, "i4btel%d, POLLIN", unit);
fef8985e 730 revents |= (ap->a_events & (POLLIN|POLLRDNORM));
984263bc
MD
731 }
732
733 if(revents == 0)
734 {
735 NDBGL4(L4_TELDBG, "i4btel%d, selrecord", unit);
fef8985e 736 selrecord(curthread, &sc->selp);
984263bc
MD
737 }
738 }
739 else if(func == FUNCDIAL)
740 {
fef8985e 741 if(ap->a_events & (POLLOUT|POLLWRNORM))
984263bc
MD
742 {
743 NDBGL4(L4_TELDBG, "i4bteld%d, POLLOUT", unit);
fef8985e 744 revents |= (ap->a_events & (POLLOUT|POLLWRNORM));
984263bc
MD
745 }
746
fef8985e 747 if(ap->a_events & (POLLIN|POLLRDNORM))
984263bc
MD
748 {
749 NDBGL4(L4_TELDBG, "i4bteld%d, POLLIN, result = %d", unit, sc->result);
750 if(sc->result != 0)
fef8985e 751 revents |= (ap->a_events & (POLLIN|POLLRDNORM));
984263bc
MD
752 }
753
754 if(revents == 0)
755 {
756 NDBGL4(L4_TELDBG, "i4bteld%d, selrecord", unit);
fef8985e 757 selrecord(curthread, &sc->selp);
984263bc
MD
758 }
759 }
f18302b6 760 crit_exit();
fef8985e
MD
761 ap->a_events = revents;
762 return (0);
984263bc
MD
763}
764
984263bc
MD
765/*===========================================================================*
766 * ISDN INTERFACE ROUTINES
767 *===========================================================================*/
768
769/*---------------------------------------------------------------------------*
770* this routine is called from L4 handler at connect time
771 *---------------------------------------------------------------------------*/
772static void
773tel_connect(int unit, void *cdp)
774{
775 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
776
777 /* audio device */
778
779 sc->cdp = (call_desc_t *)cdp;
780
781 sc->devstate |= ST_CONNECTED;
782
783 /* dialer device */
784
785 sc = &tel_sc[unit][FUNCDIAL];
786
787 if(sc->devstate == ST_ISOPEN)
788 {
789 sc->result = RSP_CONN;
790
791 if(sc->devstate & ST_RDWAITDATA)
792 {
793 sc->devstate &= ~ST_RDWAITDATA;
794 wakeup((caddr_t) &sc->result);
795 }
796 selwakeup(&sc->selp);
797 }
798}
799
800/*---------------------------------------------------------------------------*
801 * this routine is called from L4 handler at disconnect time
802 *---------------------------------------------------------------------------*/
803static void
804tel_disconnect(int unit, void *cdp)
805{
806/* call_desc_t *cd = (call_desc_t *)cdp; */
807
808 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
809
810 /* audio device */
811
812 sc->devstate &= ~ST_CONNECTED;
813
814 if(sc->devstate & ST_RDWAITDATA)
815 {
816 sc->devstate &= ~ST_RDWAITDATA;
817 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
818 }
819
820 if(sc->devstate & ST_WRWAITEMPTY)
821 {
822 sc->devstate &= ~ST_WRWAITEMPTY;
823 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
824 }
825
826 /* dialer device */
827
828 sc = &tel_sc[unit][FUNCDIAL];
829
830 if(sc->devstate & ST_ISOPEN)
831 {
832 sc->result = RSP_HUP;
833
834 if(sc->devstate & ST_RDWAITDATA)
835 {
836 sc->devstate &= ~ST_RDWAITDATA;
837 wakeup((caddr_t) &sc->result);
838 }
839 selwakeup(&sc->selp);
840
841 if (sc->devstate & ST_TONE) {
842 sc->devstate &= ~ST_TONE;
843 wakeup((caddr_t) &sc->tones);
844 }
845 }
846}
847
848/*---------------------------------------------------------------------------*
849 * feedback from daemon in case of dial problems
850 *---------------------------------------------------------------------------*/
851static void
852tel_dialresponse(int unit, int status, cause_t cause)
853{
854 tel_sc_t *sc = &tel_sc[unit][FUNCDIAL];
855
856 NDBGL4(L4_TELDBG, "i4btel%d, status=%d, cause=0x%4x", unit, status, cause);
857
858 if((sc->devstate == ST_ISOPEN) && status)
859 {
860 sc->result = RSP_NOA;
861
862 if(sc->devstate & ST_RDWAITDATA)
863 {
864 sc->devstate &= ~ST_RDWAITDATA;
865 wakeup((caddr_t) &sc->result);
866 }
867 selwakeup(&sc->selp);
868 }
869}
870
871/*---------------------------------------------------------------------------*
872 * interface up/down
873 *---------------------------------------------------------------------------*/
874static void
875tel_updown(int unit, int updown)
876{
877}
878
879/*---------------------------------------------------------------------------*
880 * this routine is called from the HSCX interrupt handler
881 * when a new frame (mbuf) has been received and was put on
882 * the rx queue.
883 *---------------------------------------------------------------------------*/
884static void
885tel_rx_data_rdy(int unit)
886{
887 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
888
889 if(sc->devstate & ST_RDWAITDATA)
890 {
891 sc->devstate &= ~ST_RDWAITDATA;
892 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
893 }
894 selwakeup(&sc->selp);
895}
896
897/*---------------------------------------------------------------------------*
898 * this routine is called from the HSCX interrupt handler
899 * when the last frame has been sent out and there is no
900 * further frame (mbuf) in the tx queue.
901 *---------------------------------------------------------------------------*/
902static void
903tel_tx_queue_empty(int unit)
904{
905 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
906
907 if(sc->devstate & ST_WRWAITEMPTY)
908 {
909 sc->devstate &= ~ST_WRWAITEMPTY;
910 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
911 }
912 if(sc->devstate & ST_TONE) {
913 tel_tone(sc);
914 } else {
915 selwakeup(&sc->selp);
916 }
917}
918
919/*---------------------------------------------------------------------------*
920 * this routine is called from the HSCX interrupt handler
921 * each time a packet is received or transmitted.
922 *---------------------------------------------------------------------------*/
923static void
924tel_activity(int unit, int rxtx)
925{
926 if(tel_sc[unit][FUNCTEL].cdp)
927 tel_sc[unit][FUNCTEL].cdp->last_active_time = SECOND;
928}
929
930/*---------------------------------------------------------------------------*
931 * return this drivers linktab address
932 *---------------------------------------------------------------------------*/
933drvr_link_t *
934tel_ret_linktab(int unit)
935{
936 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
937
938 tel_init_linktab(unit);
939 return(&sc->drvr_linktab);
940}
941
942/*---------------------------------------------------------------------------*
943 * setup the isdn_linktab for this driver
944 *---------------------------------------------------------------------------*/
945void
946tel_set_linktab(int unit, isdn_link_t *ilt)
947{
948 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
949 sc->isdn_linktab = ilt;
950}
951
952/*---------------------------------------------------------------------------*
953 * initialize this drivers linktab
954 *---------------------------------------------------------------------------*/
955static void
956tel_init_linktab(int unit)
957{
958 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
959
960 sc->drvr_linktab.unit = unit;
961 sc->drvr_linktab.bch_rx_data_ready = tel_rx_data_rdy;
962 sc->drvr_linktab.bch_tx_queue_empty = tel_tx_queue_empty;
963 sc->drvr_linktab.bch_activity = tel_activity;
964 sc->drvr_linktab.line_connected = tel_connect;
965 sc->drvr_linktab.line_disconnected = tel_disconnect;
966 sc->drvr_linktab.dial_response = tel_dialresponse;
967 sc->drvr_linktab.updown_ind = tel_updown;
968}
969
970/*===========================================================================*
971 * AUDIO FORMAT CONVERSION (produced by running g711conv)
972 *===========================================================================*/
973
974/*---------------------------------------------------------------------------*
975 * A-law to u-law conversion
976 *---------------------------------------------------------------------------*/
977static unsigned char a2u_tab[256] = {
978/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
979/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
980/* 10 */ 0x39, 0x3a, 0x37, 0x38, 0x3d, 0x3e, 0x3b, 0x3c,
981/* 18 */ 0x31, 0x32, 0x30, 0x30, 0x35, 0x36, 0x33, 0x34,
982/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
983/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
984/* 30 */ 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d,
985/* 38 */ 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15,
986/* 40 */ 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65,
987/* 48 */ 0x5d, 0x5d, 0x5c, 0x5c, 0x5f, 0x5f, 0x5e, 0x5e,
988/* 50 */ 0x74, 0x76, 0x70, 0x72, 0x7c, 0x7e, 0x78, 0x7a,
989/* 58 */ 0x6a, 0x6b, 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d,
990/* 60 */ 0x48, 0x49, 0x46, 0x47, 0x4c, 0x4d, 0x4a, 0x4b,
991/* 68 */ 0x40, 0x41, 0x3f, 0x3f, 0x44, 0x45, 0x42, 0x43,
992/* 70 */ 0x56, 0x57, 0x54, 0x55, 0x5a, 0x5b, 0x58, 0x59,
993/* 78 */ 0x4f, 0x4f, 0x4e, 0x4e, 0x52, 0x53, 0x50, 0x51,
994/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
995/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
996/* 90 */ 0xb9, 0xba, 0xb7, 0xb8, 0xbd, 0xbe, 0xbb, 0xbc,
997/* 98 */ 0xb1, 0xb2, 0xb0, 0xb0, 0xb5, 0xb6, 0xb3, 0xb4,
998/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
999/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1000/* b0 */ 0x9a, 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d,
1001/* b8 */ 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95,
1002/* c0 */ 0xe2, 0xe3, 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5,
1003/* c8 */ 0xdd, 0xdd, 0xdc, 0xdc, 0xdf, 0xdf, 0xde, 0xde,
1004/* d0 */ 0xf4, 0xf6, 0xf0, 0xf2, 0xfc, 0xfe, 0xf8, 0xfa,
1005/* d8 */ 0xea, 0xeb, 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed,
1006/* e0 */ 0xc8, 0xc9, 0xc6, 0xc7, 0xcc, 0xcd, 0xca, 0xcb,
1007/* e8 */ 0xc0, 0xc1, 0xbf, 0xbf, 0xc4, 0xc5, 0xc2, 0xc3,
1008/* f0 */ 0xd6, 0xd7, 0xd4, 0xd5, 0xda, 0xdb, 0xd8, 0xd9,
1009/* f8 */ 0xcf, 0xcf, 0xce, 0xce, 0xd2, 0xd3, 0xd0, 0xd1
1010};
1011
1012/*---------------------------------------------------------------------------*
1013 * u-law to A-law conversion
1014 *---------------------------------------------------------------------------*/
1015static unsigned char u2a_tab[256] = {
1016/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1017/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1018/* 10 */ 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d,
1019/* 18 */ 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35,
1020/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1021/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1022/* 30 */ 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12,
1023/* 38 */ 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x6a,
1024/* 40 */ 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d, 0x62, 0x63,
1025/* 48 */ 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x7a, 0x78,
1026/* 50 */ 0x7e, 0x7f, 0x7c, 0x7d, 0x72, 0x73, 0x70, 0x71,
1027/* 58 */ 0x76, 0x77, 0x74, 0x75, 0x4b, 0x49, 0x4f, 0x4d,
1028/* 60 */ 0x42, 0x43, 0x40, 0x41, 0x46, 0x47, 0x44, 0x45,
1029/* 68 */ 0x5a, 0x5b, 0x58, 0x59, 0x5e, 0x5f, 0x5c, 0x5d,
1030/* 70 */ 0x52, 0x52, 0x53, 0x53, 0x50, 0x50, 0x51, 0x51,
1031/* 78 */ 0x56, 0x56, 0x57, 0x57, 0x54, 0x54, 0x55, 0x55,
1032/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1033/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1034/* 90 */ 0xba, 0xbb, 0xb8, 0xb9, 0xbe, 0xbf, 0xbc, 0xbd,
1035/* 98 */ 0xb2, 0xb3, 0xb0, 0xb1, 0xb6, 0xb7, 0xb4, 0xb5,
1036/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1037/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1038/* b0 */ 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d, 0x92,
1039/* b8 */ 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, 0xea,
1040/* c0 */ 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed, 0xe2, 0xe3,
1041/* c8 */ 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5, 0xfa, 0xf8,
1042/* d0 */ 0xfe, 0xff, 0xfc, 0xfd, 0xf2, 0xf3, 0xf0, 0xf1,
1043/* d8 */ 0xf6, 0xf7, 0xf4, 0xf5, 0xcb, 0xc9, 0xcf, 0xcd,
1044/* e0 */ 0xc2, 0xc3, 0xc0, 0xc1, 0xc6, 0xc7, 0xc4, 0xc5,
1045/* e8 */ 0xda, 0xdb, 0xd8, 0xd9, 0xde, 0xdf, 0xdc, 0xdd,
1046/* f0 */ 0xd2, 0xd2, 0xd3, 0xd3, 0xd0, 0xd0, 0xd1, 0xd1,
1047/* f8 */ 0xd6, 0xd6, 0xd7, 0xd7, 0xd4, 0xd4, 0xd5, 0xd5
1048};
1049
1050/*---------------------------------------------------------------------------*
1051 * reverse bits in a byte
1052 *---------------------------------------------------------------------------*/
1053static unsigned char bitreverse[256] = {
1054/* 00 */ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
1055/* 08 */ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
1056/* 10 */ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
1057/* 18 */ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
1058/* 20 */ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
1059/* 28 */ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
1060/* 30 */ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
1061/* 38 */ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
1062/* 40 */ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
1063/* 48 */ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
1064/* 50 */ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
1065/* 58 */ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
1066/* 60 */ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
1067/* 68 */ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
1068/* 70 */ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
1069/* 78 */ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
1070/* 80 */ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
1071/* 88 */ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
1072/* 90 */ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
1073/* 98 */ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
1074/* a0 */ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
1075/* a8 */ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
1076/* b0 */ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
1077/* b8 */ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
1078/* c0 */ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
1079/* c8 */ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
1080/* d0 */ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
1081/* d8 */ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
1082/* e0 */ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
1083/* e8 */ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
1084/* f0 */ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
1085/* f8 */ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
1086};
1087
1088static u_char sinetab[8000] = { 213, 213, 213, 213, 213, 213, 213, 212,
1089212, 212, 212, 212, 212, 215, 215, 215, 215, 215, 215, 214, 214,
1090214, 214, 214, 214, 209, 209, 209, 209, 209, 209, 209, 208, 208,
1091208, 208, 208, 208, 211, 211, 211, 211, 211, 211, 210, 210, 210,
1092210, 210, 210, 221, 221, 221, 221, 221, 221, 220, 220, 220, 220,
1093220, 220, 220, 223, 223, 223, 223, 223, 223, 222, 222, 222, 222,
1094222, 222, 217, 217, 217, 217, 217, 217, 216, 216, 216, 216, 216,
1095216, 216, 219, 219, 219, 219, 219, 219, 218, 218, 218, 218, 218,
1096218, 197, 197, 197, 197, 197, 197, 196, 196, 196, 196, 196, 196,
1097196, 199, 199, 199, 199, 199, 199, 198, 198, 198, 198, 198, 198,
1098193, 193, 193, 193, 193, 193, 192, 192, 192, 192, 192, 192, 192,
1099195, 195, 195, 195, 195, 195, 194, 194, 194, 194, 194, 194, 205,
1100205, 205, 205, 205, 205, 204, 204, 204, 204, 204, 204, 204, 207,
1101207, 207, 207, 207, 207, 206, 206, 206, 206, 206, 206, 201, 201,
1102201, 201, 201, 201, 200, 200, 200, 200, 200, 200, 200, 203, 203,
1103203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 245, 245, 245,
1104245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 244, 244, 244,
1105244, 244, 244, 244, 244, 244, 244, 244, 244, 247, 247, 247, 247,
1106247, 247, 247, 247, 247, 247, 247, 247, 247, 246, 246, 246, 246,
1107246, 246, 246, 246, 246, 246, 246, 246, 246, 241, 241, 241, 241,
1108241, 241, 241, 241, 241, 241, 241, 241, 240, 240, 240, 240, 240,
1109240, 240, 240, 240, 240, 240, 240, 240, 243, 243, 243, 243, 243,
1110243, 243, 243, 243, 243, 243, 243, 243, 242, 242, 242, 242, 242,
1111242, 242, 242, 242, 242, 242, 242, 242, 253, 253, 253, 253, 253,
1112253, 253, 253, 253, 253, 253, 253, 253, 252, 252, 252, 252, 252,
1113252, 252, 252, 252, 252, 252, 252, 255, 255, 255, 255, 255, 255,
1114255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254, 254, 254,
1115254, 254, 254, 254, 254, 254, 254, 249, 249, 249, 249, 249, 249,
1116249, 249, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 248,
1117248, 248, 248, 248, 248, 248, 248, 251, 251, 251, 251, 251, 251,
1118251, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250,
1119250, 250, 250, 250, 250, 250, 250, 229, 229, 229, 229, 229, 229,
1120229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1121229, 229, 229, 229, 229, 229, 229, 228, 228, 228, 228, 228, 228,
1122228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1123228, 228, 228, 228, 228, 228, 228, 228, 231, 231, 231, 231, 231,
1124231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1125231, 231, 231, 231, 231, 231, 231, 231, 231, 230, 230, 230, 230,
1126230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1127230, 230, 230, 230, 230, 230, 230, 230, 230, 225, 225, 225, 225,
1128225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1129225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 224, 224,
1130224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1131224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 227,
1132227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1133227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1134227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1135226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1136226, 226, 226, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1137237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1138237, 237, 237, 237, 237, 236, 236, 236, 236, 236, 236, 236, 236,
1139236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1140236, 236, 236, 236, 236, 236, 236, 236, 239, 239, 239, 239, 239,
1141239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1142239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238,
1143238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1144238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1145238, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1146233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1147233, 233, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232,
1148232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1149232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 235, 235, 235,
1150235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1151235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1152235, 235, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1153234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1154234, 234, 234, 234, 234, 234, 234, 149, 149, 149, 149, 149, 149,
1155149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1156149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1157149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1158149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1159149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148,
1160148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1161148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1162148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1163148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1164148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 151, 151, 151,
1165151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1166151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1167151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1168151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1169151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1170151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1171150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1172150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1173150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1174150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1175150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1176150, 150, 150, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1177145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1178145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1179145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1180145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1181145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1182145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144,
1183144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1184144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1185144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1186144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1187144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1188144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1189144, 144, 144, 144, 144, 144, 144, 144, 144, 147, 147, 147, 147,
1190147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1191147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1192147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1193147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1194147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1195147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1196147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1197147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146,
1198146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1199146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1200146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1201146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1202146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1203146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1204146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1205146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1206146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1207146, 146, 146, 146, 146, 146, 157, 157, 157, 157, 157, 157, 157,
1208157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1209157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1210157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1211157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1212157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1213157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1214157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1215157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1216157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1217157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1218157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1219157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1220157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1221156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1222156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1223156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1224156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1225156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1226156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1227156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1228156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1229156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1230156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1231156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1232156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1233156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1234156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1235156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1236156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1237156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1238156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1239156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1240156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1241156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1242156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1243156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1244156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1245156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1246156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1247156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1248156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1249156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1250156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1251156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1252156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1253156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1254156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1255156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1256156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1257156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1258156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1259156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1260156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1261156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1262156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1263156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157,
1264157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1265157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1266157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1267157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1268157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1269157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1270157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1271157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1272157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1273157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1274157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1275157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1276157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1277157, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1278146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1279146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1280146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1281146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1282146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1283146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1284146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1285146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1286146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147,
1287147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1288147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1289147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1290147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1291147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1292147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1293147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1294147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144,
1295144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1296144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1297144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1298144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1299144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1300144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1301144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145,
1302145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1303145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1304145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1305145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1306145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1307145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1308145, 145, 145, 145, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1309150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1310150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1311150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1312150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1313150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1314150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1315151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1316151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1317151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1318151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1319151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148,
1320148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1321148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1322148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1323148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1324148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1325149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1326149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1327149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1328149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1329149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1330234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1331234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1332234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
1333235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1334235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 232, 232, 232,
1335232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1336232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1337232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1338233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1339233, 233, 233, 233, 233, 233, 238, 238, 238, 238, 238, 238, 238,
1340238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1341238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239,
1342239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1343239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 236,
1344236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1345236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1346236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1347237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1348237, 237, 237, 237, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1349226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1350226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227,
1351227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1352227, 227, 227, 227, 227, 227, 227, 227, 224, 224, 224, 224, 224,
1353224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1354224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225,
1355225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1356225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 230, 230,
1357230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1358230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231,
1359231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1360231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 228,
1361228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1362228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1363229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1364229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1365250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
1366251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
1367248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
1368249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
1369254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
1370255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1371252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253,
1372253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 242,
1373242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 243,
1374243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240,
1375240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241,
1376241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 246, 246,
1377246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 247,
1378247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 244, 244,
1379244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245,
1380245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 202, 202, 202,
1381202, 202, 202, 203, 203, 203, 203, 203, 203, 200, 200, 200, 200,
1382200, 200, 200, 201, 201, 201, 201, 201, 201, 206, 206, 206, 206,
1383206, 206, 207, 207, 207, 207, 207, 207, 204, 204, 204, 204, 204,
1384204, 204, 205, 205, 205, 205, 205, 205, 194, 194, 194, 194, 194,
1385194, 195, 195, 195, 195, 195, 195, 192, 192, 192, 192, 192, 192,
1386192, 193, 193, 193, 193, 193, 193, 198, 198, 198, 198, 198, 198,
1387199, 199, 199, 199, 199, 199, 196, 196, 196, 196, 196, 196, 196,
1388197, 197, 197, 197, 197, 197, 218, 218, 218, 218, 218, 218, 219,
1389219, 219, 219, 219, 219, 216, 216, 216, 216, 216, 216, 216, 217,
1390217, 217, 217, 217, 217, 222, 222, 222, 222, 222, 222, 223, 223,
1391223, 223, 223, 223, 220, 220, 220, 220, 220, 220, 220, 221, 221,
1392221, 221, 221, 221, 210, 210, 210, 210, 210, 210, 211, 211, 211,
1393211, 211, 211, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209,
1394209, 209, 209, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215,
1395215, 215, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213,
1396213, 213, 90, 90, 90, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84,
139784, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 81, 81, 81,
139881, 81, 81, 81, 80, 80, 80, 80, 80, 80, 83, 83, 83, 83, 83, 83,
139982, 82, 82, 82, 82, 82, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92,
140092, 92, 92, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 89,
140189, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 91,
140291, 91, 90, 90, 90, 90, 90, 90, 69, 69, 69, 69, 69, 69, 68, 68,
140368, 68, 68, 68, 68, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70,
140470, 65, 65, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 67, 67,
140567, 67, 67, 67, 66, 66, 66, 66, 66, 66, 77, 77, 77, 77, 77, 77,
140676, 76, 76, 76, 76, 76, 76, 79, 79, 79, 79, 79, 79, 78, 78, 78,
140778, 78, 78, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72,
140875, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 117, 117, 117, 117,
1409117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116,
1410116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 119,
1411119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118,
1412118, 118, 118, 118, 118, 118, 118, 118, 113, 113, 113, 113, 113,
1413113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112,
1414112, 112, 112, 112, 112, 112, 112, 115, 115, 115, 115, 115, 115,
1415115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114,
1416114, 114, 114, 114, 114, 114, 114, 125, 125, 125, 125, 125, 125,
1417125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124,
1418124, 124, 124, 124, 124, 124, 124, 127, 127, 127, 127, 127, 127,
1419127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126,
1420126, 126, 126, 126, 126, 126, 121, 121, 121, 121, 121, 121, 121,
1421121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120,
1422120, 120, 120, 120, 120, 120, 123, 123, 123, 123, 123, 123, 123,
1423123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122,
1424122, 122, 122, 122, 122, 122, 101, 101, 101, 101, 101, 101, 101,
1425101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1426101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100,
1427100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1428100, 100, 100, 100, 100, 100, 100, 103, 103, 103, 103, 103, 103,
1429103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1430103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102,
1431102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1432102, 102, 102, 102, 102, 102, 102, 102, 102, 97, 97, 97, 97, 97,
143397, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
143497, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
143596, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
143696, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
143799, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98,
143898, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
143998, 98, 98, 98, 98, 98, 98, 98, 98, 109, 109, 109, 109, 109, 109,
1440109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1441109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108,
1442108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1443108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111,
1444111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1445111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1446111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1447110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1448110, 110, 110, 110, 110, 110, 105, 105, 105, 105, 105, 105, 105,
1449105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1450105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104,
1451104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1452104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1453104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1454107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1455107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106,
1456106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1457106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 21,
145821, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
145921, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
146021, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
146121, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
146220, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
146320, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
146420, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
146520, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
146620, 20, 20, 20, 20, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
146723, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
146823, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
146923, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
147023, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22,
147122, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
147222, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
147322, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
147422, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
147522, 22, 22, 22, 22, 22, 22, 22, 22, 22, 17, 17, 17, 17, 17, 17,
147617, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
147717, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
147817, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
147917, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
148017, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16,
148116, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148216, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148316, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148416, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148516, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
148616, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19,
148719, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
148819, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
148919, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
149019, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
149119, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
149219, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
149319, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149418, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149518, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149618, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149718, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149818, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
149918, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
150018, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
150118, 18, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
150929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28,
151328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
151928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154528, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
154629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
154729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
154829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
154929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
155629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 18, 18, 18, 18,
155718, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155818, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
155918, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156018, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156118, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156218, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156318, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
156418, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19,
156519, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
156619, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
156719, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
156819, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
156919, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
157019, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
157119, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157216, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157316, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157416, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157516, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157616, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
157716, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
157817, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
157917, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
158017, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
158117, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
158217, 17, 17, 17, 17, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158322, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158422, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158522, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158622, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
158722, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
158823, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
158923, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
159023, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
159123, 23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 20, 20, 20, 20, 20,
159220, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
159320, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
159420, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
159520, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
159621, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
159721, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
159821, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
159921, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1600106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1601106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1602106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107,
1603107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1604107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 104, 104,
1605104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1606104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1607104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1608105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1609105, 105, 105, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110,
1610110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1611110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111,
1612111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1613111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1614108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1615108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1616108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1617109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1618109, 109, 109, 109, 109, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
161998, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
162098, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
162199, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 96, 96,
162296, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
162396, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97,
162497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
162597, 97, 97, 97, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1626102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1627102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1628103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1629103, 103, 103, 103, 103, 100, 100, 100, 100, 100, 100, 100, 100,
1630100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1631100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101,
1632101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1633101, 101, 101, 101, 101, 101, 122, 122, 122, 122, 122, 122, 122,
1634122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
1635123, 123, 123, 123, 123, 123, 120, 120, 120, 120, 120, 120, 120,
1636120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121,
1637121, 121, 121, 121, 121, 121, 126, 126, 126, 126, 126, 126, 126,
1638126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127,
1639127, 127, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124,
1640124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
1641125, 125, 125, 125, 125, 114, 114, 114, 114, 114, 114, 114, 114,
1642114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
1643115, 115, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112,
1644112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113,
1645113, 113, 113, 113, 118, 118, 118, 118, 118, 118, 118, 118, 118,
1646118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119,
1647119, 119, 119, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
1648116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
1649117, 117, 117, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 72,
165072, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 78, 78, 78, 78,
165178, 78, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 77,
165277, 77, 77, 77, 77, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67,
165367, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 70, 70,
165470, 70, 70, 70, 71, 71, 71, 71, 71, 71, 68, 68, 68, 68, 68, 68,
165568, 69, 69, 69, 69, 69, 69, 90, 90, 90, 90, 90, 90, 91, 91, 91,
165691, 91, 91, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89,
165794, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92,
165892, 92, 93, 93, 93, 93, 93, 93, 93, 82, 82, 82, 82, 82, 82, 83,
165983, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81,
166081, 81, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 84, 84,
166184, 84, 84, 84, 85, 85, 85, 85, 85, 85, 90, 90, 90 };
1662
1663/*===========================================================================*/
1664
1665#endif /* NI4BTEL > 0 */